From 971a13191aeaeb2fbe4e196fffb9b8175941adf8 Mon Sep 17 00:00:00 2001 From: andrewlihk <66959493+andrewlihk@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:20:14 -0400 Subject: [PATCH 1/4] unclassing --- .../Binary Search - Leetcode 704.py | 28 ++++++++------- .../tempCodeRunnerFile.py | 1 + .../Subsets - Leetcode 78.py | 35 ++++++++++--------- 3 files changed, 35 insertions(+), 29 deletions(-) create mode 100644 Binary Search - Leetcode 704/tempCodeRunnerFile.py diff --git a/Binary Search - Leetcode 704/Binary Search - Leetcode 704.py b/Binary Search - Leetcode 704/Binary Search - Leetcode 704.py index 12a81b5..5133116 100644 --- a/Binary Search - Leetcode 704/Binary Search - Leetcode 704.py +++ b/Binary Search - Leetcode 704/Binary Search - Leetcode 704.py @@ -1,19 +1,21 @@ -class Solution: - def search(self, nums: List[int], target: int) -> int: - left = 0 - right = len(nums) - 1 - while left <= right: - middle = (right + left) // 2 +def search(nums, target) -> int: + left = 0 + right = len(nums) - 1 - if nums[middle] == target: - return middle - elif nums[middle] > target: - right = middle - 1 - else: - left = middle + 1 + while left <= right: + middle = (right + left) // 2 - return -1 + if nums[middle] == target: + return middle + elif nums[middle] > target: + right = middle - 1 + else: + left = middle + 1 + + return -1 + +print(search([-1, 0, 3, 5, 9, 12], 9)) # Time Complexity: O(log(n)) # Space Complexity: O(1) diff --git a/Binary Search - Leetcode 704/tempCodeRunnerFile.py b/Binary Search - Leetcode 704/tempCodeRunnerFile.py new file mode 100644 index 0000000..5485a2c --- /dev/null +++ b/Binary Search - Leetcode 704/tempCodeRunnerFile.py @@ -0,0 +1 @@ +List \ No newline at end of file diff --git a/Subsets - Leetcode 78/Subsets - Leetcode 78.py b/Subsets - Leetcode 78/Subsets - Leetcode 78.py index 0739377..516578d 100644 --- a/Subsets - Leetcode 78/Subsets - Leetcode 78.py +++ b/Subsets - Leetcode 78/Subsets - Leetcode 78.py @@ -1,23 +1,26 @@ -class Solution: - def subsets(self, nums: List[int]) -> List[List[int]]: - n = len(nums) - res, sol = [], [] - def backtrack(i): - if i == n: - res.append(sol[:]) - return +def subsets(nums): + n = len(nums) + res, sol = [], [] - # Don't pick nums[i] - backtrack(i + 1) + def backtrack(i): + if i == n: + res.append(sol[:]) + return - # Pick nums[i] - sol.append(nums[i]) - backtrack(i + 1) - sol.pop() + # Don't pick nums[i] + backtrack(i + 1) - backtrack(0) - return res + # Pick nums[i] + sol.append(nums[i]) + backtrack(i + 1) + sol.pop() + + backtrack(0) + return res + +print(subsets([1, 2, 3])) # Time Complexity: O(2^n) # Space Complexity: O(n) + From 6beb0ad4b5669491e757dfa40f5189c0397788c6 Mon Sep 17 00:00:00 2001 From: andrewlihk <66959493+andrewlihk@users.noreply.github.com> Date: Mon, 23 Sep 2024 17:26:46 -0400 Subject: [PATCH 2/4] test --- Subsets - Leetcode 78/Subsets - Leetcode 78.py | 1 - 1 file changed, 1 deletion(-) diff --git a/Subsets - Leetcode 78/Subsets - Leetcode 78.py b/Subsets - Leetcode 78/Subsets - Leetcode 78.py index 516578d..38567d9 100644 --- a/Subsets - Leetcode 78/Subsets - Leetcode 78.py +++ b/Subsets - Leetcode 78/Subsets - Leetcode 78.py @@ -10,7 +10,6 @@ def backtrack(i): # Don't pick nums[i] backtrack(i + 1) - # Pick nums[i] sol.append(nums[i]) backtrack(i + 1) From 4fdb22fd78274d92d64dc70b67fdf010d19f37e8 Mon Sep 17 00:00:00 2001 From: andrewlihk <66959493+andrewlihk@users.noreply.github.com> Date: Tue, 24 Sep 2024 07:43:40 -0400 Subject: [PATCH 3/4] declass --- .../Fibonacci Number - Leetcode 509.py | 92 ++++++++++--------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/Fibonacci Number - Leetcode 509/Fibonacci Number - Leetcode 509.py b/Fibonacci Number - Leetcode 509/Fibonacci Number - Leetcode 509.py index e082c70..19a0aba 100644 --- a/Fibonacci Number - Leetcode 509/Fibonacci Number - Leetcode 509.py +++ b/Fibonacci Number - Leetcode 509/Fibonacci Number - Leetcode 509.py @@ -2,70 +2,72 @@ # Time: O(2^n) # Space: O(n) -class Solution: - def fib(self, n: int) -> int: - if n == 0: - return 0 - elif n == 1: - return 1 - else: - return self.fib(n-1) + self.fib(n-2) + +def fib(n: int) -> int: + if n == 0: + return 0 + elif n == 1: + return 1 + else: + return fib(n-1) + fib(n-2) # Top Down Memoized # Time: O(n) # Space: O(n) -class Solution: - def fib(self, n: int) -> int: - memo = {0:0, 1:1} - def f(x): - if x in memo: - return memo[x] - else: - memo[x] = f(x-1) + f(x-2) - return memo[x] - - return f(n) +def fib2(n: int) -> int: + memo = {0:0, 1:1} + + def f(x): + if x in memo: + return memo[x] + else: + memo[x] = f(x-1) + f(x-2) + return memo[x] + + return f(n) # Bottom Up Tabulation # Time: O(n) # Space: O(n) -class Solution: - def fib(self, n: int) -> int: - if n == 0: - return 0 - if n == 1: - return 1 - dp = [0] * (n+1) - dp[0] = 0 - dp[1] = 1 +def fib3(n: int) -> int: + if n == 0: + return 0 + if n == 1: + return 1 + + dp = [0] * (n+1) + dp[0] = 0 + dp[1] = 1 - for i in range(2, n+1): - dp[i] = dp[i-2] + dp[i-1] + for i in range(2, n+1): + dp[i] = dp[i-2] + dp[i-1] - return dp[n] + return dp[n] # Bottom Up Constant Space # Time: O(n) # Space: O(1) -class Solution: - def fib(self, n: int) -> int: - if n == 0: - return 0 - if n == 1: - return 1 - - prev = 0 - cur = 1 - - for i in range(2, n+1): - prev, cur = cur, prev+cur - - return cur + +def fib4(n: int) -> int: + if n == 0: + return 0 + if n == 1: + return 1 + + prev = 0 + cur = 1 + + for i in range(2, n+1): + prev, cur = cur, prev+cur + + return cur + +print(fib4(10)) From 18cce36ee95cd6718b80ab6b9a44856d4234f740 Mon Sep 17 00:00:00 2001 From: andrewlihk <66959493+andrewlihk@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:45:20 -0400 Subject: [PATCH 4/4] declass --- .../Roman to Integer - Leetcode 13.py | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/Roman to Integer - Leetcode 13/Roman to Integer - Leetcode 13.py b/Roman to Integer - Leetcode 13/Roman to Integer - Leetcode 13.py index b4e0f48..272e2c2 100644 --- a/Roman to Integer - Leetcode 13/Roman to Integer - Leetcode 13.py +++ b/Roman to Integer - Leetcode 13/Roman to Integer - Leetcode 13.py @@ -1,18 +1,21 @@ -class Solution: - def romanToInt(self, s: str) -> int: - d = {'I': 1, 'V':5, 'X':10, 'L':50, 'C':100, 'D': 500, 'M':1000} - summ = 0 - n = len(s) - i = 0 - - while i < n: - if i < n - 1 and d[s[i]] < d[s[i+1]]: - summ += d[s[i+1]] - d[s[i]] - i += 2 - else: - summ += d[s[i]] - i += 1 - - return summ - # Time: O(n) - # Space: O(1) + +def romanToInt(s) -> int: + d = {'I': 1, 'V':5, 'X':10, 'L':50, 'C':100, 'D': 500, 'M':1000} + summ = 0 + n = len(s) + i = 0 + + while i < n: + if i < n - 1 and d[s[i]] < d[s[i+1]]: + summ += d[s[i+1]] - d[s[i]] + i += 2 + else: + summ += d[s[i]] + i += 1 + + return summ + # Time: O(n) + # Space: O(1) + +print(romanToInt("MCMXCIV")) +