From a7748f92d76dbe780d78ac79d5fff74a2a1bf274 Mon Sep 17 00:00:00 2001 From: BrianLusina <12752833+BrianLusina@users.noreply.github.com> Date: Tue, 16 Jun 2026 08:47:31 +0300 Subject: [PATCH 1/3] feat(math, negabinary numbers): adding two negabinary numbers --- .../adding_two_negabinary_numbers/README.md | 41 ++++++++++ .../adding_two_negabinary_numbers/__init__.py | 81 +++++++++++++++++++ .../test_add_two_negabinary_numbers.py | 40 +++++++++ 3 files changed, 162 insertions(+) create mode 100644 pymath/adding_two_negabinary_numbers/README.md create mode 100644 pymath/adding_two_negabinary_numbers/__init__.py create mode 100644 pymath/adding_two_negabinary_numbers/test_add_two_negabinary_numbers.py diff --git a/pymath/adding_two_negabinary_numbers/README.md b/pymath/adding_two_negabinary_numbers/README.md new file mode 100644 index 00000000..a1ab64e7 --- /dev/null +++ b/pymath/adding_two_negabinary_numbers/README.md @@ -0,0 +1,41 @@ +# Adding Two Negabinary Numbers + +Given two numbers arr1 and arr2 in base -2, return the result of adding them together. + +Each number is given in array format: as an array of 0s and 1s, from most significant bit to least significant bit. +For example, arr = [1,1,0,1] represents the number (-2)^3 + (-2)^2 + (-2)^0 = -3. A number arr in array, format is also +guaranteed to have no leading zeros: either arr == [0] or arr[0] == 1. + +Return the result of adding arr1 and arr2 in the same format: as an array of 0s and 1s with no leading zeros. + +## Examples + +Example 1: +```text +Input: arr1 = [1,1,1,1,1], arr2 = [1,0,1] +Output: [1,0,0,0,0] +Explanation: arr1 represents 11, arr2 represents 5, the output represents 16. +``` + +Example 2: +```text +Input: arr1 = [0], arr2 = [0] +Output: [0] +``` + +Example 3: +```text +Input: arr1 = [0], arr2 = [1] +Output: [1] +``` + +## Constraints + +- 1 <= arr1.length, arr2.length <= 1000 +- arr1[i] and arr2[i] are 0 or 1 +- arr1 and arr2 have no leading zeros + +## Topics + +- Array +- Math diff --git a/pymath/adding_two_negabinary_numbers/__init__.py b/pymath/adding_two_negabinary_numbers/__init__.py new file mode 100644 index 00000000..a5aed2ee --- /dev/null +++ b/pymath/adding_two_negabinary_numbers/__init__.py @@ -0,0 +1,81 @@ +from typing import List + + +def add_negabinary(arr1: List[int], arr2: List[int]) -> List[int]: + # Initialize pointers to the least significant bits(rightmost elements) + index_1, index_2 = len(arr1) - 1, len(arr2) - 1 + + # Initialize carry value for addition + carry = 0 + + # Result to store the sum digits + result = [] + + # Process digits from right to left, including any remaining carry + while index_1 >= 0 or index_2 >= 0 or carry != 0: + # Get current digit from arr1, or 0 if we've exhausted arr1 + digit_1 = 0 if index_1 < 0 else arr1[index_1] + + # Get current digit from arr2, or 0 if we've exhausted arr2 + digit_2 = 0 if index_2 < 0 else arr2[index_2] + + # Calculate sum of current position including carry + current_sum = digit_1 + digit_2 + carry + + # Reset carry for next iteration + carry = 0 + + # Handle negabinary addition rules + if current_sum >= 2: + # If sum is 2 or more, subtract 2 and set negative carry + current_sum -= 2 + carry = -1 + elif current_sum == -1: + # If sum is -1, set digit to 1 and positive carry + current_sum = 1 + carry = 1 + + # Append the computed digit to result + result.append(current_sum) + + # Move pointest to the next more significant bits + index_1 -= 1 + index_2 -= 1 + + # Remove leading zeros from the result (except if result is just [0] + while len(result) > 1 and result[-1] == 0: + result.pop() + + # Reverse the result since we built it from least to most significant + return result[::-1] + + +def add_negabinary_2(arr1: List[int], arr2: List[int]) -> List[int]: + arr1 = arr1[::-1] + arr2 = arr2[::-1] + + max_len = max(len(arr1), len(arr2)) + + result = [] + carry = 0 + + i = 0 + while i < max_len or carry != 0: + bit1 = arr1[i] if i < len(arr1) else 0 + bit2 = arr2[i] if i < len(arr2) else 0 + + total = bit1 + bit2 + carry + + if total >= 0: + result.append(total % 2) + carry = -(total // 2) + else: + result.append(1) + carry = 1 + + i += 1 + + while len(result) > 1 and result[-1] == 0: + result.pop() + + return result[::-1] diff --git a/pymath/adding_two_negabinary_numbers/test_add_two_negabinary_numbers.py b/pymath/adding_two_negabinary_numbers/test_add_two_negabinary_numbers.py new file mode 100644 index 00000000..1c33317c --- /dev/null +++ b/pymath/adding_two_negabinary_numbers/test_add_two_negabinary_numbers.py @@ -0,0 +1,40 @@ +import unittest +from typing import List +from parameterized import parameterized +from utils.test_utils import custom_test_name_func +from pymath.adding_two_negabinary_numbers import add_negabinary, add_negabinary_2 + +ADD_TWO_NEGABINARY_NUMBERS_TEST_CASES = [ + ([0], [0], [0]), + ([0], [1], [1]), + ([1], [1], [1, 1, 0]), + ([1, 0], [1], [1, 1]), + ([1, 1, 1, 1, 1], [1, 0, 1], [1, 0, 0, 0, 0]), + ([1, 0, 0], [0], [1, 0, 0]), + ([1, 1, 0], [1, 0, 1], [1, 1, 0, 1, 1]), + ([1, 1], [1], [0]), +] + + +class AddTwoNegabinaryNumbersTestCase(unittest.TestCase): + @parameterized.expand( + ADD_TWO_NEGABINARY_NUMBERS_TEST_CASES, name_func=custom_test_name_func + ) + def test_add_two_negabinary_numbers( + self, arr1: List[int], arr2: List[int], expected: List[int] + ): + actual = add_negabinary(arr1, arr2) + self.assertEqual(expected, actual) + + @parameterized.expand( + ADD_TWO_NEGABINARY_NUMBERS_TEST_CASES, name_func=custom_test_name_func + ) + def test_add_two_negabinary_numbers_2( + self, arr1: List[int], arr2: List[int], expected: List[int] + ): + actual = add_negabinary_2(arr1, arr2) + self.assertEqual(expected, actual) + + +if __name__ == "__main__": + unittest.main() From 5562a6fba03510359b8d17f0c809ed9416d100de Mon Sep 17 00:00:00 2001 From: BrianLusina <12752833+BrianLusina@users.noreply.github.com> Date: Tue, 16 Jun 2026 09:31:45 +0300 Subject: [PATCH 2/3] feat(algorithms, dynamic-programming, combinatorics): count the number of good subsequences An algorithm that counts the number of good subsequences from an input string using dynamic programming and combinatorics. --- .../README.md | 86 ++++++++++++++++ .../__init__.py | 93 ++++++++++++++++++ ..._number_of_good_subsequences_example_1.png | Bin 0 -> 28565 bytes ..._number_of_good_subsequences_example_2.png | Bin 0 -> 25410 bytes ..._number_of_good_subsequences_example_3.png | Bin 0 -> 29775 bytes ..._number_of_good_subsequences_example_4.png | Bin 0 -> 22532 bytes ..._number_of_good_subsequences_example_5.png | Bin 0 -> 24831 bytes .../test_count_number_of_good_subsequences.py | 27 +++++ 8 files changed, 206 insertions(+) create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/README.md create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/__init__.py create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_1.png create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_2.png create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_3.png create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_4.png create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_5.png create mode 100644 algorithms/dynamic_programming/count_number_of_good_subsequences/test_count_number_of_good_subsequences.py diff --git a/algorithms/dynamic_programming/count_number_of_good_subsequences/README.md b/algorithms/dynamic_programming/count_number_of_good_subsequences/README.md new file mode 100644 index 00000000..c72cc067 --- /dev/null +++ b/algorithms/dynamic_programming/count_number_of_good_subsequences/README.md @@ -0,0 +1,86 @@ +# Count the Number of Good Subsequences + +Given a string s, you need to count the number of good subsequences that can be formed from it. + +A subsequence is good if: + +- It is not empty +- Every character in the subsequence appears the same number of times + +For example, if we have a subsequence "aabb", it's good because 'a' appears 2 times and 'b' appears 2 times (both have +frequency 2). + +A subsequence is formed by deleting some (possibly zero) characters from the original string without changing the relative order of the remaining characters. + +Since the total count can be very large, return the answer modulo 10^9 + 7. + +Key Points: + +- You need to find all possible subsequences where each distinct character appears exactly the same number of times +- The subsequence must be non-empty +- Characters maintain their relative order from the original string +- The answer should be computed modulo 10^9 + 7 + +Example Understanding: If s = "aab", the good subsequences would include: + +Single characters: "a", "a", "b" (each character appears once) +"aa" (character 'a' appears twice) +"ab" (both 'a' and 'b' appear once each) + +## Constraints + +- 1 <= `s.length` <= 10^4 +- `s` will only contain lowercase English characters + +## Examples + +![Example 1](./images/examples/count_the_number_of_good_subsequences_example_1.png) +![Example 2](./images/examples/count_the_number_of_good_subsequences_example_2.png) +![Example 3](./images/examples/count_the_number_of_good_subsequences_example_3.png) +![Example 4](./images/examples/count_the_number_of_good_subsequences_example_4.png) +![Example 5](./images/examples/count_the_number_of_good_subsequences_example_5.png) + +## Topics + +- Math +- Combinatorics +- Counting +- Hash Table +- Dynamic Programming + +## Solution + +The solution to this problem involves calculating the combinations. We will start by calculating the frequency of each +character and then iterate over the frequencies, from 1 to the highest frequency of any character. We will count +subsequences where each character appears for some or all of its frequency, i.e., calculating combinations. The count is +summed up in each iteration, and after the loop terminates, 1 is deducted from the final count. The reason for deducting +1 is that the empty subsequence will also be counted. Because empty subsequence does not qualify as a good subsequence, +we will remove its count from the final calculation. + +Computing the combinations is a typical _Binomial Coefficient problem_, known as `n choose k` problem, which is in +mathematics written as `C(n, k) = n! / (k!ā‹…(nāˆ’k)!)`. Counting the combinations would require us to calculate the +factorial and division by factorial, calculated by multiplying with the modular inverses. + +Because calculating the factorial[i] requires calculating the [factorial[i-1]..factorial[2]] again and again, therefore +we will use dynamic programming to calculate the factorial[i] by multiplying i only with factorial[i — 1]. That is, we +will reuse the existing results instead of calculating them again. + +### Time Complexity + +There are 3 loops in the code: + +- The loop that populates the factorial and inverses array runs for `n` times, where `n` is the length of the input + string `s`. Therefore, its time complexity will be `O(n)` +- In the nested loop, the outer loop runs for `max_frequency` times. Because the max_frequency can have the maximum value + as `n`, therefore the outer loop will also take `O(n)`. The inner loop will run through all unique characters bounded by + 26 lowercase letters, which is a constant. The total time complexity of the nested loop will be `O(n*26)`, i.e. `O(n)` +- The loop in the method `quick_modular_inverse` runs until the exponent becomes 0. In each iteration, the exponent is + divided by 2. As the value of exponent is constant, it will not be dependent on the input, which means this loop will + also run for a constant time, i.e., `O(1)`. + +Therefore, the overall time complexity is `O(n + n + 1)` = `O(n)` + +### Space Complexity + +In this program, we use two arrays `factorials` and `inverse_factorial`, each taking O(N). Therefore, the space +complexity is O(N) diff --git a/algorithms/dynamic_programming/count_number_of_good_subsequences/__init__.py b/algorithms/dynamic_programming/count_number_of_good_subsequences/__init__.py new file mode 100644 index 00000000..c4817b26 --- /dev/null +++ b/algorithms/dynamic_programming/count_number_of_good_subsequences/__init__.py @@ -0,0 +1,93 @@ +from collections import Counter + + +def count_good_subsequences_with_combinatorics(s: str) -> int: + """ + Count the number of good subsequences of s. + A good subsequence has equal frequency for all characters in it + + Args: + s (str): input string + Returns: + int: number of good subsequences + """ + n = len(s) + 1 + mod = 10**9 + 7 + + # factorial[i] = i! mod MOD + factorial = [1] * n + # inverse_factorial[i] = (i!)^(-1) mod MOD + inverse_factorial = [1] * n + + def quick_modular_inverse(base, exponent, modulus): + """ + Method to find the modular inverse of a number + """ + # Initialize the result to 1, as 1 is the identity element for multiplication modulo modulus + result = 1 + + while exponent != 0: + # If exponent is odd, multiply result by base and take modulo modulus + if (exponent & 1) == 1: + result = result * base % modulus + # Right shift exponent by 1 (equivalent to dividing exponent by 2) + exponent >>= 1 + # Square base and take modulo modulus to reduce base in terms of modulus + base = base * base % modulus + + return result + + def comb(number_of_items, number_of_items_to_choose): + """ + Calculate binomial coefficient C(n, k) mod MOD. n choose k + + Args: + number_of_items: Total number of items + number_of_items_to_choose: Number of items to choose + + Returns: + C(n, k) mod MOD + """ + return ( + factorial[number_of_items] + * inverse_factorial[number_of_items_to_choose] + * inverse_factorial[number_of_items - number_of_items_to_choose] + % mod + ) + + # Precompute factorials and their modular inverses. + # Calculating the factorial and inverse of all numbers from 1 to n + # instead of calculating factorial of a number again and again + # we will store the factorial of a number i + # and use to calculate the factorial of a number i+1, since + # the factorial of a number i+1 is factorial of i-1 * i + for i in range(1, n): + factorial[i] = factorial[i - 1] * i % mod + # Using Fermat's Little Theorem: a^(-1) ≔ a^(p-2) (mod p) where p is prime. Note that either pow built in can b + # used or the quick_modular_inverse method can be used. + # inverse_factorial[i] = pow(factorial[i], mod - 2, mod) + inverse_factorial[i] = quick_modular_inverse(factorial[i], mod - 2, mod) + + # Count the frequency of each character in the string + char_frequency = Counter(s) + + final_count = 0 + + # Try each possible frequency (each character appears exactly i times) + max_frequency = max(char_frequency.values()) + + for target_freq in range(1, max_frequency + 1): + # Count ways to form subsequences where each character appears exactly target_freq + ways = 1 + + for char_count in char_frequency.values(): + # For this character, we can either: + # 1. Include it (choose target_freq occurrences from char_count) + # 2. Exclude it (multiply by 1) + # Total ways = C(char_count, target_freq) + 1) + if char_count >= target_freq: + ways = ways * (comb(char_count, target_freq) + 1) % mod + + final_count = (final_count + ways - 1) % mod + + return final_count diff --git a/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_1.png b/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4b509b13d191f7169dba75057aeee2114853521a GIT binary patch literal 28565 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 literal 0 HcmV?d00001 diff --git a/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_2.png b/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_2.png new file mode 100644 index 0000000000000000000000000000000000000000..641bbe62ad3cdc96ccbbf3361bf97e2fa706a86f GIT binary patch literal 25410 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 Uzpf}jc&DVYyoOxSv)3Q~503n1J^%m! literal 0 HcmV?d00001 diff --git a/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_4.png b/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_4.png new file mode 100644 index 0000000000000000000000000000000000000000..6754ee335f3acb6f5581c98450ae413330310114 GIT binary patch literal 22532 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

1^Hj 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 literal 0 HcmV?d00001 diff --git a/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_5.png b/algorithms/dynamic_programming/count_number_of_good_subsequences/images/examples/count_the_number_of_good_subsequences_example_5.png new file mode 100644 index 0000000000000000000000000000000000000000..6b74125669eaa535526c0ef41f1bb7f18d03fae6 GIT binary patch literal 24831 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 M07*qoM6N<$g8!o|yZ`_I literal 0 HcmV?d00001 diff --git a/algorithms/dynamic_programming/count_number_of_good_subsequences/test_count_number_of_good_subsequences.py b/algorithms/dynamic_programming/count_number_of_good_subsequences/test_count_number_of_good_subsequences.py new file mode 100644 index 00000000..7af8693a --- /dev/null +++ b/algorithms/dynamic_programming/count_number_of_good_subsequences/test_count_number_of_good_subsequences.py @@ -0,0 +1,27 @@ +import unittest +from parameterized import parameterized +from utils.test_utils import custom_test_name_func +from algorithms.dynamic_programming.count_number_of_good_subsequences import ( + count_good_subsequences_with_combinatorics, +) + +COUNT_NUMBER_OF_GOOD_SUBSEQUENCES_TEST_CASES = [ + ("ab", 3), + ("a", 1), + ("aba", 6), + ("abbcc", 20), + ("aabbcc", 33), +] + + +class CountNumberOfGoodSubsequencesTestCase(unittest.TestCase): + @parameterized.expand( + COUNT_NUMBER_OF_GOOD_SUBSEQUENCES_TEST_CASES, name_func=custom_test_name_func + ) + def test_count_good_subsequences_with_combinatorics(self, s: str, expected: int): + actual = count_good_subsequences_with_combinatorics(s) + self.assertEqual(expected, actual) + + +if __name__ == "__main__": + unittest.main() From e39d7a5b122b40ee27cdb8c972b32fb5015334ae Mon Sep 17 00:00:00 2001 From: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Date: Tue, 16 Jun 2026 06:33:13 +0000 Subject: [PATCH 3/3] updating DIRECTORY.md --- DIRECTORY.md | 48 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) diff --git a/DIRECTORY.md b/DIRECTORY.md index 1b3282f2..8861d9b2 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -72,10 +72,14 @@ * [Test Max Profit Three](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/buy_sell_stock/test_max_profit_three.py) * [Test Max Profit Two](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/buy_sell_stock/test_max_profit_two.py) * [Test Max Profit With Fee](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/buy_sell_stock/test_max_profit_with_fee.py) + * Cherry Pickup + * [Test Cherry Pickup](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/cherry_pickup/test_cherry_pickup.py) * Climb Stairs * [Test Climb Stairs](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/climb_stairs/test_climb_stairs.py) * Coin Change * [Test Coin Change](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/coin_change/test_coin_change.py) + * Count Number Of Good Subsequences + * [Test Count Number Of Good Subsequences](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/count_number_of_good_subsequences/test_count_number_of_good_subsequences.py) * Countingbits * [Test Counting Bits](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/countingbits/test_counting_bits.py) * Decodeways @@ -109,6 +113,8 @@ * [Test Min Distance](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/min_distance/test_min_distance.py) * Min Path Sum * [Test Min Path Sum](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/min_path_sum/test_min_path_sum.py) + * Number Of People Aware Of A Secret + * [Test Number Of People Aware Of A Secret](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/number_of_people_aware_of_a_secret/test_number_of_people_aware_of_a_secret.py) * Painthouse * [Test Min Cost To Paint Houses](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/dynamic_programming/painthouse/test_min_cost_to_paint_houses.py) * Palindromic Substring @@ -161,6 +167,8 @@ * [Test Nearest Exit From Entrance](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/graphs/nearest_exit_from_entrance_in_maze/test_nearest_exit_from_entrance.py) * Network Delay Time * [Test Network Delay Time](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/graphs/network_delay_time/test_network_delay_time.py) + * Number Of Connected Components + * [Test Number Of Connected Components](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/graphs/number_of_connected_components/test_number_of_connected_components.py) * Number Of Islands * [Test Number Of Distinct Islands](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/graphs/number_of_islands/test_number_of_distinct_islands.py) * [Test Number Of Islands](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/graphs/number_of_islands/test_number_of_islands.py) @@ -213,14 +221,22 @@ * Two City Scheduling * [Test Two City Scheduling](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/greedy/two_city_scheduling/test_two_city_scheduling.py) * Hash Table + * Custom Sort String + * [Test Custom Sort String](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/custom_sort_string/test_custom_sort_string.py) + * Duplicate File In System + * [Test Find Duplicate Files In System](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/duplicate_file_in_system/test_find_duplicate_files_in_system.py) * First Unique Character * [Test First Unique Character](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/first_unique_character/test_first_unique_character.py) * Jewels And Stones * [Test Jewels And Stones](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/jewels_and_stones/test_jewels_and_stones.py) + * Maxlen Contiguous Binary Subarray + * [Test Maxlen Contiguous Binary Subarray](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/maxlen_contiguous_binary_subarray/test_maxlen_contiguous_binary_subarray.py) * Powerful Integers * [Test Powerful Integers](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/powerful_integers/test_powerful_integers.py) * Ransom Note * [Test Ransom Note](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/ransom_note/test_ransom_note.py) + * Word Pattern + * [Test Word Pattern](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/hash_table/word_pattern/test_word_pattern.py) * Heap * Construct Target With Sums * [Test Construct Target With Sums](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/heap/construct_target_with_sums/test_construct_target_with_sums.py) @@ -294,8 +310,12 @@ * Matrix * Best Meeting Point * [Test Best Meeting Point](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/matrix/best_meeting_point/test_best_meeting_point.py) + * Game Of Life + * [Test Game Of Life](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/matrix/game_of_life/test_game_of_life.py) * Isvalidsudoku * [Test Is Valid Sudoku](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/matrix/isvalidsudoku/test_is_valid_sudoku.py) + * Rotting Oranges + * [Test Rotting Oranges](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/matrix/rotting_oranges/test_rotting_oranges.py) * Transpose * [Test Transpose](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/matrix/transpose/test_transpose.py) * [Test Transpose Matrix](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/matrix/transpose/test_transpose_matrix.py) @@ -364,6 +384,8 @@ * Search Suggestions * [Test Search Suggestions](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/search/trie/search_suggestions/test_search_suggestions.py) * Sliding Window + * Frequency Of The Most Frequent Element + * [Test Frequency Of Most Frequent Element](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sliding_window/frequency_of_the_most_frequent_element/test_frequency_of_most_frequent_element.py) * Length Of Longest Substring * [Test Length Of Longest Substring](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sliding_window/length_of_longest_substring/test_length_of_longest_substring.py) * [Test Longest Substring Without Repeating Characters](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sliding_window/length_of_longest_substring/test_longest_substring_without_repeating_characters.py) @@ -383,6 +405,9 @@ * [Test Repeated Dna Sequences](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sliding_window/repeated_dna_sequences/test_repeated_dna_sequences.py) * Substring Concatenation * [Test Substring With Concatenation Of Words](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sliding_window/substring_concatenation/test_substring_with_concatenation_of_words.py) + * Sort And Search + * Russian Doll Envelopes + * [Test Russian Doll Envelopes](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sort_and_search/russian_doll_envelopes/test_russian_doll_envelopes.py) * Sorting * Heapsort * [Test Heap Sort](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/sorting/heapsort/test_heap_sort.py) @@ -432,6 +457,8 @@ * [Test Index Pairs Of A String](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/trie/index_pairs_of_a_string/test_index_pairs_of_a_string.py) * Longest Word With Prefixes * [Test Longest Word With Prefixes](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/trie/longest_word_with_prefixes/test_longest_word_with_prefixes.py) + * Replace Words + * [Test Replace Words](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/trie/replace_words/test_replace_words.py) * Topkfreqwords * [Test Top K Frequent Words](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/trie/topkfreqwords/test_top_k_frequent_words.py) * Two Pointers @@ -445,6 +472,10 @@ * [Test Count Pairs](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/two_pointers/count_pairs/test_count_pairs.py) * Find Sum Of Three * [Test Find Sum Of Three](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/two_pointers/find_sum_of_three/test_find_sum_of_three.py) + * Issubsequence + * [Test Is Subsequence](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/two_pointers/issubsequence/test_is_subsequence.py) + * Max Score + * [Test Max Score](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/two_pointers/max_score/test_max_score.py) * Merge Sorted Arrays * [Test Merge Sorted Arrays](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/two_pointers/merge_sorted_arrays/test_merge_sorted_arrays.py) * Move Zeroes @@ -486,6 +517,9 @@ * [Test Two Sum](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/two_pointers/two_sum_less_k/test_two_sum.py) * Valid Word Abbreviation * [Test Valid Word Abbreviation](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/two_pointers/valid_word_abbreviation/test_valid_word_abbreviation.py) + * Union Find + * Acounts Merge + * [Test Accounts Merge](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/union_find/acounts_merge/test_accounts_merge.py) * Unique Bsts * [Unique Bsts](https://github.com/BrianLusina/PythonSnips/blob/master/algorithms/unique_bsts/unique_bsts.py) * Word Count @@ -502,6 +536,8 @@ * [Test Number Of One Bits](https://github.com/BrianLusina/PythonSnips/blob/master/bit_manipulation/number_of_1_bits/test_number_of_one_bits.py) * Single Number * [Test Single Number](https://github.com/BrianLusina/PythonSnips/blob/master/bit_manipulation/single_number/test_single_number.py) + * Sum Of Subset Xor + * [Test Sum Of All Subset Xor Totals](https://github.com/BrianLusina/PythonSnips/blob/master/bit_manipulation/sum_of_subset_xor/test_sum_of_all_subset_xor_totals.py) * Sum Two Integers * [Test Sum Of Two Integers](https://github.com/BrianLusina/PythonSnips/blob/master/bit_manipulation/sum_two_integers/test_sum_of_two_integers.py) @@ -636,6 +672,8 @@ * [With Ordered Dict](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/lrucache/with_ordered_dict.py) * Map Sum * [Test Map Sum Pairs](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/map_sum/test_map_sum_pairs.py) + * Nested Iterator + * [Test Nested Iterator](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/nested_iterator/test_nested_iterator.py) * Orderedstream * [Test Ordered Stream](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/orderedstream/test_ordered_stream.py) * Queues @@ -658,6 +696,8 @@ * [Test Smallest Infinite Set](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/smallest_infinite_set/test_smallest_infinite_set.py) * Snapshot Array * [Test Snapshot Array](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/snapshot_array/test_snapshot_array.py) + * Sparse Vector + * [Test Sparse Vector](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/sparse_vector/test_sparse_vector.py) * Stacks * Maxstack * [Test Max Stack](https://github.com/BrianLusina/PythonSnips/blob/master/datastructures/stacks/maxstack/test_max_stack.py) @@ -923,8 +963,6 @@ * [Test Max Number Of Ksum Pairs](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/arrays/max_number_of_ksum_pairs/test_max_number_of_ksum_pairs.py) * Maximum Average Subarray * [Test Max Average Subarray](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/arrays/maximum_average_subarray/test_max_average_subarray.py) - * Maxlen Contiguous Binary Subarray - * [Test Maxlen Contiguous Binary Subarray](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/arrays/maxlen_contiguous_binary_subarray/test_maxlen_contiguous_binary_subarray.py) * Rotation * Cyclic Rotation * [Test Cyclic Rotation](https://github.com/BrianLusina/PythonSnips/blob/master/puzzles/arrays/rotation/cyclic_rotation/test_cyclic_rotation.py) @@ -1001,6 +1039,8 @@ * [Wraps](https://github.com/BrianLusina/PythonSnips/blob/master/pyfuncs/decorators/wraps.py) ## Pymath + * Adding Two Negabinary Numbers + * [Test Add Two Negabinary Numbers](https://github.com/BrianLusina/PythonSnips/blob/master/pymath/adding_two_negabinary_numbers/test_add_two_negabinary_numbers.py) * Divisible By 7 Not 5 * [Test Divisible By7 Not 5](https://github.com/BrianLusina/PythonSnips/blob/master/pymath/divisible_by_7_not_5/test_divisible_by7_not_5.py) * Even Digits @@ -1072,8 +1112,6 @@ * [Test Is Prefix Of Word](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/is_prefix/test_is_prefix_of_word.py) * Is Unique * [Test Is Unique](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/is_unique/test_is_unique.py) - * Issubsequence - * [Test Is Subsequence](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/issubsequence/test_is_subsequence.py) * Lexicographically Largest String * [Test Lexicographically Largest String](https://github.com/BrianLusina/PythonSnips/blob/master/pystrings/lexicographically_largest_string/test_lexicographically_largest_string.py) * Longest Common Prefix @@ -1259,7 +1297,6 @@ * [Test Queen Attack](https://github.com/BrianLusina/PythonSnips/blob/master/tests/puzzles/test_queen_attack.py) * [Test Queue To Do](https://github.com/BrianLusina/PythonSnips/blob/master/tests/puzzles/test_queue_to_do.py) * [Test Rectangle](https://github.com/BrianLusina/PythonSnips/blob/master/tests/puzzles/test_rectangle.py) - * [Test Replace Words](https://github.com/BrianLusina/PythonSnips/blob/master/tests/puzzles/test_replace_words.py) * [Test Robot Name](https://github.com/BrianLusina/PythonSnips/blob/master/tests/puzzles/test_robot_name.py) * [Test Scale Generator](https://github.com/BrianLusina/PythonSnips/blob/master/tests/puzzles/test_scale_generator.py) * [Test Scrabble](https://github.com/BrianLusina/PythonSnips/blob/master/tests/puzzles/test_scrabble.py) @@ -1461,6 +1498,7 @@ * [Json Files](https://github.com/BrianLusina/PythonSnips/blob/master/utils/json_files.py) * Network * [Urllib Module](https://github.com/BrianLusina/PythonSnips/blob/master/utils/network/urllib_module.py) + * [Test Utils](https://github.com/BrianLusina/PythonSnips/blob/master/utils/test_utils.py) * [User File](https://github.com/BrianLusina/PythonSnips/blob/master/utils/user_file.py) * Video Optimizer * [Video](https://github.com/BrianLusina/PythonSnips/blob/master/utils/video_optimizer/video.py)