From 73a6d43e73f994b4221b7035e938a6c082c035f5 Mon Sep 17 00:00:00 2001 From: ktony Date: Tue, 10 Sep 2024 12:48:29 -0400 Subject: [PATCH 1/6] Best Time to Buy And Sell Stock --- best-time-to-buy-and-sell-stock/TonyKim9401.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 best-time-to-buy-and-sell-stock/TonyKim9401.java diff --git a/best-time-to-buy-and-sell-stock/TonyKim9401.java b/best-time-to-buy-and-sell-stock/TonyKim9401.java new file mode 100644 index 000000000..edf024d07 --- /dev/null +++ b/best-time-to-buy-and-sell-stock/TonyKim9401.java @@ -0,0 +1,16 @@ +// TC: O(n) +// SC: O(1) +class Solution { + public int maxProfit(int[] prices) { + int bestProfit = 0; + int buyPrice = prices[0]; + for (int i = 1; i < prices.length; i++) { + if (buyPrice > prices[i]) { + buyPrice = prices[i]; + continue; + } + bestProfit = Math.max(bestProfit, prices[i] - buyPrice); + } + return bestProfit; + } +} From a0c07559924cbc354c8589e55cc5c297e9972c5b Mon Sep 17 00:00:00 2001 From: ktony Date: Wed, 11 Sep 2024 17:49:33 -0400 Subject: [PATCH 2/6] Group Anagrams --- group-anagrams/TonyKim9401.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 group-anagrams/TonyKim9401.java diff --git a/group-anagrams/TonyKim9401.java b/group-anagrams/TonyKim9401.java new file mode 100644 index 000000000..23fab4820 --- /dev/null +++ b/group-anagrams/TonyKim9401.java @@ -0,0 +1,25 @@ +// TC: O(n) +// SC: O(n * m) +class Solution { + public List> groupAnagrams(String[] strs) { + List> output = new ArrayList<>(); + Map> map = new HashMap<>(); + + for (int i = 0; i < strs.length; i++) { + char[] charArray = strs[i].toCharArray(); + Arrays.sort(charArray); + String target = new String(charArray); + + if (map.containsKey(target)) { + map.get(target).add(strs[i]); + } else { + List inside = new ArrayList<>(); + inside.add(strs[i]); + map.put(target, inside); + } + } + + for (String key : map.keySet()) output.add(map.get(key)); + return output; + } +} From 02fdf7acc67c87b8cd730ead447014f4403e7d10 Mon Sep 17 00:00:00 2001 From: ktony Date: Thu, 12 Sep 2024 13:07:43 -0400 Subject: [PATCH 3/6] 3Sum --- 3sum/TonyKim9401.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 3sum/TonyKim9401.java diff --git a/3sum/TonyKim9401.java b/3sum/TonyKim9401.java new file mode 100644 index 000000000..ff0064332 --- /dev/null +++ b/3sum/TonyKim9401.java @@ -0,0 +1,30 @@ +// TC: O(n^2) +// SC: O(n) +public class Solution { + public List> threeSum(int[] nums) { + + Arrays.sort(nums); + + List> output = new ArrayList<>(); + Map map = new HashMap<>(); + + for (int i = 0; i < nums.length; ++i) map.put(nums[i], i); + + for (int i = 0; i < nums.length - 2; ++i) { + if (nums[i] > 0) break; + + for (int j = i + 1; j < nums.length - 1; ++j) { + int cValue = -1 * (nums[i] + nums[j]); + + if (map.containsKey(cValue) && map.get(cValue) > j) { + output.add(List.of(nums[i], nums[j], cValue)); + } + j = map.get(nums[j]); + } + + i = map.get(nums[i]); + } + + return output; + } +} From e8ee61d1bb7b82bc39d7faa126fe29fe08fba0d5 Mon Sep 17 00:00:00 2001 From: ktony Date: Thu, 12 Sep 2024 22:47:53 -0400 Subject: [PATCH 4/6] Implement Trie Prefix Tree --- implement-trie-prefix-tree/TonyKim9401.java | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 implement-trie-prefix-tree/TonyKim9401.java diff --git a/implement-trie-prefix-tree/TonyKim9401.java b/implement-trie-prefix-tree/TonyKim9401.java new file mode 100644 index 000000000..4edf40b26 --- /dev/null +++ b/implement-trie-prefix-tree/TonyKim9401.java @@ -0,0 +1,56 @@ +class TrieNode { + TrieNode[] children; + boolean isEndOfWord; + + public TrieNode() { + children = new TrieNode[26]; + isEndOfWord = false; + } +} + +class Trie { + + private TrieNode root; + + public Trie() { + root = new TrieNode(); + } + + // TC: O(n) + // SC: O(n * m) + // -> word length * new TrieNode spaces + public void insert(String word) { + TrieNode node = root; + for (char c : word.toCharArray()) { + int idx = c - 'a'; + if (node.children[idx] == null) { + node.children[idx] = new TrieNode(); + } + node = node.children[idx]; + } + node.isEndOfWord = true; + } + + // TC: O(n) + // SC: O(1) + public boolean search(String word) { + TrieNode node = searchPrefix(word); + return node != null && node.isEndOfWord; + } + + // TC: O(n) + // SC: O(1) + private TrieNode searchPrefix(String word) { + TrieNode node = root; + for (char c : word.toCharArray()) { + int idx = c - 'a'; + if (node.children[idx] == null) return null; + node = node.children[idx]; + } + return node; + } + + public boolean startsWith(String prefix) { + return searchPrefix(prefix) != null; + } +} From 2e85a3772072a600d2ce0b740238a0cc035d5cc8 Mon Sep 17 00:00:00 2001 From: ktony Date: Thu, 12 Sep 2024 22:48:44 -0400 Subject: [PATCH 5/6] Word Break --- word-break/TonyKim9401.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 word-break/TonyKim9401.java diff --git a/word-break/TonyKim9401.java b/word-break/TonyKim9401.java new file mode 100644 index 000000000..4ec5fa87d --- /dev/null +++ b/word-break/TonyKim9401.java @@ -0,0 +1,22 @@ +// TC: O(n^2) +// -> use 2 for-loops to search +// SC: O(n) +// -> boolean array's size +class Solution { + public boolean wordBreak(String s, List wordDict) { + Set set = new HashSet(wordDict); + + boolean[] dp = new boolean[s.length() + 1]; + dp[0] = true; + + for (int i = 1; i <= s.length(); i++) { + for (int j = 0; j < i; j++) { + if (dp[j] && set.contains(s.substring(j, i))) { + dp[i] = true; + break; + } + } + } + return dp[s.length()]; + } +} From 6762aa084e6dd9b4fe19e64efc30ae8175bd0c47 Mon Sep 17 00:00:00 2001 From: ktony Date: Thu, 12 Sep 2024 22:53:24 -0400 Subject: [PATCH 6/6] Group Anagrams Time Complexity re-calculation --- group-anagrams/TonyKim9401.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/group-anagrams/TonyKim9401.java b/group-anagrams/TonyKim9401.java index 23fab4820..1b96471f2 100644 --- a/group-anagrams/TonyKim9401.java +++ b/group-anagrams/TonyKim9401.java @@ -1,4 +1,4 @@ -// TC: O(n) +// TC: O(n * m log m) // SC: O(n * m) class Solution { public List> groupAnagrams(String[] strs) {