From 22aec363df796edff7c1cd3796ddb1f038abe4c7 Mon Sep 17 00:00:00 2001 From: SeungMin Lee Date: Sat, 26 Apr 2025 22:32:58 +0900 Subject: [PATCH 1/6] valid anagram --- valid-anagram/iam-edwin.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 valid-anagram/iam-edwin.java diff --git a/valid-anagram/iam-edwin.java b/valid-anagram/iam-edwin.java new file mode 100644 index 000000000..2f08edd0b --- /dev/null +++ b/valid-anagram/iam-edwin.java @@ -0,0 +1,27 @@ +import java.util.HashMap; +import java.util.Map; + +class Solution { + public boolean isAnagram(String s, String t) { + Map sMap = new HashMap<>(); + for (char c : s.toCharArray()) { + Integer count = sMap.getOrDefault(c, 0); + sMap.put(c, count + 1); + } + + Map tMap = new HashMap<>(); + for (char c : t.toCharArray()) { + Integer count = tMap.getOrDefault(c, 0); + tMap.put(c, count + 1); + } + + for (char key : sMap.keySet()) { + if (!sMap.get(key).equals(tMap.get(key))) { + return false; + } + tMap.remove(key); + } + + return tMap.isEmpty(); + } +} From 0f4baad24da0b56ab1a334cc5e2eeb153068f9fc Mon Sep 17 00:00:00 2001 From: SeungMin Lee Date: Sun, 27 Apr 2025 11:43:46 +0900 Subject: [PATCH 2/6] Climbing Stairs --- climbing-stairs/iam-edwin.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 climbing-stairs/iam-edwin.java diff --git a/climbing-stairs/iam-edwin.java b/climbing-stairs/iam-edwin.java new file mode 100644 index 000000000..e48f263fb --- /dev/null +++ b/climbing-stairs/iam-edwin.java @@ -0,0 +1,13 @@ +class Solution { + public int climbStairs(int n) { + int[] result = new int[n + 1]; + result[0] = 1; + result[1] = 1; + + for (int i = 2; i < n + 1; i++) { + result[i] = result[i - 1] + result[i - 2]; + } + + return result[n]; + } +} From efd16218f37a9637e24eca3ab5717504faa60dc6 Mon Sep 17 00:00:00 2001 From: SeungMin Lee Date: Sun, 27 Apr 2025 17:28:38 +0900 Subject: [PATCH 3/6] Product of Array Except Self --- product-of-array-except-self/iam-edwin.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 product-of-array-except-self/iam-edwin.java diff --git a/product-of-array-except-self/iam-edwin.java b/product-of-array-except-self/iam-edwin.java new file mode 100644 index 000000000..cbd1de6d9 --- /dev/null +++ b/product-of-array-except-self/iam-edwin.java @@ -0,0 +1,19 @@ +class Solution { + public int[] productExceptSelf(int[] nums) { + int[] left = new int[nums.length + 1]; + int[] right = new int[nums.length + 1]; + left[0] = 1; + right[nums.length] = 1; + + for (int i = 0; i < nums.length; i++) { + left[i + 1] = left[i] * nums[i]; + right[nums.length - i - 1] = right[nums.length - i] * nums[nums.length - i - 1]; + } + + int[] result = new int[nums.length]; + for (int i = 0; i < nums.length; i++) { + result[i] = left[i] * right[i + 1]; + } + return result; + } +} From f0bb27b9a6cbd65eef8908a07742d0a6ae3e1cbf Mon Sep 17 00:00:00 2001 From: SeungMin Lee Date: Sun, 4 May 2025 15:30:59 +0900 Subject: [PATCH 4/6] Product of Array Except Self V2 --- product-of-array-except-self/iam-edwin.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/product-of-array-except-self/iam-edwin.java b/product-of-array-except-self/iam-edwin.java index cbd1de6d9..4ca0c7d91 100644 --- a/product-of-array-except-self/iam-edwin.java +++ b/product-of-array-except-self/iam-edwin.java @@ -16,4 +16,24 @@ public int[] productExceptSelf(int[] nums) { } return result; } + + public int[] productExceptSelfV2(int[] nums) { + int[] result = new int[nums.length]; + + int curr = 1; + result[0] = curr; + for (int i = 1; i < nums.length; i++) { + curr *= nums[i - 1]; + result[i] = curr; + } + + curr = 1; + result[nums.length - 1] *= curr; + for (int i = nums.length - 2; i >= 0; i--) { + curr *= nums[i + 1]; + result[i] *= curr; + } + + return result; + } } From 07f1385f93a6bda479b7b5e1fefb16603bccbca8 Mon Sep 17 00:00:00 2001 From: SeungMin Lee Date: Sun, 4 May 2025 17:13:50 +0900 Subject: [PATCH 5/6] 3Sum --- 3sum/iam-edwin.java | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 3sum/iam-edwin.java diff --git a/3sum/iam-edwin.java b/3sum/iam-edwin.java new file mode 100644 index 000000000..5d1570e3b --- /dev/null +++ b/3sum/iam-edwin.java @@ -0,0 +1,40 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +class Solution { + public List> threeSum(int[] nums) { + List> result = new ArrayList<>(); + + Map counter = new HashMap<>(); + for (int num : nums) { + int count = counter.getOrDefault(num, 0); + counter.put(num, count + 1); + } + + Set keySet = new HashSet<>(counter.keySet()); + for (int num1 : keySet) { + int num1Count = counter.get(num1); + if (num1Count > 1) { + counter.put(num1, num1Count - 1); + } else { + counter.remove(num1); + } + + for (int num2 : counter.keySet()) { + int num3 = -num1 - num2; + int count = counter.getOrDefault(num3, 0); + if (((num2 == num3 && count >= 2) || (num2 != num3 && count >= 1)) && num3 >= num2) { + result.add(List.of(num1, num2, num3)); + } + } + + counter.remove(num1); + } + + return result; + } +} From a8af3206eacbfda6601d8bd86f9c0f565189ce97 Mon Sep 17 00:00:00 2001 From: SeungMin Lee Date: Sun, 4 May 2025 19:20:45 +0900 Subject: [PATCH 6/6] Validate Binary Search Tree --- validate-binary-search-tree/iam-edwin.java | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 validate-binary-search-tree/iam-edwin.java diff --git a/validate-binary-search-tree/iam-edwin.java b/validate-binary-search-tree/iam-edwin.java new file mode 100644 index 000000000..b0158e1de --- /dev/null +++ b/validate-binary-search-tree/iam-edwin.java @@ -0,0 +1,52 @@ +class Solution { + public boolean isValidBST(TreeNode root) { + return (root.left == null || isValidBSTMax(root.left, root.val)) + && (root.right == null || isValidBSTMin(root.right, root.val)); + } + + private boolean isValidBSTMax(TreeNode root, int max) { + if (root.val >= max) { + return false; + } + + return (root.left == null || isValidBSTMax(root.left, root.val)) + && (root.right == null || isValidBSTMinMax(root.right, root.val, max)); + } + + private boolean isValidBSTMin(TreeNode root, int min) { + if (root.val <= min) { + return false; + } + + return (root.left == null || isValidBSTMinMax(root.left, min, root.val)) + && (root.right == null || isValidBSTMin(root.right, root.val)); + } + + private boolean isValidBSTMinMax(TreeNode root, int min, int max) { + if (root.val >= max || root.val <= min) { + return false; + } + + return (root.left == null || isValidBSTMinMax(root.left, min, root.val)) + && (root.right == null || isValidBSTMinMax(root.right, root.val, max)); + } + + public class TreeNode { + int val; + TreeNode left; + TreeNode right; + + TreeNode() { + } + + TreeNode(int val) { + this.val = val; + } + + TreeNode(int val, TreeNode left, TreeNode right) { + this.val = val; + this.left = left; + this.right = right; + } + } +}