From 33ea540e37f06deec04aff1f333c79817288733c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Jun 2021 06:12:33 -0700 Subject: [PATCH 0001/1640] Create Number of Matching Subsequences.java --- Medium/Number of Matching Subsequences.java | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Number of Matching Subsequences.java diff --git a/Medium/Number of Matching Subsequences.java b/Medium/Number of Matching Subsequences.java new file mode 100644 index 00000000..8de23b10 --- /dev/null +++ b/Medium/Number of Matching Subsequences.java @@ -0,0 +1,23 @@ +class Solution { + public int numMatchingSubseq(String s, String[] words) { + int count = 0; + for (String word : words) { + if (isSubsequence(s, word)) { + count++; + } + } + return count; + } + + private boolean isSubsequence(String s, String word) { + int prevIdx = 0; + for (char c : word.toCharArray()) { + int idx = s.indexOf(c, prevIdx); + if (idx == -1) { + return false; + } + prevIdx = idx + 1; + } + return true; + } +} From 779fc5f9d3a09160db4086a5a989c920d9e33eb9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Jun 2021 07:13:51 -0700 Subject: [PATCH 0002/1640] Create Maximum Product Difference Between Two Pairs.java --- Easy/Maximum Product Difference Between Two Pairs.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Easy/Maximum Product Difference Between Two Pairs.java diff --git a/Easy/Maximum Product Difference Between Two Pairs.java b/Easy/Maximum Product Difference Between Two Pairs.java new file mode 100644 index 00000000..3c3edf02 --- /dev/null +++ b/Easy/Maximum Product Difference Between Two Pairs.java @@ -0,0 +1,6 @@ +class Solution { + public int maxProductDifference(int[] nums) { + Arrays.sort(nums); + return nums[nums.length - 1] * nums[nums.length - 2] - nums[0] * nums[1]; + } +} From c42f7ed469486d7256e5899cf15ca8100accff94 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Jun 2021 07:21:01 -0700 Subject: [PATCH 0003/1640] Create Remove One Element to Make the Array Strictly Increasing.java --- ...t to Make the Array Strictly Increasing.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Remove One Element to Make the Array Strictly Increasing.java diff --git a/Easy/Remove One Element to Make the Array Strictly Increasing.java b/Easy/Remove One Element to Make the Array Strictly Increasing.java new file mode 100644 index 00000000..74c4bf1d --- /dev/null +++ b/Easy/Remove One Element to Make the Array Strictly Increasing.java @@ -0,0 +1,17 @@ +class Solution { + public boolean canBeIncreasing(int[] nums) { + boolean removed = false; + for (int i = 1; i < nums.length; i++) { + if (nums[i] <= nums[i - 1]) { + if (removed) { + return false; + } + removed = true; + if (i > 1 && nums[i] <= nums[i - 2]) { + nums[i] = nums[i - 1]; + } + } + } + return true; + } +} From c50fecfde7ad3e209f76457090747c64468d2ff6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Jun 2021 07:02:13 -0700 Subject: [PATCH 0004/1640] Create Remove All Occurrences of a Substring.java --- Medium/Remove All Occurrences of a Substring.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Remove All Occurrences of a Substring.java diff --git a/Medium/Remove All Occurrences of a Substring.java b/Medium/Remove All Occurrences of a Substring.java new file mode 100644 index 00000000..08fa1f78 --- /dev/null +++ b/Medium/Remove All Occurrences of a Substring.java @@ -0,0 +1,12 @@ +class Solution { + public String removeOccurrences(String s, String part) { + while (true) { + int idx = s.indexOf(part); + if (idx == -1) { + break; + } + s = s.substring(0, idx) + s.substring(idx + part.length()); + } + return s; + } +} From f0769c9fb2c1da2fb60e1b588a6499f72e6c94b9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 2 Jul 2021 08:08:13 -0700 Subject: [PATCH 0005/1640] Update Find K Closest Elements.java --- Medium/Find K Closest Elements.java | 44 +++++------------------------ 1 file changed, 7 insertions(+), 37 deletions(-) diff --git a/Medium/Find K Closest Elements.java b/Medium/Find K Closest Elements.java index 76a292bb..2e49a608 100644 --- a/Medium/Find K Closest Elements.java +++ b/Medium/Find K Closest Elements.java @@ -1,41 +1,11 @@ class Solution { public List findClosestElements(int[] arr, int k, int x) { - if (k == 0 || arr.length == 0) { - return new ArrayList<>(); - } - int[] diffArr = new int[arr.length]; - int minDiff = Integer.MAX_VALUE; - int minDiffIdx = -1; - for (int i = 0; i < arr.length; i++) { - diffArr[i] = Math.abs(arr[i] - x); - if (minDiff > diffArr[i]) { - minDiff = diffArr[i]; - minDiffIdx = i; - } - } - int left = minDiffIdx - 1; - int right = minDiffIdx + 1; - List list = new ArrayList<>(); - list.add(arr[minDiffIdx]); - k--; - while (k > 0) { - if (left >= 0 && right < arr.length) { - if (diffArr[left] <= diffArr[right]) { - list.add(arr[left--]); - } - else { - list.add(arr[right++]); - } - } - else if (left >= 0 && right == arr.length) { - list.add(arr[left--]); - } - else { - list.add(arr[right++]); - } - k--; - } - Collections.sort(list); - return list; + return Arrays.stream(arr) + .mapToObj(e -> new int[]{e, Math.abs(e - x)}) + .sorted((o1, o2) -> (o1[1] - o2[1] != 0) ? (o1[1] - o2[1]) : o1[0] - o2[0]) + .map(e -> e[0]) + .limit(k) + .sorted() + .collect(Collectors.toList()); } } From 42361da903a2b5705a3d309845b28ecc34adde5e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Jul 2021 21:10:33 -0700 Subject: [PATCH 0006/1640] Create Build Array from Permutation.java --- Easy/Build Array from Permutation.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Build Array from Permutation.java diff --git a/Easy/Build Array from Permutation.java b/Easy/Build Array from Permutation.java new file mode 100644 index 00000000..88119f3d --- /dev/null +++ b/Easy/Build Array from Permutation.java @@ -0,0 +1,9 @@ +class Solution { + public int[] buildArray(int[] nums) { + int[] ans = new int[nums.length]; + for (int i = 0; i < nums.length; i++) { + ans[i] = nums[nums[i]]; + } + return ans; + } +} From 73f28c6625723f0df6fefe91fc7ab9087ba589c4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 6 Jul 2021 08:15:15 -0700 Subject: [PATCH 0007/1640] Update Reduce Array Size to The Half.java --- Medium/Reduce Array Size to The Half.java | 30 +++++++++-------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/Medium/Reduce Array Size to The Half.java b/Medium/Reduce Array Size to The Half.java index 50c84326..de698435 100644 --- a/Medium/Reduce Array Size to The Half.java +++ b/Medium/Reduce Array Size to The Half.java @@ -1,24 +1,16 @@ class Solution { public int minSetSize(int[] arr) { - Map map = new HashMap<>(); - for (int num : arr) { - map.put(num, map.getOrDefault(num, 0) + 1); + Map frequencyMap = Arrays.stream(arr).boxed() + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); + int halfSize = arr.length / 2; + PriorityQueue pq = new PriorityQueue<>( + (o1, o2) -> (int) (frequencyMap.get(o2) - frequencyMap.get(o1))); + pq.addAll(frequencyMap.keySet()); + int counter = 0; + while (!pq.isEmpty() && halfSize > 0) { + halfSize -= frequencyMap.get(pq.poll()); + counter++; } - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(Integer o1, Integer o2) { - return map.get(o2) - map.get(o1); - } - }); - for (Integer key : map.keySet()) { - pq.add(key); - } - int n = arr.length / 2; - int currSize = 0; - int count = 0; - while (currSize < n) { - currSize += map.get(pq.poll()); - count++; - } - return count; + return counter; } } From ee0c89b8307cd2b77a20fea880c852a31bdb950f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 10 Jul 2021 10:33:19 -0700 Subject: [PATCH 0008/1640] Create Count Square Sum Triples.java --- Easy/Count Square Sum Triples.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Count Square Sum Triples.java diff --git a/Easy/Count Square Sum Triples.java b/Easy/Count Square Sum Triples.java new file mode 100644 index 00000000..a7c47e94 --- /dev/null +++ b/Easy/Count Square Sum Triples.java @@ -0,0 +1,18 @@ +class Solution { + public int countTriples(int n) { + Map map = new HashMap<>(); + for (int i = 1; i <= n; i++) { + map.put(i*i, i); + } + int count = 0; + for (int i = 1; i <= n; i++) { + for (int j = i + 1; j <= n; j++) { + int key = i * i + j * j; + if (map.containsKey(key) && !map.get(key).equals(i) && !map.get(key).equals(j)) { + count += 2; + } + } + } + return count; + } +} From 921a7e880840a4856869bdbdba127d380eca84eb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Jul 2021 07:33:41 -0700 Subject: [PATCH 0009/1640] Create Concatenation of Array.java --- Easy/Concatenation of Array.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Concatenation of Array.java diff --git a/Easy/Concatenation of Array.java b/Easy/Concatenation of Array.java new file mode 100644 index 00000000..f4042c0b --- /dev/null +++ b/Easy/Concatenation of Array.java @@ -0,0 +1,9 @@ +class Solution { + public int[] getConcatenation(int[] nums) { + int[] ans = new int[nums.length * 2]; + for (int i = 0; i < nums.length; i++) { + ans[i + nums.length] = ans[i] = nums[i]; + } + return ans; + } +} From 9199efa579d31d39f0918c27770c7d47fc749c92 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 17 Jul 2021 21:06:25 -0700 Subject: [PATCH 0010/1640] Create Maximum Number of Words You Can Type.java --- Easy/Maximum Number of Words You Can Type.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Maximum Number of Words You Can Type.java diff --git a/Easy/Maximum Number of Words You Can Type.java b/Easy/Maximum Number of Words You Can Type.java new file mode 100644 index 00000000..dd3afc70 --- /dev/null +++ b/Easy/Maximum Number of Words You Can Type.java @@ -0,0 +1,9 @@ +class Solution { + public int canBeTypedWords(String text, String brokenLetters) { + return (int) Arrays.stream(text.split("\\s+")) + .filter(e -> e.chars() + .mapToObj(c -> (char) c) + .noneMatch(c -> brokenLetters.indexOf(c) != -1)) + .count(); + } +} From 0b179f2d1747da1a28e4da7bd59a4df852d90862 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Jul 2021 17:14:41 -0700 Subject: [PATCH 0011/1640] Create Add Minimum Number of Rungs.java --- Medium/Add Minimum Number of Rungs.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Add Minimum Number of Rungs.java diff --git a/Medium/Add Minimum Number of Rungs.java b/Medium/Add Minimum Number of Rungs.java new file mode 100644 index 00000000..f473ea61 --- /dev/null +++ b/Medium/Add Minimum Number of Rungs.java @@ -0,0 +1,11 @@ +class Solution { + public int addRungs(int[] rungs, int dist) { + int numOfRungs = 0; + int currPos = 0; + for (int rung : rungs) { + numOfRungs += (rung - currPos - 1) / dist; + currPos = rung; + } + return numOfRungs; + } +} From e4e589d3ee5fe2686c79c0db5490f92bb4e9d8ce Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 19 Jul 2021 07:56:44 -0700 Subject: [PATCH 0012/1640] Update Lowest Common Ancestor of a Binary Search Tree.java --- ...mmon Ancestor of a Binary Search Tree.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Easy/Lowest Common Ancestor of a Binary Search Tree.java b/Easy/Lowest Common Ancestor of a Binary Search Tree.java index aba618f7..c4092475 100644 --- a/Easy/Lowest Common Ancestor of a Binary Search Tree.java +++ b/Easy/Lowest Common Ancestor of a Binary Search Tree.java @@ -7,22 +7,16 @@ * TreeNode(int x) { val = x; } * } */ + class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { - if (root == null || p == null || q == null) { - return null; - } - if (root == p || root == q) { - return root; - } - if ((root.val > p.val && root.val < q.val) || (root.val < p.val && root.val > q.val)) { + if (root == p || root == q || + (p.val > root.val && q.val < root.val) || + (p.val < root.val && q.val > root.val)) { return root; } - if (root.val > p.val && root.val > q.val) { - return lowestCommonAncestor(root.left, p, q); - } - else { - return lowestCommonAncestor(root.right, p, q); - } + return ((root.val > p.val && root.val > q.val) ? + lowestCommonAncestor(root.left, p, q) : + lowestCommonAncestor(root.right, p, q)); } } From 658cc1761191e69d3aa93ada0aeffe69140a472e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Jul 2021 11:18:20 -0700 Subject: [PATCH 0013/1640] Create Check if All Characters Have Equal Number of Occurrences.java --- ...if All Characters Have Equal Number of Occurrences.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Easy/Check if All Characters Have Equal Number of Occurrences.java diff --git a/Easy/Check if All Characters Have Equal Number of Occurrences.java b/Easy/Check if All Characters Have Equal Number of Occurrences.java new file mode 100644 index 00000000..1de5d301 --- /dev/null +++ b/Easy/Check if All Characters Have Equal Number of Occurrences.java @@ -0,0 +1,7 @@ +class Solution { + public boolean areOccurrencesEqual(String s) { + return new HashSet<>(s.chars().mapToObj(c -> (char) c) + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())) + .values()).size() == 1; + } +} From d876bcae57926e079bc1dc5df8de3fc79d5730d3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Jul 2021 22:30:24 -0700 Subject: [PATCH 0014/1640] Create Sum of Digits of String After Convert.java --- Easy/Sum of Digits of String After Convert.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Sum of Digits of String After Convert.java diff --git a/Easy/Sum of Digits of String After Convert.java b/Easy/Sum of Digits of String After Convert.java new file mode 100644 index 00000000..c86c724c --- /dev/null +++ b/Easy/Sum of Digits of String After Convert.java @@ -0,0 +1,17 @@ +class Solution { + public int getLucky(String s, int k) { + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + sb.append(c - 'a' + 1); + } + String num = sb.toString(); + while (k-- > 0) { + int sum = 0; + for (char c : num.toCharArray()) { + sum += Character.getNumericValue(c); + } + num = String.valueOf(sum); + } + return Integer.parseInt(num); + } +} From 6cda825a9aa31bc28ca919a49c68bb397f974564 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 Aug 2021 11:24:31 -0700 Subject: [PATCH 0015/1640] Create Three Divisors.java --- Easy/Three Divisors.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Three Divisors.java diff --git a/Easy/Three Divisors.java b/Easy/Three Divisors.java new file mode 100644 index 00000000..7b755498 --- /dev/null +++ b/Easy/Three Divisors.java @@ -0,0 +1,14 @@ +class Solution { + public boolean isThree(int n) { + int numOfDivisors = 0; + for (int i = 1; i <= n; i++) { + if (n % i == 0) { + numOfDivisors++; + } + if (numOfDivisors > 3) { + return false; + } + } + return numOfDivisors == 3; + } +} From f2b9fe1ab4d2a1df8a3ea8179ca5aa3f4d17f530 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Aug 2021 06:16:27 -0700 Subject: [PATCH 0016/1640] Update Path Sum II.java --- Medium/Path Sum II.java | 52 ++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Medium/Path Sum II.java b/Medium/Path Sum II.java index e90b2004..c9610a27 100644 --- a/Medium/Path Sum II.java +++ b/Medium/Path Sum II.java @@ -4,36 +4,36 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { + public List> pathSum(TreeNode root, int targetSum) { List> list = new ArrayList<>(); - public List> pathSum(TreeNode root, int sum) { - if (root == null) return list; - - Stack path = new Stack<>(); - - pathSumImpl(root, sum, path); - return list; + helper(root, targetSum, new ArrayList<>(), list); + return list; + } + + private void helper(TreeNode root, int targetSum, List curr, List> list) { + if (root == null) { + return; } - - private void pathSumImpl(TreeNode root, int sum, Stack path) { - path.push(root.val); - if (root.left == null && root.right == null) { - if (sum == root.val) { - list.add(new ArrayList(path)); - } - } - - if (root.left != null) { - pathSumImpl(root.left, sum-root.val, path); - } - - if (root.right != null) { - pathSumImpl(root.right, sum-root.val, path); - } - - path.pop(); + curr.add(root.val); + if (isLeaf(root) && (targetSum - root.val) == 0) { + list.add(new ArrayList<>(curr)); } + helper(root.left, targetSum - root.val, curr, list); + helper(root.right, targetSum - root.val, curr, list); + curr.remove(curr.size() - 1); + } + + private boolean isLeaf(TreeNode root) { + return root.left == null && root.right == null; + } } From b85830e7e6dd72c3db893efe779d865932634172 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 7 Aug 2021 09:09:07 -0700 Subject: [PATCH 0017/1640] Create Delete Characters to Make Fancy String.java --- ...Delete Characters to Make Fancy String.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Delete Characters to Make Fancy String.java diff --git a/Easy/Delete Characters to Make Fancy String.java b/Easy/Delete Characters to Make Fancy String.java new file mode 100644 index 00000000..ff26a1b4 --- /dev/null +++ b/Easy/Delete Characters to Make Fancy String.java @@ -0,0 +1,18 @@ +class Solution { + public String makeFancyString(String s) { + int idx = 0; + StringBuilder sb = new StringBuilder(); + while (idx < s.length()) { + char c = s.charAt(idx); + int count = 0; + while (idx < s.length() && s.charAt(idx) == c) { + idx++; + count++; + if (count <= 2) { + sb.append(c); + } + } + } + return sb.toString(); + } +} From fc76913c17cb3dfe845b28c4f6152a4a854d9de9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Aug 2021 07:06:34 -0700 Subject: [PATCH 0018/1640] Create Check If String Is a Prefix of Array.java --- Easy/Check If String Is a Prefix of Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Check If String Is a Prefix of Array.java diff --git a/Easy/Check If String Is a Prefix of Array.java b/Easy/Check If String Is a Prefix of Array.java new file mode 100644 index 00000000..faf8f894 --- /dev/null +++ b/Easy/Check If String Is a Prefix of Array.java @@ -0,0 +1,17 @@ +class Solution { + public boolean isPrefixString(String s, String[] words) { + int idx = 0; + for (String word : words) { + for (int i = 0; i < word.length(); i++) { + if (word.charAt(i) != s.charAt(idx)) { + return false; + } + idx++; + if (idx == s.length()) { + return i == word.length() - 1; + } + } + } + return idx == s.length(); + } +} From 0f9be0005f4ae3cf91a8dca78c0f745d3fba5ddf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 9 Aug 2021 07:55:03 -0700 Subject: [PATCH 0019/1640] Update Add Strings.java --- Easy/Add Strings.java | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Easy/Add Strings.java b/Easy/Add Strings.java index f229760b..6a68a142 100644 --- a/Easy/Add Strings.java +++ b/Easy/Add Strings.java @@ -1,27 +1,22 @@ class Solution { public String addStrings(String num1, String num2) { StringBuilder sb = new StringBuilder(); - int idx1 = num1.length() - 1; - int idx2 = num2.length() - 1; + int idxOne = num1.length() - 1; + int idxTwo = num2.length() - 1; int carry = 0; - while (idx1 >= 0 || idx2 >= 0) { + while (idxOne >= 0 || idxTwo >= 0 || carry > 0) { int temp = carry; - if (idx1 >= 0 && idx2 >= 0) { - temp += Character.getNumericValue(num1.charAt(idx1--)) + Character.getNumericValue(num2.charAt(idx2--)); - } - else if (idx1 >= 0 && idx2 < 0) { - temp += Character.getNumericValue(num1.charAt(idx1--)); - } - else { - temp += Character.getNumericValue(num2.charAt(idx2--)); + if (idxOne >= 0 && idxTwo >= 0) { + temp += Character.getNumericValue(num1.charAt(idxOne--)) + Character.getNumericValue(num2.charAt(idxTwo--)); + } else if (idxOne >= 0 && idxTwo < 0) { + temp += Character.getNumericValue(num1.charAt(idxOne--)); + } else if (idxOne < 0 && idxTwo >= 0) { + temp += Character.getNumericValue(num2.charAt(idxTwo--)); } carry = temp > 9 ? 1 : 0; temp = temp > 9 ? temp % 10 : temp; sb.append(temp); } - if (carry > 0) { - sb.append(carry); - } return sb.reverse().toString(); } } From 777984a1498cfb630cc04ce13a42ac61dd54ccbd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 12 Aug 2021 15:46:23 -0700 Subject: [PATCH 0020/1640] Update Group Anagrams.java --- Medium/Group Anagrams.java | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Medium/Group Anagrams.java b/Medium/Group Anagrams.java index 3ce07c65..deca920f 100644 --- a/Medium/Group Anagrams.java +++ b/Medium/Group Anagrams.java @@ -1,19 +1,14 @@ class Solution { public List> groupAnagrams(String[] strs) { - Map> map = new HashMap<>(); - for (String str : strs) { - String key = getKey(str); - map.computeIfAbsent(key, k -> new ArrayList<>()).add(str); - } - List> ans = new ArrayList<>(map.values()); - return ans; + return new ArrayList<>( + Arrays.stream(strs).collect(Collectors.groupingBy(Solution::getCodedString)).values()); } - - private String getKey(String s) { - int[] counter = new int[26]; - for (char c : s.toCharArray()) { - counter[c - 'a']++; - } - return Arrays.toString(counter); + + public static String getCodedString(String s) { + return s.chars() + .mapToObj(c -> (char) c) + .sorted() + .map(Object::toString) + .collect(Collectors.joining()); } } From fa6d3b87848206db389c8b263c7c4caed5bd0dd6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 15 Aug 2021 20:09:48 -0700 Subject: [PATCH 0021/1640] Create Number of Strings That Appear as Substrings in Word.java --- .../Number of Strings That Appear as Substrings in Word.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Number of Strings That Appear as Substrings in Word.java diff --git a/Easy/Number of Strings That Appear as Substrings in Word.java b/Easy/Number of Strings That Appear as Substrings in Word.java new file mode 100644 index 00000000..f328158d --- /dev/null +++ b/Easy/Number of Strings That Appear as Substrings in Word.java @@ -0,0 +1,5 @@ +class Solution { + public int numOfStrings(String[] patterns, String word) { + return (int) Arrays.stream(patterns).filter(p -> word.contains(p)).count(); + } +} From 0256a21d84da4835f60318090e4ad11b0ff731f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 16 Aug 2021 08:12:53 -0700 Subject: [PATCH 0022/1640] Update and rename Range Sum Query_Immutable.java to Range Sum Query Immutable.java --- Easy/Range Sum Query Immutable.java | 23 +++++++++++++++++++++++ Easy/Range Sum Query_Immutable.java | 26 -------------------------- 2 files changed, 23 insertions(+), 26 deletions(-) create mode 100644 Easy/Range Sum Query Immutable.java delete mode 100644 Easy/Range Sum Query_Immutable.java diff --git a/Easy/Range Sum Query Immutable.java b/Easy/Range Sum Query Immutable.java new file mode 100644 index 00000000..5318818c --- /dev/null +++ b/Easy/Range Sum Query Immutable.java @@ -0,0 +1,23 @@ +class NumArray { + + int[] sumArray; + + public NumArray(int[] nums) { + sumArray = new int[nums.length]; + int currSum = 0; + for (int i = 0; i < nums.length; i++) { + currSum += nums[i]; + sumArray[i] = currSum; + } + } + + public int sumRange(int left, int right) { + return sumArray[right] - (left == 0 ? 0 : sumArray[left - 1]); + } +} + +/** + * Your NumArray object will be instantiated and called as such: + * NumArray obj = new NumArray(nums); + * int param_1 = obj.sumRange(left,right); + */ diff --git a/Easy/Range Sum Query_Immutable.java b/Easy/Range Sum Query_Immutable.java deleted file mode 100644 index 9a5b7fc8..00000000 --- a/Easy/Range Sum Query_Immutable.java +++ /dev/null @@ -1,26 +0,0 @@ -class NumArray { - int[] cumulativeSum; - int n; - public NumArray(int[] nums) { - n = nums.length; - cumulativeSum = new int[n]; - int currSum = 0; - for (int i = 0; i < n; i++) { - currSum += nums[i]; - cumulativeSum[i] = currSum; - } - } - - public int sumRange(int i, int j) { - if (i == 0) { - return cumulativeSum[j]; - } - return cumulativeSum[j] - cumulativeSum[i - 1]; - } -} - -/** - * Your NumArray object will be instantiated and called as such: - * NumArray obj = new NumArray(nums); - * int param_1 = obj.sumRange(i,j); - */ From 95c5bf345d83ad1640e4f4a3175c6946eb1ba2a5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 16 Aug 2021 16:10:48 -0700 Subject: [PATCH 0023/1640] Update Minimum Window Substring.java --- Hard/Minimum Window Substring.java | 71 ++++++++++++++---------------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/Hard/Minimum Window Substring.java b/Hard/Minimum Window Substring.java index b5d6ae76..2e8bb271 100644 --- a/Hard/Minimum Window Substring.java +++ b/Hard/Minimum Window Substring.java @@ -1,43 +1,38 @@ class Solution { - public String minWindow(String s, String t) { - Map map = new HashMap<>(); - for (char c : t.toCharArray()) { - map.put(c, (map.getOrDefault(c, 0) + 1)); + public String minWindow(String s, String t) { + Map map = new HashMap<>(); + for (char c : t.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); + } + int count = map.size(); + int start = 0; + int end = 0; + int minWindowLength = Integer.MAX_VALUE; + int minWindowStart = 0; + int minWindowEnd = 0; + 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) { + count--; + } + } + while (count == 0 && start < end) { + if (end - start < minWindowLength) { + minWindowLength = end - start; + minWindowStart = start; + minWindowEnd = end; } - - int start = 0; - int end = 0; - int count = map.size(); - int minLen = Integer.MAX_VALUE; - String ans = ""; - - while (end < s.length()) { - if (map.containsKey(s.charAt(end))) { - map.put(s.charAt(end), map.get(s.charAt(end)) - 1); - if (map.get(s.charAt(end)) == 0) { - count--; - } - } - - end++; - - while (count == 0) { - if (end - start < minLen) { - minLen = end - start; - ans = s.substring(start, end); - } - - if (map.containsKey(s.charAt(start))) { - map.put(s.charAt(start), map.get(s.charAt(start)) + 1); - if (map.get(s.charAt(start)) > 0) { - count++; - } - } - - start++; - } + char temp = s.charAt(start++); + if (map.containsKey(temp)) { + map.put(temp, map.get(temp) + 1); + if (map.get(temp) == 1) { + count++; + } } - - return ans; + } } + return s.substring(minWindowStart, minWindowEnd); + } } From 259ec48a0fe94034d8e2835dc01f0909e8f9f610 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 17 Aug 2021 08:23:17 -0700 Subject: [PATCH 0024/1640] Added both recursive and non-recursive implementation --- Medium/Count Good Nodes in Binary Tree.java | 40 ++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/Medium/Count Good Nodes in Binary Tree.java b/Medium/Count Good Nodes in Binary Tree.java index e5f87685..d3888f9d 100644 --- a/Medium/Count Good Nodes in Binary Tree.java +++ b/Medium/Count Good Nodes in Binary Tree.java @@ -16,18 +16,50 @@ class Solution { public int goodNodes(TreeNode root) { int[] count = {0}; - helper(root, root.val, count); + getGoodNodesCountRecursive(root, Integer.MIN_VALUE, count); return count[0]; } - private void helper(TreeNode root, int currMax, int[] count) { + private void getGoodNodesCountRecursive(TreeNode root, int currMax, int[] count) { if (root == null) { return; } if (root.val >= currMax) { count[0]++; } - helper(root.left, Math.max(currMax, root.val), count); - helper(root.right, Math.max(currMax, root.val), count); + getGoodNodesCountRecursive(root.left, Math.max(currMax, root.val), count); + getGoodNodesCountRecursive(root.right, Math.max(currMax, root.val), count); + } + + private int getGoodNodesCountNonRecursive(TreeNode root) { + if (root == null) { + return 0; + } + int count = 0; + Queue queue = new LinkedList<>(); + queue.add(new TreePair(root, Integer.MIN_VALUE)); + while (!queue.isEmpty()) { + TreePair removed = queue.remove(); + if (removed.node.val >= removed.currMax) { + count++; + } + if (removed.node.left != null) { + queue.add(new TreePair(removed.node.left, Math.max(removed.node.val, removed.currMax))); + } + if (removed.node.right != null) { + queue.add(new TreePair(removed.node.right, Math.max(removed.node.val, removed.currMax))); + } + } + return count; + } + + class TreePair { + int currMax; + TreeNode node; + + public TreePair(TreeNode node, int currMax) { + this.currMax = currMax; + this.node = node; + } } } From 1c827db68938bacd13f3fc1774a20515746bbbd5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 21 Aug 2021 09:39:05 -0700 Subject: [PATCH 0025/1640] Create Minimum Time to Type Word Using Special Typewriter.java --- ...m Time to Type Word Using Special Typewriter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/Minimum Time to Type Word Using Special Typewriter.java diff --git a/Easy/Minimum Time to Type Word Using Special Typewriter.java b/Easy/Minimum Time to Type Word Using Special Typewriter.java new file mode 100644 index 00000000..e804f716 --- /dev/null +++ b/Easy/Minimum Time to Type Word Using Special Typewriter.java @@ -0,0 +1,12 @@ +class Solution { + public int minTimeToType(String word) { + int totalTime = 0; + char currentChar = 'a'; + for (char c : word.toCharArray()) { + int difference = Math.abs(c - currentChar); + totalTime += 1 + Math.min(difference, 26 - difference); + currentChar = c; + } + return totalTime; + } +} From c685fc70d3af1b0c40038ad46e6e2b107d230fee Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 Aug 2021 07:21:11 -0700 Subject: [PATCH 0026/1640] Update Complex Number Multiplication.java --- Medium/Complex Number Multiplication.java | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/Medium/Complex Number Multiplication.java b/Medium/Complex Number Multiplication.java index c206de72..bb24eb73 100644 --- a/Medium/Complex Number Multiplication.java +++ b/Medium/Complex Number Multiplication.java @@ -1,19 +1,9 @@ class Solution { - public String complexNumberMultiply(String a, String b) { - int realPart = 0; - int complexPart = 0; - int[] splitA = helper(a); - int[] splitB = helper(b); - realPart = splitA[0] * splitB[0] - splitA[1] * splitB[1]; - complexPart = splitA[0] * splitB[1] + splitA[1] * splitB[0]; - return realPart + "+" + complexPart + "i"; - } - - private int[] helper(String s) { - String[] strs = s.split("\\+"); - int[] arr = new int[2]; - arr[0] = Integer.parseInt(strs[0]); - arr[1] = Integer.parseInt(strs[1].substring(0, strs[1].indexOf('i'))); - return arr; + public String complexNumberMultiply(String num1, String num2) { + int realPartOne = Integer.parseInt(num1.split("\\+")[0]); + int imaginaryPartOne = Integer.parseInt(num1.split("\\+")[1].substring(0, num1.split("\\+")[1].length() - 1)); + int realPartTwo = Integer.parseInt(num2.split("\\+")[0]); + int imaginaryPartTwo = Integer.parseInt(num2.split("\\+")[1].substring(0, num2.split("\\+")[1].length() - 1)); + return (realPartOne * realPartTwo - imaginaryPartOne * imaginaryPartTwo) + "+" + (realPartOne * imaginaryPartTwo + realPartTwo * imaginaryPartOne) + "i"; } } From 5397a2e48952f50cd0022f54465783dcfd924426 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 Aug 2021 07:21:21 -0700 Subject: [PATCH 0027/1640] Update Complex Number Multiplication.java --- Medium/Complex Number Multiplication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Medium/Complex Number Multiplication.java b/Medium/Complex Number Multiplication.java index bb24eb73..0eb7dd43 100644 --- a/Medium/Complex Number Multiplication.java +++ b/Medium/Complex Number Multiplication.java @@ -3,7 +3,7 @@ public String complexNumberMultiply(String num1, String num2) { int realPartOne = Integer.parseInt(num1.split("\\+")[0]); int imaginaryPartOne = Integer.parseInt(num1.split("\\+")[1].substring(0, num1.split("\\+")[1].length() - 1)); int realPartTwo = Integer.parseInt(num2.split("\\+")[0]); - int imaginaryPartTwo = Integer.parseInt(num2.split("\\+")[1].substring(0, num2.split("\\+")[1].length() - 1)); + int imaginaryPartTwo = Integer.parseInt(num2.split("\\+")[1].substring(0, num2.split("\\+")[1].length() - 1)); return (realPartOne * realPartTwo - imaginaryPartOne * imaginaryPartTwo) + "+" + (realPartOne * imaginaryPartTwo + realPartTwo * imaginaryPartOne) + "i"; } } From 5468fa22071388af705c3fdc488b55980b1cbf88 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 Aug 2021 20:31:54 -0700 Subject: [PATCH 0028/1640] Create Find Greatest Common Divisor of Array.java --- Easy/Find Greatest Common Divisor of Array.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Find Greatest Common Divisor of Array.java diff --git a/Easy/Find Greatest Common Divisor of Array.java b/Easy/Find Greatest Common Divisor of Array.java new file mode 100644 index 00000000..9e41f8fc --- /dev/null +++ b/Easy/Find Greatest Common Divisor of Array.java @@ -0,0 +1,9 @@ +import java.math.BigInteger; + + +class Solution { + public int findGCD(int[] nums) { + return BigInteger.valueOf(Arrays.stream(nums).max().orElse(1)) + .gcd(BigInteger.valueOf(Arrays.stream(nums).min().orElse(1))).intValue(); + } +} From 869df5ca31375028c60b4b51c0e423b0a53076e4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 25 Aug 2021 07:24:29 -0700 Subject: [PATCH 0029/1640] Update and rename Sum of square numbers.java to Sum of Square Numbers.java --- Easy/Sum of Square Numbers.java | 17 +++++++++++++++++ Easy/Sum of square numbers.java | 20 -------------------- 2 files changed, 17 insertions(+), 20 deletions(-) create mode 100644 Easy/Sum of Square Numbers.java delete mode 100644 Easy/Sum of square numbers.java diff --git a/Easy/Sum of Square Numbers.java b/Easy/Sum of Square Numbers.java new file mode 100644 index 00000000..61e26dde --- /dev/null +++ b/Easy/Sum of Square Numbers.java @@ -0,0 +1,17 @@ +class Solution { + public boolean judgeSquareSum(int c) { + int left = 0; + int right = (int) Math.sqrt(c); + while (left <= right) { + int currSquareSum = left * left + right * right; + if (currSquareSum < c) { + left++; + } else if (currSquareSum > c) { + right--; + } else { + return true; + } + } + return false; + } +} diff --git a/Easy/Sum of square numbers.java b/Easy/Sum of square numbers.java deleted file mode 100644 index cd8e6598..00000000 --- a/Easy/Sum of square numbers.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public boolean judgeSquareSum(int c) { - int a = 0; - int b = (int)Math.sqrt(c); - - while (a <= b) { - int temp = a*a + b*b; - if (temp < c) { - a++; - } - else if (temp > c) { - b--; - } - else { - return true; - } - } - return false; - } -} From 8bd75fd857f3514686f93a413e1eadda32089472 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 Aug 2021 07:38:21 -0700 Subject: [PATCH 0030/1640] Update Verify Preorder Serialization of a Binary Tree.java --- ...eorder Serialization of a Binary Tree.java | 33 +++++++------------ 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/Medium/Verify Preorder Serialization of a Binary Tree.java b/Medium/Verify Preorder Serialization of a Binary Tree.java index 3e1b5151..db43f945 100644 --- a/Medium/Verify Preorder Serialization of a Binary Tree.java +++ b/Medium/Verify Preorder Serialization of a Binary Tree.java @@ -1,24 +1,15 @@ class Solution { - public boolean isValidSerialization(String preorder) { - Stack stack = new Stack<>(); - String[] array = preorder.split(","); - - for (String node : array) { - if (node.equals("#")) { - while (!stack.isEmpty() && stack.peek().equals("#")) { - stack.pop(); - if (stack.isEmpty()) { - return false; - } - stack.pop(); - } - stack.push(node); - } - else { - stack.push(node); - } - } - - return stack.size() == 1 && stack.peek().equals("#"); + public boolean isValidSerialization(String preorder) { + String[] nodes = preorder.split(","); + int diff = 1; + for (String node : nodes) { + if (--diff < 0) { + return false; + } + if (!node.equals("#")) { + diff += 2; + } } + return diff == 0; + } } From 3cd74fda27a987c5eb032d0da9e903d4d116686e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 29 Aug 2021 10:50:12 -0700 Subject: [PATCH 0031/1640] Create Minimum Difference Between Highest and Lowest of K Scores.java --- ...rence Between Highest and Lowest of K Scores.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/Minimum Difference Between Highest and Lowest of K Scores.java diff --git a/Easy/Minimum Difference Between Highest and Lowest of K Scores.java b/Easy/Minimum Difference Between Highest and Lowest of K Scores.java new file mode 100644 index 00000000..e9b93530 --- /dev/null +++ b/Easy/Minimum Difference Between Highest and Lowest of K Scores.java @@ -0,0 +1,12 @@ +class Solution { + public int minimumDifference(int[] nums, int k) { + Arrays.sort(nums); + int left = 0; + int right = k - 1; + int minDiff = Integer.MAX_VALUE; + while (right < nums.length) { + minDiff = Math.min(minDiff, nums[right++] - nums[left++]); + } + return minDiff; + } +} From 957411d52ec06b74367989ca7edc29ca82aa48b5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 29 Aug 2021 20:22:39 -0700 Subject: [PATCH 0032/1640] Create Find the Kth Largest Integer in the Array.java --- Medium/Find the Kth Largest Integer in the Array.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Medium/Find the Kth Largest Integer in the Array.java diff --git a/Medium/Find the Kth Largest Integer in the Array.java b/Medium/Find the Kth Largest Integer in the Array.java new file mode 100644 index 00000000..cc335042 --- /dev/null +++ b/Medium/Find the Kth Largest Integer in the Array.java @@ -0,0 +1,7 @@ +class Solution { + public String kthLargestNumber(String[] nums, int k) { + Arrays.sort(nums, (o1, o2) -> + o1.length() == o2.length() ? o1.compareTo(o2) : o1.length() - o2.length()); + return nums[nums.length - k]; + } +} From 453d8f8e4cc2b27eafc6736203d437b7e5c0f838 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 29 Aug 2021 20:27:05 -0700 Subject: [PATCH 0033/1640] Moving files & updating README --- ...if Word Equals Summation of Two Words.java | 0 Easy/README.md | 732 +++++++++------ Hard/Longest Consecutive Sequence.java | 27 - Hard/README.md | 118 +-- .../Longest Consecutive Sequence.java | 0 Medium/README.md | 876 +++++++++++------- 6 files changed, 1058 insertions(+), 695 deletions(-) rename Check if Word Equals Summation of Two Words.java => Easy/Check if Word Equals Summation of Two Words.java (100%) delete mode 100644 Hard/Longest Consecutive Sequence.java rename Longest Consecutive Sequence Solution.java => Medium/Longest Consecutive Sequence.java (100%) diff --git a/Check if Word Equals Summation of Two Words.java b/Easy/Check if Word Equals Summation of Two Words.java similarity index 100% rename from Check if Word Equals Summation of Two Words.java rename to Easy/Check if Word Equals Summation of Two Words.java diff --git a/Easy/README.md b/Easy/README.md index b9713c84..423b1cfa 100644 --- a/Easy/README.md +++ b/Easy/README.md @@ -1,284 +1,454 @@ # Easy LeetCode-Java-Solutions S.no | Coding Problem --- | --- -1|[Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) -2|[Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) -3|[Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) -4|[Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) -5|[Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) -6|[Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) -7|[Assign Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Assign%20Cookies.java) -8|[Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) -9|[Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20and%20Say.java) -10|[Arranging Coins](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Arranging%20Coins.java) -11|[Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) -12|[Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) -13|[Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) -14|[Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) -15|[1-bit and 2-bit Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/1-bit%20and%202-bit%20Characters.java) -16|[Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) -17|[Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) -18|[Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) -19|[Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) -20|[Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Area%20of%20Island.java) -21|[Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) -22|[Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance%20III.java) -23|[String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Compression.java) -24|[trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) -25|[Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) -26|[Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) -27|[Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) -28|[Delete node in a linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20node%20in%20a%20linked%20list.java) -29|[Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) -30|[Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) -31|[Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) -32|[Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) -33|[Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) -34|[Sum of left leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20left%20leaves.java) -35|[Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) -36|[Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) -37|[Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) -38|[Available Captures for Rook](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Available%20Captures%20for%20Rook.java) -39|[Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) -40|[Add to Array-Form of Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20to%20Array-Form%20of%20Integer.java) -41|[Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) -42|[Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) -43|[Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) -44|[Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) -45|[Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) -46|[Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) -47|[Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) -48|[Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) -49|[Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) -50|[sum_of_two_integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/sum_of_two_integers.java) -51|[Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) -52|[Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) -53|[Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) -54|[Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) -55|[Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) -56|[Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) -57|[Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) -58|[Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) -59|[Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) -60|[Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) -61|[Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray.java) -62|[contains_duplicates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/contains_duplicates.java) -63|[Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) -64|[Valid Parantheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parantheses.java) -65|[remove_duplicates_sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/remove_duplicates_sorted.java) -66|[Sum of square numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20square%20numbers.java) -67|[add_digit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/add_digit.java) -68|[Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) -69|[Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) -70|[Binary Number with Alternating Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Number%20with%20Alternating%20Bits.java) -71|[Power of three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20three.java) -72|[Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) -73|[Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) -74|[Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) -75|[Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) -76|[Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) -77|[Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) -78|[Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) -79|[Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) -80|[Backspace String Compare](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Backspace%20String%20Compare.java) -81|[Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) -82|[Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) -83|[Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum%20III.java) -84|[Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) -85|[Binary Prefix Divisible By 5](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Prefix%20Divisible%20By%205.java) -86|[Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) -87|[Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) -88|[Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) -89|[Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) -90|[ugly_number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/ugly_number.java) -91|[Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) -92|[Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) -93|[Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) -94|[SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) -95|[Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) -96|[Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) -97|[Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Trim%20a%20Binary%20Search%20Tree.java) -98|[First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) -99|[Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) -100|[Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) -101|[Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance%20II.java) -102|[Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) -103|[Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) -104|[Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) -105|[Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) -106|[N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Level%20Order%20Traversal.java) -107|[Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) -108|[Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) -109|[Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Anagrams%20in%20a%20String.java) -110|[Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) -111|[Binary Tree Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Paths.java) -112|[Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20Array.java) -113|[Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) -114|[Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) -115|[majority_element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/majority_element.java) -116|[Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) -117|[power_of_2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/power_of_2.java) -118|[Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) -119|[Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) -120|[Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) -121|[Convert BST to greater tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20greater%20tree.java) -122|[valid_anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/valid_anagrams.java) -123|[License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) -124|[Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) -125|[Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) -126|[first_unique_character_in_a_string](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/first_unique_character_in_a_string.java) -127|[Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) -128|[Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) -129|[Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subdomain%20Visit%20Count.java) -130|[Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) -131|[Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) -132|[FizzBuzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/FizzBuzz.java) -133|[Buddy Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Buddy%20Strings.java) -134|[Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) -135|[Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) -136|[Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) -137|[Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) -138|[Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) -139|[Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) -140|[Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) -141|[Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) -142|[Balanced Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Balanced%20Binary%20Tree.java) -143|[How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) -144|[String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) -145|[Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) -146|[Baseball Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Baseball%20Game.java) -147|[range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) -148|[Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) -149|[Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) -150|[Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) -151|[N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) -152|[Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) -153|[N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) -154|[Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) -155|[Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) -156|[Binary Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Search.java) -157|[Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) -158|[Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) -159|[Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotting%20Oranges.java) -160|[Armstrong Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Armstrong%20Number.java) -161|[Best time to buy & sell a stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20time%20to%20buy%20&%20sell%20a%20stock%20II.java) -162|[Base 7](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Base%207.java) -163|[Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) -164|[Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) -165|[Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) -166|[Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) -167|[Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) -168|[Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) -169|[Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) -170|[Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) -171|[Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) -172|[Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) -173|[Two Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20II.java) -174|[Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) -175|[Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) -176|[Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) -177|[Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) -178|[Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) -179|[Merge Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Arrays.java) -180|[N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) -181|[Intersection of two arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20arrays%20II.java) -182|[Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20City%20Scheduling.java) -183|[High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) -184|[Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) -185|[Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) -186|[Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) -187|[Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) -188|[To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) -189|[Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) -190|[Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) -191|[Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) -192|[Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) -193|[Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) -194|[Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) -195|[Add Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Strings.java) -196|[Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Integer.java) -197|[Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) -198|[Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotated%20Digits.java) -199|[Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) -200|[Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) -201|[Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) -202|[Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) -203|[Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) -204|[Maximum Product of three numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20three%20numbers.java) -205|[Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) -206|[Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) -207|[Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) -208|[Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) -209|[Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) -210|[Binary Tree Level Order Traversal II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Level%20Order%20Traversal%20II.java) -211|[Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) -212|[Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Stack.java) -213|[Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) -214|[Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Unsorted%20Continuous%20Subarray.java) -215|[Missing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Numbers.java) -216|[Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) -217|[Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) -218|[Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Stack.java) -219|[Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) -220|[Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) -221|[Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) -222|[Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) -223|[Average of levels in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20of%20levels%20in%20a%20binary%20tree.java) -224|[Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) -225|[Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) -226|[Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) -227|[Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) -228|[Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) -229|[Valid Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbrevation.java) -230|[Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) -231|[Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) -232|[Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bold%20Words%20in%20String.java) -233|[nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) -234|[Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) -235|[Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Non-decreasing%20Array.java) -236|[remove_element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/remove_element.java) -237|[Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) -238|[Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) -239|[Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Even%20Numbers%20After%20Queries.java) -240|[Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) -241|[Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) -242|[intersection_of_two_arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/intersection_of_two_arrays.java) -243|[move_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/move_zeroes.java) -244|[Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) -245|[Binary Gap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Gap.java) -246|[Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) -247|[House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/House%20Robber.java) -248|[Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Distance%20to%20Closest%20Person.java) -249|[Power of four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20four.java) -250|[Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) -251|[Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) -252|[Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) -253|[Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) -254|[Add Binary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Binary.java) -255|[Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) -256|[Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) -257|[K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K%20Closest%20Points%20to%20Origin.java) -258|[Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) -259|[Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) -260|[N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) -261|[Fibonacci Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Numbers.java) -262|[Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) -263|[Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) -264|[Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) -265|[Best time to buy & sell a stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20time%20to%20buy%20&%20sell%20a%20stock.java) -266|[Invert a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20a%20binary%20tree.java) -267|[Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) -268|[Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) -269|[Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) -270|[K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) -271|[Range Sum Query_Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query_Immutable.java) -272|[Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) -273|[Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) -274|[Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) -275|[Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) -276|[Binary Tree Tilt](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Tilt.java) -277|[Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) -278|[Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) -279|[Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) -280|[Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) -281|[Array Partition I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Partition%20I.java) +1|[Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) +2|[Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) +3|[High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) +4|[Binary Tree Tilt](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Tilt.java) +5|[Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Stack.java) +6|[Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) +7|[Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) +8|[Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) +9|[Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) +10|[Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) +11|[Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) +12|[Check If String Is a Prefix of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20String%20Is%20a%20Prefix%20of%20Array.java) +13|[The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) +14|[Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) +15|[Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) +16|[Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) +17|[Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) +18|[Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) +19|[Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) +20|[Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bold%20Words%20in%20String.java) +21|[Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) +22|[Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) +23|[Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) +24|[Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) +25|[Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) +26|[Binary Number with Alternating Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Number%20with%20Alternating%20Bits.java) +27|[Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) +28|[Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) +29|[Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) +30|[Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) +31|[Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) +32|[X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) +33|[Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Integer.java) +34|[Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) +35|[Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) +36|[Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) +37|[Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) +38|[Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) +39|[Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) +40|[Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) +41|[Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) +42|[Check If N and Its Double Exist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20N%20and%20Its%20Double%20Exist.java) +43|[Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) +44|[Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) +45|[Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Non-decreasing%20Array.java) +46|[Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) +47|[Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) +48|[Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) +49|[Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) +50|[Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) +51|[Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) +52|[Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) +53|[Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) +54|[Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) +55|[Power of four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20four.java) +56|[Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) +57|[Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) +58|[Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) +59|[Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) +60|[Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) +61|[Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) +62|[Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) +63|[Check if Binary String Has at Most One Segment of Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Binary%20String%20Has%20at%20Most%20One%20Segment%20of%20Ones.java) +64|[Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) +65|[Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) +66|[Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) +67|[Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) +68|[Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) +69|[1-bit and 2-bit Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/1-bit%20and%202-bit%20Characters.java) +70|[Binary Gap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Gap.java) +71|[Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) +72|[Binary Tree Level Order Traversal II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Level%20Order%20Traversal%20II.java) +73|[Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) +74|[Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) +75|[Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) +76|[Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) +77|[Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) +78|[Check if All the Integers in a Range Are Covered](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered.java) +79|[Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) +80|[Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) +81|[Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) +82|[Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) +83|[Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) +84|[Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) +85|[Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) +86|[Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) +87|[Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) +88|[Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) +89|[Assign Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Assign%20Cookies.java) +90|[Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) +91|[Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) +92|[Buddy Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Buddy%20Strings.java) +93|[Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) +94|[Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) +95|[Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) +96|[Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) +97|[Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) +98|[Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) +99|[Consecutive Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Consecutive%20Characters.java) +100|[Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) +101|[Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) +102|[Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20and%20Say.java) +103|[Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) +104|[Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) +105|[Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) +106|[Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) +107|[Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) +108|[Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) +109|[DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) +110|[Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) +111|[Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) +112|[Backspace String Compare](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Backspace%20String%20Compare.java) +113|[Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) +114|[Baseball Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Baseball%20Game.java) +115|[Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) +116|[Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) +117|[Maximum Product of three numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20three%20numbers.java) +118|[Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) +119|[Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) +120|[Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) +121|[Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) +122|[Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) +123|[Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) +124|[Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) +125|[Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) +126|[Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) +127|[Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) +128|[Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) +129|[Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) +130|[Check if Array Is Sorted and Rotated](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20Is%20Sorted%20and%20Rotated.java) +131|[Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) +132|[Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) +133|[Can Make Arithmetic Progression From Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Make%20Arithmetic%20Progression%20From%20Sequence.java) +134|[Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) +135|[Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) +136|[Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) +137|[Binary Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Search.java) +138|[K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) +139|[Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) +140|[Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) +141|[Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) +142|[Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) +143|[Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reorder%20Data%20in%20Log%20Files.java) +144|[Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) +145|[trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) +146|[Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) +147|[License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) +148|[Balanced Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Balanced%20Binary%20Tree.java) +149|[Check If It Is a Straight Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20It%20Is%20a%20Straight%20Line.java) +150|[Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Area%20of%20Island.java) +151|[Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) +152|[Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) +153|[String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) +154|[Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) +155|[Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) +156|[Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) +157|[Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) +158|[Binary Prefix Divisible By 5](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Prefix%20Divisible%20By%205.java) +159|[Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) +160|[Count Negative Numbers in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Negative%20Numbers%20in%20a%20Sorted%20Matrix.java) +161|[Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) +162|[Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) +163|[Check if All Characters Have Equal Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20Characters%20Have%20Equal%20Number%20of%20Occurrences.java) +164|[Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) +165|[Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) +166|[Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotated%20Digits.java) +167|[Count Good Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Good%20Triplets.java) +168|[Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) +169|[Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) +170|[Arranging Coins](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Arranging%20Coins.java) +171|[Check if Word Equals Summation of Two Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Word%20Equals%20Summation%20of%20Two%20Words.java) +172|[House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/House%20Robber.java) +173|[Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) +174|[Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) +175|[Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) +176|[Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) +177|[Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) +178|[Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) +179|[Base 7](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Base%207.java) +180|[Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) +181|[SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) +182|[Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) +183|[Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) +184|[Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) +185|[Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) +186|[Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) +187|[Two Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20II.java) +188|[Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) +189|[Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) +190|[Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) +191|[Sum of left leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20left%20leaves.java) +192|[Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) +193|[Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) +194|[Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) +195|[Build an Array With Stack Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20an%20Array%20With%20Stack%20Operations.java) +196|[Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) +197|[Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) +198|[K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K%20Closest%20Points%20to%20Origin.java) +199|[Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Time%20for%20Given%20Digits.java) +200|[range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) +201|[Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) +202|[Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) +203|[To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) +204|[Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) +205|[Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) +206|[Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) +207|[Count Items Matching a Rule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Items%20Matching%20a%20Rule.java) +208|[Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) +209|[Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) +210|[Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) +211|[Binary Tree Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Paths.java) +212|[Valid Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbrevation.java) +213|[Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) +214|[Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) +215|[Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) +216|[Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Anagrams%20in%20a%20String.java) +217|[Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) +218|[Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) +219|[Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) +220|[Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) +221|[Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) +222|[How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) +223|[Armstrong Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Armstrong%20Number.java) +224|[Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) +225|[Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) +226|[Cells with Odd Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20with%20Odd%20Values%20in%20a%20Matrix.java) +227|[Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) +228|[Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) +229|[Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Stack.java) +230|[Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) +231|[Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) +232|[N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) +233|[Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) +234|[Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) +235|[Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) +236|[Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) +237|[Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) +238|[Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) +239|[Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) +240|[Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) +241|[Check if One String Swap Can Make Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20One%20String%20Swap%20Can%20Make%20Strings%20Equal.java) +242|[Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) +243|[Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) +244|[Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) +245|[N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Level%20Order%20Traversal.java) +246|[Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) +247|[First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) +248|[Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) +249|[Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) +250|[Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) +251|[Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) +252|[Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subdomain%20Visit%20Count.java) +253|[Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) +254|[Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) +255|[Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) +256|[Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) +257|[Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) +258|[Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) +259|[Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) +260|[Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) +261|[Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) +262|[Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) +263|[Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) +264|[Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) +265|[Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Even%20Numbers%20After%20Queries.java) +266|[Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) +267|[Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) +268|[Intersection of two arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20arrays%20II.java) +269|[Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) +270|[Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) +271|[Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) +272|[Check if the Sentence Is Pangram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20the%20Sentence%20Is%20Pangram.java) +273|[Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) +274|[Available Captures for Rook](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Available%20Captures%20for%20Rook.java) +275|[Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) +276|[Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) +277|[Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) +278|[Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) +279|[Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) +280|[Check If a Word Occurs As a Prefix of Any Word in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Word%20Occurs%20As%20a%20Prefix%20of%20Any%20Word%20in%20a%20Sentence.java) +281|[Concatenation of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Concatenation%20of%20Array.java) +282|[Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) +283|[Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) +284|[Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) +285|[Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) +286|[Calculate Money in Leetcode Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Money%20in%20Leetcode%20Bank.java) +287|[Check If Two String Arrays are Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20Two%20String%20Arrays%20are%20Equivalent.java) +288|[Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) +289|[Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) +290|[Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) +291|[Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) +292|[Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) +293|[Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) +294|[Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) +295|[Bulls and Cows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bulls%20and%20Cows.java) +296|[Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) +297|[nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) +298|[Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) +299|[Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) +300|[Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) +301|[Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) +302|[Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) +303|[Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) +304|[Convert BST to Greater Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20Greater%20Tree.java) +305|[Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) +306|[Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray.java) +307|[Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) +308|[Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) +309|[Build Array from Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20Array%20from%20Permutation.java) +310|[Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) +311|[Best time to buy & sell a stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20time%20to%20buy%20&%20sell%20a%20stock%20II.java) +312|[Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) +313|[Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) +314|[Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) +315|[Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) +316|[Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) +317|[Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) +318|[Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) +319|[Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) +320|[Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) +321|[N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) +322|[Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) +323|[Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) +324|[Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) +325|[Add Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Strings.java) +326|[Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) +327|[Best Time to Buy and Sell Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Time%20to%20Buy%20and%20Sell%20Stock.java) +328|[String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Compression.java) +329|[Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) +330|[Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) +331|[Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) +332|[Leaf Similar Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf%20Similar%20Tree.java) +333|[Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) +334|[Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) +335|[Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) +336|[Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) +337|[Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) +338|[Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) +339|[Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) +340|[Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) +341|[Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) +342|[Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) +343|[Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) +344|[Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) +345|[Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) +346|[N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) +347|[Delete node in a linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20node%20in%20a%20linked%20list.java) +348|[Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) +349|[Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) +350|[Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) +351|[Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) +352|[Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) +353|[Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) +354|[Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) +355|[Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) +356|[Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) +357|[Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) +358|[Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) +359|[Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) +360|[Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) +361|[Array Partition I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Partition%20I.java) +362|[Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) +363|[Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) +364|[Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) +365|[Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) +366|[Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) +367|[Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) +368|[Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) +369|[Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) +370|[Count Largest Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Largest%20Group.java) +371|[Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) +372|[Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) +373|[Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) +374|[Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) +375|[Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) +376|[Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) +377|[Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) +378|[Add Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Digits.java) +379|[Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) +380|[Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20City%20Scheduling.java) +381|[Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) +382|[contains_duplicates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/contains_duplicates.java) +383|[Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) +384|[Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) +385|[Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) +386|[Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) +387|[Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) +388|[Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum%20III.java) +389|[Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) +390|[Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) +391|[Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) +392|[Average Salary Excluding the Minimum and Maximum Salary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Salary%20Excluding%20the%20Minimum%20and%20Maximum%20Salary.java) +393|[Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) +394|[Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) +395|[Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) +396|[Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) +397|[Count Square Sum Triples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Square%20Sum%20Triples.java) +398|[Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) +399|[Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) +400|[Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) +401|[Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) +402|[Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) +403|[Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) +404|[Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) +405|[Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) +406|[Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) +407|[Add Binary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Binary.java) +408|[Convert Binary Number in a Linked List to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Binary%20Number%20in%20a%20Linked%20List%20to%20Integer.java) +409|[Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) +410|[Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) +411|[Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) +412|[Check Array Formation Through Concatenation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Array%20Formation%20Through%20Concatenation.java) +413|[Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) +414|[Add to Array-Form of Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20to%20Array-Form%20of%20Integer.java) +415|[Fibonacci Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Numbers.java) +416|[Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) +417|[Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) +418|[Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) +419|[N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) +420|[Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) +421|[Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) +422|[Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) +423|[Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) +424|[How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) +425|[Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) +426|[Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) +427|[Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) +428|[Count Odd Numbers in an Interval Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Odd%20Numbers%20in%20an%20Interval%20Range.java) +429|[String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) +430|[Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) +431|[Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Unsorted%20Continuous%20Subarray.java) +432|[Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) +433|[Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) +434|[Array Transformation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Transformation.java) +435|[Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) +436|[Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) +437|[Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) +438|[First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) +439|[Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) +440|[sum_of_two_integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/sum_of_two_integers.java) +441|[Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) +442|[Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) +443|[Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) +444|[Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) +445|[Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) +446|[Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) +447|[Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) +448|[Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) +449|[Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) +450|[Average of Levels in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20of%20Levels%20in%20Binary%20Tree.java) +451|[Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) diff --git a/Hard/Longest Consecutive Sequence.java b/Hard/Longest Consecutive Sequence.java deleted file mode 100644 index 9ba20263..00000000 --- a/Hard/Longest Consecutive Sequence.java +++ /dev/null @@ -1,27 +0,0 @@ -class Solution { - public int longestConsecutive(int[] nums) { - Set set = new HashSet<>(); - for (int num : nums) { - set.add(num); - } - - int maxLen = 0; - Iterator iterator = set.iterator(); - while (iterator.hasNext()) { - int num = iterator.next(); - if (!set.contains(num - 1)) { - int current = num; - int currLen = 1; - - while (set.contains(current + 1)) { - current += 1; - currLen++; - } - - maxLen = Math.max(maxLen, currLen); - } - } - - return maxLen; - } -} diff --git a/Hard/README.md b/Hard/README.md index 3bf228e4..06ab9137 100644 --- a/Hard/README.md +++ b/Hard/README.md @@ -1,57 +1,69 @@ # Hard LeetCode-Java-Solutions S.no | Coding Problem --- | --- -1|[Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) -2|[Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) -3|[Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) -4|[Binary Tree PostOrder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20PostOrder%20Traversal.java) -5|[Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) -6|[Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) -7|[Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parallel%20Courses.java) -8|[LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) -9|[Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) -10|[Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) -11|[Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) -12|[Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) -13|[Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) -14|[Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Consecutive%20Sequence.java) -15|[Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) -16|[Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) -17|[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Hard.md) -18|[Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) -19|[Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) -20|[Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) -21|[Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) -22|[K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) -23|[Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) -24|[Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) -25|[LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LRU%20Cache.java) -26|[Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) -27|[Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) -28|[N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) -29|[Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) -30|[Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) -31|[Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) -32|[Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) -33|[Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) -34|[Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) -35|[Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) -36|[Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) -37|[Find Median From Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20From%20Data%20Stream.java) -38|[Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) -39|[First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) -40|[Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) -41|[Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) -42|[Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) -43|[Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) +1|[Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) +2|[Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) +3|[First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) +4|[Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) +5|[Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) +6|[Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) +7|[Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) +8|[Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) +9|[Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) +10|[Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) +11|[Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Interval.java) +12|[Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) +13|[Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) +14|[Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) +15|[Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) +16|[Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) +17|[Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) +18|[Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parallel%20Courses.java) +19|[LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) +20|[Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) +21|[K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) +22|[Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) +23|[N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) +24|[Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) +25|[Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) +26|[Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) +27|[Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) +28|[Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) +29|[Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) +30|[Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) +31|[Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) +32|[Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) +33|[Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) +34|[Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) +35|[LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LRU%20Cache.java) +36|[Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) +37|[Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) +38|[Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) +39|[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Hard.md) +40|[Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) +41|[Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) +42|[Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) +43|[Find Median From Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20From%20Data%20Stream.java) 44|[Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) -45|[Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) -46|[Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) -47|[Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) -48|[Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Interleaving%20String.java) -49|[Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) -50|[Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) -51|[Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) -52|[Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) -53|[Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) -54|[Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) +45|[Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) +46|[Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) +47|[Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) +48|[Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) +49|[Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) +50|[Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) +51|[Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Interleaving%20String.java) +52|[Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) +53|[Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) +54|[Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) +55|[Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) +56|[Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) +57|[Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) +58|[Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) +59|[Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) +60|[Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) +61|[Binary Tree PostOrder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20PostOrder%20Traversal.java) +62|[Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) +63|[Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) +64|[Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) +65|[Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) +66|[Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) diff --git a/Longest Consecutive Sequence Solution.java b/Medium/Longest Consecutive Sequence.java similarity index 100% rename from Longest Consecutive Sequence Solution.java rename to Medium/Longest Consecutive Sequence.java diff --git a/Medium/README.md b/Medium/README.md index 3907727e..549b4e57 100644 --- a/Medium/README.md +++ b/Medium/README.md @@ -1,337 +1,545 @@ # Medium LeetCode-Java-Solutions S.no | Coding Problem --- | --- -1|[Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) -2|[Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) -3|[Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) -4|[Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) -5|[Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) -6|[Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) -7|[Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) -8|[Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) -9|[Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) -10|[Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) -11|[Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) -12|[Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) -13|[Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) -14|[Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) -15|[Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) -16|[Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) -17|[Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) -18|[Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) -19|[Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) -20|[Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) -21|[Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) -22|[Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) -23|[Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) -24|[Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) -25|[Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) -26|[Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) -27|[Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) -28|[Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) -29|[Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) -30|[Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) -31|[Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) -32|[Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) -33|[Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) -34|[Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) -35|[Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) -36|[Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) -37|[Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) -38|[Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) -39|[Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) -40|[Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) -41|[Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) -42|[Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) -43|[Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) -44|[Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) -45|[Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) -46|[Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) -47|[Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) -48|[Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) -49|[Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) -50|[Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) -51|[Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) -52|[Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) -53|[Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) -54|[Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Counting%20Bits.java) -55|[Split Linked List into Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20into%20Parts.java) -56|[Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) -57|[Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) -58|[Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) -59|[Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) -60|[Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) -61|[Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) -62|[Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) -63|[Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) -64|[Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) -65|[Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) -66|[Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) -67|[Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) -68|[Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) -69|[Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) -70|[Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Itinerary.java) -71|[Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) -72|[Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) -73|[Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) -74|[Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) -75|[Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) -76|[Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) -77|[Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Subsequence.java) -78|[Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) -79|[Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) -80|[Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) -81|[Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) -82|[Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) -83|[Add and Search Word - Data structure design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20and%20Search%20Word%20-%20Data%20structure%20design.java) -84|[Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) -85|[Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) -86|[Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) -87|[Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) -88|[Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) -89|[Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) -90|[01 Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/01%20Matrix.java) -91|[As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) -92|[Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) -93|[Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) -94|[Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) -95|[Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) -96|[Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) -97|[Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) -98|[Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) -99|[Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) -100|[Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) -101|[Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) -102|[Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) -103|[All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) -104|[Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) -105|[Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) -106|[Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) -107|[Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) -108|[Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) -109|[Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) -110|[Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) -111|[Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) -112|[Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) -113|[Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) -114|[Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) -115|[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Medium.md) -116|[Binary Tree Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Inorder%20Traversal.java) -117|[Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) -118|[Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) -119|[Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) -120|[H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) -121|[Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) -122|[Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) -123|[Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) -124|[Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) -125|[Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) -126|[Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) -127|[Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) -128|[Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) -129|[Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) -130|[Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) -131|[Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) -132|[Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) -133|[Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) -134|[Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) -135|[Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) -136|[Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) -137|[Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) -138|[Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) -139|[Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) -140|[Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) -141|[Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) -142|[Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) -143|[My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) -144|[Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) -145|[Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) -146|[Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) -147|[Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) -148|[Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) -149|[Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) -150|[Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) -151|[Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) -152|[Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) -153|[Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) -154|[Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) -155|[Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) -156|[Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) -157|[Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) -158|[Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) -159|[Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) -160|[Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) -161|[Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) -162|[Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) -163|[Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) -164|[Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) -165|[Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) -166|[Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) -167|[Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) -168|[Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) -169|[H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) -170|[Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) -171|[Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) -172|[Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) -173|[Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) -174|[Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) -175|[Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) -176|[Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) -177|[Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) -178|[Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) -179|[Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) -180|[Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) -181|[Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) -182|[Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) -183|[3Sum Closest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Closest.java) -184|[Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) -185|[Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) -186|[Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) -187|[Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) -188|[Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) -189|[Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) -190|[Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) -191|[Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) -192|[Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) -193|[Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) -194|[Find the duplicate number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20duplicate%20number.java) -195|[Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) -196|[Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) -197|[Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) -198|[Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) -199|[Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) -200|[Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) -201|[Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) -202|[Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) -203|[Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) -204|[Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) -205|[Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) -206|[Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) -207|[Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) -208|[Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) -209|[Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) -210|[Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) -211|[3Sum Smaller](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Smaller.java) -212|[Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) -213|[Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) -214|[Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) -215|[Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) -216|[Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) -217|[Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) -218|[Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) -219|[Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) -220|[Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) -221|[Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) -222|[Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) -223|[Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) -224|[Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) -225|[Bulls and Cows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulls%20and%20Cows.java) -226|[Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) -227|[Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) -228|[Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) -229|[4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) -230|[Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Ranges.java) -231|[Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) -232|[Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) -233|[Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) -234|[Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) -235|[Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) -236|[Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) -237|[Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) -238|[All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) -239|[Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) -240|[Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) -241|[Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) -242|[Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) -243|[Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) -244|[Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) -245|[Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) -246|[Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) -247|[Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) -248|[Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) -249|[Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) -250|[Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) -251|[Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) -252|[Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) -253|[Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) -254|[Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) -255|[Vertical Order Traversal Of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vertical%20Order%20Traversal%20Of%20Binary%20Tree.java) -256|[Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) -257|[Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) -258|[Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Overlap.java) -259|[Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) -260|[Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) -261|[Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) -262|[The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) -263|[Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) -264|[Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) -265|[Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) -266|[Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) -267|[Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) -268|[Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) -269|[Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) -270|[Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) -271|[Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) -272|[Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) -273|[Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) -274|[Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) -275|[Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) -276|[Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) -277|[Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) -278|[Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) -279|[Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) -280|[Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) -281|[Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) -282|[Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) -283|[3Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum.java) -284|[Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) -285|[Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) -286|[String to Integer(atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer(atoi).java) -287|[All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) -288|[Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) -289|[Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) -290|[Swap Nodes in Pair](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pair.java) -291|[Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) -292|[Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Teemo%20Attacking.java) -293|[Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) -294|[Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) -295|[Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) -296|[Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) -297|[Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) -298|[Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) -299|[Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) -300|[Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) -301|[Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) -302|[4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) -303|[Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) -304|[Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) -305|[RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) -306|[Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) -307|[Find Largest Value in Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Tree%20Row.java) -308|[Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) -309|[Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) -310|[Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) -311|[Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) -312|[Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) -313|[Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Summary%20Ranges.java) -314|[Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) -315|[Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) -316|[Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) -317|[ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) -318|[Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) -319|[Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) -320|[Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) -321|[Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) -322|[Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) -323|[Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) -324|[Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) -325|[Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) -326|[My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) -327|[Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) -328|[Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) -329|[Reverse Nodes in k-group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20k-group.java) -330|[One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) -331|[Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) -332|[Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/Open%20The%20Lock.java) -333|[Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/Target%20Sum.java) - +1|[Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) +2|[Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Ranges.java) +3|[First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) +4|[Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) +5|[Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) +6|[3Sum Closest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Closest.java) +7|[Binary Tree Zigzag Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Zigzag%20Level%20Order%20Traversal.java) +8|[House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) +9|[Campus Bikes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes.java) +10|[Arithmetic Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Subarrays.java) +11|[Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) +12|[Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) +13|[Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Itinerary.java) +14|[Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) +15|[Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) +16|[Champagne Tower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Champagne%20Tower.java) +17|[Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) +18|[Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) +19|[Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) +20|[Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) +21|[The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) +22|[Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) +23|[Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) +24|[Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) +25|[Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) +26|[Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) +27|[Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) +28|[Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) +29|[Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) +30|[Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Overlap.java) +31|[Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) +32|[Capacity To Ship Packages Within D Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Capacity%20To%20Ship%20Packages%20Within%20D%20Days.java) +33|[Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) +34|[Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) +35|[Find Smallest Common Element in All Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Smallest%20Common%20Element%20in%20All%20Rows.java) +36|[Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) +37|[Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) +38|[Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) +39|[Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) +40|[Count Number of Homogenous Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Homogenous%20Substrings.java) +41|[Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) +42|[Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) +43|[Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) +44|[Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) +45|[Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) +46|[Find Largest Value in Each Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Each%20Tree%20Row.java) +47|[Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) +48|[Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) +49|[Design a File Sharing System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20File%20Sharing%20System.java) +50|[Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) +51|[Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) +52|[Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) +53|[Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) +54|[Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) +55|[Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) +56|[Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) +57|[Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) +58|[Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) +59|[Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) +60|[Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) +61|[Diameter of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diameter%20of%20N-ary%20Tree.java) +62|[Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) +63|[Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) +64|[Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) +65|[Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) +66|[Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) +67|[Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) +68|[Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) +69|[Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) +70|[Count Number of Teams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Teams.java) +71|[Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) +72|[Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) +73|[Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) +74|[Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) +75|[Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) +76|[As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) +77|[Count Square Submatrices with All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Square%20Submatrices%20with%20All%20Ones.java) +78|[Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) +79|[Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) +80|[Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) +81|[Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) +82|[Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) +83|[Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) +84|[Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) +85|[Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) +86|[Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) +87|[Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) +88|[Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) +89|[Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Town%20Judge.java) +90|[Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) +91|[Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) +92|[Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) +93|[Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) +94|[Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) +95|[Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) +96|[Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) +97|[Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) +98|[Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) +99|[Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) +100|[Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) +101|[Find Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Permutation.java) +102|[Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) +103|[Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) +104|[Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) +105|[Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) +106|[Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) +107|[Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) +108|[Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) +109|[Design Browser History](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Browser%20History.java) +110|[Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) +111|[Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) +112|[Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) +113|[Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) +114|[3Sum Smaller](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Smaller.java) +115|[Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) +116|[Construct K Palindrome Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20K%20Palindrome%20Strings.java) +117|[Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) +118|[Average Waiting Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Average%20Waiting%20Time.java) +119|[Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) +120|[Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) +121|[4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) +122|[Advantage Shuffle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Advantage%20Shuffle.java) +123|[Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) +124|[Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) +125|[Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) +126|[Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) +127|[Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) +128|[Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) +129|[House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) +130|[Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) +131|[Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) +132|[Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) +133|[Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) +134|[Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) +135|[Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) +136|[Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) +137|[Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) +138|[Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) +139|[Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) +140|[Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) +141|[Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) +142|[Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) +143|[Camelcase Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Camelcase%20Matching.java) +144|[Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) +145|[Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) +146|[Count Servers That Communicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Servers%20That%20Communicate.java) +147|[Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) +148|[Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) +149|[Split Linked List into Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20into%20Parts.java) +150|[Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) +151|[Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) +152|[Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) +153|[Adding Two Negabinary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Two%20Negabinary%20Numbers.java) +154|[Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) +155|[Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) +156|[Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) +157|[Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) +158|[Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) +159|[Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) +160|[Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) +161|[Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) +162|[Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) +163|[Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) +164|[Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) +165|[Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) +166|[Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) +167|[Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) +168|[Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) +169|[Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) +170|[Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) +171|[Filter Restaurants by Vegan-Friendly, Price and Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Filter%20Restaurants%20by%20Vegan-Friendly,%20Price%20and%20Distance.java) +172|[Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) +173|[Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) +174|[Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) +175|[Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) +176|[Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) +177|[Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) +178|[Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) +179|[Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) +180|[Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) +181|[Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) +182|[Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) +183|[Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) +184|[Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) +185|[Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) +186|[Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) +187|[Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) +188|[Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) +189|[Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) +190|[Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) +191|[Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) +192|[Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) +193|[Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) +194|[Deepest Leaves Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Deepest%20Leaves%20Sum.java) +195|[Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) +196|[Clone N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20N-ary%20Tree.java) +197|[Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) +198|[Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) +199|[Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) +200|[Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) +201|[Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) +202|[Delete Leaves With a Given Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Leaves%20With%20a%20Given%20Value.java) +203|[Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) +204|[Binary Tree Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Inorder%20Traversal.java) +205|[Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) +206|[Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) +207|[Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) +208|[Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) +209|[Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) +210|[Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) +211|[Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) +212|[4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) +213|[Find Root of N-Ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Root%20of%20N-Ary%20Tree.java) +214|[Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) +215|[Can Make Palindrome from Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Make%20Palindrome%20from%20Substring.java) +216|[Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) +217|[Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) +218|[Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) +219|[Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) +220|[Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) +221|[Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) +222|[Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Subsequence.java) +223|[Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) +224|[Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) +225|[Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) +226|[Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) +227|[Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) +228|[Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) +229|[Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) +230|[All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) +231|[Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) +232|[Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) +233|[Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) +234|[Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) +235|[Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) +236|[Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) +237|[Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) +238|[Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) +239|[Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) +240|[Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) +241|[Apply Discount Every n Orders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20Every%20n%20Orders.java) +242|[All Elements in Two Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Elements%20in%20Two%20Binary%20Search%20Trees.java) +243|[Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) +244|[Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) +245|[Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) +246|[Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) +247|[Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) +248|[Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) +249|[Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) +250|[Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) +251|[Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) +252|[Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) +253|[Angle Between Hands of a Clock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Angle%20Between%20Hands%20of%20a%20Clock.java) +254|[Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) +255|[Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20a%20Corresponding%20Node%20of%20a%20Binary%20Tree%20in%20a%20Clone%20of%20That%20Tree.java) +256|[Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) +257|[Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) +258|[Dot Product of Two Sparse Vectors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dot%20Product%20of%20Two%20Sparse%20Vectors.java) +259|[Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) +260|[HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) +261|[Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Anagrams%20in%20a%20String.java) +262|[Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) +263|[Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) +264|[Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) +265|[Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) +266|[Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) +267|[Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) +268|[Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) +269|[Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) +270|[Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) +271|[Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) +272|[Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) +273|[Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) +274|[Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) +275|[Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) +276|[Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) +277|[Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) +278|[Design A Leaderboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20A%20Leaderboard.java) +279|[Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) +280|[Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) +281|[Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) +282|[The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) +283|[Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) +284|[Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) +285|[Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) +286|[Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) +287|[Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) +288|[Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) +289|[Cinema Seat Allocation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cinema%20Seat%20Allocation.java) +290|[Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) +291|[Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) +292|[Check If All 1's Are at Least Length K Places Away](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20All%201's%20Are%20at%20Least%20Length%20K%20Places%20Away.java) +293|[RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) +294|[Vertical Order Traversal Of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vertical%20Order%20Traversal%20Of%20Binary%20Tree.java) +295|[Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) +296|[Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) +297|[Delete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Tree%20Nodes.java) +298|[Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) +299|[Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Is%20a%20Valid%20Sequence%20from%20Root%20to%20Leaves%20Path%20in%20a%20Binary%20Tree.java) +300|[Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) +301|[Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) +302|[One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) +303|[Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) +304|[Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) +305|[Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) +306|[4Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum%20II.java) +307|[Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) +308|[Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) +309|[Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) +310|[Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) +311|[Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) +312|[Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) +313|[Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) +314|[Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) +315|[Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) +316|[Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) +317|[Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) +318|[Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) +319|[Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) +320|[Find Nearest Right Node in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Nearest%20Right%20Node%20in%20Binary%20Tree.java) +321|[Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) +322|[Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) +323|[Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) +324|[Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) +325|[Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) +326|[Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) +327|[Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) +328|[Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) +329|[Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) +330|[Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) +331|[Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) +332|[Alert Using Same Key-Card Three or More Times in a One Hour Period](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Alert%20Using%20Same%20Key-Card%20Three%20or%20More%20Times%20in%20a%20One%20Hour%20Period.java) +333|[Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) +334|[Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) +335|[Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) +336|[Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) +337|[Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) +338|[Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) +339|[Design a Stack With Increment Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20Stack%20With%20Increment%20Operation.java) +340|[Break a Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Break%20a%20Palindrome.java) +341|[Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) +342|[Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) +343|[Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) +344|[Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) +345|[Add and Search Word - Data structure design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20and%20Search%20Word%20-%20Data%20structure%20design.java) +346|[Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) +347|[Check If a String Can Break Another String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Can%20Break%20Another%20String.java) +348|[Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) +349|[Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) +350|[Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) +351|[Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) +352|[Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) +353|[Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) +354|[Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) +355|[Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) +356|[Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) +357|[Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) +358|[Display Table of Food Orders in a Restaurant](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Display%20Table%20of%20Food%20Orders%20in%20a%20Restaurant.java) +359|[Campus Bikes II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes%20II.java) +360|[Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) +361|[Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) +362|[Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) +363|[Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) +364|[Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) +365|[Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) +366|[Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) +367|[Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) +368|[Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) +369|[Design Underground System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Underground%20System.java) +370|[Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) +371|[Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) +372|[Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) +373|[Check if There is a Valid Path in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20There%20is%20a%20Valid%20Path%20in%20a%20Grid.java) +374|[Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) +375|[Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) +376|[Clone Binary Tree With Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Binary%20Tree%20With%20Random%20Pointer.java) +377|[Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) +378|[Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) +379|[Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) +380|[Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) +381|[Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) +382|[Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) +383|[Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) +384|[Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) +385|[The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) +386|[Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) +387|[Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) +388|[Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) +389|[Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) +390|[Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) +391|[Can Convert String in K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Convert%20String%20in%20K%20Moves.java) +392|[Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) +393|[Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) +394|[Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) +395|[Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) +396|[Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) +397|[Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) +398|[Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) +399|[Count Submatrices With All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Submatrices%20With%20All%20Ones.java) +400|[Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) +401|[Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) +402|[Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) +403|[Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) +404|[Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) +405|[Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) +406|[Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) +407|[My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) +408|[Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) +409|[Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) +410|[Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) +411|[Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Counting%20Bits.java) +412|[Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) +413|[Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) +414|[Find Center of Star Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Center%20of%20Star%20Graph.java) +415|[Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) +416|[Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) +417|[Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) +418|[Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) +419|[Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) +420|[Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) +421|[132 Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/132%20Pattern.java) +422|[Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) +423|[Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) +424|[Find the duplicate number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20duplicate%20number.java) +425|[Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) +426|[Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) +427|[Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) +428|[Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) +429|[Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) +430|[My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) +431|[Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) +432|[Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) +433|[Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) +434|[Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) +435|[Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) +436|[Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) +437|[Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) +438|[Add Minimum Number of Rungs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Minimum%20Number%20of%20Rungs.java) +439|[Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) +440|[Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) +441|[H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) +442|[Best Time to Buy and Sell Stock with Cooldown](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Cooldown.java) +443|[Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) +444|[Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) +445|[Find Elements in a Contaminated Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Elements%20in%20a%20Contaminated%20Binary%20Tree.java) +446|[Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) +447|[Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) +448|[Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) +449|[Determine if Two Strings Are Close](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20Two%20Strings%20Are%20Close.java) +450|[Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) +451|[Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) +452|[The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) +453|[Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) +454|[Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) +455|[Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Teemo%20Attacking.java) +456|[Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) +457|[Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) +458|[Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) +459|[Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) +460|[Binary Tree Coloring Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Coloring%20Game.java) +461|[Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) +462|[Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) +463|[Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) +464|[01 Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/01%20Matrix.java) +465|[Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) +466|[Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) +467|[Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) +468|[Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) +469|[Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) +470|[Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) +471|[Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) +472|[Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) +473|[Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) +474|[Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) +475|[Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) +476|[Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) +477|[String to Integer(atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer(atoi).java) +478|[Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) +479|[Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) +480|[Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) +481|[Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) +482|[Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) +483|[Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) +484|[Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) +485|[Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) +486|[Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) +487|[Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) +488|[Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) +489|[Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) +490|[Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) +491|[Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) +492|[Divide Array in Sets of K Consecutive Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Array%20in%20Sets%20of%20K%20Consecutive%20Numbers.java) +493|[Check Completeness of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20Completeness%20of%20a%20Binary%20Tree.java) +494|[Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) +495|[Count Sorted Vowel Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sorted%20Vowel%20Strings.java) +496|[Check If a String Contains All Binary Codes of Size K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Contains%20All%20Binary%20Codes%20of%20Size%20K.java) +497|[Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) +498|[Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) +499|[Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) +500|[Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) +501|[Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) +502|[ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) +503|[Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) +504|[All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) +505|[Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) +506|[Design Authentication Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Authentication%20Manager.java) +507|[People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) +508|[Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) +509|[All Paths from Source Lead to Destination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20from%20Source%20Lead%20to%20Destination.java) +510|[Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) +511|[Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) +512|[Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) +513|[Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) +514|[All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) +515|[Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) +516|[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Medium.md) +517|[Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) +518|[Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) +519|[Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) +520|[Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) +521|[Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) +522|[Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) +523|[Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) +524|[Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) +525|[Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) +526|[Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) +527|[Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) +528|[H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) +529|[3Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum.java) +530|[Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) +531|[Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) +532|[Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) +533|[Count Good Nodes in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Good%20Nodes%20in%20Binary%20Tree.java) +534|[Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) +535|[Even Odd Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Even%20Odd%20Tree.java) +536|[Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) +537|[Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) +538|[Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) +539|[Construct Binary Search Tree from Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Search%20Tree%20from%20Preorder%20Traversal.java) +540|[Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) +541|[Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) +542|[Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) From 6ce1036a3f74c839a6212219a7e403ce03c5853d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 29 Aug 2021 20:30:14 -0700 Subject: [PATCH 0034/1640] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index cce3209c..b84b9c6d 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,9 @@ ## [Current Leetcode profile: Solved 900+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) + +Problem Category | Count +--- | --- +[Easy](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Easy/README.md) | 452 +[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/README.md) | 543 +[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Hard/README.md) | 67 From 288affdc4f772c41e5a6f7a39b1599a47c2f7729 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 4 Sep 2021 22:20:50 -0700 Subject: [PATCH 0035/1640] Create Count Special Quadruplets.java --- Easy/Count Special Quadruplets.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Count Special Quadruplets.java diff --git a/Easy/Count Special Quadruplets.java b/Easy/Count Special Quadruplets.java new file mode 100644 index 00000000..1c1cdb71 --- /dev/null +++ b/Easy/Count Special Quadruplets.java @@ -0,0 +1,18 @@ +class Solution { + public int countQuadruplets(int[] nums) { + Map map = new HashMap<>(); + int count = 0; + map.put(nums[nums.length - 1], 1); + for (int i = nums.length - 2; i > 1; i--) { + for (int j = i - 1; j > 0; j--) { + for (int k = j - 1; k >= 0; k--) { + if (map.containsKey(nums[i] + nums[j] + nums[k])) { + count += map.get(nums[i] + nums[j] + nums[k]); + } + } + } + map.put(nums[i], map.getOrDefault(nums[i], 0) + 1); + } + return count; + } +} From b8f309455de0fe016507f96dcae2f989005eed0c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Sep 2021 06:23:05 -0700 Subject: [PATCH 0036/1640] Update Slowest Key.java --- Easy/Slowest Key.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Easy/Slowest Key.java b/Easy/Slowest Key.java index 958b8b42..3e583542 100644 --- a/Easy/Slowest Key.java +++ b/Easy/Slowest Key.java @@ -1,19 +1,18 @@ class Solution { public char slowestKey(int[] releaseTimes, String keysPressed) { - int maxReleaseTime = 0; - int maxReleaseTimeIdx = 0; - for (int idx = 0; idx < releaseTimes.length; idx++) { - int currentIdx = keysPressed.charAt(idx) - 'a'; - int currReleaseTime = releaseTimes[idx] - (idx == 0 ? 0 : releaseTimes[idx - 1]); - if (currReleaseTime >= maxReleaseTime) { - if (currReleaseTime > maxReleaseTime) { - maxReleaseTimeIdx = currentIdx; - } else if (currentIdx > maxReleaseTimeIdx) { - maxReleaseTimeIdx = currentIdx; - } - maxReleaseTime = currReleaseTime; + int startTime = 0; + int maxPressedTime = 0; + char keyWithLongestTime = keysPressed.charAt(0); + for (int i = 0; i < releaseTimes.length; i++) { + int totalTime = releaseTimes[i] - startTime; + if (maxPressedTime < totalTime) { + keyWithLongestTime = keysPressed.charAt(i); + maxPressedTime = totalTime; + } else if (maxPressedTime == totalTime && keyWithLongestTime < keysPressed.charAt(i)) { + keyWithLongestTime = keysPressed.charAt(i); } + startTime = releaseTimes[i]; } - return (char) (97 + maxReleaseTimeIdx); + return keyWithLongestTime; } } From 1b0260e72eafc489cdfa8edc51c141e10982314c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Sep 2021 00:12:33 -0700 Subject: [PATCH 0037/1640] Update Reverse Linked List.java --- Easy/Reverse Linked List.java | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Easy/Reverse Linked List.java b/Easy/Reverse Linked List.java index e729c133..61877d65 100644 --- a/Easy/Reverse Linked List.java +++ b/Easy/Reverse Linked List.java @@ -3,22 +3,22 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { - public ListNode reverseList(ListNode head) { - ListNode prev = null; - ListNode curr = head; - ListNode next = null; - - while (curr != null) { - next = curr.next; - curr.next = prev; - prev = curr; - curr = next; - } - - return prev; + public ListNode reverseList(ListNode head) { + ListNode prev = null; + ListNode next = null; + ListNode curr = head; + while (curr != null) { + next = curr.next; + curr.next = prev; + prev = curr; + curr = next; } + return prev; + } } From 711c9223110336f2437316f10b73722d7c3917b0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Sep 2021 13:30:49 -0700 Subject: [PATCH 0038/1640] Update Shifting Letters.java --- Medium/Shifting Letters.java | 50 ++++++++++-------------------------- 1 file changed, 13 insertions(+), 37 deletions(-) diff --git a/Medium/Shifting Letters.java b/Medium/Shifting Letters.java index ccdaa3b4..7d1e7c18 100644 --- a/Medium/Shifting Letters.java +++ b/Medium/Shifting Letters.java @@ -1,40 +1,16 @@ class Solution { - public String shiftingLetters(String S, int[] shifts) { - long[] numOfShifts = getNumOfShifts(shifts); - String shiftedString = getShiftedString(S, numOfShifts); - - return shiftedString; - } - - private long[] getNumOfShifts(int[] shifts) { - long totalShifts = 0; - long[] cumulativeSum = new long[shifts.length]; - for (int i=0; i 0 ? cumulativeSum[i-1] : 0)) % 26; - } - - return numOfShifts; - } - - private String getShiftedString(String s, long[] numOfShifts) { - StringBuilder sb = new StringBuilder(); - - for (int i=0; i 122) { - shiftedValue = 96 + (shiftedValue - 122); - } - - sb.append((char) shiftedValue); - } - - return sb.toString(); + public String shiftingLetters(String s, int[] shifts) { + long totalShifts = 0; + StringBuilder sb = new StringBuilder(); + for (int i = shifts.length - 1; i >= 0; i--) { + totalShifts += shifts[i]; + sb.append(getShiftedChar(s.charAt(i), totalShifts)); } + return sb.reverse().toString(); + } + + private char getShiftedChar(char c, long shifts) { + long newAscii = ((int) c) + (shifts % 26); + return (char) (newAscii > 122 ? (97 + (newAscii - 122) - 1) : newAscii); + } } From 6c7a794d108234df3d9e2273654c9aa62d8e44f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 11 Sep 2021 09:11:49 -0700 Subject: [PATCH 0039/1640] Update Basic Calculator.java --- Hard/Basic Calculator.java | 88 ++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 51 deletions(-) diff --git a/Hard/Basic Calculator.java b/Hard/Basic Calculator.java index edd9467f..a3d9b119 100644 --- a/Hard/Basic Calculator.java +++ b/Hard/Basic Calculator.java @@ -1,55 +1,41 @@ class Solution { - public static int calculate(String s) { - Stack stack = new Stack<>(); - int res = 0; - int num = 0; - int sign = 1; - boolean hasNumberStarted = false; - - for (int i=0; i stack = new Stack<>(); + int res = 0; + int num = 0; + int sign = 1; + boolean hasNumberStarted = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (Character.isDigit(c)) { + hasNumberStarted = true; + num = num * 10 + (int) (c - '0'); + } else if (c == '+' && hasNumberStarted) { + hasNumberStarted = false; + res += sign * num; + num = 0; + sign = 1; + } else if (c == '-') { + if(!hasNumberStarted) { + sign *= -1; + continue; } - - if (num != 0) { - res += sign * num; - } - - return res; + hasNumberStarted = false; + res += sign * num; + num = 0; + sign = -1; + } else if (c == '(') { + stack.push(res); + stack.push(sign); + sign = 1; + res = 0; + } else if (c == ')') { + res += sign * num; + num = 0; + res *= stack.pop(); // For sign + res += stack.pop(); // Adding the num in stack + } } + return res + (num != 0 ? sign * num : 0); + } } From 317cdc8c3a7d43fd1396f1f9e71a5d36382e703e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Sep 2021 07:00:17 -0700 Subject: [PATCH 0040/1640] Create Reverse Prefix of Word.java --- Easy/Reverse Prefix of Word.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/Reverse Prefix of Word.java diff --git a/Easy/Reverse Prefix of Word.java b/Easy/Reverse Prefix of Word.java new file mode 100644 index 00000000..3799c707 --- /dev/null +++ b/Easy/Reverse Prefix of Word.java @@ -0,0 +1,10 @@ +class Solution { + public String reversePrefix(String word, char ch) { + for (int i = 0; i < word.length(); i++) { + if (word.charAt(i) == ch) { + return new StringBuilder().append(word.substring(0, i + 1)).reverse().toString() + word.substring(i + 1); + } + } + return word; + } +} From 649978e4a515752fb6c9071dd051ab0022f9bedd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Sep 2021 13:52:48 -0700 Subject: [PATCH 0041/1640] Create Number of Pairs of Interchangeable Rectangles.java --- ...Number of Pairs of Interchangeable Rectangles.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Number of Pairs of Interchangeable Rectangles.java diff --git a/Medium/Number of Pairs of Interchangeable Rectangles.java b/Medium/Number of Pairs of Interchangeable Rectangles.java new file mode 100644 index 00000000..e8e6ef9f --- /dev/null +++ b/Medium/Number of Pairs of Interchangeable Rectangles.java @@ -0,0 +1,11 @@ +class Solution { + public long interchangeableRectangles(int[][] rectangles) { + return Arrays.stream(rectangles) + .collect(Collectors.groupingBy( + e -> ((double) e[0]) / e[1], HashMap::new, Collectors.counting())) + .values() + .stream() + .map(v -> (v * (v - 1)) / 2) + .reduce(0L, Long::sum); + } +} From 55f4c046bf130d5a96a190b9c236c0cb9fd1be50 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Sep 2021 06:34:13 -0700 Subject: [PATCH 0042/1640] Update Maximum Number of Balloons.java --- Easy/Maximum Number of Balloons.java | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Easy/Maximum Number of Balloons.java b/Easy/Maximum Number of Balloons.java index b0553373..018f048c 100644 --- a/Easy/Maximum Number of Balloons.java +++ b/Easy/Maximum Number of Balloons.java @@ -1,15 +1,17 @@ class Solution { - public int maxNumberOfBalloons(String text) { - Map map = new HashMap<>(); - for (Character c : text.toCharArray()) { - map.put(c, map.getOrDefault(c, 0) + 1); - } - int maxCount = 0; - maxCount = map.getOrDefault('l', 0) / 2; - maxCount = Math.min(map.getOrDefault('o', 0) / 2, maxCount); - maxCount = Math.min(map.getOrDefault('b', 0), maxCount); - maxCount = Math.min(map.getOrDefault('a', 0), maxCount); - maxCount = Math.min(map.getOrDefault('n', 0), maxCount); - return maxCount; - } + public int maxNumberOfBalloons(String text) { + Map textFrequencyMap = getFrequencyMap(text); + Map ballonFrequencyMap = getFrequencyMap("balloon"); + return ballonFrequencyMap.keySet().stream() + .map(k -> + (int) (textFrequencyMap.getOrDefault(k, 0L) / ballonFrequencyMap.get(k))) + .min(Integer::compare) + .orElse(0); + } + + private Map getFrequencyMap(String s) { + return s.chars() + .mapToObj(c -> (char) c) + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); + } } From 34882197d154e051bdfd87964be6086069baa748 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 14 Sep 2021 06:39:27 -0700 Subject: [PATCH 0043/1640] Update Reverse Only Letters.java --- Easy/Reverse Only Letters.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Easy/Reverse Only Letters.java b/Easy/Reverse Only Letters.java index 95aa10f5..acdd5168 100644 --- a/Easy/Reverse Only Letters.java +++ b/Easy/Reverse Only Letters.java @@ -1,23 +1,21 @@ class Solution { - public String reverseOnlyLetters(String S) { + public String reverseOnlyLetters(String s) { int start = 0; - int end = S.length() - 1; - char[] chars = S.toCharArray(); + int end = s.length() - 1; + char[] letters = s.toCharArray(); while (start <= end) { - while (start <= end && !Character.isLetter(chars[start])) { + while (start <= end && !Character.isLetter(s.charAt(start))) { start++; } - while (end >= start && !Character.isLetter(chars[end])) { + while (end >= start && !Character.isLetter(s.charAt(end))) { end--; } if (start <= end) { - char temp = chars[start]; - chars[start] = chars[end]; - chars[end] = temp; + char temp = letters[start]; + letters[start++] = letters[end]; + letters[end--] = temp; } - start++; - end--; } - return String.valueOf(chars); + return String.valueOf(letters); } } From 6c4028b538a86123e6e920c62d97b5c9b37ef993 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 16 Sep 2021 06:16:09 -0700 Subject: [PATCH 0044/1640] Update Spiral Matrix.java --- Medium/Spiral Matrix.java | 86 ++++++++++++--------------------------- 1 file changed, 27 insertions(+), 59 deletions(-) diff --git a/Medium/Spiral Matrix.java b/Medium/Spiral Matrix.java index 4054cc83..6004fe4d 100644 --- a/Medium/Spiral Matrix.java +++ b/Medium/Spiral Matrix.java @@ -1,64 +1,32 @@ class Solution { - public List spiralOrder(int[][] matrix) { - List list = new ArrayList<>(); - - if (matrix.length == 0 || matrix[0].length == 0) { - return list; + public List spiralOrder(int[][] matrix) { + List list = new ArrayList<>(); + int rowStart = 0; + int rowEnd = matrix.length - 1; + int colStart = 0; + int colEnd = matrix[0].length - 1; + while (rowStart <= rowEnd && colStart <= colEnd) { + for (int i = colStart; i <= colEnd; i++) { + list.add(matrix[rowStart][i]); + } + rowStart++; + for (int i = rowStart; i <= rowEnd; i++) { + list.add(matrix[i][colEnd]); + } + colEnd--; + if (rowStart <= rowEnd) { + for (int i = colEnd; i >= colStart; i--) { + list.add(matrix[rowEnd][i]); } - - int i = 0; - int j = 0; - int top = 0; - int bottom = matrix.length; - int left = 0; - int right = matrix[0].length; - int dir = 0; - int count = 0; - int limit = matrix.length * matrix[0].length; - - while (count < limit) { - if (dir == 0) { - while (j < right) { - list.add(matrix[i][j++]); - count++; - } - dir++; - right--; - i++; - j--; - } - else if (dir == 1) { - while (i < bottom) { - list.add(matrix[i++][j]); - count++; - } - dir++; - bottom--; - i--; - j--; - } - else if (dir == 2) { - while (j >= left) { - list.add(matrix[i][j--]); - count++; - } - dir++; - i--; - j++; - left++; - } - else if (dir == 3) { - while (i > top) { - list.add(matrix[i--][j]); - count++; - } - dir = 0; - top++; - i++; - j++; - } + rowEnd--; + } + if (colStart <= colEnd) { + for (int i = rowEnd; i >= rowStart; i--) { + list.add(matrix[i][colStart]); } - - return list; + colStart++; + } } + return list; + } } From 4073c797f4bd4276b898cd1cd4eb803cad5ee6ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 17 Sep 2021 07:08:38 -0700 Subject: [PATCH 0045/1640] Update and rename Intersection of two arrays II.java to Intersection of Two Arrays II.java --- Easy/Intersection of Two Arrays II.java | 14 ++++++++++++++ Easy/Intersection of two arrays II.java | 20 -------------------- 2 files changed, 14 insertions(+), 20 deletions(-) create mode 100644 Easy/Intersection of Two Arrays II.java delete mode 100644 Easy/Intersection of two arrays II.java diff --git a/Easy/Intersection of Two Arrays II.java b/Easy/Intersection of Two Arrays II.java new file mode 100644 index 00000000..6a6b143d --- /dev/null +++ b/Easy/Intersection of Two Arrays II.java @@ -0,0 +1,14 @@ +class Solution { + public int[] intersect(int[] nums1, int[] nums2) { + Map map = Arrays.stream(nums1).boxed() + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); + List result = new ArrayList<>(); + for (int num : nums2) { + if (map.getOrDefault(num, 0L) > 0) { + result.add(num); + map.put(num, map.get(num) - 1); + } + } + return result.stream().mapToInt(Integer::valueOf).toArray(); + } +} diff --git a/Easy/Intersection of two arrays II.java b/Easy/Intersection of two arrays II.java deleted file mode 100644 index 69407386..00000000 --- a/Easy/Intersection of two arrays II.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public int[] intersect(int[] nums1, int[] nums2) { - Map map = new HashMap<>(); - for (int num : nums1) { - map.put(num, map.getOrDefault(num, 0) + 1); - } - List list = new ArrayList<>(); - for (int num : nums2) { - if (map.getOrDefault(num, 0) > 0) { - list.add(num); - map.put(num, map.get(num) - 1); - } - } - int[] ans = new int[list.size()]; - for (int i = 0; i < list.size(); i++) { - ans[i] = list.get(i); - } - return ans; - } -} From 1a1c14974af37b7179588aac8dec729d885dc03f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Sep 2021 14:01:51 -0700 Subject: [PATCH 0046/1640] Create Count Number of Pairs With Absolute Difference K.java --- ...t Number of Pairs With Absolute Difference K.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/Count Number of Pairs With Absolute Difference K.java diff --git a/Easy/Count Number of Pairs With Absolute Difference K.java b/Easy/Count Number of Pairs With Absolute Difference K.java new file mode 100644 index 00000000..8ff77d76 --- /dev/null +++ b/Easy/Count Number of Pairs With Absolute Difference K.java @@ -0,0 +1,12 @@ +class Solution { + public int countKDifference(int[] nums, int k) { + int count = 0; + Map map = new HashMap<>(); + for (int num : nums) { + count += map.getOrDefault(num + k, 0); + count += map.getOrDefault(num - k, 0); + map.put(num, map.getOrDefault(num, 0) + 1); + } + return count; + } +} From 962882e422b0f2aa85db610db81a99c577e07bac Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Sep 2021 14:33:45 -0700 Subject: [PATCH 0047/1640] Create Find Original Array From Doubled Array.java --- ...ind Original Array From Doubled Array.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Medium/Find Original Array From Doubled Array.java diff --git a/Medium/Find Original Array From Doubled Array.java b/Medium/Find Original Array From Doubled Array.java new file mode 100644 index 00000000..3c4c7dc6 --- /dev/null +++ b/Medium/Find Original Array From Doubled Array.java @@ -0,0 +1,21 @@ +class Solution { + public int[] findOriginalArray(int[] changed) { + if (changed.length % 2 != 0) { + return new int[]{}; + } + int[] answer = new int[changed.length / 2]; + int idx = 0; + Map map = Arrays.stream(changed).boxed() + .collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting())); + for (Integer key : map.keySet()) { + if (map.get(key) > map.getOrDefault(key * 2, 0L)) { + return new int[0]; + } + for (int i = 0; i < map.get(key); i++) { + answer[idx++] = key; + map.put(key * 2, map.get(key * 2) - 1); + } + } + return answer; + } +} From a4a74b0221fc5e1a81e701df66bb80e59c723fbf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Sep 2021 08:02:48 -0700 Subject: [PATCH 0048/1640] Create Final Value of Variable After Performing Operations.java --- ...al Value of Variable After Performing Operations.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Final Value of Variable After Performing Operations.java diff --git a/Easy/Final Value of Variable After Performing Operations.java b/Easy/Final Value of Variable After Performing Operations.java new file mode 100644 index 00000000..1307fdbd --- /dev/null +++ b/Easy/Final Value of Variable After Performing Operations.java @@ -0,0 +1,9 @@ +class Solution { + public int finalValueAfterOperations(String[] operations) { + int x = 0; + for (String op : operations) { + x += op.indexOf('-') != -1 ? -1 : 1; + } + return x; + } +} From 4eb2a5ed043e61720047f504dcd89e28f4f14ff0 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 19 Sep 2021 17:54:23 -0700 Subject: [PATCH 0049/1640] Updated Contains Duplicate.java to functional style --- Easy/Contains Duplicate.java | 5 +++++ Easy/contains_duplicates.java | 35 ----------------------------------- 2 files changed, 5 insertions(+), 35 deletions(-) create mode 100644 Easy/Contains Duplicate.java delete mode 100644 Easy/contains_duplicates.java diff --git a/Easy/Contains Duplicate.java b/Easy/Contains Duplicate.java new file mode 100644 index 00000000..156ad8f9 --- /dev/null +++ b/Easy/Contains Duplicate.java @@ -0,0 +1,5 @@ +class Solution { + public boolean containsDuplicate(int[] nums) { + return Arrays.stream(nums).boxed().collect(Collectors.toSet()).size() < nums.length; + } +} diff --git a/Easy/contains_duplicates.java b/Easy/contains_duplicates.java deleted file mode 100644 index e779009b..00000000 --- a/Easy/contains_duplicates.java +++ /dev/null @@ -1,35 +0,0 @@ -import java.util.Arrays; -public class Solution { - public boolean containsDuplicate(int[] nums) { - int n = nums.length; - Arrays.sort(nums); - int c=1; - for(int i=0;i Date: Tue, 21 Sep 2021 06:01:08 -0700 Subject: [PATCH 0050/1640] Update Max Consecutive Ones.java --- Easy/Max Consecutive Ones.java | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/Easy/Max Consecutive Ones.java b/Easy/Max Consecutive Ones.java index a9ef2478..6f3f557a 100644 --- a/Easy/Max Consecutive Ones.java +++ b/Easy/Max Consecutive Ones.java @@ -1,20 +1,16 @@ class Solution { - public int findMaxConsecutiveOnes(int[] nums) { - int i = 0; - int maxOnes = Integer.MIN_VALUE; - int temp = 0; - while (i < nums.length) { - if (nums[i] == 1) { - temp++; - } - else { - maxOnes = Math.max(maxOnes, temp); - temp = 0; - } - - i++; + public int findMaxConsecutiveOnes(int[] nums) { + int maxCount = 0; + for (int i = 0; i < nums.length; ) { + if (nums[i] == 1) { + int currIdx = i; + while (i < nums.length && nums[i] == 1) { + i++; } - - return Math.max(maxOnes, temp); + maxCount = Math.max(maxCount, i - currIdx); + } + i++; } + return maxCount; + } } From 3630d1c72b7eede61cfccc85faab5d64dadacb8b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 21 Sep 2021 10:35:28 -0700 Subject: [PATCH 0051/1640] Update Merge Sorted Array.java --- Easy/Merge Sorted Array.java | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/Easy/Merge Sorted Array.java b/Easy/Merge Sorted Array.java index 828d100f..a1baa0d2 100644 --- a/Easy/Merge Sorted Array.java +++ b/Easy/Merge Sorted Array.java @@ -1,22 +1,14 @@ class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int idx = m + n - 1; - int numsOneIdx = m - 1; - int numsTwoIdx = n - 1; - while (numsOneIdx >= 0 || numsTwoIdx >= 0) { - int val = -1; - if (numsOneIdx >= 0 && numsTwoIdx >= 0) { - if (nums1[numsOneIdx] > nums2[numsTwoIdx]) { - val = nums1[numsOneIdx--]; - } else { - val = nums2[numsTwoIdx--]; - } - } else if (numsOneIdx >= 0 && numsTwoIdx < 0) { - val = nums1[numsOneIdx--]; + while (m > 0 || n > 0) { + if (m > 0 && n > 0) { + nums1[idx--] = nums1[m - 1] > nums2[n - 1] ? nums1[m-- - 1] : nums2[n-- - 1]; + } else if (m > 0 && n == 0) { + nums1[idx--] = nums1[m-- - 1]; } else { - val = nums2[numsTwoIdx--]; + nums1[idx--] = nums2[n-- - 1]; } - nums1[idx--] = val; } } } From da0b398556c54cb219aaed7560e913ebc9c5675f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 Sep 2021 09:28:10 -0500 Subject: [PATCH 0052/1640] Update Break a Palindrome.java --- Medium/Break a Palindrome.java | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/Medium/Break a Palindrome.java b/Medium/Break a Palindrome.java index eca6bb8b..aa82cbe7 100644 --- a/Medium/Break a Palindrome.java +++ b/Medium/Break a Palindrome.java @@ -1,24 +1,13 @@ class Solution { public String breakPalindrome(String palindrome) { - // If empty or of length 1 => return empty - if (palindrome.length() <= 1) { - return ""; - } char[] chars = palindrome.toCharArray(); - for (int i = 0; i < chars.length; i++) { - if (chars[i] != 'a') { - // Skip if the string is of odd length and it is the middle index - if (palindrome.length() % 2 != 0 && i == palindrome.length() / 2) { - continue; - } + for (int i = 0; i < palindrome.length() / 2; i++) { + if (chars[i] > 'a') { chars[i] = 'a'; - break; - } - // If all chars all 'a' update last char to 'b' - if (i == chars.length - 1) { - chars[i] = 'b'; + return String.valueOf(chars); } } - return String.valueOf(chars); + chars[chars.length - 1] = 'b'; + return chars.length <= 1 ? "" : String.valueOf(chars); } } From 3a076706521d94c7e6ea521ed1122227b5af28ed Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 24 Sep 2021 11:57:43 -0500 Subject: [PATCH 0053/1640] Update N-th Tribonacci Number.java --- Easy/N-th Tribonacci Number.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Easy/N-th Tribonacci Number.java b/Easy/N-th Tribonacci Number.java index cfaaeca9..af3ee26d 100644 --- a/Easy/N-th Tribonacci Number.java +++ b/Easy/N-th Tribonacci Number.java @@ -1,17 +1,10 @@ class Solution { public int tribonacci(int n) { - int[] dp = new int[Math.max(n + 1, 3)]; - dp[0] = 0; - dp[1] = 1; - dp[2] = 1; - return helper(n, dp); - } - - private int helper(int n, int[] dp) { - if (n == 0 || dp[n] != 0) { - return dp[n]; + int[] arr = new int[38]; + arr[1] = arr[2] = 1; + for (int i = 3; i < 38; i++) { + arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3]; } - dp[n] = helper(n - 1, dp) + helper(n - 2, dp) + helper(n - 3, dp); - return dp[n]; + return arr[n]; } } From c507cfe2ee72f81be00ea6bceddcd5bea2cf7866 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Sep 2021 20:40:32 -0500 Subject: [PATCH 0054/1640] Create Maximum Difference Between Increasing Elements.java --- ...imum Difference Between Increasing Elements.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Maximum Difference Between Increasing Elements.java diff --git a/Easy/Maximum Difference Between Increasing Elements.java b/Easy/Maximum Difference Between Increasing Elements.java new file mode 100644 index 00000000..edb343d1 --- /dev/null +++ b/Easy/Maximum Difference Between Increasing Elements.java @@ -0,0 +1,13 @@ +class Solution { + public int maximumDifference(int[] nums) { + int currMin = nums[0]; + int maxDiff = -1; + for (int i = 0; i < nums.length; i++) { + currMin = Math.min(currMin, nums[i]); + if (nums[i] != currMin) { + maxDiff = Math.max(maxDiff, nums[i] - currMin); + } + } + return maxDiff; + } +} From 1a3fe56e39329837b27c40a94f8f27f451e5f930 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 27 Sep 2021 07:16:40 -0500 Subject: [PATCH 0055/1640] Update Unique Email Addresses.java --- Easy/Unique Email Addresses.java | 42 ++++++++------------------------ 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/Easy/Unique Email Addresses.java b/Easy/Unique Email Addresses.java index 871d1a0e..ca28017e 100644 --- a/Easy/Unique Email Addresses.java +++ b/Easy/Unique Email Addresses.java @@ -1,37 +1,15 @@ class Solution { public int numUniqueEmails(String[] emails) { - Set set = new HashSet<>(); - for (String email : emails) { - set.add(formattedEmail(email)); - } - return set.size(); + return Arrays.stream(emails).map(Solution::formatEmail).collect(Collectors.toSet()).size(); } - - private String formattedEmail(String s) { - StringBuilder sb = new StringBuilder(); - int i = 0; - int n = s.length(); - boolean plusFound = false; - while (i < n) { - char c = s.charAt(i); - if (c == '@') { - break; - } - if (plusFound) { - i++; - continue; - } - else if (c == '+') { - plusFound = true; - } - else if (c != '.') { - sb.append(c); - } - i++; - } - while (i < n) { - sb.append(s.charAt(i++)); - } - return sb.toString(); + + private static String formatEmail(String email) { + String localName = email.split("@")[0]; + return (localName.indexOf('+') != -1 + ? localName.substring(0, localName.indexOf('+')) + : localName) + .replaceAll("\\.", "") + + "@" + + email.split("@")[1]; } } From 2392874999b55a708e94e3c9f3b3fdedcf912a6c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 29 Sep 2021 08:44:22 -0500 Subject: [PATCH 0056/1640] Update and rename Split Linked List into Parts.java to Split Linked List in Parts.java --- Medium/Split Linked List in Parts.java | 31 +++++++++++++++++ Medium/Split Linked List into Parts.java | 44 ------------------------ 2 files changed, 31 insertions(+), 44 deletions(-) create mode 100644 Medium/Split Linked List in Parts.java delete mode 100644 Medium/Split Linked List into Parts.java diff --git a/Medium/Split Linked List in Parts.java b/Medium/Split Linked List in Parts.java new file mode 100644 index 00000000..30121c82 --- /dev/null +++ b/Medium/Split Linked List in Parts.java @@ -0,0 +1,31 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } +*/ +class Solution { + public ListNode[] splitListToParts(ListNode head, int k) { + ListNode[] arr = new ListNode[k]; + int nodeLength = 0; + for (ListNode curr = head; curr != null; curr = curr.next) { + nodeLength++; + } + int n = nodeLength / k; + int remaining = nodeLength % k; + ListNode prev = null; + for (int i = 0; i < k && head != null; i++, remaining--) { + arr[i] = head; + for (int j = 0; j < n + (remaining > 0 ? 1 : 0); j++) { + prev = head; + head = head.next; + } + prev.next = null; + } + return arr; + } +} diff --git a/Medium/Split Linked List into Parts.java b/Medium/Split Linked List into Parts.java deleted file mode 100644 index 3fdff43c..00000000 --- a/Medium/Split Linked List into Parts.java +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { val = x; } - * } - */ - -class Solution { - public ListNode[] splitListToParts(ListNode root, int k) { - int m = findLength(root); - ListNode temp = root; - - ListNode[] res = new ListNode[k]; - int size=m/k; - int l= m%k; - - for(int i=0;i1){ - temp=temp.next;j--; - } - if(size!=0 && l>0 && temp!=null){ temp=temp.next; l--;} - ListNode temp1=temp; - if(temp!=null) temp=temp.next; - if(temp1!=null) temp1.next=null; - res[i]=ans; - } - return res; - } - - private int findLength(ListNode root) { - if (root == null) return 0; - int l = 0; - while(root != null) { - l++; - root = root.next; - } - - return l; - } -} From 1eec20b7efd05beae8fdeab8ea99e29454042190 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Oct 2021 23:30:17 -0500 Subject: [PATCH 0057/1640] Create Minimum Moves to Convert String.java --- Easy/Minimum Moves to Convert String.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Minimum Moves to Convert String.java diff --git a/Easy/Minimum Moves to Convert String.java b/Easy/Minimum Moves to Convert String.java new file mode 100644 index 00000000..61b7a169 --- /dev/null +++ b/Easy/Minimum Moves to Convert String.java @@ -0,0 +1,14 @@ +class Solution { + public int minimumMoves(String s) { + int numOfMoves = 0; + int idx = 0; + while (idx < s.length()) { + if (s.charAt(idx) == 'X') { + idx += 2; + numOfMoves++; + } + idx++; + } + return numOfMoves; + } +} From 2b51bee308762c7b4c681796cae9dba37795e6ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Oct 2021 07:22:12 -0500 Subject: [PATCH 0058/1640] Create Convert 1D Array Into 2D Array.java --- Easy/Convert 1D Array Into 2D Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Convert 1D Array Into 2D Array.java diff --git a/Easy/Convert 1D Array Into 2D Array.java b/Easy/Convert 1D Array Into 2D Array.java new file mode 100644 index 00000000..80b7323e --- /dev/null +++ b/Easy/Convert 1D Array Into 2D Array.java @@ -0,0 +1,17 @@ +class Solution { + public int[][] construct2DArray(int[] original, int m, int n) { + if (m * n != original.length) { + return new int[][]{}; + } + int[][] arr = new int[m][n]; + int idx = 0; + int arrIdx = 0; + while (idx < original.length) { + for (int i = 0; i < n; i++) { + arr[arrIdx][i] = original[idx++]; + } + arrIdx++; + } + return arr; + } +} From 91581fb76b264dc798d4de4b42b984aa7d7db0a6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Oct 2021 08:53:47 -0500 Subject: [PATCH 0059/1640] Create Find Missing Observations.java --- Medium/Find Missing Observations.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Find Missing Observations.java diff --git a/Medium/Find Missing Observations.java b/Medium/Find Missing Observations.java new file mode 100644 index 00000000..7b738edc --- /dev/null +++ b/Medium/Find Missing Observations.java @@ -0,0 +1,17 @@ +class Solution { + public int[] missingRolls(int[] rolls, int mean, int n) { + int currSum = Arrays.stream(rolls).sum(); + int missingSum = mean * (n + rolls.length) - currSum; + if (missingSum > n * 6 || missingSum < n) { + return new int[]{}; + } + int[] ans = new int[n]; + int part = missingSum / n; + int remainder = missingSum % n; + Arrays.fill(ans, part); + for (int i = 0; i < remainder; i++) { + ans[i]++; + } + return ans; + } +} From 9728a5baad19cf43490cc80d50afa686278b8dba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Oct 2021 07:57:59 -0500 Subject: [PATCH 0060/1640] Create Number of Pairs of Strings With Concatenation Equal to Target.java --- ...ngs With Concatenation Equal to Target.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Number of Pairs of Strings With Concatenation Equal to Target.java diff --git a/Medium/Number of Pairs of Strings With Concatenation Equal to Target.java b/Medium/Number of Pairs of Strings With Concatenation Equal to Target.java new file mode 100644 index 00000000..be6a6077 --- /dev/null +++ b/Medium/Number of Pairs of Strings With Concatenation Equal to Target.java @@ -0,0 +1,18 @@ +class Solution { + public int numOfPairs(String[] nums, String target) { + Map map = new HashMap<>(); + int count = 0; + for (String num : nums) { + if (target.startsWith(num)) { + String end = target.substring(num.length()); + count += map.getOrDefault(end, 0); + } + if (target.endsWith(num)) { + String start = target.substring(0, target.length() - num.length()); + count += map.getOrDefault(start, 0); + } + map.put(num, map.getOrDefault(num, 0) + 1); + } + return count; + } +} From 1b814352898a1578346ae39c0d3dc27ca883870c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Oct 2021 08:24:31 -0500 Subject: [PATCH 0061/1640] Update Word Search.java --- Medium/Word Search.java | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Medium/Word Search.java b/Medium/Word Search.java index f5ed8288..c3574bd4 100644 --- a/Medium/Word Search.java +++ b/Medium/Word Search.java @@ -1,33 +1,33 @@ class Solution { - public int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + public static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + public boolean exist(char[][] board, String word) { - if (board.length == 0 || board[0].length == 0) { - return false; - } + int rows = board.length; + int cols = board[0].length; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { - if (exists(board, i, j, word, 0, new boolean[board.length][board[0].length])) { + if (dfs(board, word, 0, new boolean[rows][cols], i, j)) { return true; } } } return false; - } - - private boolean exists(char[][] board, int i, int j, String word, int idx, boolean[][] visited) { + } + + private boolean dfs(char[][] board, String word, int idx, boolean[][] visited, int i, int j) { if (idx == word.length()) { return true; } - if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || visited[i][j] || word.charAt(idx) != board[i][j]) { + if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || visited[i][j] + || board[i][j] != word.charAt(idx)) { return false; } visited[i][j] = true; - for (int[] dir : dirs) { - if (exists(board, i + dir[0], j + dir[1], word, idx + 1, visited)) { - return true; - } + boolean ans = false; + for (int[] dir : DIRS) { + ans = ans || dfs(board, word, idx + 1, visited, i + dir[0], j + dir[1]); } visited[i][j] = false; - return false; + return ans; } } From 99ca85102e366908d53d6190b5b47a1a8873db91 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Oct 2021 08:35:21 -0500 Subject: [PATCH 0062/1640] Update Word Search.java --- Medium/Word Search.java | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Medium/Word Search.java b/Medium/Word Search.java index c3574bd4..6eb6993c 100644 --- a/Medium/Word Search.java +++ b/Medium/Word Search.java @@ -2,11 +2,10 @@ class Solution { public static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; public boolean exist(char[][] board, String word) { - int rows = board.length; - int cols = board[0].length; + char[] letters = word.toCharArray(); for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { - if (dfs(board, word, 0, new boolean[rows][cols], i, j)) { + if (dfs(board, 0, letters, i, j)) { return true; } } @@ -14,20 +13,22 @@ public boolean exist(char[][] board, String word) { return false; } - private boolean dfs(char[][] board, String word, int idx, boolean[][] visited, int i, int j) { - if (idx == word.length()) { + private boolean dfs(char[][] board, int idx, char[] letters, int i, int j) { + if (idx == letters.length) { return true; } - if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || visited[i][j] - || board[i][j] != word.charAt(idx)) { + if (i < 0 || i >= board.length || j < 0 || j >= board[0].length) { return false; } - visited[i][j] = true; - boolean ans = false; + if (board[i][j] != letters[idx]) { + return false; + } + board[i][j] ^= 256; + boolean exists = false; for (int[] dir : DIRS) { - ans = ans || dfs(board, word, idx + 1, visited, i + dir[0], j + dir[1]); + exists = exists || dfs(board, idx + 1, letters, i + dir[0], j + dir[1]); } - visited[i][j] = false; - return ans; + board[i][j] ^= 256; + return exists; } } From 8e104b16402c5e4c0fb3140f3177cd190cfd8ad3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 8 Oct 2021 09:51:00 -0500 Subject: [PATCH 0063/1640] Update Implement Trie (Prefix Tree).java --- Medium/Implement Trie (Prefix Tree).java | 81 ++++++++++-------------- 1 file changed, 32 insertions(+), 49 deletions(-) diff --git a/Medium/Implement Trie (Prefix Tree).java b/Medium/Implement Trie (Prefix Tree).java index f987662b..f5aaa30e 100644 --- a/Medium/Implement Trie (Prefix Tree).java +++ b/Medium/Implement Trie (Prefix Tree).java @@ -1,70 +1,53 @@ class Trie { - /** Initialize your data structure here. */ - Node root; + TrieNode root; public Trie() { - root = new Node('-'); + root = new TrieNode('-'); } - /** Inserts a word into the trie. */ public void insert(String word) { - insertHelper(word, 0, root); - } - - private void insertHelper(String word, int idx, Node root) { - if (idx >= word.length()) { - root.isWord = true; - return; - } - if (!root.children.containsKey(word.charAt(idx))) { - root.children.put(word.charAt(idx), new Node(word.charAt(idx))); + TrieNode node = root; + for (int i = 0; i < word.length(); i++) { + if (node.children[word.charAt(i) - 'a'] == null) { + node.children[word.charAt(i) - 'a'] = new TrieNode(word.charAt(i)); + } + node = node.children[word.charAt(i) - 'a']; + if (i == word.length() - 1) { + node.isWord = true; + } } - root = root.children.get(word.charAt(idx)); - insertHelper(word, idx + 1, root); } - /** Returns if the word is in the trie. */ public boolean search(String word) { - return searchHelper(word, 0, root); - } - - private boolean searchHelper(String word, int idx, Node root) { - if (idx == word.length()) { - return root.isWord; - } - if (!root.children.containsKey(word.charAt(idx))) { - return false; - } - root = root.children.get(word.charAt(idx)); - return searchHelper(word, idx + 1, root); + TrieNode node = searchHelper(word); + return node != null && node.isWord; } - /** Returns if there is any word in the trie that starts with the given prefix. */ public boolean startsWith(String prefix) { - return startsWithHelper(prefix, 0, root); + return searchHelper(prefix) != null; } - private boolean startsWithHelper(String word, int idx, Node root) { - if (idx == word.length()) { - return true; - } - if (!root.children.containsKey(word.charAt(idx))) { - return false; + private TrieNode searchHelper(String word) { + TrieNode node = root; + for (int i = 0; i < word.length(); i++) { + if (node.children[word.charAt(i) - 'a'] == null) { + return null; + } + node = node.children[word.charAt(i) - 'a']; } - root = root.children.get(word.charAt(idx)); - return startsWithHelper(word, idx + 1, root); + return node; } -} - -class Node { - char val; - Map children; - boolean isWord; - public Node(char val) { - this.val = val; - children = new HashMap<>(); - isWord = false; + class TrieNode { + TrieNode[] children; + boolean isWord; + char c; + + public TrieNode(char c) { + this.c = c; + children = new TrieNode[26]; + isWord = false; + } } } From 6843b57e8f1585879e13a455bfdcc5425a7aa1dd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Oct 2021 07:40:36 -0500 Subject: [PATCH 0064/1640] Update Word Search II.java --- Hard/Word Search II.java | 112 +++++++++++++++++++-------------------- 1 file changed, 54 insertions(+), 58 deletions(-) diff --git a/Hard/Word Search II.java b/Hard/Word Search II.java index 4fd55b93..729cf044 100644 --- a/Hard/Word Search II.java +++ b/Hard/Word Search II.java @@ -1,66 +1,62 @@ class Solution { - public List findWords(char[][] board, String[] words) { - List result = new ArrayList<>(); - TrieNode root = buildTrie(words); - - for (int i = 0; i < board.length; i++) { - for (int j = 0; j < board[0].length; j++) { - helper(board, i, j, root, result); - } - } - - return result; + public List findWords(char[][] board, String[] words) { + List result = new ArrayList<>(); + TrieNode root = buildTrie(words); + for (int i = 0; i < board.length; i++) { + for (int j = 0; j < board[0].length; j++) { + dfs(board, i, j, result, root); + } } - - private void helper(char[][] board, int i, int j, TrieNode root, List result) { - if (i < 0 || i >= board.length || j >= board[i].length || j < 0) { - return; - } - - char c = board[i][j]; - if (c == '@' || root.next[c - 'a'] == null) { - return; - } - - root = root.next[c - 'a']; - if (root.word != null) { - result.add(root.word); - root.word = null; + return result; + } + + private TrieNode buildTrie(String[] words) { + TrieNode root = new TrieNode(); + for (String word : words) { + TrieNode temp = root; + for (char c : word.toCharArray()) { + if (temp.children[c - 'a'] == null) { + temp.children[c - 'a'] = new TrieNode(); } - - // Choose - board[i][j] = '@'; - - // Explore - helper(board, i + 1, j, root, result); - helper(board, i, j + 1, root, result); - helper(board, i, j - 1, root, result); - helper(board, i - 1, j, root, result); - - // Un-choose - board[i][j] = c; + temp = temp.children[c - 'a']; + } + temp.word = word; } + return root; + } - private TrieNode buildTrie(String[] words) { - TrieNode root = new TrieNode(); - for (String word : words) { - TrieNode temp =root; - for (char c : word.toCharArray()) { - if (temp.next[c - 'a'] == null) { - temp.next[c - 'a'] = new TrieNode(); - } - - temp = temp.next[c - 'a']; - } - - temp.word = word; - } - - return root; + private void dfs(char[][] board, int i, int j, List result, TrieNode root) { + char c = board[i][j]; + if (c == '#' || root.children[c - 'a'] == null) { + return; } - - class TrieNode { - TrieNode[] next = new TrieNode[26]; - String word; + root = root.children[c - 'a']; + if (root.word != null) { + result.add(root.word); + root.word = null; + } + board[i][j] = '#'; + triggerDfsIfValid(board, i, j, result, root); + board[i][j] = c; + } + + private void triggerDfsIfValid(char[][] board, int i, int j, List result, TrieNode root) { + if (i > 0) { + dfs(board, i - 1, j, result, root); + } + if (j > 0) { + dfs(board, i, j - 1, result, root); + } + if (i < board.length - 1) { + dfs(board, i + 1, j, result, root); + } + if (j < board[0].length - 1) { + dfs(board, i, j + 1, result, root); } + } + + class TrieNode { + TrieNode[] children = new TrieNode[26]; + String word; + } } From 9e00e5dafd33d9b6a50fd0caea586cc6ae7e2929 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Oct 2021 19:55:25 -0500 Subject: [PATCH 0065/1640] Update Bitwise AND of Numbers Range.java --- Medium/Bitwise AND of Numbers Range.java | 36 ++++-------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/Medium/Bitwise AND of Numbers Range.java b/Medium/Bitwise AND of Numbers Range.java index a5823908..c0645dd1 100644 --- a/Medium/Bitwise AND of Numbers Range.java +++ b/Medium/Bitwise AND of Numbers Range.java @@ -1,34 +1,8 @@ class Solution { - public int rangeBitwiseAnd(int m, int n) { - int temp1 = m; - int temp2 = n; - - int cnt1 = 0; - int cnt2 = 0; - - while (temp1 > 1 || temp2 > 1) { - if (temp1 > 1) { - temp1 /= 2; - cnt1++; - } - - if (temp2 > 1) { - temp2 /= 2; - cnt2++; - } - } - - if (cnt1 != cnt2) { - return 0; - } - - int res = ~0; - for (int i=m;i left) { + right = right & (right - 1); } + return left & right; + } } From 4c68381b7d83f72cb4096555741fd7a83e87a1cb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 10 Oct 2021 12:01:21 -0500 Subject: [PATCH 0066/1640] Create Two Out of Three.java --- Easy/Two Out of Three.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Two Out of Three.java diff --git a/Easy/Two Out of Three.java b/Easy/Two Out of Three.java new file mode 100644 index 00000000..7deb6a0b --- /dev/null +++ b/Easy/Two Out of Three.java @@ -0,0 +1,19 @@ +class Solution { + public List twoOutOfThree(int[] nums1, int[] nums2, int[] nums3) { + Map> map = new HashMap<>(); + updateMap(map, nums1, "1"); + updateMap(map, nums2, "2"); + updateMap(map, nums3, "3"); + return map.entrySet() + .stream() + .filter(entry -> entry.getValue().size() > 1) + .map(entry -> entry.getKey()) + .collect(Collectors.toList()); + } + + private void updateMap(Map> map, int[] nums, String key) { + for (int num : nums) { + map.computeIfAbsent(num, k -> new HashSet<>()).add(key); + } + } +} From 9248ae38199e2d66ddcd262d84c8b35df0ac3faf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 10 Oct 2021 19:08:30 -0500 Subject: [PATCH 0067/1640] Update Diameter of Binary Tree.java --- Easy/Diameter of Binary Tree.java | 38 +++++++++++++++++-------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/Easy/Diameter of Binary Tree.java b/Easy/Diameter of Binary Tree.java index d7e874c7..e62673f3 100644 --- a/Easy/Diameter of Binary Tree.java +++ b/Easy/Diameter of Binary Tree.java @@ -4,25 +4,29 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public int diameterOfBinaryTree(TreeNode root) { - if (root == null) return 0; - - int rootDiam = depth(root.left) + depth(root.right); - int leftDia = diameterOfBinaryTree(root.left); - int rightDia = diameterOfBinaryTree(root.right); - - return Math.max(rootDiam, Math.max(leftDia, rightDia)); - } - - public int depth(TreeNode root) { - if (root == null) { - return 0; - } - - return 1 + Math.max(depth(root.left), depth(root.right)); + public int diameterOfBinaryTree(TreeNode root) { + int[] diameter = {0}; + dfs(root, diameter); + return diameter[0]; + } + + private int dfs(TreeNode root, int[] diameter) { + if (root == null) { + return 0; } + int leftDiameter = dfs(root.left, diameter); + int rightDiameter = dfs(root.right, diameter); + diameter[0] = Math.max(leftDiameter + rightDiameter, diameter[0]); + return Math.max(leftDiameter, rightDiameter) + 1; + } } From 2b9239099b1a82e441629f6990460778a932aa35 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Oct 2021 20:55:03 -0500 Subject: [PATCH 0068/1640] Update Guess Number Higher or Lower.java --- Easy/Guess Number Higher or Lower.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Easy/Guess Number Higher or Lower.java b/Easy/Guess Number Higher or Lower.java index e10f90ab..91b9aeb0 100644 --- a/Easy/Guess Number Higher or Lower.java +++ b/Easy/Guess Number Higher or Lower.java @@ -13,15 +13,13 @@ public int guessNumber(int n) { int end = n; while (start <= end) { int mid = start + (end - start) / 2; - int res = guess(mid); - if (res == 0) { - return mid; - } - else if (res == -1) { + int result = guess(mid); + if (result == -1) { end = mid - 1; - } - else { + } else if (result == 1) { start = mid + 1; + } else { + return mid; } } return -1; From 4645f741c32640681af46d58f666463e42c365aa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Oct 2021 08:43:17 -0500 Subject: [PATCH 0069/1640] Update Construct Binary Search Tree from Preorder Traversal.java --- ...y Search Tree from Preorder Traversal.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/Medium/Construct Binary Search Tree from Preorder Traversal.java b/Medium/Construct Binary Search Tree from Preorder Traversal.java index 9361c50c..36407655 100644 --- a/Medium/Construct Binary Search Tree from Preorder Traversal.java +++ b/Medium/Construct Binary Search Tree from Preorder Traversal.java @@ -4,25 +4,29 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - int idx; public TreeNode bstFromPreorder(int[] preorder) { - idx = 0; - return helper(preorder, Integer.MIN_VALUE, Integer.MAX_VALUE); + int[] idx = {0}; + return formBST(preorder, Integer.MIN_VALUE, Integer.MAX_VALUE, idx); } - private TreeNode helper(int[] preorder, int lower, int upper) { - if (idx == preorder.length || preorder[idx] < lower || preorder[idx] > upper) { + private TreeNode formBST(int[] preorder, int min, int max, int[] idx) { + if (idx[0] == preorder.length || preorder[idx[0]] < min || preorder[idx[0]] > max) { return null; } - int val = preorder[idx]; - idx++; - TreeNode root = new TreeNode(val); - root.left = helper(preorder, lower, val); - root.right = helper(preorder, val, upper); - return root; + int val = preorder[idx[0]++]; + TreeNode node = new TreeNode(val); + node.left = formBST(preorder, min, val, idx); + node.right = formBST(preorder, val, max, idx); + return node; } } From 515e7af20930911810cc9600599cf46e55193aa2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Oct 2021 09:25:39 -0500 Subject: [PATCH 0070/1640] Update Perfect Squares.java --- Medium/Perfect Squares.java | 31 +++++++++---------------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/Medium/Perfect Squares.java b/Medium/Perfect Squares.java index f0b9fb81..4f61d351 100644 --- a/Medium/Perfect Squares.java +++ b/Medium/Perfect Squares.java @@ -1,28 +1,15 @@ class Solution { - Set squareNums; public int numSquares(int n) { - squareNums = new HashSet<>(); - for (int i = 1; i * i <= n; i++) { - squareNums.add(i * i); - } - int count = 1; - for (count = 1; count <= n; count++) { - if (isDividedBy(n, count)) { - return count; - } - } - return count; - } - - private boolean isDividedBy(int n, int count) { - if (count == 1) { - return squareNums.contains(n); - } - for (Integer squareNum : squareNums) { - if (isDividedBy(n - squareNum, count - 1)) { - return true; + int[] dp = new int[n + 1]; + Arrays.fill(dp, Integer.MAX_VALUE); + dp[0] = 0; + for(int i = 1; i <= n; i++) { + int min = Integer.MAX_VALUE; + for (int j = 1; i - j * j >= 0; j++) { + min = Math.min(min, dp[i - j * j] + 1); } + dp[i] = min; } - return false; + return dp[n]; } } From a0f7fcda4654de22b0be01954cfbdc8f307c80cd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 16 Oct 2021 07:55:01 -0500 Subject: [PATCH 0071/1640] Create Binary Watch.java --- Easy/Binary Watch.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Binary Watch.java diff --git a/Easy/Binary Watch.java b/Easy/Binary Watch.java new file mode 100644 index 00000000..454f9b6c --- /dev/null +++ b/Easy/Binary Watch.java @@ -0,0 +1,13 @@ +class Solution { + public List readBinaryWatch(int turnedOn) { + return IntStream.range(0, 12) + .boxed() + .flatMap( + h -> IntStream.range(0, 60) + .boxed() + .filter(s -> Integer.bitCount(h) + Integer.bitCount(s) == turnedOn) + .map(m -> String.format("%d:%02d", h, m)) + ) + .collect(Collectors.toList()); + } +} From 043a5f8647fb49954349c920115a0c04f7583a2d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 16 Oct 2021 13:42:03 -0500 Subject: [PATCH 0072/1640] Create Minimum Number of Moves to Seat Everyone.java --- Easy/Minimum Number of Moves to Seat Everyone.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Minimum Number of Moves to Seat Everyone.java diff --git a/Easy/Minimum Number of Moves to Seat Everyone.java b/Easy/Minimum Number of Moves to Seat Everyone.java new file mode 100644 index 00000000..be3f18c1 --- /dev/null +++ b/Easy/Minimum Number of Moves to Seat Everyone.java @@ -0,0 +1,11 @@ +class Solution { + public int minMovesToSeat(int[] seats, int[] students) { + Arrays.sort(seats); + Arrays.sort(students); + int moves = 0; + for (int i = 0; i < seats.length; i++) { + moves += Math.abs(seats[i] - students[i]); + } + return moves; + } +} From a32a1242bff64b38ef4b3e8c7d07e37f58a3e5d2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Oct 2021 08:44:58 -0500 Subject: [PATCH 0073/1640] Create Check if Numbers Are Ascending in a Sentence.java --- ...f Numbers Are Ascending in a Sentence.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Check if Numbers Are Ascending in a Sentence.java diff --git a/Easy/Check if Numbers Are Ascending in a Sentence.java b/Easy/Check if Numbers Are Ascending in a Sentence.java new file mode 100644 index 00000000..b7f5ac65 --- /dev/null +++ b/Easy/Check if Numbers Are Ascending in a Sentence.java @@ -0,0 +1,19 @@ +class Solution { + public boolean areNumbersAscending(String s) { + int prevValue = Integer.MIN_VALUE; + for (int i = 0; i < s.length(); ) { + if (Character.isDigit(s.charAt(i))) { + int currNum = 0; + while (i < s.length() && Character.isDigit(s.charAt(i))) { + currNum = currNum * 10 + Character.getNumericValue(s.charAt(i++)); + } + if (currNum <= prevValue) { + return false; + } + prevValue = currNum; + } + i++; + } + return true; + } +} From 96a599fc14e32c89a603bee2035e5472843cb430 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Oct 2021 20:53:33 -0500 Subject: [PATCH 0074/1640] Create Simple Bank System.java --- Medium/Simple Bank System.java | 44 ++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Medium/Simple Bank System.java diff --git a/Medium/Simple Bank System.java b/Medium/Simple Bank System.java new file mode 100644 index 00000000..a674aa0f --- /dev/null +++ b/Medium/Simple Bank System.java @@ -0,0 +1,44 @@ +class Bank { + + private long[] balance; + public Bank(long[] balance) { + this.balance = balance; + } + + public boolean transfer(int account1, int account2, long money) { + if (isInvalidAccount(account1) || isInvalidAccount(account2) || balance[account1 - 1] < money) { + return false; + } + balance[account1 - 1] -= money; + balance[account2 - 1] += money; + return true; + } + + public boolean deposit(int account, long money) { + if (isInvalidAccount(account)) { + return false; + } + balance[account - 1] += money; + return true; + } + + public boolean withdraw(int account, long money) { + if (isInvalidAccount(account) || balance[account - 1] < money) { + return false; + } + balance[account - 1] -= money; + return true; + } + + private boolean isInvalidAccount(int accountId) { + return !(accountId >= 1 && accountId <= this.balance.length); + } +} + +/** + * Your Bank object will be instantiated and called as such: + * Bank obj = new Bank(balance); + * boolean param_1 = obj.transfer(account1,account2,money); + * boolean param_2 = obj.deposit(account,money); + * boolean param_3 = obj.withdraw(account,money); + */ From a5b5c5aed2a1d96bbbdf01bb60e06ea2accf2ef8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Oct 2021 21:05:11 -0500 Subject: [PATCH 0075/1640] Update Cousins in Binary Tree.java --- Easy/Cousins in Binary Tree.java | 37 ++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/Easy/Cousins in Binary Tree.java b/Easy/Cousins in Binary Tree.java index 21c6431d..6d76a140 100644 --- a/Easy/Cousins in Binary Tree.java +++ b/Easy/Cousins in Binary Tree.java @@ -15,27 +15,32 @@ */ class Solution { public boolean isCousins(TreeNode root, int x, int y) { - int[] depthAndParentX = {0, 0}; - int[] depthAndParentY = {0, 0}; - helper(root, x, 0, null, depthAndParentX); - helper(root, y, 0, null, depthAndParentY); - return depthAndParentX[0] == depthAndParentY[0] && depthAndParentX[1] != depthAndParentY[1]; + NodeDetail nodeDetailX = getNodeDetail(root, x, null, 0); + NodeDetail nodeDetailY = getNodeDetail(root, y, null, 0); + return nodeDetailX.depth == nodeDetailY.depth && nodeDetailX.parent != nodeDetailY.parent; } - private void helper( - TreeNode root, int num, int currDepth, TreeNode currParent, int[] depthAndParent - ) { + private NodeDetail getNodeDetail(TreeNode root, int n, TreeNode parent, int depth) { if (root == null) { - return; + return null; } - if (root.val == num) { - System.out.println(root.val + " " + num + " " + (currParent == null ? -1 : currParent.val)); - depthAndParent[0] = currDepth; - depthAndParent[1] = currParent == null ? -1 : currParent.val; + if (root.val == n) { + return new NodeDetail(parent, depth); } - else { - helper(root.left, num, currDepth + 1, root, depthAndParent); - helper(root.right, num, currDepth + 1, root, depthAndParent); + NodeDetail left = getNodeDetail(root.left, n, root, depth + 1); + if (left != null) { + return left; + } + return getNodeDetail(root.right, n, root, depth + 1); + } + + private class NodeDetail { + TreeNode parent; + int depth; + + public NodeDetail(TreeNode parent, int depth) { + this.parent = parent; + this.depth = depth; } } } From e2dae4541ae7d46e2cd6effacaea1083a7cedfbc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 21 Oct 2021 19:45:08 -0700 Subject: [PATCH 0076/1640] Update Sort Characters By Frequency.java --- Medium/Sort Characters By Frequency.java | 41 ++++++++++++++++++------ 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/Medium/Sort Characters By Frequency.java b/Medium/Sort Characters By Frequency.java index 4d0ed2b2..d85dc32a 100644 --- a/Medium/Sort Characters By Frequency.java +++ b/Medium/Sort Characters By Frequency.java @@ -1,20 +1,41 @@ class Solution { public String frequencySort(String s) { - Map map = new HashMap<>(); + int[] freqMap = new int[62]; + int maxFrequency = 0; for (char c : s.toCharArray()) { - map.put(c, map.getOrDefault(c, 0) + 1); + int charIdx = getCharIndex(c); + freqMap[charIdx]++; + maxFrequency = Math.max(maxFrequency, freqMap[charIdx]); + } + List[] revMap = new List[maxFrequency + 1]; + for (int i = 0; i < 62; i++) { + char c = getDecodedChar(i); + int currFreq = freqMap[i]; + if (currFreq != 0) { + if (revMap[currFreq] == null) { + revMap[currFreq] = new ArrayList<>(); + } + revMap[currFreq].add(c); + } } - PriorityQueue pq = new PriorityQueue<>((o1, o2) -> map.get(o2) - map.get(o1)); - pq.addAll(map.keySet()); StringBuilder sb = new StringBuilder(); - while (!pq.isEmpty()) { - char c = pq.poll(); - int count = map.get(c); - while (count-- > 0) { - sb.append(c); + for (int i = maxFrequency; i > 0; i--) { + if (revMap[i] != null) { + List characterList = revMap[i]; + for (char c : characterList) { + sb.append(String.valueOf(c).repeat(i)); + } } } return sb.toString(); } -} + private char getDecodedChar(int idx) { + return (char) (idx < 26 ? 97 + idx : (idx >= 52 ? 48 + idx - 52 : 65 + idx - 26)); + } + + private int getCharIndex(char c) { + return Character.isDigit(c) ? 52 + c - '0' + : (Character.isUpperCase(c) ? c - 'A' + 26 : c - 'a'); + } +} From 20ab1882fb87e79762a3bf33e72bc9870947f33a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Oct 2021 09:24:48 -0700 Subject: [PATCH 0077/1640] Update Next Greater Element I.java --- Easy/Next Greater Element I.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Easy/Next Greater Element I.java b/Easy/Next Greater Element I.java index 8b7e88d1..8deb6de6 100644 --- a/Easy/Next Greater Element I.java +++ b/Easy/Next Greater Element I.java @@ -1,20 +1,20 @@ class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { Stack stack = new Stack<>(); - int[] greater = new int[nums2.length]; - Map map = new HashMap<>(); + int[] nextMaximum = new int[nums2.length]; + Map indexMap = new HashMap<>(); for (int i = nums2.length - 1; i >= 0; i--) { - while (!stack.isEmpty() && stack.peek() < nums2[i]) { + while (!stack.isEmpty() && stack.peek() <= nums2[i]) { stack.pop(); } - greater[i] = stack.isEmpty() ? -1 : stack.peek(); - map.put(nums2[i], i); + nextMaximum[i] = stack.isEmpty() ? -1 : stack.peek(); stack.push(nums2[i]); + indexMap.put(nums2[i], i); } - int[] ans = new int[nums1.length]; + int[] nextMaximumResult = new int[nums1.length]; for (int i = 0; i < nums1.length; i++) { - ans[i] = greater[map.get(nums1[i])]; + nextMaximumResult[i] = nextMaximum[indexMap.get(nums1[i])]; } - return ans; + return nextMaximumResult; } } From 068f0c8dd17e38cd7aafc214fb7d96c0fd46a2e3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Oct 2021 21:30:42 -0700 Subject: [PATCH 0078/1640] Create Number of Valid Words in a Sentence.java --- Easy/Number of Valid Words in a Sentence.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Easy/Number of Valid Words in a Sentence.java diff --git a/Easy/Number of Valid Words in a Sentence.java b/Easy/Number of Valid Words in a Sentence.java new file mode 100644 index 00000000..686add3b --- /dev/null +++ b/Easy/Number of Valid Words in a Sentence.java @@ -0,0 +1,35 @@ +class Solution { + + public int countValidWords(String sentence) { + return (int) Arrays.stream(sentence.split("\\s+")).filter(Solution::isValidWord).count(); + } + + public static boolean isValidWord(String s) { + if (s.isEmpty() + || s.charAt(0) == '-' + || s.charAt(s.length() - 1) == '-' + || (s.length() > 1 && !Character.isLetter(s.charAt(0)))) { + return false; + } + boolean punctuationFound = false; + boolean hyphenFound = false; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (Character.isDigit(c)) { + return false; + } + if (c == '-') { + if (hyphenFound || !(Character.isLetter(s.charAt(i - 1)) && Character.isLetter(s.charAt(i + 1)))) { + return false; + } + hyphenFound = true; + } else if (!Character.isLetter(c)) { + if (punctuationFound || i != s.length() - 1) { + return false; + } + punctuationFound = true; + } + } + return true; + } +} From 42cfbdfe7514296c74ed2f7ba1ec9a5fe0b4de19 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 25 Oct 2021 08:26:23 -0700 Subject: [PATCH 0079/1640] Create Next Greater Numerically Balanced Number.java --- Medium/Next Greater Numerically Balanced Number.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Medium/Next Greater Numerically Balanced Number.java diff --git a/Medium/Next Greater Numerically Balanced Number.java b/Medium/Next Greater Numerically Balanced Number.java new file mode 100644 index 00000000..c5b399c5 --- /dev/null +++ b/Medium/Next Greater Numerically Balanced Number.java @@ -0,0 +1,6 @@ +class Solution { + public final int[] CANDIDATES = new int[] {1, 22, 122, 212, 221, 333, 1333, 3133, 3313, 3331, 4444, 14444, 22333, 23233, 23323, 23332, 32233, 32323, 32332, 33223, 33232, 33322, 41444, 44144, 44414, 44441, 55555, 122333, 123233, 123323, 123332, 132233, 132323, 132332, 133223, 133232, 133322, 155555, 212333, 213233, 213323, 213332, 221333, 223133, 223313, 223331, 224444, 231233, 231323, 231332, 232133, 232313, 232331, 233123, 233132, 233213, 233231, 233312, 233321, 242444, 244244, 244424, 244442, 312233, 312323, 312332, 313223, 313232, 313322, 321233, 321323, 321332, 322133, 322313, 322331, 323123, 323132, 323213, 323231, 323312, 323321, 331223, 331232, 331322, 332123, 332132, 332213, 332231, 332312, 332321, 333122, 333212, 333221, 422444, 424244, 424424, 424442, 442244, 442424, 442442, 444224, 444242, 444422, 515555, 551555, 555155, 555515, 555551, 666666}; + public int nextBeautifulNumber(int n) { + return Arrays.stream(CANDIDATES).filter(candidate -> candidate > n).findFirst().orElse(1224444); + } +} From d9ca92864b2d070805fcf06778da1df54fe8e802 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Oct 2021 17:28:21 -0700 Subject: [PATCH 0080/1640] Update Sort Colors.java --- Medium/Sort Colors.java | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Medium/Sort Colors.java b/Medium/Sort Colors.java index 6fc66d88..1bbb3b95 100644 --- a/Medium/Sort Colors.java +++ b/Medium/Sort Colors.java @@ -1,25 +1,22 @@ class Solution { public void sortColors(int[] nums) { int zeroIdx = 0; - int curr = 0; - int n = nums.length - 1; - int twoIdx = n; - while (curr <= twoIdx) { - if (nums[curr] == 0) { - swap(nums, curr++, zeroIdx++); - } - else if (nums[curr] == 2) { - swap(nums, curr, twoIdx--); - } - else { - curr++; + int twoIdx = nums.length - 1; + int currIdx = 0; + while (currIdx <= twoIdx) { + if (nums[currIdx] == 0) { + swap(nums, currIdx++, zeroIdx++); + } else if (nums[currIdx] == 2) { + swap(nums, currIdx, twoIdx--); + } else { + currIdx++; } } } - private void swap(int[] nums, int idx1, int idx2) { - int temp = nums[idx1]; - nums[idx1] = nums[idx2]; - nums[idx2] = temp; + private void swap(int[] nums, int idxOne, int idxTwo) { + int temp = nums[idxTwo]; + nums[idxTwo] = nums[idxOne]; + nums[idxOne] = temp; } } From b6225779819f5db85f56cb63004a025b130d05ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Oct 2021 20:04:44 -0700 Subject: [PATCH 0081/1640] Update Rotting Oranges.java --- Medium/Rotting Oranges.java | 52 +++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/Medium/Rotting Oranges.java b/Medium/Rotting Oranges.java index a4eb051f..39ea7886 100644 --- a/Medium/Rotting Oranges.java +++ b/Medium/Rotting Oranges.java @@ -1,39 +1,41 @@ class Solution { - int[][] dirs = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}}; - public final int VISITED = -1; + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + public int orangesRotting(int[][] grid) { - int minutes = 0; - Queue queue = new LinkedList<>(); + Queue infectedOranges = new LinkedList<>(); + int numOfFreshOranges = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[i].length; j++) { if (grid[i][j] == 2) { - queue.add(new int[]{i, j}); + infectedOranges.add(new int[]{i, j}); } + numOfFreshOranges += grid[i][j] == 1 ? 1 : 0; } } - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int[] removed = queue.remove(); - for (int[] dir : dirs) { - int newX = removed[0] + dir[0]; - int newY = removed[1] + dir[1]; - if (newX >= 0 && newX < grid.length && newY >= 0 && newY < grid[0].length && grid[newX][newY] == 1) { - grid[newX][newY] = 2; - queue.add(new int[]{newX, newY}); + int numOfMinutes = 0; + while (!infectedOranges.isEmpty()) { + int infectedOrangeSize = infectedOranges.size(); + boolean newInfected = false; + while (infectedOrangeSize-- > 0) { + int[] infectedOrangeCoordinate = infectedOranges.poll(); + for (int[] dir : DIRS) { + int newRowCoordinate = infectedOrangeCoordinate[0] + dir[0]; + int newColCoordinate = infectedOrangeCoordinate[1] + dir[1]; + if (isValidInfection(grid, newRowCoordinate, newColCoordinate)) { + infectedOranges.add(new int[]{newRowCoordinate, newColCoordinate}); + grid[newRowCoordinate][newColCoordinate] = 2; + newInfected = true; + numOfFreshOranges--; } } - grid[removed[0]][removed[1]] = VISITED; } - minutes++; + numOfMinutes += newInfected ? 1 : 0; } - for (int i = 0; i < grid.length; i++) { - for (int j = 0; j < grid[i].length; j++) { - if (grid[i][j] == 1) { - return -1; - } - } - } - return minutes > 0 ? minutes - 1 : 0; + return numOfFreshOranges > 0 ? -1 : numOfMinutes; + } + + private boolean isValidInfection(int[][] grid, int rowCoordinate, int colCoordinate) { + return rowCoordinate >= 0 && colCoordinate >= 0 && rowCoordinate < grid.length + && colCoordinate < grid[0].length && grid[rowCoordinate][colCoordinate] == 1; } } From fe169cf9d706cf4473f30de8c31afbb3dd8e7bd5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Oct 2021 11:43:49 -0700 Subject: [PATCH 0082/1640] Create Kth Distinct String in an Array.java --- Easy/Kth Distinct String in an Array.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Kth Distinct String in an Array.java diff --git a/Easy/Kth Distinct String in an Array.java b/Easy/Kth Distinct String in an Array.java new file mode 100644 index 00000000..31a474f7 --- /dev/null +++ b/Easy/Kth Distinct String in an Array.java @@ -0,0 +1,11 @@ +import java.util.Map.Entry; + +class Solution { + public String kthDistinct(String[] arr, int k) { + return Arrays.stream(arr).collect( + Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting())) + .entrySet().stream().filter(entry -> entry.getValue().equals(1L)).map(Entry::getKey) + .skip(k - 1) + .findFirst().orElse(""); + } +} From 846b482aacd53558d5c6b3cdb8c0925c17e4e307 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Oct 2021 23:07:27 -0700 Subject: [PATCH 0083/1640] Create Smallest Index With Equal Value.java --- Easy/Smallest Index With Equal Value.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Smallest Index With Equal Value.java diff --git a/Easy/Smallest Index With Equal Value.java b/Easy/Smallest Index With Equal Value.java new file mode 100644 index 00000000..1c6d2ea3 --- /dev/null +++ b/Easy/Smallest Index With Equal Value.java @@ -0,0 +1,5 @@ +class Solution { + public int smallestEqual(int[] nums) { + return IntStream.range(0, nums.length).filter(i -> i % 10 == nums[i]).findFirst().orElse(-1); + } +} From cbd9820aa35b7f349f8a5cb177893b0c39b43484 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Oct 2021 12:34:31 -0700 Subject: [PATCH 0084/1640] Create Find the Minimum and Maximum Number of Nodes Between Critical Points.java --- ...mber of Nodes Between Critical Points.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/Find the Minimum and Maximum Number of Nodes Between Critical Points.java diff --git a/Medium/Find the Minimum and Maximum Number of Nodes Between Critical Points.java b/Medium/Find the Minimum and Maximum Number of Nodes Between Critical Points.java new file mode 100644 index 00000000..dfab1434 --- /dev/null +++ b/Medium/Find the Minimum and Maximum Number of Nodes Between Critical Points.java @@ -0,0 +1,31 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public int[] nodesBetweenCriticalPoints(ListNode head) { + int firstIdx = Integer.MAX_VALUE; + int lastIdx = 0; + int minDistance = Integer.MAX_VALUE; + int prevVal = head.val; + for (int i = 0; head.next != null; i++) { + if ((prevVal < head.val && head.next.val < head.val) || + (prevVal > head.val && head.next.val > head.val)) { + if (lastIdx != 0) { + minDistance = Math.min(minDistance, i - lastIdx); + } + firstIdx = Math.min(firstIdx, i); + lastIdx = i; + } + prevVal = head.val; + head = head.next; + } + return minDistance == Integer.MAX_VALUE ? new int[]{-1, -1} : new int[]{minDistance, lastIdx - firstIdx}; + } +} From 04b7792ad3745eae16ed14a6666a37d242d5df52 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 3 Nov 2021 12:48:30 -0700 Subject: [PATCH 0085/1640] Update Assign Cookies.java --- Easy/Assign Cookies.java | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/Easy/Assign Cookies.java b/Easy/Assign Cookies.java index 164c2bfe..f6a91ecd 100644 --- a/Easy/Assign Cookies.java +++ b/Easy/Assign Cookies.java @@ -1,17 +1,14 @@ class Solution { - public int findContentChildren(int[] g, int[] s) { - Arrays.sort(g); - Arrays.sort(s); - int count = 0; - for (int i=0;i= g[j]) { + contentChildrenCount++; + j++; + } } + return contentChildrenCount; + } } From 4f0cefe3a1697ed0a7aa6ad234e4ed08e7e6491f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Nov 2021 17:40:02 -0700 Subject: [PATCH 0086/1640] Update Arranging Coins.java --- Easy/Arranging Coins.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Easy/Arranging Coins.java b/Easy/Arranging Coins.java index bf2f70fa..0719ca73 100644 --- a/Easy/Arranging Coins.java +++ b/Easy/Arranging Coins.java @@ -1,14 +1,18 @@ class Solution { public int arrangeCoins(int n) { - int copy = n; - int count = 0; - for (int i = 1; i <= copy && n > 0; i++) { - n -= i; - if (n < 0) { - break; + long left = 1; + long right = n; + while (left <= right) { + long mid = (left + right) / 2; + long sum = mid * (mid + 1) / 2; + if (sum == n) { + return (int) mid; + } else if (sum > n) { + right = mid - 1; + } else { + left = mid + 1; } - count++; } - return count; + return (int) right; } } From d180b8001c61bf3b3f914c9beb18a0524e05f7ce Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 5 Nov 2021 17:16:40 -0700 Subject: [PATCH 0087/1640] Update Single Number III.java --- Medium/Single Number III.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Medium/Single Number III.java b/Medium/Single Number III.java index 7caf6b85..0409a84a 100644 --- a/Medium/Single Number III.java +++ b/Medium/Single Number III.java @@ -1,15 +1,17 @@ class Solution { public int[] singleNumber(int[] nums) { - Set set = new HashSet<>(); + int xorValue = Integer.highestOneBit(Arrays.stream(nums) + .boxed() + .reduce((a, b) -> a ^ b) + .orElse(0)); + int[] result = new int[2]; for (int num : nums) { - if (set.contains(num)) { - set.remove(num); - } - else { - set.add(num); + if ((xorValue & num) == 0) { + result[0] ^= num; + } else { + result[1] ^= num; } } - Iterator iter = set.iterator(); - return new int[]{iter.next(), iter.next()}; + return result; } } From cca4b898c65c6fae4831a332fc4cbdf300766a17 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 7 Nov 2021 03:11:49 -0800 Subject: [PATCH 0088/1640] Create Count Vowel Substrings of a String.java --- Easy/Count Vowel Substrings of a String.java | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Easy/Count Vowel Substrings of a String.java diff --git a/Easy/Count Vowel Substrings of a String.java b/Easy/Count Vowel Substrings of a String.java new file mode 100644 index 00000000..93ddc212 --- /dev/null +++ b/Easy/Count Vowel Substrings of a String.java @@ -0,0 +1,32 @@ +class Solution { + public int countVowelSubstrings(String word) { + return atMostVowel(word, 5) - atMostVowel(word, 4); + } + + private int atMostVowel(String word, int atMostGoal) { + int start = 0; + int count = 0; + int n = word.length(); + Map map = new HashMap<>(); + for (int end = 0; end < n; end++) { + if (!isVowel(word.charAt(end))) { + map.clear(); + start = end + 1; + } else { + map.put(word.charAt(end), map.getOrDefault(word.charAt(end), 0) + 1); + for (; map.size() > atMostGoal; start++) { + map.put(word.charAt(start), map.get(word.charAt(start)) - 1); + if (map.get(word.charAt(start)) == 0) { + map.remove(word.charAt(start)); + } + } + count += end - start + 1; + } + } + return count; + } + + private boolean isVowel(char c) { + return "aeiou".indexOf(c) != -1; + } +} From 494198f8f2c41c9190b6b4f3d7f341e75071ad99 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 7 Nov 2021 03:25:25 -0800 Subject: [PATCH 0089/1640] Update Multiply Strings.java --- Medium/Multiply Strings.java | 40 +++++++++++++++++------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/Medium/Multiply Strings.java b/Medium/Multiply Strings.java index 9469b6cd..fed474ad 100644 --- a/Medium/Multiply Strings.java +++ b/Medium/Multiply Strings.java @@ -1,35 +1,33 @@ class Solution { - public String multiply(String num1, String num2) { - int m = num1.length(); - int n = num2.length(); - int[] ans = new int[m + n]; - int idx = ans.length - 1; + public String multiply(String num1, String num2) { + int[] result = new int[num1.length() + num2.length() + 1]; + int idx = result.length - 1; for (int i = num1.length() - 1; i >= 0; i--) { int currIdx = idx; int carry = 0; for (int j = num2.length() - 1; j >= 0; j--) { - int temp = ( - ans[currIdx] + Character.getNumericValue(num1.charAt(i)) * Character.getNumericValue(num2.charAt(j)) + carry - ); - carry = temp > 9 ? temp / 10 : 0; - temp = temp > 9 ? temp % 10 : temp; - ans[currIdx--] = temp; + int currValue = + carry + Character.getNumericValue(num1.charAt(i)) * Character.getNumericValue( + num2.charAt(j)) + result[currIdx]; + carry = currValue / 10; + currValue = currValue % 10; + result[currIdx--] = currValue; } while (carry > 0) { - int temp = ans[currIdx] + carry; - carry = temp > 9 ? temp / 10 : 0; - temp = temp > 9 ? temp % 10 : temp; - ans[currIdx--] = temp; + int currValue = carry + result[currIdx]; + carry = currValue / 10; + currValue = currValue % 10; + result[currIdx--] = currValue; } idx--; } - int zeroIdx = 0; - while (zeroIdx < ans.length && ans[zeroIdx] == 0) { - zeroIdx++; - } StringBuilder sb = new StringBuilder(); - while (zeroIdx < ans.length) { - sb.append(ans[zeroIdx++]); + int resultIdx = 0; + while (resultIdx < result.length && result[resultIdx] == 0) { + resultIdx++; + } + while (resultIdx < result.length) { + sb.append(result[resultIdx++]); } return sb.length() == 0 ? "0" : sb.toString(); } From 537c3fb0ff59910bc191901201c80989e5119587 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 7 Nov 2021 19:40:28 -0800 Subject: [PATCH 0090/1640] Create Vowels of All Substrings.java --- Medium/Vowels of All Substrings.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Vowels of All Substrings.java diff --git a/Medium/Vowels of All Substrings.java b/Medium/Vowels of All Substrings.java new file mode 100644 index 00000000..c54486eb --- /dev/null +++ b/Medium/Vowels of All Substrings.java @@ -0,0 +1,12 @@ +class Solution { + public long countVowels(String word) { + long sum = 0; + long n = word.length(); + for (int i = 0; i < n; i++) { + if ("aeiou".indexOf(word.charAt(i)) != -1) { + sum += (i + 1) * (n - i); + } + } + return sum; + } +} From 74cf0f4e57f1db20e7042710d08429ffbb724c32 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Nov 2021 16:55:51 -0800 Subject: [PATCH 0091/1640] Update and rename Easy/Best time to buy & sell a stock II.java to Medium/Best Time to Buy and Sell Stock II.java --- Easy/Best time to buy & sell a stock II.java | 16 ---------------- Medium/Best Time to Buy and Sell Stock II.java | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 Easy/Best time to buy & sell a stock II.java create mode 100644 Medium/Best Time to Buy and Sell Stock II.java diff --git a/Easy/Best time to buy & sell a stock II.java b/Easy/Best time to buy & sell a stock II.java deleted file mode 100644 index cfe8e938..00000000 --- a/Easy/Best time to buy & sell a stock II.java +++ /dev/null @@ -1,16 +0,0 @@ -class Solution { - public int maxProfit(int[] prices) { - int lowest = Integer.MAX_VALUE; - int profit = 0; - for (int i = 0; i < prices.length; i++) { - if (prices[i] > lowest) { - profit += prices[i] - lowest; - lowest = prices[i]; - } - else { - lowest = prices[i]; - } - } - return profit; - } -} diff --git a/Medium/Best Time to Buy and Sell Stock II.java b/Medium/Best Time to Buy and Sell Stock II.java new file mode 100644 index 00000000..675762b3 --- /dev/null +++ b/Medium/Best Time to Buy and Sell Stock II.java @@ -0,0 +1,15 @@ +class Solution { + public int maxProfit(int[] prices) { + int stockBuyPrice = Integer.MAX_VALUE; + int profit = 0; + for (int i = 0; i < prices.length; i++) { + if (prices[i] > stockBuyPrice) { + profit += prices[i] - stockBuyPrice; + stockBuyPrice = prices[i]; + } else { + stockBuyPrice = prices[i]; + } + } + return profit; + } +} From e44acbf5bf7fc4e2ffdc2b253489cc594688b6f4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Nov 2021 16:56:24 -0800 Subject: [PATCH 0092/1640] Delete Explore directory --- .../Best Time to Buy and Sell Stock II.java | 15 --- Explore/Easy/Arrays/Contains Duplicate.java | 11 -- .../Arrays/Intersection of Two Arrays II.java | 34 ------ Explore/Easy/Arrays/Move Zeroes.java | 15 --- Explore/Easy/Arrays/Plus One.java | 18 --- .../Remove Duplicates from Sorted Array.java | 19 --- Explore/Easy/Arrays/Rotate Array.java | 19 --- Explore/Easy/Arrays/Rotate Image.java | 29 ----- Explore/Easy/Arrays/Single Number.java | 10 -- Explore/Easy/Arrays/Two Sum.java | 20 ---- Explore/Easy/Arrays/Valid Sudoku.java | 28 ----- Explore/Easy/Design/Min Stack.java | 42 ------- Explore/Easy/Design/Shuffle an Array.java | 40 ------- .../Best Time to Buy and Sell Stock.java | 16 --- .../Dynamic Programming/Climbing Stairs.java | 17 --- .../Dynamic Programming/House Robber.java | 12 -- .../Dynamic Programming/Maximum Subarray.java | 22 ---- .../Delete Node in a Linked List.java | 14 --- .../Easy/Linked Lists/Linked List Cycle.java | 26 ----- .../Linked Lists/Merge Two Sorted Lists.java | 44 ------- .../Linked Lists/Palindrome Linked List.java | 55 --------- .../Remove Nth Node From End of List.java | 38 ------ .../Linked Lists/Reverse Linked List.java | 24 ---- Explore/Easy/Math/Count Primes.java | 21 ---- Explore/Easy/Math/Fizz Buzz.java | 21 ---- Explore/Easy/Math/Power of Three.java | 11 -- Explore/Easy/Math/Roman to Integer.java | 39 ------- Explore/Easy/Others/Hamming Distance.java | 5 - Explore/Easy/Others/Missing Number.java | 11 -- Explore/Easy/Others/Number of 1 Bits.java | 6 - Explore/Easy/Others/Pascal's Triangle.java | 23 ---- Explore/Easy/Others/Reverse Bits.java | 13 --- Explore/Easy/Others/Valid Parantheses.java | 23 ---- .../First Bad Version.java | 22 ---- .../Merge Sorted Array.java | 20 ---- Explore/Easy/Strings/Count and Say.java | 32 ----- .../First Unique Character in a String.java | 17 --- Explore/Easy/Strings/Implement strStr().java | 5 - .../Easy/Strings/Longest Common Prefix.java | 15 --- Explore/Easy/Strings/Reverse Integer.java | 18 --- Explore/Easy/Strings/Reverse String.java | 6 - Explore/Easy/Strings/String to Integer.java | 32 ----- Explore/Easy/Strings/Valid Anagram.java | 22 ---- Explore/Easy/Strings/Valid Palindrome.java | 16 --- .../Binary Tree Level Order Traversal.java | 39 ------- ...rt Sorted Array to Binary Search Tree.java | 29 ----- .../Trees/Maximum Depth of Binary Tree.java | 16 --- Explore/Easy/Trees/Symmetric Tree.java | 31 ----- .../Trees/Validate Binary Search Tree.java | 32 ----- Explore/Medium/Arrays and Strings/3Sum.java | 34 ------ .../Arrays and Strings/Group Anagrams.java | 30 ----- .../Increasing Triplet Subsequence.java | 21 ---- .../Longest Palindromic Substring.java | 28 ----- ...ubstring Without Repeating Characters.java | 22 ---- .../Arrays and Strings/Missing Ranges.java | 109 ------------------ .../Arrays and Strings/Set Matrix Zeroes.java | 64 ---------- .../Medium/Linked Lists/Add Two Numbers.java | 48 -------- .../Intersection of Two Linked Lists.java | 58 ---------- .../Linked Lists/Odd Even Linked List.java | 30 ----- .../Sorting & Searching/Sort Colors.java | 23 ---- .../Top K Frequent Elements.java | 29 ----- .../Binary Tree Inorder Traversal.java | 31 ----- ...ary Tree Zigzag Level Order Traversal.java | 64 ---------- ...e from Preorder and Inorder Traversal.java | 35 ------ .../Kth Smallest Element in a BST.java | 28 ----- ...ting Next Right Pointers in Each Node.java | 28 ----- 66 files changed, 1775 deletions(-) delete mode 100644 Explore/Easy/Arrays/Best Time to Buy and Sell Stock II.java delete mode 100644 Explore/Easy/Arrays/Contains Duplicate.java delete mode 100644 Explore/Easy/Arrays/Intersection of Two Arrays II.java delete mode 100644 Explore/Easy/Arrays/Move Zeroes.java delete mode 100644 Explore/Easy/Arrays/Plus One.java delete mode 100644 Explore/Easy/Arrays/Remove Duplicates from Sorted Array.java delete mode 100644 Explore/Easy/Arrays/Rotate Array.java delete mode 100644 Explore/Easy/Arrays/Rotate Image.java delete mode 100644 Explore/Easy/Arrays/Single Number.java delete mode 100644 Explore/Easy/Arrays/Two Sum.java delete mode 100644 Explore/Easy/Arrays/Valid Sudoku.java delete mode 100644 Explore/Easy/Design/Min Stack.java delete mode 100644 Explore/Easy/Design/Shuffle an Array.java delete mode 100644 Explore/Easy/Dynamic Programming/Best Time to Buy and Sell Stock.java delete mode 100644 Explore/Easy/Dynamic Programming/Climbing Stairs.java delete mode 100644 Explore/Easy/Dynamic Programming/House Robber.java delete mode 100644 Explore/Easy/Dynamic Programming/Maximum Subarray.java delete mode 100644 Explore/Easy/Linked Lists/Delete Node in a Linked List.java delete mode 100644 Explore/Easy/Linked Lists/Linked List Cycle.java delete mode 100644 Explore/Easy/Linked Lists/Merge Two Sorted Lists.java delete mode 100644 Explore/Easy/Linked Lists/Palindrome Linked List.java delete mode 100644 Explore/Easy/Linked Lists/Remove Nth Node From End of List.java delete mode 100644 Explore/Easy/Linked Lists/Reverse Linked List.java delete mode 100644 Explore/Easy/Math/Count Primes.java delete mode 100644 Explore/Easy/Math/Fizz Buzz.java delete mode 100644 Explore/Easy/Math/Power of Three.java delete mode 100644 Explore/Easy/Math/Roman to Integer.java delete mode 100644 Explore/Easy/Others/Hamming Distance.java delete mode 100644 Explore/Easy/Others/Missing Number.java delete mode 100644 Explore/Easy/Others/Number of 1 Bits.java delete mode 100644 Explore/Easy/Others/Pascal's Triangle.java delete mode 100644 Explore/Easy/Others/Reverse Bits.java delete mode 100644 Explore/Easy/Others/Valid Parantheses.java delete mode 100644 Explore/Easy/Sorting and Searching/First Bad Version.java delete mode 100644 Explore/Easy/Sorting and Searching/Merge Sorted Array.java delete mode 100644 Explore/Easy/Strings/Count and Say.java delete mode 100644 Explore/Easy/Strings/First Unique Character in a String.java delete mode 100644 Explore/Easy/Strings/Implement strStr().java delete mode 100644 Explore/Easy/Strings/Longest Common Prefix.java delete mode 100644 Explore/Easy/Strings/Reverse Integer.java delete mode 100644 Explore/Easy/Strings/Reverse String.java delete mode 100644 Explore/Easy/Strings/String to Integer.java delete mode 100644 Explore/Easy/Strings/Valid Anagram.java delete mode 100644 Explore/Easy/Strings/Valid Palindrome.java delete mode 100644 Explore/Easy/Trees/Binary Tree Level Order Traversal.java delete mode 100644 Explore/Easy/Trees/Convert Sorted Array to Binary Search Tree.java delete mode 100644 Explore/Easy/Trees/Maximum Depth of Binary Tree.java delete mode 100644 Explore/Easy/Trees/Symmetric Tree.java delete mode 100644 Explore/Easy/Trees/Validate Binary Search Tree.java delete mode 100644 Explore/Medium/Arrays and Strings/3Sum.java delete mode 100644 Explore/Medium/Arrays and Strings/Group Anagrams.java delete mode 100644 Explore/Medium/Arrays and Strings/Increasing Triplet Subsequence.java delete mode 100644 Explore/Medium/Arrays and Strings/Longest Palindromic Substring.java delete mode 100644 Explore/Medium/Arrays and Strings/Longest Substring Without Repeating Characters.java delete mode 100644 Explore/Medium/Arrays and Strings/Missing Ranges.java delete mode 100644 Explore/Medium/Arrays and Strings/Set Matrix Zeroes.java delete mode 100644 Explore/Medium/Linked Lists/Add Two Numbers.java delete mode 100644 Explore/Medium/Linked Lists/Intersection of Two Linked Lists.java delete mode 100644 Explore/Medium/Linked Lists/Odd Even Linked List.java delete mode 100644 Explore/Medium/Sorting & Searching/Sort Colors.java delete mode 100644 Explore/Medium/Sorting & Searching/Top K Frequent Elements.java delete mode 100644 Explore/Medium/Trees and Graphs/Binary Tree Inorder Traversal.java delete mode 100644 Explore/Medium/Trees and Graphs/Binary Tree Zigzag Level Order Traversal.java delete mode 100644 Explore/Medium/Trees and Graphs/Construct Binary Tree from Preorder and Inorder Traversal.java delete mode 100644 Explore/Medium/Trees and Graphs/Kth Smallest Element in a BST.java delete mode 100644 Explore/Medium/Trees and Graphs/Populating Next Right Pointers in Each Node.java diff --git a/Explore/Easy/Arrays/Best Time to Buy and Sell Stock II.java b/Explore/Easy/Arrays/Best Time to Buy and Sell Stock II.java deleted file mode 100644 index b8ac504e..00000000 --- a/Explore/Easy/Arrays/Best Time to Buy and Sell Stock II.java +++ /dev/null @@ -1,15 +0,0 @@ -class Solution { - public int maxProfit(int[] prices) { - int profit = 0; - - for (int i=1;i 0) { - profit += diff; - } - } - - return profit; - } -} diff --git a/Explore/Easy/Arrays/Contains Duplicate.java b/Explore/Easy/Arrays/Contains Duplicate.java deleted file mode 100644 index 4268a04d..00000000 --- a/Explore/Easy/Arrays/Contains Duplicate.java +++ /dev/null @@ -1,11 +0,0 @@ -class Solution { - public boolean containsDuplicate(int[] nums) { - Set arr = new HashSet<>(); - - for (int i=0;i map1 = new HashMap<>(); - Map map2 = new HashMap<>(); - - for (int i=0;i list = new ArrayList<>(); - - for(Map.Entry entry : map1.entrySet()) { - if (map2.containsKey(entry.getKey())) { - int count = Math.min(entry.getValue(), map2.get(entry.getKey())); - while (count > 0) { - list.add(entry.getKey()); - count--; - } - } - } - - int[] ans = new int[list.size()]; - - for (int i=0;i=0;i--) { - if (digits[i] < 9) { - digits[i]++; - return digits; - } - - digits[i] = 0; - } - - int[] newDigits = new int[digits.length+1]; - newDigits[0] = 1; - - return newDigits; - } -} diff --git a/Explore/Easy/Arrays/Remove Duplicates from Sorted Array.java b/Explore/Easy/Arrays/Remove Duplicates from Sorted Array.java deleted file mode 100644 index 7f1b92d8..00000000 --- a/Explore/Easy/Arrays/Remove Duplicates from Sorted Array.java +++ /dev/null @@ -1,19 +0,0 @@ -class Solution { - public int removeDuplicates(int[] nums) { - int n = nums.length; - - if (n == 0 || n == 1) return n; - - int j = 0; - - for (int i=0;i map = new HashMap<>(); - int[] ans = new int[2]; - - for (int i=0;i rows = new HashSet(); - Set columns = new HashSet(); - Set cube = new HashSet(); - - for (int j = 0; j < 9;j++) { - - if(board[i][j]!='.' && !rows.add(board[i][j])) - return false; - - if(board[j][i]!='.' && !columns.add(board[j][i])) - return false; - - int RowIndex = 3*(i/3); - int ColIndex = 3*(i%3); - - if(board[RowIndex + j/3][ColIndex + j%3]!='.' && !cube.add(board[RowIndex + j/3][ColIndex + j%3])) - return false; - } - - } - - return true; - } -} diff --git a/Explore/Easy/Design/Min Stack.java b/Explore/Easy/Design/Min Stack.java deleted file mode 100644 index 41c7c6ed..00000000 --- a/Explore/Easy/Design/Min Stack.java +++ /dev/null @@ -1,42 +0,0 @@ -class MinStack { - private Stack stack = new Stack(); - private Stack minStack = new Stack(); - - public void push(int x) { - stack.push(x); - if (minStack.size() != 0) { - int min = minStack.peek(); - if (x <= min) { - minStack.push(x); - } - } else { - minStack.push(x); - } - } - - public void pop() { - int x = stack.pop(); - if (minStack.size() != 0) { - if (x == minStack.peek()) { - minStack.pop(); - } - } - } - - public int top() { - return stack.peek(); - } - - public int getMin() { - return minStack.peek(); - } -} - -/** - * Your MinStack object will be instantiated and called as such: - * MinStack obj = new MinStack(); - * obj.push(x); - * obj.pop(); - * int param_3 = obj.top(); - * int param_4 = obj.getMin(); - */ diff --git a/Explore/Easy/Design/Shuffle an Array.java b/Explore/Easy/Design/Shuffle an Array.java deleted file mode 100644 index 05fc1174..00000000 --- a/Explore/Easy/Design/Shuffle an Array.java +++ /dev/null @@ -1,40 +0,0 @@ -class Solution { - - private int[] nums; - private Random random; - - public Solution(int[] nums) { - this.nums = nums; - random = new Random(); - } - - /** Resets the array to its original configuration and return it. */ - public int[] reset() { - return nums; - } - - /** Returns a random shuffling of the array. */ - public int[] shuffle() { - if (nums == null) return null; - int[] shuf = nums.clone(); - for (int i=1;i n) return 0; - if (i == n) return 1; - - if (memo[i] > 0) return memo[i]; - - memo[i] = climbStairs(memo, i+1, n) + climbStairs(memo, i+2, n); - - return memo[i]; - } -} diff --git a/Explore/Easy/Dynamic Programming/House Robber.java b/Explore/Easy/Dynamic Programming/House Robber.java deleted file mode 100644 index 4f5b502c..00000000 --- a/Explore/Easy/Dynamic Programming/House Robber.java +++ /dev/null @@ -1,12 +0,0 @@ -class Solution { - public int rob(int[] nums) { - int[][] dp = new int[nums.length+1][2]; - - for (int i=1;i<=nums.length;i++) { - dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1]); - dp[i][1] = nums[i-1] + dp[i-1][0]; - } - - return Math.max(dp[nums.length][0], dp[nums.length][1]); - } -} diff --git a/Explore/Easy/Dynamic Programming/Maximum Subarray.java b/Explore/Easy/Dynamic Programming/Maximum Subarray.java deleted file mode 100644 index 70fa9505..00000000 --- a/Explore/Easy/Dynamic Programming/Maximum Subarray.java +++ /dev/null @@ -1,22 +0,0 @@ -class Solution { - public int maxSubArray(int[] nums) { - - int sum = 0; - int max = Integer.MIN_VALUE; - int i = 0; - - while (i l2.val) { - temp.next = new ListNode(l2.val); - temp = temp.next; - l2 = l2.next; - } - else { - temp.next = new ListNode(l1.val); - temp = temp.next; - l1 = l1.next; - } - } - else if (l1 != null) { - temp.next = new ListNode(l1.val); - temp = temp.next; - l1 = l1.next; - } - else if (l2 != null) { - temp.next = new ListNode(l2.val); - temp = temp.next; - l2 = l2.next; - } - } - - return ans.next; - } -} diff --git a/Explore/Easy/Linked Lists/Palindrome Linked List.java b/Explore/Easy/Linked Lists/Palindrome Linked List.java deleted file mode 100644 index 2b7a5c25..00000000 --- a/Explore/Easy/Linked Lists/Palindrome Linked List.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { val = x; } - * } - */ -class Solution { - public boolean isPalindrome(ListNode head) { - if (head == null || head.next == null) return true; - int l = 0; - ListNode curr = head; - - while (curr != null) { - l++; - curr = curr.next; - } - - int i = 1; - curr = head; - - while (i < l/2) { - curr = curr.next; - i++; - } - - ListNode mid = reverse(curr.next); - - curr = head; - - while(mid != null) { - if (curr.val != mid.val) return false; - curr = curr.next; - mid = mid.next; - } - - return true; - } - - public ListNode reverse(ListNode head) { - ListNode curr = head; - ListNode prev = null; - ListNode next = null; - - while(curr != null) { - next = curr.next; - curr.next = prev; - prev = curr; - curr = next; - } - - return prev; - } -} diff --git a/Explore/Easy/Linked Lists/Remove Nth Node From End of List.java b/Explore/Easy/Linked Lists/Remove Nth Node From End of List.java deleted file mode 100644 index a319e3ec..00000000 --- a/Explore/Easy/Linked Lists/Remove Nth Node From End of List.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { val = x; } - * } - */ -class Solution { - public ListNode removeNthFromEnd(ListNode head, int n) { - int l = 0; - ListNode curr = head; - - while (curr != null) { - l++; - curr = curr.next; - } - - if (l -n == 0) { - ListNode tmp = head.next; - head = null; - return tmp; - } - - curr = head; - int c = 1; - l = l-n; - - while(c != l) { - c++; - curr = curr.next; - } - - curr.next = curr.next.next; - - return head; - } -} diff --git a/Explore/Easy/Linked Lists/Reverse Linked List.java b/Explore/Easy/Linked Lists/Reverse Linked List.java deleted file mode 100644 index 8aeaa6ae..00000000 --- a/Explore/Easy/Linked Lists/Reverse Linked List.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { val = x; } - * } - */ -class Solution { - public ListNode reverseList(ListNode head) { - ListNode curr = head; - ListNode prev = null; - ListNode next = null; - - while (curr != null) { - next = curr.next; - curr.next = prev; - prev = curr; - curr = next; - } - - return prev; - } -} diff --git a/Explore/Easy/Math/Count Primes.java b/Explore/Easy/Math/Count Primes.java deleted file mode 100644 index cce1c733..00000000 --- a/Explore/Easy/Math/Count Primes.java +++ /dev/null @@ -1,21 +0,0 @@ -class Solution { - public int countPrimes(int n) { - int[] arr = new int[n]; - - for (int i=2;i fizzBuzz(int n) { - List ans = new ArrayList<>(); - for (int i=1;i<=n;i++) { - if (i%3 != 0 && i%5 != 0) { - ans.add(String.valueOf(i)); - } - else if (i%3 == 0 && i%5 == 0) { - ans.add("FizzBuzz"); - } - else if(i%3 == 0) { - ans.add("Fizz"); - } - else { - ans.add("Buzz"); - } - } - - return ans; - } -} diff --git a/Explore/Easy/Math/Power of Three.java b/Explore/Easy/Math/Power of Three.java deleted file mode 100644 index ed03bb74..00000000 --- a/Explore/Easy/Math/Power of Three.java +++ /dev/null @@ -1,11 +0,0 @@ -class Solution { - public boolean isPowerOfThree(int n) { - if (n < 1) return false; - - while (n%3 == 0) { - n /= 3; - } - - return n == 1; - } -} diff --git a/Explore/Easy/Math/Roman to Integer.java b/Explore/Easy/Math/Roman to Integer.java deleted file mode 100644 index 2078e1d5..00000000 --- a/Explore/Easy/Math/Roman to Integer.java +++ /dev/null @@ -1,39 +0,0 @@ -class Solution { - public int romanToInt(String s) { - String symbol = "IVXLCDM"; - int[] val = {1, 5, 10, 50, 100, 500, 1000}; - - char[] s_char = s.toCharArray(); - - int[] s_val = new int[s_char.length]; - - for (int i=0;i= s2) { - total += s1; - k++; - } - else{ - total += s2-s1; - k += 2; - } - } - else { - total += s1; - k++; - } - } - - return total; - } -} diff --git a/Explore/Easy/Others/Hamming Distance.java b/Explore/Easy/Others/Hamming Distance.java deleted file mode 100644 index 057a1b25..00000000 --- a/Explore/Easy/Others/Hamming Distance.java +++ /dev/null @@ -1,5 +0,0 @@ -class Solution { - public int hammingDistance(int x, int y) { - return Integer.bitCount(x^y); - } -} diff --git a/Explore/Easy/Others/Missing Number.java b/Explore/Easy/Others/Missing Number.java deleted file mode 100644 index c9886640..00000000 --- a/Explore/Easy/Others/Missing Number.java +++ /dev/null @@ -1,11 +0,0 @@ -class Solution { - public int missingNumber(int[] nums) { - int xor = 0; - int i = 0; - for (i=0;i map = new HashMap<>(); - public List> generate(int numRows) { - List> ans = new ArrayList<>(); - - for (int i=0;i temp = new ArrayList<>(); - for(int j = 0;j<=i;j++) { - if (i == j || j == 0) { - temp.add(1); - } - else { - temp.add(ans.get(i-1).get(j-1) + ans.get(i-1).get(j)); - } - } - - ans.add(temp); - } - - return ans; - } -} diff --git a/Explore/Easy/Others/Reverse Bits.java b/Explore/Easy/Others/Reverse Bits.java deleted file mode 100644 index 36ec5763..00000000 --- a/Explore/Easy/Others/Reverse Bits.java +++ /dev/null @@ -1,13 +0,0 @@ -public class Solution { - // you need treat n as an unsigned value - public int reverseBits(int n) { - int result = 0; - for (int i = 0; i < 32; i++) { - result += n & 1; - n >>>= 1; - if (i < 31) - result <<= 1; - } - return result; - } -} diff --git a/Explore/Easy/Others/Valid Parantheses.java b/Explore/Easy/Others/Valid Parantheses.java deleted file mode 100644 index 10033b6a..00000000 --- a/Explore/Easy/Others/Valid Parantheses.java +++ /dev/null @@ -1,23 +0,0 @@ -class Solution { - public boolean isValid(String s) { - String start = "({["; - String end = ")}]"; - - Stack stack = new Stack<>(); - - for (int i=0;i=0 && j>=0) { - if (nums1[i] > nums2[j]) { - nums1[k--] = nums1[i--]; - } - else { - nums1[k--] = nums2[j--]; - } - } - - while(j >= 0) { - nums1[k--] = nums2[j--]; - } - } -} diff --git a/Explore/Easy/Strings/Count and Say.java b/Explore/Easy/Strings/Count and Say.java deleted file mode 100644 index 8fd83c74..00000000 --- a/Explore/Easy/Strings/Count and Say.java +++ /dev/null @@ -1,32 +0,0 @@ -class Solution { - public String countAndSay(int n) { - String first = "1"; - String str = "11"; - - if (n == 1) return first; - if (n == 2) return str; - - for (int i = 3; i<=n; i++) { - str += "$"; - int len = str.length(); - - int cnt = 1; - String tmp = ""; - - for (int j = 1; j < len; j++) { - if (str.charAt(j) != str.charAt(j-1)) { - tmp += String.valueOf(cnt); - tmp += str.charAt(j-1); - - cnt = 1; - } - - else cnt++; - } - - str = tmp; - } - - return str; - } -} diff --git a/Explore/Easy/Strings/First Unique Character in a String.java b/Explore/Easy/Strings/First Unique Character in a String.java deleted file mode 100644 index 5c20c16d..00000000 --- a/Explore/Easy/Strings/First Unique Character in a String.java +++ /dev/null @@ -1,17 +0,0 @@ -class Solution { - public int firstUniqChar(String s) { - int[] ascii = new int[26]; - - for (int i=0;i= '0' && c[i] <= '9') { - int digit = c[i] - '0'; - if (num > bound || (num == bound && digit > 7)) { - return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; - } - - num = num * 10 + digit; - i++; - } - return sign * num; - } -} diff --git a/Explore/Easy/Strings/Valid Anagram.java b/Explore/Easy/Strings/Valid Anagram.java deleted file mode 100644 index aaa0953a..00000000 --- a/Explore/Easy/Strings/Valid Anagram.java +++ /dev/null @@ -1,22 +0,0 @@ -class Solution { - public boolean isAnagram(String s, String t) { - - if (s.length() != t.length()) return false; - - int[] ascii = new int[26]; - - for (int i=0;i= 97 && (int) s.charAt(i) <= 122) || Character.isDigit(s.charAt(i))) { - sb.append(String.valueOf(s.charAt(i))); - } - } - - return sb.toString().toLowerCase().equals(sb.reverse().toString().toLowerCase()); - } -} diff --git a/Explore/Easy/Trees/Binary Tree Level Order Traversal.java b/Explore/Easy/Trees/Binary Tree Level Order Traversal.java deleted file mode 100644 index c1323496..00000000 --- a/Explore/Easy/Trees/Binary Tree Level Order Traversal.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public List> levelOrder(TreeNode root) { - Queue queue = new LinkedList<>(); - List> ans = new ArrayList<>(); - - if (root == null) return ans; - - queue.add(root); - - while(!queue.isEmpty()) { - List temp = new ArrayList<>(); - while (!queue.isEmpty()) { - temp.add(queue.remove()); - } - - List lst = new ArrayList<>(); - - for (TreeNode t : temp) { - lst.add(t.val); - - if (t.left != null) queue.add(t.left); - if (t.right != null) queue.add(t.right); - } - - ans.add(lst); - } - - return ans; - } -} diff --git a/Explore/Easy/Trees/Convert Sorted Array to Binary Search Tree.java b/Explore/Easy/Trees/Convert Sorted Array to Binary Search Tree.java deleted file mode 100644 index 92393eda..00000000 --- a/Explore/Easy/Trees/Convert Sorted Array to Binary Search Tree.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public TreeNode sortedArrayToBST(int[] nums) { - return sortedArrayToBST(nums, 0, nums.length-1); - } - - public TreeNode sortedArrayToBST(int arr[], int start, int end) { - - if (start > end) { - return null; - } - - int mid = (start + end) / 2; - - TreeNode node = new TreeNode(arr[mid]); - node.left = sortedArrayToBST(arr, start, mid - 1); - node.right = sortedArrayToBST(arr, mid + 1, end); - - return node; - } -} diff --git a/Explore/Easy/Trees/Maximum Depth of Binary Tree.java b/Explore/Easy/Trees/Maximum Depth of Binary Tree.java deleted file mode 100644 index 8dc92307..00000000 --- a/Explore/Easy/Trees/Maximum Depth of Binary Tree.java +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public int maxDepth(TreeNode root) { - if (root == null) return 0; - - return 1 + Math.max(maxDepth(root.left), maxDepth(root.right)); - } -} diff --git a/Explore/Easy/Trees/Symmetric Tree.java b/Explore/Easy/Trees/Symmetric Tree.java deleted file mode 100644 index 65a6d838..00000000 --- a/Explore/Easy/Trees/Symmetric Tree.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public boolean isSymmetric(TreeNode root) { - if (root == null) return true; - - return isSymmetric(root.left, root.right); - } - - public boolean isSymmetric(TreeNode rLeft, TreeNode rRight) { - if (rLeft == null && rRight == null) { - return true; - } - if ((rLeft == null && rRight != null) || (rLeft != null && rRight == null)) { - return false; - } - - if (rLeft != null && rRight != null) { - if (rLeft.val != rRight.val) return false; - } - - return isSymmetric(rLeft.left, rRight.right) && isSymmetric(rLeft.right, rRight.left); - } -} diff --git a/Explore/Easy/Trees/Validate Binary Search Tree.java b/Explore/Easy/Trees/Validate Binary Search Tree.java deleted file mode 100644 index ad07834a..00000000 --- a/Explore/Easy/Trees/Validate Binary Search Tree.java +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public boolean isValidBST(TreeNode root) { - Stack stack = new Stack<>(); - TreeNode prev = null; - - while (root != null || !stack.empty()) { - while(root != null) { - stack.push(root); - root = root.left; - } - - if (prev != null && prev.val >= stack.peek().val) { - return false; - } - - root = stack.pop(); - prev = root; - root = root.right; - } - - return true; - } -} diff --git a/Explore/Medium/Arrays and Strings/3Sum.java b/Explore/Medium/Arrays and Strings/3Sum.java deleted file mode 100644 index fa68d8bb..00000000 --- a/Explore/Medium/Arrays and Strings/3Sum.java +++ /dev/null @@ -1,34 +0,0 @@ -class Solution { - public List> threeSum(int[] nums) { - - Arrays.sort(nums); - - List> ans = new ArrayList<>(); - - for (int i=0;i 0 && nums[i] == nums[i-1]) continue; - - int j = i+1; - int k = nums.length-1; - - int target = -nums[i]; - - while (j target) k--; - else { - j++; - } - } - } - - return ans; - } -} diff --git a/Explore/Medium/Arrays and Strings/Group Anagrams.java b/Explore/Medium/Arrays and Strings/Group Anagrams.java deleted file mode 100644 index 758782ae..00000000 --- a/Explore/Medium/Arrays and Strings/Group Anagrams.java +++ /dev/null @@ -1,30 +0,0 @@ -class Solution { - public List> groupAnagrams(String[] strs) { - Map> map = new HashMap<>(); - - for (String s : strs) { - char[] ar = s.toCharArray(); - Arrays.sort(ar); - String s_sorted = String.valueOf(ar); - - if (map.containsKey(s_sorted)) { - List temp = map.get(s_sorted); - temp.add(s); - map.put(s_sorted, temp); - } - else { - List temp = new ArrayList<>(); - temp.add(s); - map.put(s_sorted, temp); - } - } - - List> ans = new ArrayList<>(); - - for (Map.Entry> entry : map.entrySet()) { - ans.add(entry.getValue()); - } - - return ans; - } -} diff --git a/Explore/Medium/Arrays and Strings/Increasing Triplet Subsequence.java b/Explore/Medium/Arrays and Strings/Increasing Triplet Subsequence.java deleted file mode 100644 index b90490c6..00000000 --- a/Explore/Medium/Arrays and Strings/Increasing Triplet Subsequence.java +++ /dev/null @@ -1,21 +0,0 @@ -class Solution { - public boolean increasingTriplet(int[] nums) { - if (nums.length < 3) return false; - - int x = Integer.MAX_VALUE; - int y = Integer.MAX_VALUE; - - for (int i=0;i= z) { - x = z; - } - else if (y >= z) { - y = z; - } - else return true; - } - - return false; - } -} diff --git a/Explore/Medium/Arrays and Strings/Longest Palindromic Substring.java b/Explore/Medium/Arrays and Strings/Longest Palindromic Substring.java deleted file mode 100644 index 569508e3..00000000 --- a/Explore/Medium/Arrays and Strings/Longest Palindromic Substring.java +++ /dev/null @@ -1,28 +0,0 @@ -class Solution { - public String longestPalindrome(String s) { - int start = 0; - int end = 0; - - for (int i=0;i end - start) { - start = i - (len - 1)/2; - end = i + len/2; - } - } - - return s.substring(start, end+1); - } - - public int expandCenter(String s, int left, int right) { - while (left >=0 && right < s.length() && s.charAt(left) == s.charAt(right)) { - left--; - right++; - } - - return right - left - 1; - } -} diff --git a/Explore/Medium/Arrays and Strings/Longest Substring Without Repeating Characters.java b/Explore/Medium/Arrays and Strings/Longest Substring Without Repeating Characters.java deleted file mode 100644 index bde380e6..00000000 --- a/Explore/Medium/Arrays and Strings/Longest Substring Without Repeating Characters.java +++ /dev/null @@ -1,22 +0,0 @@ -class Solution { - public int lengthOfLongestSubstring(String s) { - - Set set = new HashSet<>(); - int maxLen = Integer.MIN_VALUE; - - int i=0, j=0; - int n = s.length(); - - while(i findMissingRanges(int[] nums, int lower, int upper) { - List list = new ArrayList<>(); - - if (nums.length == 0) { - list.add(getString(lower, upper)); - return list; - } - - List range = getRange(nums); - int i = 0; - - while (lower <= upper && i < range.size()) { - String s = range.get(i); - if (s.indexOf('>') != -1) { - int start = Integer.parseInt(s.split("->")[0]); - int end = Integer.parseInt(s.split("->")[1]); - - if (lower != start) { - list.add(getString(lower, start-1)); - } - - lower = end + 1; - } - else { - int num = Integer.parseInt(s); - if (lower != num) { - list.add(getString(lower, num-1)); - } - - lower = num + 1; - } - - i++; - } - - String s = range.get(range.size()-1); - if (s.indexOf('>') != -1) { - int start = Integer.parseInt(s.split("->")[0]); - int end = Integer.parseInt(s.split("->")[1]); - - if (end != upper) { - list.add(getString(end+1, upper)); - } - } - else { - int num = Integer.parseInt(s); - if (upper != num) { - list.add(getString(num+1, upper)); - } - } - - return list; - } - - private static List getRange(int[] num) { - - List list = new ArrayList<>(); - if (num.length == 0) { - return list; - } - - int i = 1; - StringBuilder sb = new StringBuilder(); - sb.append(num[0]); - int count = 1; - - while (i 1) { - sb.append("->").append(num[i-1]); - list.add(sb.toString()); - } - else { - list.add(sb.toString()); - } - - sb = new StringBuilder(); - sb.append(num[i]); - count = 1; - } - - i++; - } - - if (count > 1) { - sb.append("->").append(num[num.length-1]); - } - - list.add(sb.toString()); - - return list; - } - - private static String getString(int start, int end) { - StringBuilder sb = new StringBuilder(); - if (start == end) { - sb.append(start); - } - else { - sb.append(start).append("->").append(end); - } - - return sb.toString(); - } -} diff --git a/Explore/Medium/Arrays and Strings/Set Matrix Zeroes.java b/Explore/Medium/Arrays and Strings/Set Matrix Zeroes.java deleted file mode 100644 index 6c043646..00000000 --- a/Explore/Medium/Arrays and Strings/Set Matrix Zeroes.java +++ /dev/null @@ -1,64 +0,0 @@ -class Solution { - public void setZeroes(int[][] arr) { - if (arr.length == 0 || arr[0].length == 0) { - return; - } - - - int numOfRows = arr.length; - int numOfCols = arr[0].length; - boolean firstRowZero = false; - boolean firstColZero = false; - - for (int i = 0; i < numOfCols; i++) { - if (arr[0][i] == 0) { - firstRowZero = true; - break; - } - } - - for (int i = 0; i < numOfRows; i++) { - if (arr[i][0] == 0) { - firstColZero = true; - break; - } - } - - for (int i = 1; i < numOfRows; i++) { - for (int j = 0; j < numOfCols; j++) { - if (arr[i][j] == 0) { - arr[0][j] = 0; - arr[i][0] = 0; - } - } - } - - for (int i = 1; i < numOfRows; i++) { - if (arr[i][0] == 0) { - for (int j = 1; j < numOfCols; j++) { - arr[i][j] = 0; - } - } - } - - for (int i = 0; i < numOfCols; i++) { - if (arr[0][i] == 0) { - for (int j = 1; j < numOfRows; j++) { - arr[j][i] = 0; - } - } - } - - if (firstRowZero) { - for (int i = 0; i < numOfCols; i++) { - arr[0][i] = 0; - } - } - - if (firstColZero) { - for (int i = 0; i < numOfRows; i++) { - arr[i][0] = 0; - } - } - } -} diff --git a/Explore/Medium/Linked Lists/Add Two Numbers.java b/Explore/Medium/Linked Lists/Add Two Numbers.java deleted file mode 100644 index 5ec675ce..00000000 --- a/Explore/Medium/Linked Lists/Add Two Numbers.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { val = x; } - * } - */ -class Solution { - public ListNode addTwoNumbers(ListNode l1, ListNode l2) { - ListNode ans = new ListNode(0); - ListNode curr = ans; - - int carry = 0; - - while (l1 != null || l2 != null) { - - int temp = 0; - - if (l1 != null && l2 != null) { - temp = l1.val + l2.val + carry; - l1 = l1.next; - l2 = l2.next; - } - else if (l1 != null && l2 == null) { - temp = l1.val + carry; - l1 = l1.next; - } - else if (l1 == null && l2 != null) { - temp = l2.val + carry; - l2 = l2.next; - } - - carry = temp > 9 ? temp/10 : 0; - temp = temp > 9 ? temp%10 : temp; - - curr.next = new ListNode(temp); - curr = curr.next; - } - - if (carry != 0) { - curr.next = new ListNode(carry); - curr = curr.next; - } - - return ans.next; - } -} diff --git a/Explore/Medium/Linked Lists/Intersection of Two Linked Lists.java b/Explore/Medium/Linked Lists/Intersection of Two Linked Lists.java deleted file mode 100644 index 316eefbe..00000000 --- a/Explore/Medium/Linked Lists/Intersection of Two Linked Lists.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { - * val = x; - * next = null; - * } - * } - */ -public class Solution { - public ListNode getIntersectionNode(ListNode headA, ListNode headB) { - - if (headA == null || headB == null) return null; - - int lenA = getLength(headA); - int lenB = getLength(headB); - - ListNode currA = headA; - ListNode currB = headB; - - if (lenB > lenA) { - int diff = lenB - lenA; - - while (diff != 0) { - currB = currB.next; - diff--; - } - } - else { - int diff = lenA - lenB; - - while (diff != 0) { - currA = currA.next; - diff--; - } - } - - while(currB != null) { - if (currA == currB) return currA; - currA = currA.next; - currB = currB.next; - } - - return null; - } - - public int getLength(ListNode head) { - int l = 0; - while (head != null) { - head = head.next; - l++; - } - - return l; - } -} diff --git a/Explore/Medium/Linked Lists/Odd Even Linked List.java b/Explore/Medium/Linked Lists/Odd Even Linked List.java deleted file mode 100644 index 92b55544..00000000 --- a/Explore/Medium/Linked Lists/Odd Even Linked List.java +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { val = x; } - * } - */ -class Solution { - public ListNode oddEvenList(ListNode head) { - - if (head == null || head.next == null) return head; - - ListNode odd = head; - ListNode even = head.next; - ListNode evenHead = even; - - while(even != null && even.next != null) { - odd.next = odd.next.next; - even.next = even.next.next; - - odd = odd.next; - even = even.next; - } - - odd.next = evenHead; - - return head; - } -} diff --git a/Explore/Medium/Sorting & Searching/Sort Colors.java b/Explore/Medium/Sorting & Searching/Sort Colors.java deleted file mode 100644 index 4a8fdd4e..00000000 --- a/Explore/Medium/Sorting & Searching/Sort Colors.java +++ /dev/null @@ -1,23 +0,0 @@ -class Solution { - public void sortColors(int[] nums) { - - int n0 = -1; - int n1 = -1; - int n2 = -1; - - for (int i=0;i topKFrequent(int[] nums, int k) { - List[] bucket = new List[nums.length+1]; - Map frequencyMap = new HashMap<>(); - for (int n : nums) { - frequencyMap.put(n, frequencyMap.getOrDefault(n, 0) + 1); - } - - for (int key : frequencyMap.keySet()) { - int frequency = frequencyMap.get(key); - - if (bucket[frequency] == null) { - bucket[frequency] = new ArrayList<>(); - } - - bucket[frequency].add(key); - } - - List res = new ArrayList<>(); - - for (int pos = bucket.length - 1; pos >= 0 && res.size() < k; pos--) { - if (bucket[pos] != null) { - res.addAll(bucket[pos]); - } - } - - return res; - } -} diff --git a/Explore/Medium/Trees and Graphs/Binary Tree Inorder Traversal.java b/Explore/Medium/Trees and Graphs/Binary Tree Inorder Traversal.java deleted file mode 100644 index 811b92e6..00000000 --- a/Explore/Medium/Trees and Graphs/Binary Tree Inorder Traversal.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public List inorderTraversal(TreeNode root) { - List list = new ArrayList<>(); - - Stack stack = new Stack<>(); - - while (root != null || !stack.empty()) { - - while(root != null) { - stack.push(root); - root = root.left; - } - - root = stack.pop(); - - list.add(root.val); - root = root.right; - } - - return list; - } -} diff --git a/Explore/Medium/Trees and Graphs/Binary Tree Zigzag Level Order Traversal.java b/Explore/Medium/Trees and Graphs/Binary Tree Zigzag Level Order Traversal.java deleted file mode 100644 index a87e311c..00000000 --- a/Explore/Medium/Trees and Graphs/Binary Tree Zigzag Level Order Traversal.java +++ /dev/null @@ -1,64 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public List> zigzagLevelOrder(TreeNode root) { - - Stack s1 = new Stack<>(); - Stack s2 = new Stack<>(); - - List> ans = new ArrayList<>(); - - if (root == null) return ans; - - s1.push(root); - - while (!s1.empty() || !s2.empty()) { - - List list = new ArrayList<>(); - - while (!s1.empty()) { - TreeNode temp = s1.pop(); - - list.add(temp.val); - - if (temp.left != null) { - s2.add(temp.left); - } - - if (temp.right != null) { - s2.add(temp.right); - } - } - - if (list.size() > 0) { - ans.add(list); - continue; - } - - while (!s2.empty()) { - TreeNode temp = s2.pop(); - list.add(temp.val); - - if (temp.right != null) { - s1.add(temp.right); - } - - if (temp.left != null) { - s1.add(temp.left); - } - - } - - ans.add(list); - } - - return ans; - } -} diff --git a/Explore/Medium/Trees and Graphs/Construct Binary Tree from Preorder and Inorder Traversal.java b/Explore/Medium/Trees and Graphs/Construct Binary Tree from Preorder and Inorder Traversal.java deleted file mode 100644 index ddfa9f42..00000000 --- a/Explore/Medium/Trees and Graphs/Construct Binary Tree from Preorder and Inorder Traversal.java +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public TreeNode buildTree(int[] preorder, int[] inorder) { - return buildTreeHelper(0, 0, inorder.length-1, preorder, inorder); - } - - public TreeNode buildTreeHelper(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) { - if (preStart > preorder.length-1 || inStart > inEnd) { - return null; - } - - TreeNode root = new TreeNode(preorder[preStart]); - int inIndex = -1; - - for (int i = inStart; i <= inEnd; i++) { - if (inorder[i] == root.val) { - inIndex = i; - break; - } - } - - root.left = buildTreeHelper(preStart+1, inStart, inIndex-1, preorder, inorder); - root.right = buildTreeHelper(preStart + inIndex - inStart + 1, inIndex + 1, inEnd, preorder, inorder); - - return root; - } -} \ No newline at end of file diff --git a/Explore/Medium/Trees and Graphs/Kth Smallest Element in a BST.java b/Explore/Medium/Trees and Graphs/Kth Smallest Element in a BST.java deleted file mode 100644 index 6b46a29f..00000000 --- a/Explore/Medium/Trees and Graphs/Kth Smallest Element in a BST.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public int kthSmallest(TreeNode root, int k) { - Stack stack = new Stack<>(); - List list = new ArrayList<>(); - - while(root != null || !stack.empty()) { - while (root != null) { - stack.push(root); - root = root.left; - } - - root = stack.pop(); - list.add(root.val); - root = root.right; - } - - return list.get(k-1); - } -} diff --git a/Explore/Medium/Trees and Graphs/Populating Next Right Pointers in Each Node.java b/Explore/Medium/Trees and Graphs/Populating Next Right Pointers in Each Node.java deleted file mode 100644 index b012ec6b..00000000 --- a/Explore/Medium/Trees and Graphs/Populating Next Right Pointers in Each Node.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Definition for binary tree with next pointer. - * public class TreeLinkNode { - * int val; - * TreeLinkNode left, right, next; - * TreeLinkNode(int x) { val = x; } - * } - */ -public class Solution { - public void connect(TreeLinkNode root) { - - TreeLinkNode start=root; - - while(start!=null){ - - TreeLinkNode cur=start; - - while(cur!=null){ - if(cur.left!=null) cur.left.next=cur.right; - if(cur.right!=null && cur.next!=null) cur.right.next=cur.next.left; - - cur=cur.next; - } - - start=start.left; - } - } -} From 119a43ab92a334f77bff4dc9c34dba015efce29b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Nov 2021 16:56:42 -0800 Subject: [PATCH 0093/1640] Delete Contests directory --- .../Fruits Into Basket.java | 34 ----------- .../Sort Array By Parity.java | 28 --------- .../Sum of Subarray Minimums.java | 32 ---------- .../Weekly Contest 103/Online Election.java | 46 --------------- .../Weekly Contest 103/Smallest Range I.java | 7 --- .../Weekly Contest 103/Smallest Range II.java | 16 ----- ...rtition Array into Disjoint Intervals.java | 25 -------- Contests/Weekly Contest 104/Word Subsets.java | 58 ------------------ .../X of a Kind in a Deck of Cards.java | 47 --------------- .../Maximum Sum Circular Subarray.java | 28 --------- .../Reverse Only Letters.java | 30 ---------- .../3Sum With Multiplicity.java | 31 ---------- ...Minimum Add to Make Parentheses Valid.java | 24 -------- .../Sort Array By Parity II.java | 35 ----------- .../Flip String to Monotone Increasing.java | 27 --------- .../Weekly Contest 107/Long Pressed Name.java | 29 --------- .../Binary Subarrays With Sum.java | 18 ------ .../Minimum Falling Path Sum.java | 37 ------------ .../Unique Email Addresses.java | 20 ------- .../Weekly Contest 109/Knight Dialer.java | 25 -------- .../Number of Recent Calls.java | 23 -------- .../Distinct Subsequence II.java | 12 ---- .../Minimum Area Rectangle.java | 32 ---------- .../Weekly Contest 110/Range Sum of BST.java | 39 ------------ .../Weekly Contest 110/Reorder Log Files.java | 53 ----------------- .../Weekly Contest 111/DI String Match.java | 21 ------- .../Delete Columns to Make Sorted.java | 22 ------- .../Valid Mountain Array.java | 16 ----- .../Weekly Contest 112/Bag of Tokens.java | 31 ---------- ...inimum Increment to Make Array Unique.java | 19 ------ ...tones Removed with Same Row or Column.java | 44 -------------- .../Validate Stack Sequences.java | 30 ---------- .../Flip Equivalent Binary Trees.java | 27 --------- .../Largest Time for Given Digits.java | 57 ------------------ .../Reveal Cards In Increasing Order.java | 22 ------- .../Check Completeness of a Binary Tree.java | 38 ------------ ... If Word Is Valid After Substitutions.java | 21 ------- .../Find Common Characters.java | 30 ---------- .../Max Consecutive Ones III.java | 31 ---------- .../Weekly Contest 127/Clumsy Factorial.java | 59 ------------------- ...y Search Tree from Preorder Traversal.java | 39 ------------ ...ximize Sum Of Array After K Negations.java | 23 -------- ...inimum Domino Rotations For Equal Row.java | 25 -------- .../Best Sightseeing Pair.java | 13 ---- ...g With Substrings Representing 1 To N.java | 15 ----- ...Array Into Three Parts With Equal Sum.java | 30 ---------- .../Smallest Integer Divisible by K.java | 17 ------ .../Camelcase Matching.java | 43 -------------- .../Remove Outermost Parentheses.java | 22 ------- .../Sum of Root To Leaf Binary Numbers.java | 40 ------------- Contests/Weekly Contest 132/Divisor Game.java | 5 -- .../Longest Arithmetic Sequence.java | 35 ----------- ... Difference Between Node and Ancestor.java | 29 --------- 53 files changed, 1560 deletions(-) delete mode 100644 Contests/Weekly Contest 102/Fruits Into Basket.java delete mode 100644 Contests/Weekly Contest 102/Sort Array By Parity.java delete mode 100644 Contests/Weekly Contest 102/Sum of Subarray Minimums.java delete mode 100644 Contests/Weekly Contest 103/Online Election.java delete mode 100644 Contests/Weekly Contest 103/Smallest Range I.java delete mode 100644 Contests/Weekly Contest 103/Smallest Range II.java delete mode 100644 Contests/Weekly Contest 104/Partition Array into Disjoint Intervals.java delete mode 100644 Contests/Weekly Contest 104/Word Subsets.java delete mode 100644 Contests/Weekly Contest 104/X of a Kind in a Deck of Cards.java delete mode 100644 Contests/Weekly Contest 105/Maximum Sum Circular Subarray.java delete mode 100644 Contests/Weekly Contest 105/Reverse Only Letters.java delete mode 100644 Contests/Weekly Contest 106/3Sum With Multiplicity.java delete mode 100644 Contests/Weekly Contest 106/Minimum Add to Make Parentheses Valid.java delete mode 100644 Contests/Weekly Contest 106/Sort Array By Parity II.java delete mode 100644 Contests/Weekly Contest 107/Flip String to Monotone Increasing.java delete mode 100644 Contests/Weekly Contest 107/Long Pressed Name.java delete mode 100644 Contests/Weekly Contest 108/Binary Subarrays With Sum.java delete mode 100644 Contests/Weekly Contest 108/Minimum Falling Path Sum.java delete mode 100644 Contests/Weekly Contest 108/Unique Email Addresses.java delete mode 100644 Contests/Weekly Contest 109/Knight Dialer.java delete mode 100644 Contests/Weekly Contest 109/Number of Recent Calls.java delete mode 100644 Contests/Weekly Contest 110/Distinct Subsequence II.java delete mode 100644 Contests/Weekly Contest 110/Minimum Area Rectangle.java delete mode 100644 Contests/Weekly Contest 110/Range Sum of BST.java delete mode 100644 Contests/Weekly Contest 110/Reorder Log Files.java delete mode 100644 Contests/Weekly Contest 111/DI String Match.java delete mode 100644 Contests/Weekly Contest 111/Delete Columns to Make Sorted.java delete mode 100644 Contests/Weekly Contest 111/Valid Mountain Array.java delete mode 100644 Contests/Weekly Contest 112/Bag of Tokens.java delete mode 100644 Contests/Weekly Contest 112/Minimum Increment to Make Array Unique.java delete mode 100644 Contests/Weekly Contest 112/Most Stones Removed with Same Row or Column.java delete mode 100644 Contests/Weekly Contest 112/Validate Stack Sequences.java delete mode 100644 Contests/Weekly Contest 113/Flip Equivalent Binary Trees.java delete mode 100644 Contests/Weekly Contest 113/Largest Time for Given Digits.java delete mode 100644 Contests/Weekly Contest 113/Reveal Cards In Increasing Order.java delete mode 100644 Contests/Weekly Contest 115/Check Completeness of a Binary Tree.java delete mode 100644 Contests/Weekly Contest 126/Check If Word Is Valid After Substitutions.java delete mode 100644 Contests/Weekly Contest 126/Find Common Characters.java delete mode 100644 Contests/Weekly Contest 126/Max Consecutive Ones III.java delete mode 100644 Contests/Weekly Contest 127/Clumsy Factorial.java delete mode 100644 Contests/Weekly Contest 127/Construct Binary Search Tree from Preorder Traversal.java delete mode 100644 Contests/Weekly Contest 127/Maximize Sum Of Array After K Negations.java delete mode 100644 Contests/Weekly Contest 127/Minimum Domino Rotations For Equal Row.java delete mode 100644 Contests/Weekly Contest 129/Best Sightseeing Pair.java delete mode 100644 Contests/Weekly Contest 129/Binary String With Substrings Representing 1 To N.java delete mode 100644 Contests/Weekly Contest 129/Partition Array Into Three Parts With Equal Sum.java delete mode 100644 Contests/Weekly Contest 129/Smallest Integer Divisible by K.java delete mode 100644 Contests/Weekly Contest 131/Camelcase Matching.java delete mode 100644 Contests/Weekly Contest 131/Remove Outermost Parentheses.java delete mode 100644 Contests/Weekly Contest 131/Sum of Root To Leaf Binary Numbers.java delete mode 100644 Contests/Weekly Contest 132/Divisor Game.java delete mode 100644 Contests/Weekly Contest 132/Longest Arithmetic Sequence.java delete mode 100644 Contests/Weekly Contest 132/Maximum Difference Between Node and Ancestor.java diff --git a/Contests/Weekly Contest 102/Fruits Into Basket.java b/Contests/Weekly Contest 102/Fruits Into Basket.java deleted file mode 100644 index 6d509ca1..00000000 --- a/Contests/Weekly Contest 102/Fruits Into Basket.java +++ /dev/null @@ -1,34 +0,0 @@ -class Solution { - public static int totalFruit(int[] tree) { - int maxFruits = Integer.MIN_VALUE; - int count = 0; - Map map = new HashMap<>(); - int start = 0; - - for (int num : tree) { - if (map.size() < 2 || map.containsKey(num)) { - map.put(num, map.getOrDefault(num, 0) + 1); - count++; - } - else { - map.put(num, map.getOrDefault(num, 0) + 1); - count++; - - while (true) { - int key = tree[start++]; - map.put(key, map.get(key)-1); - count--; - - if (map.get(key) == 0) { - map.remove(key); - break; - } - } - } - - maxFruits = Math.max(maxFruits, count); - } - - return Math.max(count, maxFruits); - } -} diff --git a/Contests/Weekly Contest 102/Sort Array By Parity.java b/Contests/Weekly Contest 102/Sort Array By Parity.java deleted file mode 100644 index 96bf6ca0..00000000 --- a/Contests/Weekly Contest 102/Sort Array By Parity.java +++ /dev/null @@ -1,28 +0,0 @@ -class Solution { - public static int[] sortArrayByParity(int[] A) { - List even = new ArrayList<>(); - List odd = new ArrayList<>(); - - - for (int num : A) { - if (num%2 == 0) { - even.add(num); - } - else { - odd.add(num); - } - } - - int i = 0; - - for (int num : even) { - A[i++] = num; - } - - for (int num : odd) { - A[i++] = num; - } - - return A; - } -} diff --git a/Contests/Weekly Contest 102/Sum of Subarray Minimums.java b/Contests/Weekly Contest 102/Sum of Subarray Minimums.java deleted file mode 100644 index 5126978f..00000000 --- a/Contests/Weekly Contest 102/Sum of Subarray Minimums.java +++ /dev/null @@ -1,32 +0,0 @@ -class Solution { - public static int sumSubarrayMins(int[] A) { - Stack> stack = new Stack<>(); - int n = A.length; - int tempSum = 0; - int mod = 1000000007; - int ans = 0; - - for (int i = 0; i < n; i++) { - if((!stack.empty()) && A[i] >= stack.peek().get(0)) { - tempSum += A[i]; - stack.push(Arrays.asList(A[i], 1)); - } - else { - int count = 1; - - while((!stack.empty()) && stack.peek().get(0) > A[i]) { - count += stack.peek().get(1); - tempSum -= stack.peek().get(1) * stack.peek().get(0); - stack.pop(); - } - - stack.push(Arrays.asList(A[i], count)); - tempSum += count * A[i]; - } - - ans = (ans + tempSum)%mod; - } - - return ans; - } -} diff --git a/Contests/Weekly Contest 103/Online Election.java b/Contests/Weekly Contest 103/Online Election.java deleted file mode 100644 index 86ed54fa..00000000 --- a/Contests/Weekly Contest 103/Online Election.java +++ /dev/null @@ -1,46 +0,0 @@ -class TopVotedCandidate { - int[] times; - int[] persons; - int[] winner; - - public TopVotedCandidate(int[] persons, int[] times) { - this.times = times; - this.persons = persons; - int[] counter = new int[persons.length+1]; - winner = new int[times.length]; - int max = Integer.MIN_VALUE; - int maxPerson = -1; - int i = 0; - - while (i < times.length) { - counter[persons[i]]++; - if (max < counter[persons[i]]) { - max = counter[persons[i]]; - maxPerson = persons[i]; - } - else if (max == counter[persons[i]]) { - maxPerson = persons[i]; - } - - winner[i] = maxPerson; - - i++; - } - } - - public int q(int t) { - int i = 0; - while (i < times.length && times[i] <= t) { - i++; - } - - return winner[i-1]; - } -} - - -/** - * Your TopVotedCandidate object will be instantiated and called as such: - * TopVotedCandidate obj = new TopVotedCandidate(persons, times); - * int param_1 = obj.q(t); - */ diff --git a/Contests/Weekly Contest 103/Smallest Range I.java b/Contests/Weekly Contest 103/Smallest Range I.java deleted file mode 100644 index b93686ed..00000000 --- a/Contests/Weekly Contest 103/Smallest Range I.java +++ /dev/null @@ -1,7 +0,0 @@ -class Solution { - - public static int smallestRangeI(int[] A, int K) { - Arrays.sort(A); - return Math.max((A[A.length-1] - K) - (A[0] + K), 0); - } -} diff --git a/Contests/Weekly Contest 103/Smallest Range II.java b/Contests/Weekly Contest 103/Smallest Range II.java deleted file mode 100644 index 2ad7c801..00000000 --- a/Contests/Weekly Contest 103/Smallest Range II.java +++ /dev/null @@ -1,16 +0,0 @@ -class Solution { - public int smallestRangeII(int[] A, int K) { - int N = A.length; - Arrays.sort(A); - int ans = A[N-1] - A[0]; - - for (int i=0; i=0; i--) { - minVal = Math.min(minVal, A[i]); - min[i] = minVal; - } - - int[] max = new int[A.length]; - int maxVal = Integer.MIN_VALUE; - - for (int i=0; i wordSubsets(String[] A, String[] B) { - Map> map1 = getMap(A); - - Map map2 = new HashMap<>(); - for (String s : B) { - Map temp = new HashMap<>(); - char[] tempChar = s.toCharArray(); - - for (char c : tempChar) { - temp.put(c, temp.getOrDefault(c, 0) + 1); - } - - for (Map.Entry entry : temp.entrySet()) { - int val1 = entry.getValue(); - int val2 = map2.getOrDefault(entry.getKey(), 0); - - map2.put(entry.getKey(), Math.max(val1, val2)); - } - } - - List ans = new ArrayList<>(); - - for (String s : A) { - boolean flag = true; - Map temp2 = map1.get(s); - - for (Map.Entry entry : map2.entrySet()) { - if (!(temp2.containsKey(entry.getKey()) && temp2.get(entry.getKey()) >= entry.getValue())) { - flag = false; - break; - } - } - - if (flag) { - ans.add(s); - } - } - - return ans; - } - - private static Map> getMap(String[] A) { - Map> map = new HashMap<>(); - - for (String a : A) { - char[] arr = a.toCharArray(); - Map charMap = new HashMap<>(); - for (char c : arr) { - charMap.put(c, charMap.getOrDefault(c, 0) + 1); - } - - map.put(a, charMap); - } - - return map; - } -} diff --git a/Contests/Weekly Contest 104/X of a Kind in a Deck of Cards.java b/Contests/Weekly Contest 104/X of a Kind in a Deck of Cards.java deleted file mode 100644 index 327fc563..00000000 --- a/Contests/Weekly Contest 104/X of a Kind in a Deck of Cards.java +++ /dev/null @@ -1,47 +0,0 @@ -class Solution { - public static boolean hasGroupsSizeX(int[] deck) { - Map map = new HashMap<>(); - - for (int card: deck) { - map.put(card, map.getOrDefault(card, 0) + 1); - } - - int X = -1; - - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() < 2) { - return false; - } - - if (X == -1) { - X = entry.getValue(); - } - else { - X = findGCD(X, entry.getValue()); - } - } - - if (X == 1) { - return false; - } - - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() % X != 0) { - return false; - } - } - - return true; - } - - private static int findGCD(int n1, int n2) { - while(n1 != n2) { - if(n1 > n2) - n1 -= n2; - else - n2 -= n1; - } - - return n1; - } -} diff --git a/Contests/Weekly Contest 105/Maximum Sum Circular Subarray.java b/Contests/Weekly Contest 105/Maximum Sum Circular Subarray.java deleted file mode 100644 index bdc17368..00000000 --- a/Contests/Weekly Contest 105/Maximum Sum Circular Subarray.java +++ /dev/null @@ -1,28 +0,0 @@ -class Solution { - public static int maxSubarraySumCircular(int[] A) { - int max = kadane(A); - int wrap = 0; - - for(int i=0; i < A.length; i++) { - wrap = wrap+A[i]; - A[i] *= -1; - } - - wrap = wrap + kadane(A); - - return Math.abs(wrap) < Math.abs(max) ? max : wrap; - } - - - private static int kadane(int[] a){ - int maxSoFar=a[0]; - int maxGlobal =a[0]; - - for(int i=1; i map = new HashMap<>(); - for (int i=start; i open = new Stack<>(); - int count = 0; - - for (char c : S.toCharArray()) { - if (c == '(') { - open.push(c); - } - else { - if (open.empty()) { - count++; - } - else { - open.pop(); - } - } - } - - count += open.size(); - - return count; - } -} diff --git a/Contests/Weekly Contest 106/Sort Array By Parity II.java b/Contests/Weekly Contest 106/Sort Array By Parity II.java deleted file mode 100644 index 1289a2e4..00000000 --- a/Contests/Weekly Contest 106/Sort Array By Parity II.java +++ /dev/null @@ -1,35 +0,0 @@ -class Solution { - public int[] sortArrayByParityII(int[] A) { - int[] ans = new int[A.length]; - int[] odd = new int[A.length/2]; - int[] even = new int[A.length/2]; - - int i = 0; - int j = 0; - int k = 0; - - while (k < A.length) { - if (A[k]%2 == 0) { - even[j++] = A[k++]; - } - else { - odd[i++] = A[k++]; - } - } - - i = 0; - j = 0; - k = 0; - - while (k < ans.length) { - if (k%2 == 0) { - ans[k++] = even[j++]; - } - else { - ans[k++] = odd[i++]; - } - } - - return ans; - } -} diff --git a/Contests/Weekly Contest 107/Flip String to Monotone Increasing.java b/Contests/Weekly Contest 107/Flip String to Monotone Increasing.java deleted file mode 100644 index 6f98ab13..00000000 --- a/Contests/Weekly Contest 107/Flip String to Monotone Increasing.java +++ /dev/null @@ -1,27 +0,0 @@ -class Solution { - public static int minFlipsMonoIncr(String S) { - int zeroCount = 0; - int flipCount = 0; - int oneCount = 0; - - for (char c : S.toCharArray()) { - if (c == '0') { - if (oneCount == 0) { - continue; - } - else { - flipCount++; - } - } - else { - oneCount++; - } - - if (flipCount > oneCount) { - flipCount = oneCount; - } - } - - return flipCount; - } -} diff --git a/Contests/Weekly Contest 107/Long Pressed Name.java b/Contests/Weekly Contest 107/Long Pressed Name.java deleted file mode 100644 index 5bf9065a..00000000 --- a/Contests/Weekly Contest 107/Long Pressed Name.java +++ /dev/null @@ -1,29 +0,0 @@ -class Solution { - public static boolean isLongPressedName(String name, String typed) { - int slow = 0; - int fast = 0; - - while (slow < name.length() && fast < typed.length()) { - if (name.charAt(slow) == typed.charAt(fast)) { - slow++; - fast++; - } - else if (fast > 0 && typed.charAt(fast) == typed.charAt(fast-1)) { - fast++; - } - else { - return false; - } - } - - while (fast < typed.length()) { - if (typed.charAt(fast) != typed.charAt(fast-1)) { - return false; - } - - fast++; - } - - return slow == name.length(); - } -} diff --git a/Contests/Weekly Contest 108/Binary Subarrays With Sum.java b/Contests/Weekly Contest 108/Binary Subarrays With Sum.java deleted file mode 100644 index 37cc0a30..00000000 --- a/Contests/Weekly Contest 108/Binary Subarrays With Sum.java +++ /dev/null @@ -1,18 +0,0 @@ -class Solution { - public int numSubarraysWithSum(int[] A, int S) { - Map c = new HashMap<>(); - - c.put(0, 1); - - int psum = 0; - int res = 0; - - for (int i : A) { - psum += i; - res += c.getOrDefault(psum - S, 0); - c.put(psum, c.getOrDefault(psum, 0)+1); - } - - return res; - } -} diff --git a/Contests/Weekly Contest 108/Minimum Falling Path Sum.java b/Contests/Weekly Contest 108/Minimum Falling Path Sum.java deleted file mode 100644 index 056d9501..00000000 --- a/Contests/Weekly Contest 108/Minimum Falling Path Sum.java +++ /dev/null @@ -1,37 +0,0 @@ -class Solution { - public int minFallingPathSum(int[][] A) { - int n = A.length; - int[][] dp = new int[n][n]; - - for (int[] arr : dp) { - Arrays.fill(arr, Integer.MAX_VALUE); - } - - for (int i=0; i= 0) { - dp[i][j] = Math.min(dp[i][j], dp[i-1][j-1]); - } - - if (j+1 < A.length) { - dp[i][j] = Math.min(dp[i][j], dp[i-1][j+1]); - } - - dp[i][j] += A[i][j]; - } - } - } - - int minVal = Integer.MAX_VALUE; - for (int num : dp[n-1]) { - minVal = Math.min(minVal, num); - } - - return minVal; - } -} diff --git a/Contests/Weekly Contest 108/Unique Email Addresses.java b/Contests/Weekly Contest 108/Unique Email Addresses.java deleted file mode 100644 index b234df03..00000000 --- a/Contests/Weekly Contest 108/Unique Email Addresses.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public int numUniqueEmails(String[] emails) { - Set set = new HashSet<>(); - - for (String email : emails) { - String localName = email.split("@")[0]; - String domainName = email.split("@")[1]; - - localName = localName.replace(".", ""); - int idx = localName.indexOf('+'); - if (idx != -1) { - localName = localName.substring(0, idx); - } - - set.add(localName+"@"+domainName); - } - - return set.size(); - } -} diff --git a/Contests/Weekly Contest 109/Knight Dialer.java b/Contests/Weekly Contest 109/Knight Dialer.java deleted file mode 100644 index 3626b968..00000000 --- a/Contests/Weekly Contest 109/Knight Dialer.java +++ /dev/null @@ -1,25 +0,0 @@ -class Solution { - public int knightDialer(int N) { - int MOD = 1000000007; - long[] counts = new long[10]; - Arrays.fill(counts, 1); - long[] temp; - - for (int i=1; i<=N-1; i++) { - temp = counts.clone(); - - counts[0] = (temp[4] + temp[6]) % MOD; - counts[1] = (temp[6] + temp[8]) % MOD; - counts[2] = (temp[7] + temp[9]) % MOD; - counts[3] = (temp[4] + temp[8]) % MOD; - counts[4] = (temp[3] + temp[9] + temp[0]) % MOD; - counts[5] = 0; - counts[6] = (temp[1] + temp[7] + temp[0]) % MOD; - counts[7] = (temp[2] + temp[6]) % MOD; - counts[8] = (temp[1] + temp[3]) % MOD; - counts[9] = (temp[2] + temp[4]) % MOD; - } - - return (int)(Arrays.stream(counts).sum()%MOD); - } -} diff --git a/Contests/Weekly Contest 109/Number of Recent Calls.java b/Contests/Weekly Contest 109/Number of Recent Calls.java deleted file mode 100644 index 097b56c8..00000000 --- a/Contests/Weekly Contest 109/Number of Recent Calls.java +++ /dev/null @@ -1,23 +0,0 @@ -class RecentCounter { - - Queue queue; - public RecentCounter() { - queue = new LinkedList<>(); - } - - public int ping(int t) { - while (!queue.isEmpty() && t - queue.peek() > 3000) { - queue.remove(); - } - - queue.add(t); - - return queue.size(); - } -} - -/** - * Your RecentCounter object will be instantiated and called as such: - * RecentCounter obj = new RecentCounter(); - * int param_1 = obj.ping(t); - */ diff --git a/Contests/Weekly Contest 110/Distinct Subsequence II.java b/Contests/Weekly Contest 110/Distinct Subsequence II.java deleted file mode 100644 index af605fb7..00000000 --- a/Contests/Weekly Contest 110/Distinct Subsequence II.java +++ /dev/null @@ -1,12 +0,0 @@ -class Solution { - public int distinctSubseqII(String s) { - long[] occurenceIndx = new long[26]; - long MOD = 1000000007; - - for (char c : s.toCharArray()) { - occurenceIndx[c - 'a'] = Arrays.stream(occurenceIndx).sum() % MOD + 1; - } - - return (int) (Arrays.stream(occurenceIndx).sum() % MOD); - } -} diff --git a/Contests/Weekly Contest 110/Minimum Area Rectangle.java b/Contests/Weekly Contest 110/Minimum Area Rectangle.java deleted file mode 100644 index be63eb90..00000000 --- a/Contests/Weekly Contest 110/Minimum Area Rectangle.java +++ /dev/null @@ -1,32 +0,0 @@ -class Solution { - public int minAreaRect(int[][] points) { - Map> rows = new TreeMap<>(); - for (int[] point : points) { - int x = point[0]; - int y = point[1]; - rows.computeIfAbsent(x , z -> new ArrayList<>()).add(y); - } - - int ans = Integer.MAX_VALUE; - Map lastIdx = new HashMap<>(); - for (int key : rows.keySet()) { - List row = rows.get(key); - Collections.sort(row); - - for (int i=0; i= low && root.val <= high) { - sum += root.val; - rangeSumBSTHelper(root.right, low, high); - rangeSumBSTHelper(root.left, low, high); - } - else { - if (root.val < low) { - rangeSumBSTHelper(root.right, low, high); - } - - if (root.val > high) { - rangeSumBSTHelper(root.left, low, high); - } - } - } -} diff --git a/Contests/Weekly Contest 110/Reorder Log Files.java b/Contests/Weekly Contest 110/Reorder Log Files.java deleted file mode 100644 index 6e2d505c..00000000 --- a/Contests/Weekly Contest 110/Reorder Log Files.java +++ /dev/null @@ -1,53 +0,0 @@ -class Solution { - public String[] reorderLogFiles(String[] logs) { - List letterLogs = new ArrayList<>(); - List digitLogs = new ArrayList<>(); - - for (String log : logs) { - if(Character.isDigit(log.split("\\s+")[1].charAt(0))) { - digitLogs.add(log); - } - else { - letterLogs.add(log); - } - } - - Collections.sort(letterLogs, new Comparator() { - @Override - public int compare(String o1, String o2) { - String[] s1 = o1.split("\\s+"); - String[] s2 = o2.split("\\s+"); - - StringBuilder sb1 = new StringBuilder(); - StringBuilder sb2 = new StringBuilder(); - - for (int i=1; i 0 && A[j] < A[j-1]) { - j--; - } - - return i > 0 && i == j && j < n; - } -} diff --git a/Contests/Weekly Contest 112/Bag of Tokens.java b/Contests/Weekly Contest 112/Bag of Tokens.java deleted file mode 100644 index 610c54e4..00000000 --- a/Contests/Weekly Contest 112/Bag of Tokens.java +++ /dev/null @@ -1,31 +0,0 @@ -class Solution { - public int bagOfTokensScore(int[] tokens, int P) { - Arrays.sort(tokens); - int start = 0; - int end = tokens.length - 1; - int numOfPoints = 0; - int maxPoint = 0; - - while (start <= end) { - if (P >= tokens[start]) { - P -= tokens[start]; - start++; - numOfPoints++; - } - else { - if (numOfPoints > 0) { - numOfPoints--; - P += tokens[end]; - end--; - } - else { - break; - } - } - - maxPoint = Math.max(numOfPoints, maxPoint); - } - - return maxPoint; - } -} diff --git a/Contests/Weekly Contest 112/Minimum Increment to Make Array Unique.java b/Contests/Weekly Contest 112/Minimum Increment to Make Array Unique.java deleted file mode 100644 index 983f6d29..00000000 --- a/Contests/Weekly Contest 112/Minimum Increment to Make Array Unique.java +++ /dev/null @@ -1,19 +0,0 @@ -class Solution { - public int minIncrementForUnique(int[] arr) { - int count = 0; - - Arrays.sort(arr); - int previous = Integer.MIN_VALUE; - - for (int i=0; i= arr[i]) { - count += previous - arr[i] == 0 ? 1 : previous + 1 - arr[i]; - arr[i] = previous + 1; - } - - previous = arr[i]; - } - - return count; - } -} diff --git a/Contests/Weekly Contest 112/Most Stones Removed with Same Row or Column.java b/Contests/Weekly Contest 112/Most Stones Removed with Same Row or Column.java deleted file mode 100644 index 916ceeb5..00000000 --- a/Contests/Weekly Contest 112/Most Stones Removed with Same Row or Column.java +++ /dev/null @@ -1,44 +0,0 @@ -class Solution { - public int count = 0; - public int removeStones(int[][] stones) { - Map map = new HashMap<>(); - count = stones.length; - - for (int[] stone : stones) { - String key = stone[0] + " " + stone[1]; - map.put(key, key); - } - - for (int[] stone : stones) { - String key = stone[0] + " " + stone[1]; - for (int[] stone2 : stones) { - if (stone2[0] == stone[0] || stone2[1] == stone[1]) { - String key2 = stone2[0] + " " + stone2[1]; - union(map, key, key2); - } - } - } - - return stones.length - count; - } - - private void union(Map map, String s1, String s2) { - String r1 = find(map, s1); - String r2 = find(map, s2); - - if (r1.equals(r2)) { - return; - } - - map.put(r1, r2); - count--; - } - - private String find(Map map, String s) { - if (!map.get(s).equals(s)) { - map.put(s, find(map, map.get(s))); - } - - return map.get(s); - } -} diff --git a/Contests/Weekly Contest 112/Validate Stack Sequences.java b/Contests/Weekly Contest 112/Validate Stack Sequences.java deleted file mode 100644 index c90d9957..00000000 --- a/Contests/Weekly Contest 112/Validate Stack Sequences.java +++ /dev/null @@ -1,30 +0,0 @@ -class Solution { - public boolean validateStackSequences(int[] pushed, int[] popped) { - Stack stack = new Stack<>(); - - int i = 0; - int j = 0; - - while (i < pushed.length || j < popped.length) { - if (stack.isEmpty() || stack.peek() != popped[j]) { - if (i < pushed.length) { - stack.push(pushed[i++]); - } - else { - return false; - } - } - else { - if (j < popped.length && stack.peek() == popped[j]) { - stack.pop(); - j++; - } - else { - return false; - } - } - } - - return true; - } -} diff --git a/Contests/Weekly Contest 113/Flip Equivalent Binary Trees.java b/Contests/Weekly Contest 113/Flip Equivalent Binary Trees.java deleted file mode 100644 index 9b025770..00000000 --- a/Contests/Weekly Contest 113/Flip Equivalent Binary Trees.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public boolean flipEquiv(TreeNode root1, TreeNode root2) { - if (root1 == null) { - return root2 == null; - } - - if (root2 == null) { - return root1 == null; - } - - if (root1.val != root2.val) { - return false; - } - - return (flipEquiv(root1.left, root2.left) && flipEquiv(root1.right, root2.right) || - flipEquiv(root1.left, root2.right) && flipEquiv(root1.right, root2.left)); - } -} diff --git a/Contests/Weekly Contest 113/Largest Time for Given Digits.java b/Contests/Weekly Contest 113/Largest Time for Given Digits.java deleted file mode 100644 index 7a645e07..00000000 --- a/Contests/Weekly Contest 113/Largest Time for Given Digits.java +++ /dev/null @@ -1,57 +0,0 @@ -class Solution { - public String largestTimeFromDigits(int[] arr) { - List permutations = permuteUnique(arr); - String maxStr = ""; - - for (String str : permutations) { - if (isValid(str)) { - if (maxStr.length() == 0) { - maxStr = str; - } - else if (maxStr.compareTo(str) < 0) { - maxStr = str; - } - } - } - - return maxStr.length() > 0 ? maxStr.substring(0, 2) + ":" + maxStr.substring(2) : maxStr; - } - - private boolean isValid(String str) { - int left = Integer.parseInt(str.substring(0, 2)); - int right = Integer.parseInt(str.substring(2)); - - return left >= 0 && left <= 23 && right >= 0 && right <= 59; - } - - private List permuteUnique(int[] nums) { - List ans = new ArrayList<>(); - Arrays.sort(nums); - permuteHelper(nums, new ArrayList<>(), ans, new boolean[nums.length]); - return new ArrayList<>(ans); - } - - private void permuteHelper(int[] nums, List list, List ans, boolean[] used) { - if (list.size() == nums.length) { - ans.add(list.stream().map(n -> String.valueOf(n)).collect(Collectors.joining(""))); - } - else { - for (int i=0; i 0 && nums[i] == nums[i-1] && !used[i-1])) { - continue; - } - - used[i] = true; - list.add(nums[i]); - - // Explore - permuteHelper(nums, list, ans, used); - - // Un-choose - used[i] = false; - list.remove(list.size()-1); - } - } - } -} diff --git a/Contests/Weekly Contest 113/Reveal Cards In Increasing Order.java b/Contests/Weekly Contest 113/Reveal Cards In Increasing Order.java deleted file mode 100644 index b2aed465..00000000 --- a/Contests/Weekly Contest 113/Reveal Cards In Increasing Order.java +++ /dev/null @@ -1,22 +0,0 @@ -class Solution { - public int[] deckRevealedIncreasing(int[] deck) { - int n = deck.length; - int[] ans = new int[n]; - Deque deque = new LinkedList<>(); - Arrays.sort(deck); - deque.addFirst(deck[n-1]); - - for (int i=n-2; i>=0; i--) { - int temp = deque.removeLast(); - deque.addFirst(temp); - deque.addFirst(deck[i]); - } - - int idx = 0; - while (!deque.isEmpty()) { - ans[idx++] = deque.pollFirst(); - } - - return ans; - } -} diff --git a/Contests/Weekly Contest 115/Check Completeness of a Binary Tree.java b/Contests/Weekly Contest 115/Check Completeness of a Binary Tree.java deleted file mode 100644 index 33573b90..00000000 --- a/Contests/Weekly Contest 115/Check Completeness of a Binary Tree.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public boolean isCompleteTree(TreeNode root) { - if (root == null) { - return true; - } - int numOfNodes = getNumOfNodes(root); - return isCompleteTreeHelper(root, 0, numOfNodes); - } - - private boolean isCompleteTreeHelper(TreeNode root, int curr, int numOfNodes) { - if (root == null) { - return true; - } - - if (curr >= numOfNodes) { - return false; - } - - return isCompleteTreeHelper(root.left, 2 * curr + 1, numOfNodes) && isCompleteTreeHelper(root.right, 2 * curr + 2, numOfNodes); - } - - private int getNumOfNodes(TreeNode root) { - if (root == null) { - return 0; - } - - return 1 + getNumOfNodes(root.left) + getNumOfNodes(root.right); - } -} diff --git a/Contests/Weekly Contest 126/Check If Word Is Valid After Substitutions.java b/Contests/Weekly Contest 126/Check If Word Is Valid After Substitutions.java deleted file mode 100644 index dc030951..00000000 --- a/Contests/Weekly Contest 126/Check If Word Is Valid After Substitutions.java +++ /dev/null @@ -1,21 +0,0 @@ -class Solution { - public boolean isValid(String S) { - Stack stack = new Stack<>(); - for (char c : S.toCharArray()) { - if (c == 'a' || c == 'b') { - stack.push(c); - } - else { - if (stack.isEmpty() || stack.pop() != 'b') { - return false; - } - - if (stack.isEmpty() || stack.pop() != 'a') { - return false; - } - } - } - - return stack.size() == 0; - } -} diff --git a/Contests/Weekly Contest 126/Find Common Characters.java b/Contests/Weekly Contest 126/Find Common Characters.java deleted file mode 100644 index b0fea474..00000000 --- a/Contests/Weekly Contest 126/Find Common Characters.java +++ /dev/null @@ -1,30 +0,0 @@ -class Solution { - public List commonChars(String[] A) { - int[] mainCounter = new int[26]; - Arrays.fill(mainCounter, Integer.MAX_VALUE); - - for (String str : A) { - int[] counter = new int[26]; - for (char c : str.toCharArray()) { - counter[c - 'a']++; - } - - for (int i = 0; i < 26; i++) { - mainCounter[i] = Math.min(mainCounter[i], counter[i]); - } - } - - List list = new ArrayList<>(); - - for (int i = 0; i < 26; i++) { - int count = mainCounter[i]; - char c = (char) (97 + i); - - while (count-- > 0) { - list.add(String.valueOf(c)); - } - } - - return list; - } -} diff --git a/Contests/Weekly Contest 126/Max Consecutive Ones III.java b/Contests/Weekly Contest 126/Max Consecutive Ones III.java deleted file mode 100644 index 49349bd8..00000000 --- a/Contests/Weekly Contest 126/Max Consecutive Ones III.java +++ /dev/null @@ -1,31 +0,0 @@ -class Solution { - public int longestOnes(int[] A, int K) { - int slow = 0; - int fast = 0; - int count = 0; - int end = A.length; - int maxLen = 0; - - while (fast < end) { - if (A[fast] != 1) { - count++; - } - - while (count > K && slow < end) { - if (A[slow] == 0) { - count--; - } - - slow++; - } - - fast++; - - if (fast - slow > maxLen) { - maxLen = fast - slow; - } - } - - return maxLen; - } -} diff --git a/Contests/Weekly Contest 127/Clumsy Factorial.java b/Contests/Weekly Contest 127/Clumsy Factorial.java deleted file mode 100644 index 391ede85..00000000 --- a/Contests/Weekly Contest 127/Clumsy Factorial.java +++ /dev/null @@ -1,59 +0,0 @@ -class Solution { - public int clumsy(int N) { - if (N <= 1) { - return N; - } - - char[] oper = {'*', '/', '+', '-'}; - int idx = 0; - - StringBuilder sb = new StringBuilder(); - while (N > 0) { - sb.append(N).append(" ").append(oper[idx++]).append(" "); - if (idx > 3) { - idx = 0; - } - - N--; - } - - return basicCalculator(sb.toString().substring(0, sb.length() - 2)); - } - - private int basicCalculator(String s) { - int num = 0; - char sign = '+'; - Stack stack = new Stack<>(); - - for (int i = 0; i < s.length(); i++) { - if (Character.isDigit(s.charAt(i))) { - num = num * 10 + Character.getNumericValue(s.charAt(i)); - } - - if (!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ' || i == s.length() - 1) { - if (sign == '+') { - stack.push(num); - } - else if (sign == '-') { - stack.push(-num); - } - else if (sign == '*') { - stack.push(stack.pop() * num); - } - else { - stack.push(stack.pop() / num); - } - - sign = s.charAt(i); - num = 0; - } - } - - int res = 0; - while (!stack.isEmpty()) { - res += stack.pop(); - } - - return res; - } -} diff --git a/Contests/Weekly Contest 127/Construct Binary Search Tree from Preorder Traversal.java b/Contests/Weekly Contest 127/Construct Binary Search Tree from Preorder Traversal.java deleted file mode 100644 index 276ff05d..00000000 --- a/Contests/Weekly Contest 127/Construct Binary Search Tree from Preorder Traversal.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - int idx; - public TreeNode bstFromPreorder(int[] preorder) { - idx = 0; - return bstFromPreorderHelper(preorder, preorder[0], Integer.MIN_VALUE, Integer.MAX_VALUE); - } - - private TreeNode bstFromPreorderHelper(int[] preorder, int key, int min, int max) { - if (idx >= preorder.length) { - return null; - } - - TreeNode root = null; - - if (preorder[idx] > min && preorder[idx] < max) { - root = new TreeNode(key); - idx++; - - if (idx < preorder.length) { - root.left = bstFromPreorderHelper(preorder, preorder[idx], min, key); - - if (idx < preorder.length) { - root.right = bstFromPreorderHelper(preorder, preorder[idx], key, max); - } - } - } - - return root; - } -} diff --git a/Contests/Weekly Contest 127/Maximize Sum Of Array After K Negations.java b/Contests/Weekly Contest 127/Maximize Sum Of Array After K Negations.java deleted file mode 100644 index a4db5a84..00000000 --- a/Contests/Weekly Contest 127/Maximize Sum Of Array After K Negations.java +++ /dev/null @@ -1,23 +0,0 @@ -class Solution { - public int largestSumAfterKNegations(int[] A, int K) { - PriorityQueue pq = new PriorityQueue<>(); - - for (int num : A) { - pq.add(num); - } - - while (K-- > 0) { - int popped = pq.poll(); - popped *= -1; - - pq.add(popped); - } - - int sum = 0; - while (!pq.isEmpty()) { - sum += pq.poll(); - } - - return sum; - } -} diff --git a/Contests/Weekly Contest 127/Minimum Domino Rotations For Equal Row.java b/Contests/Weekly Contest 127/Minimum Domino Rotations For Equal Row.java deleted file mode 100644 index c9908513..00000000 --- a/Contests/Weekly Contest 127/Minimum Domino Rotations For Equal Row.java +++ /dev/null @@ -1,25 +0,0 @@ -class Solution { - public int minDominoRotations(int[] A, int[] B) { - int[] aCount = new int[7]; - int[] bCount = new int[7]; - int[] sameCount = new int[7]; - - for (int i = 0; i < A.length; i++) { - if (A[i] == B[i]) { - sameCount[A[i]]++; - } - else { - aCount[A[i]]++; - bCount[B[i]]++; - } - } - - for (int i = 1; i <= 6; i++) { - if (aCount[i] + bCount[i] + sameCount[i] == A.length) { - return sameCount[i] == A.length ? 0 : Math.min(aCount[i], bCount[i]); - } - } - - return -1; - } -} diff --git a/Contests/Weekly Contest 129/Best Sightseeing Pair.java b/Contests/Weekly Contest 129/Best Sightseeing Pair.java deleted file mode 100644 index 173b530d..00000000 --- a/Contests/Weekly Contest 129/Best Sightseeing Pair.java +++ /dev/null @@ -1,13 +0,0 @@ -class Solution { - public int maxScoreSightseeingPair(int[] A) { - int maxVal = 0; - int currMax = 0; - - for (int spot : A) { - maxVal = Math.max(maxVal, currMax + spot); - currMax = Math.max(spot, currMax) - 1; - } - - return maxVal; - } -} diff --git a/Contests/Weekly Contest 129/Binary String With Substrings Representing 1 To N.java b/Contests/Weekly Contest 129/Binary String With Substrings Representing 1 To N.java deleted file mode 100644 index 179b0ec2..00000000 --- a/Contests/Weekly Contest 129/Binary String With Substrings Representing 1 To N.java +++ /dev/null @@ -1,15 +0,0 @@ -class Solution { - public boolean queryString(String S, int N) { - - int num = N; - while (num >= N / 2) { - if (S.indexOf(Integer.toBinaryString(num)) == -1) { - return false; - } - - num--; - } - - return true; - } -} diff --git a/Contests/Weekly Contest 129/Partition Array Into Three Parts With Equal Sum.java b/Contests/Weekly Contest 129/Partition Array Into Three Parts With Equal Sum.java deleted file mode 100644 index b325e556..00000000 --- a/Contests/Weekly Contest 129/Partition Array Into Three Parts With Equal Sum.java +++ /dev/null @@ -1,30 +0,0 @@ -class Solution { - public boolean canThreePartsEqualSum(int[] A) { - int totalSum = 0; - for (int num : A) { - totalSum += num; - } - - if (totalSum % 3 != 0) { - return false; - } - - int singlePartitionSum = totalSum / 3; - int idx = 0; - int len = A.length; - int currPartitionSum = 0; - int count = 0; - - while (idx < len) { - currPartitionSum += A[idx]; - if (currPartitionSum == singlePartitionSum) { - count++; - currPartitionSum = 0; - } - - idx++; - } - - return count == 3; - } -} diff --git a/Contests/Weekly Contest 129/Smallest Integer Divisible by K.java b/Contests/Weekly Contest 129/Smallest Integer Divisible by K.java deleted file mode 100644 index aba8f5e3..00000000 --- a/Contests/Weekly Contest 129/Smallest Integer Divisible by K.java +++ /dev/null @@ -1,17 +0,0 @@ -class Solution { - public int smallestRepunitDivByK(int K) { - if (K % 2 == 0 || K % 5 == 0) { - return -1; - } - - int rem = 0; - for (int i = 1; i <= K; i++) { - rem = (rem * 10 + 1) % K; - if (rem == 0) { - return i; - } - } - - return -1; - } -} diff --git a/Contests/Weekly Contest 131/Camelcase Matching.java b/Contests/Weekly Contest 131/Camelcase Matching.java deleted file mode 100644 index 2313a4ee..00000000 --- a/Contests/Weekly Contest 131/Camelcase Matching.java +++ /dev/null @@ -1,43 +0,0 @@ -class Solution { - public List camelMatch(String[] queries, String pattern) { - List ans = new ArrayList<>(); - - for (String query : queries) { - ans.add(check(query, pattern)); - } - - return ans; - } - - private boolean check(String query, String pattern) { - int qIdx = 0; - int pIdx = 0; - int qLen = query.length(); - int pLen = pattern.length(); - - while (qIdx < qLen && pIdx < pLen) { - if (query.charAt(qIdx) == pattern.charAt(pIdx)) { - qIdx++; - pIdx++; - } - else { - if (Character.isUpperCase(query.charAt(qIdx))) { - return false; - } - else { - qIdx++; - } - } - } - - while (qIdx < qLen) { - if (Character.isUpperCase(query.charAt(qIdx))) { - return false; - } - - qIdx++; - } - - return pIdx == pLen; - } -} diff --git a/Contests/Weekly Contest 131/Remove Outermost Parentheses.java b/Contests/Weekly Contest 131/Remove Outermost Parentheses.java deleted file mode 100644 index dfff44c7..00000000 --- a/Contests/Weekly Contest 131/Remove Outermost Parentheses.java +++ /dev/null @@ -1,22 +0,0 @@ -class Solution { - public String removeOuterParentheses(String S) { - StringBuilder sb = new StringBuilder(); - int count = 0; - int prev = 0; - - for (int i = 0; i < S.length(); i++) { - if (S.charAt(i) == '(') { - count++; - } - else { - count--; - if (count == 0) { - sb.append(S.substring(prev + 1, i)); - prev = i + 1; - } - } - } - - return sb.toString(); - } -} diff --git a/Contests/Weekly Contest 131/Sum of Root To Leaf Binary Numbers.java b/Contests/Weekly Contest 131/Sum of Root To Leaf Binary Numbers.java deleted file mode 100644 index 8b630ccd..00000000 --- a/Contests/Weekly Contest 131/Sum of Root To Leaf Binary Numbers.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public int sumRootToLeaf(TreeNode root) { - return dfsHelper(root, 0); - } - - private int MOD = 1000000007; - - private int dfsHelper(TreeNode root, int curr) { - if (root == null) { - return curr % MOD; - } - - curr = (curr * 2 + root.val) % MOD; - - if (root.left == null && root.right == null) { - return curr % MOD; - } - - int sum = 0; - - if (root.left != null) { - sum += dfsHelper(root.left, curr); - } - - if (root.right != null) { - sum += dfsHelper(root.right, curr); - } - - return sum % MOD; - } -} diff --git a/Contests/Weekly Contest 132/Divisor Game.java b/Contests/Weekly Contest 132/Divisor Game.java deleted file mode 100644 index 8a30b499..00000000 --- a/Contests/Weekly Contest 132/Divisor Game.java +++ /dev/null @@ -1,5 +0,0 @@ -class Solution { - public boolean divisorGame(int N) { - return N % 2 == 0; - } -} diff --git a/Contests/Weekly Contest 132/Longest Arithmetic Sequence.java b/Contests/Weekly Contest 132/Longest Arithmetic Sequence.java deleted file mode 100644 index 15ad247d..00000000 --- a/Contests/Weekly Contest 132/Longest Arithmetic Sequence.java +++ /dev/null @@ -1,35 +0,0 @@ -class Solution { - public int longestArithSeqLength(int[] A) { - if (A.length <= 1) { - return A.length; - } - - int res = 0; - HashMap[] dp = new HashMap[A.length]; - - for (int i = 0; i < A.length; i++) { - dp[i] = new HashMap<>(); - } - - for (int i = 1; i < A.length; i++) { - int curr = A[i]; - for (int j = 0; j < i; j++) { - int prev = A[j]; - int diff = curr - prev; - - int len = 2; - - if (dp[j].containsKey(diff)) { - len = dp[j].get(diff) + 1; - } - - int currLen = dp[i].getOrDefault(diff, 0); - dp[i].put(diff, Math.max(currLen, len)); - - res = Math.max(res, dp[i].get(diff)); - } - } - - return res; - } -} diff --git a/Contests/Weekly Contest 132/Maximum Difference Between Node and Ancestor.java b/Contests/Weekly Contest 132/Maximum Difference Between Node and Ancestor.java deleted file mode 100644 index ea63ea0d..00000000 --- a/Contests/Weekly Contest 132/Maximum Difference Between Node and Ancestor.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public int maxAncestorDiff(TreeNode root) { - return dfs(root, root.val, root.val); - } - - public int dfs(TreeNode root, int min, int max) { - if (root == null) { - return 0; - } - - int res = Math.max(max - root.val, root.val - min); - max = Math.max(root.val, max); - min = Math.min(root.val, min); - - res = Math.max(res, dfs(root.left, min, max)); - res = Math.max(res, dfs(root.right, min, max)); - - return res; - } -} From beddd34f4f148fc4a954884675d04c047c8bb0dc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Nov 2021 21:24:42 -0800 Subject: [PATCH 0094/1640] Create Stock Price Fluctuation.java --- Medium/Stock Price Fluctuation.java | 49 +++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Medium/Stock Price Fluctuation.java diff --git a/Medium/Stock Price Fluctuation.java b/Medium/Stock Price Fluctuation.java new file mode 100644 index 00000000..3b374efe --- /dev/null +++ b/Medium/Stock Price Fluctuation.java @@ -0,0 +1,49 @@ +class StockPrice { + Map map; + int mostRecentTimeStamp; + PriorityQueue minHeap; + PriorityQueue maxHeap; + public StockPrice() { + map = new HashMap<>(); + mostRecentTimeStamp = Integer.MIN_VALUE; + minHeap = new PriorityQueue<>(Comparator.comparingInt(a -> a[0])); + maxHeap = new PriorityQueue<>((a, b) -> b[0] - a[0]); + } + + public void update(int timestamp, int price) { + map.put(timestamp, price); + mostRecentTimeStamp = Math.max(mostRecentTimeStamp, timestamp); + minHeap.add(new int[]{price, timestamp}); + maxHeap.add(new int[]{price, timestamp}); + } + + public int current() { + return map.get(mostRecentTimeStamp); + } + + public int maximum() { + return getUpdatedValueFromHeap(maxHeap); + } + + public int minimum() { + return getUpdatedValueFromHeap(minHeap); + } + + private int getUpdatedValueFromHeap(PriorityQueue heap) { + int[] entry = heap.poll(); + while (entry[0] != map.get(entry[1])) { + entry = heap.poll(); + } + heap.add(entry); + return entry[0]; + } +} + +/** + * Your StockPrice object will be instantiated and called as such: + * StockPrice obj = new StockPrice(); + * obj.update(timestamp,price); + * int param_2 = obj.current(); + * int param_3 = obj.maximum(); + * int param_4 = obj.minimum(); + */ From 617dbc6e7a6a4dcadd7346400a2fb32b25598315 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 10 Nov 2021 15:51:30 -0800 Subject: [PATCH 0095/1640] Create Find the Middle Index in Array.java --- Easy/Find the Middle Index in Array.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Find the Middle Index in Array.java diff --git a/Easy/Find the Middle Index in Array.java b/Easy/Find the Middle Index in Array.java new file mode 100644 index 00000000..9f95a996 --- /dev/null +++ b/Easy/Find the Middle Index in Array.java @@ -0,0 +1,22 @@ +class Solution { + public int findMiddleIndex(int[] nums) { + int[] leftSum = new int[nums.length]; + int[] rightSum = new int[nums.length]; + int currSum = 0; + for (int i = 0; i < nums.length; i++) { + leftSum[i] = currSum; + currSum += nums[i]; + } + currSum = 0; + for (int i = nums.length - 1; i >= 0; i--) { + rightSum[i] = currSum; + currSum += nums[i]; + } + for (int i = 0; i < nums.length; i++) { + if (leftSum[i] == rightSum[i]) { + return i; + } + } + return -1; + } +} From 0c299dc4dd78a2696446c5504b0d67317f74be55 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 10 Nov 2021 18:09:27 -0800 Subject: [PATCH 0096/1640] Update Minimum Value to Get Positive Step by Step Sum.java --- ...inimum Value to Get Positive Step by Step Sum.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Easy/Minimum Value to Get Positive Step by Step Sum.java b/Easy/Minimum Value to Get Positive Step by Step Sum.java index 4745ae33..0d7401f1 100644 --- a/Easy/Minimum Value to Get Positive Step by Step Sum.java +++ b/Easy/Minimum Value to Get Positive Step by Step Sum.java @@ -1,14 +1,11 @@ class Solution { public int minStartValue(int[] nums) { - int startValue = 1; - int currSum = startValue; + int minPrefixSum = 0; + int currSum = 0; for (int num : nums) { currSum += num; - if (currSum < 1) { - startValue += 1 - currSum; - currSum += 1 - currSum; - } + minPrefixSum = Math.min(minPrefixSum, currSum); } - return startValue; + return -1 * minPrefixSum + 1; } } From 134f714dcdac6c78a6c9a0cbd186c37eb55c0bac Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 12 Nov 2021 15:30:26 -0800 Subject: [PATCH 0097/1640] Create Evaluate the Bracket Pairs of a String.java --- ...valuate the Bracket Pairs of a String.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Evaluate the Bracket Pairs of a String.java diff --git a/Medium/Evaluate the Bracket Pairs of a String.java b/Medium/Evaluate the Bracket Pairs of a String.java new file mode 100644 index 00000000..3a90861a --- /dev/null +++ b/Medium/Evaluate the Bracket Pairs of a String.java @@ -0,0 +1,24 @@ +class Solution { + public String evaluate(String s, List> knowledge) { + Map map = new HashMap<>(); + for (List entry : knowledge) { + map.put(entry.get(0), entry.get(1)); + } + StringBuilder sb = new StringBuilder(); + int idx = 0; + int n = s.length(); + while (idx < n) { + if (s.charAt(idx) == '(') { + idx++; + int currIdx = idx; + while (idx < n && s.charAt(idx) != ')') { + idx++; + } + sb.append(map.getOrDefault(s.substring(currIdx, idx++), "?")); + } else { + sb.append(s.charAt(idx++)); + } + } + return sb.toString(); + } +} From cad05dab991bc73090b4fd468aa879202fffaf33 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 13 Nov 2021 09:58:25 -0800 Subject: [PATCH 0098/1640] Create Check Whether Two Strings are Almost Equivalent.java --- ...heck Whether Two Strings are Almost Equivalent.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/Check Whether Two Strings are Almost Equivalent.java diff --git a/Easy/Check Whether Two Strings are Almost Equivalent.java b/Easy/Check Whether Two Strings are Almost Equivalent.java new file mode 100644 index 00000000..b417eb30 --- /dev/null +++ b/Easy/Check Whether Two Strings are Almost Equivalent.java @@ -0,0 +1,10 @@ +class Solution { + public boolean checkAlmostEquivalent(String word1, String word2) { + int[] counter = new int[26]; + for (int i = 0; i < word1.length(); i++) { + counter[word1.charAt(i) - 'a']++; + counter[word2.charAt(i) - 'a']--; + } + return IntStream.range(0, 26).allMatch(idx -> Math.abs(counter[idx]) <= 3); + } +} From e207ab975bb1574441ed1d5f15c5879a025e8fac Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 14 Nov 2021 07:30:23 -0800 Subject: [PATCH 0099/1640] Create Time Needed to Buy Tickets.java --- Easy/Time Needed to Buy Tickets.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Time Needed to Buy Tickets.java diff --git a/Easy/Time Needed to Buy Tickets.java b/Easy/Time Needed to Buy Tickets.java new file mode 100644 index 00000000..8f7e1a57 --- /dev/null +++ b/Easy/Time Needed to Buy Tickets.java @@ -0,0 +1,13 @@ +class Solution { + public int timeRequiredToBuy(int[] tickets, int k) { + int timeRequired = 0; + for(int i = 0;i < tickets.length; i++){ + if(i <= k){ + timeRequired += Math.min(tickets[k], tickets[i]); + } else { + timeRequired += Math.min(tickets[k] - 1, tickets[i]); + } + } + return timeRequired; + } +} From 83d4fa8b2592b9997dd6491711fbff7751324e2c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 Nov 2021 15:30:39 -0800 Subject: [PATCH 0100/1640] Create Reverse Nodes in Even Length Groups.java --- .../Reverse Nodes in Even Length Groups.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 Medium/Reverse Nodes in Even Length Groups.java diff --git a/Medium/Reverse Nodes in Even Length Groups.java b/Medium/Reverse Nodes in Even Length Groups.java new file mode 100644 index 00000000..5b723f6a --- /dev/null +++ b/Medium/Reverse Nodes in Even Length Groups.java @@ -0,0 +1,57 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode reverseEvenLengthGroups(ListNode head) { + if (head == null) { + return head; + } + int numOfNodes = 1; + ListNode prev = null; + ListNode curr = head; + int totalNumOfNodes = 0; + while (curr != null) { + totalNumOfNodes++; + curr = curr.next; + } + curr = head; + while (curr != null) { + numOfNodes = Math.min(numOfNodes, totalNumOfNodes); + totalNumOfNodes -= numOfNodes; + if (numOfNodes % 2 == 0) { + ListNode[] res = reverseList(curr, numOfNodes); + prev.next = res[0]; + prev = curr; + curr = res[1]; + } else { + for (int i = 0; i < numOfNodes && curr != null; i++) { + prev = curr; + curr = curr.next; + } + } + numOfNodes++; + } + return head; + } + + private ListNode[] reverseList(ListNode node, int n) { + ListNode prev = null; + ListNode curr = node; + ListNode post = null; + while (n-- > 0) { + post = curr.next; + curr.next = prev; + prev = curr; + curr = post; + } + node.next = curr; + return new ListNode[]{prev, post}; + } +} From 0cf4bfc5e933f2df7d66b43519c7d87d77486aa7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 16 Nov 2021 06:57:03 -0800 Subject: [PATCH 0101/1640] Create Kth Smallest Number in Multiplication Table.java --- ...allest Number in Multiplication Table.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Hard/Kth Smallest Number in Multiplication Table.java diff --git a/Hard/Kth Smallest Number in Multiplication Table.java b/Hard/Kth Smallest Number in Multiplication Table.java new file mode 100644 index 00000000..84d55bf2 --- /dev/null +++ b/Hard/Kth Smallest Number in Multiplication Table.java @@ -0,0 +1,19 @@ +class Solution { + public int findKthNumber(int m, int n, int k) { + int low = 0; + int high = m * n; + while (low < high) { + int mid = (low + high) / 2; + int count = 0; + for (int i = 1; i <= m; i++) { + count += Math.min(n, mid / i); + } + if (count >= k) { + high = mid; + } else { + low = mid + 1; + } + } + return low; + } +} From 9064ac3787089012993b8117d0aae7857b95b8a3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 17 Nov 2021 05:45:47 -0800 Subject: [PATCH 0102/1640] Update Unique Paths.java --- Medium/Unique Paths.java | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Medium/Unique Paths.java b/Medium/Unique Paths.java index 5bea1273..8f1be73d 100644 --- a/Medium/Unique Paths.java +++ b/Medium/Unique Paths.java @@ -1,21 +1,20 @@ class Solution { - Integer[][] dp; public int uniquePaths(int m, int n) { - dp = new Integer[m][n]; - return dfs(m, n, 0, 0); + Integer[][] dp = new Integer[m][n]; + return helper(0, 0, m, n, dp); } - private int dfs(int m, int n, int x, int y) { - if (x >= m || y >= n) { - return 0; + private int helper(int currX, int currY, int m, int n, Integer[][] dp) { + if (currX == m - 1 && currY == n - 1) { + return 1; } - if (dp[x][y] != null) { - return dp[x][y]; + if (currX >= m || currY >= n) { + return 0; } - if (x == m - 1 && y == n - 1) { - return 1; + if (dp[currX][currY] != null) { + return dp[currX][currY]; } - dp[x][y] = dfs(m, n, x + 1, y) + dfs(m, n, x, y + 1); - return dp[x][y]; + dp[currX][currY] = helper(currX + 1, currY, m, n, dp) + helper(currX, currY + 1, m, n, dp); + return dp[currX][currY]; } } From 5a23685ddb4b0cdf81b8948f55edc9bfcdcef5cc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 19 Nov 2021 09:07:12 -0800 Subject: [PATCH 0103/1640] Create Design Front Middle Back Queue.java --- Medium/Design Front Middle Back Queue.java | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 Medium/Design Front Middle Back Queue.java diff --git a/Medium/Design Front Middle Back Queue.java b/Medium/Design Front Middle Back Queue.java new file mode 100644 index 00000000..cee37d34 --- /dev/null +++ b/Medium/Design Front Middle Back Queue.java @@ -0,0 +1,64 @@ +class FrontMiddleBackQueue { + + Deque frontQueue; + Deque backQueue; + + public FrontMiddleBackQueue() { + frontQueue = new ArrayDeque<>(); + backQueue = new ArrayDeque<>(); + } + + public void pushFront(int val) { + frontQueue.addFirst(val); + } + + public void pushMiddle(int val) { + while (frontQueue.size() + 1 < backQueue.size()) { + frontQueue.addLast(backQueue.removeFirst()); + } + while (frontQueue.size() > backQueue.size()) { + backQueue.addFirst(frontQueue.removeLast()); + } + frontQueue.addLast(val); + } + + public void pushBack(int val) { + backQueue.addLast(val); + } + + public int popFront() { + return frontQueue.isEmpty() + ? (backQueue.isEmpty() ? -1 : backQueue.removeFirst()) + : frontQueue.removeFirst(); + } + + public int popMiddle() { + if (frontQueue.isEmpty() && backQueue.isEmpty()) { + return -1; + } + while (frontQueue.size() < backQueue.size()) { + frontQueue.addLast(backQueue.removeFirst()); + } + while (frontQueue.size() > backQueue.size() + 1) { + backQueue.addFirst(frontQueue.removeLast()); + } + return !frontQueue.isEmpty() ? frontQueue.removeLast() : backQueue.removeFirst(); + } + + public int popBack() { + return backQueue.isEmpty() + ? (frontQueue.isEmpty() ? -1 : frontQueue.removeLast()) + : backQueue.removeLast(); + } +} + +/** + * Your FrontMiddleBackQueue object will be instantiated and called as such: + * FrontMiddleBackQueue obj = new FrontMiddleBackQueue(); + * obj.pushFront(val); + * obj.pushMiddle(val); + * obj.pushBack(val); + * int param_4 = obj.popFront(); + * int param_5 = obj.popMiddle(); + * int param_6 = obj.popBack(); + */ From 9d7c3e6619e7cf9e7c30e7250f23db28356f5a22 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 21 Nov 2021 06:39:43 -0800 Subject: [PATCH 0104/1640] Create Two Furthest Houses With Different Colors.java --- Easy/Two Furthest Houses With Different Colors.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Two Furthest Houses With Different Colors.java diff --git a/Easy/Two Furthest Houses With Different Colors.java b/Easy/Two Furthest Houses With Different Colors.java new file mode 100644 index 00000000..af52bca8 --- /dev/null +++ b/Easy/Two Furthest Houses With Different Colors.java @@ -0,0 +1,13 @@ +class Solution { + public int maxDistance(int[] colors) { + int startIdx = 0; + int endIdx = colors.length - 1; + while (colors[0] == colors[endIdx]) { + endIdx--; + } + while (colors[colors.length - 1] == colors[startIdx]) { + startIdx++; + } + return Math.max(colors.length - 1 - startIdx, endIdx); + } +} From e1f30a9f31a3fe53652e70474296ab4202fcf885 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Nov 2021 06:30:53 -0800 Subject: [PATCH 0105/1640] Create Watering Plants.java --- Medium/Watering Plants.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Watering Plants.java diff --git a/Medium/Watering Plants.java b/Medium/Watering Plants.java new file mode 100644 index 00000000..afa36ee2 --- /dev/null +++ b/Medium/Watering Plants.java @@ -0,0 +1,16 @@ +class Solution { + public int wateringPlants(int[] plants, int capacity) { + int idx = 0; + int currCapacity = capacity; + int totalSteps = 0; + while (idx < plants.length) { + if (currCapacity < plants[idx]) { + currCapacity = capacity; + totalSteps += 2 * idx; + } + currCapacity -= plants[idx++]; + totalSteps++; + } + return totalSteps; + } +} From 582aea891f3f41b959559151fd5cf92df2bb6d7d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Nov 2021 06:38:37 -0800 Subject: [PATCH 0106/1640] Update Delete Node in a BST.java --- Medium/Delete Node in a BST.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Medium/Delete Node in a BST.java b/Medium/Delete Node in a BST.java index 8502798f..4f9cb6eb 100644 --- a/Medium/Delete Node in a BST.java +++ b/Medium/Delete Node in a BST.java @@ -20,16 +20,13 @@ public TreeNode deleteNode(TreeNode root, int key) { } if (root.val > key) { root.left = deleteNode(root.left, key); - } - else if (root.val < key) { + } else if (root.val < key) { root.right = deleteNode(root.right, key); - } - else { + } else { if (root.left == null || root.right == null) { TreeNode temp = root.left == null ? root.right : root.left; return temp; - } - else { + } else { TreeNode inorderSuccessor = root.right; while (inorderSuccessor.left != null) { inorderSuccessor = inorderSuccessor.left; From 80d54ce4aea7b7e2e7a33ff93f036546269a0945 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Nov 2021 05:56:27 -0800 Subject: [PATCH 0107/1640] Update Interval List Intersections.java --- Medium/Interval List Intersections.java | 29 ++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Medium/Interval List Intersections.java b/Medium/Interval List Intersections.java index 0b7c1033..6441b8ec 100644 --- a/Medium/Interval List Intersections.java +++ b/Medium/Interval List Intersections.java @@ -1,22 +1,21 @@ class Solution { - public int[][] intervalIntersection(int[][] A, int[][] B) { + public int[][] intervalIntersection(int[][] firstList, int[][] secondList) { List list = new ArrayList<>(); - int startA = 0; - int startB = 0; - while (startA < A.length && startB < B.length) { - int intervalStart = Math.max(A[startA][0], B[startB][0]); - int intervalEnd = Math.min(A[startA][1], B[startB][1]); - if (intervalStart <= intervalEnd) { - list.add(new int[]{intervalStart, intervalEnd}); + int idxOne = 0; + int idxTwo = 0; + while (idxOne < firstList.length && idxTwo < secondList.length) { + int maxStart = Math.max(firstList[idxOne][0], secondList[idxTwo][0]); + int minEnd = Math.min(firstList[idxOne][1], secondList[idxTwo][1]); + if (maxStart <= minEnd) { + list.add(new int[]{maxStart, minEnd}); } - if (A[startA][1] < B[startB][1]) { - startA++; - } - else { - startB++; + if (minEnd == firstList[idxOne][1]) { + idxOne++; + } else { + idxTwo++; } } - int[][] ans = new int[list.size()][2]; - return list.toArray(ans); + int[][] result = new int[list.size()][2]; + return list.toArray(result); } } From 665141b21ddba9d615f22f8065740312002ac955 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 25 Nov 2021 16:28:19 -0800 Subject: [PATCH 0108/1640] Update Search Insert Position.java --- Easy/Search Insert Position.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Easy/Search Insert Position.java b/Easy/Search Insert Position.java index b6187b17..3e2f930c 100644 --- a/Easy/Search Insert Position.java +++ b/Easy/Search Insert Position.java @@ -1,19 +1,17 @@ class Solution { public int searchInsert(int[] nums, int target) { - int low = 0; - int high = nums.length - 1; - while (low <= high) { - int mid = (low + high) / 2; + int left = 0; + int right = nums.length - 1; + while (left <= right) { + int mid = (left + right) / 2; if (nums[mid] == target) { return mid; - } - else if (nums[mid] > target) { - high = mid - 1; - } - else { - low = mid + 1; + } else if (nums[mid] > target) { + right = mid - 1; + } else { + left = mid + 1; } } - return low; + return left; } } From 9e1aad7bac70d9f7ff89c8a60129190e748e0d26 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Nov 2021 06:13:49 -0800 Subject: [PATCH 0109/1640] Create Count Common Words With One Occurrence.java --- Easy/Count Common Words With One Occurrence.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Count Common Words With One Occurrence.java diff --git a/Easy/Count Common Words With One Occurrence.java b/Easy/Count Common Words With One Occurrence.java new file mode 100644 index 00000000..514a87bc --- /dev/null +++ b/Easy/Count Common Words With One Occurrence.java @@ -0,0 +1,16 @@ +class Solution { + public int countWords(String[] words1, String[] words2) { + Map map = new HashMap<>(); + buildFrequencyMap(words1, map, 0); + buildFrequencyMap(words2, map, 1); + return (int) map.entrySet().stream() + .filter(entry -> entry.getValue()[0] == 1 && entry.getValue()[1] == 1) + .count(); + } + + private void buildFrequencyMap(String[] words, Map map, int idx) { + for (String word : words) { + map.computeIfAbsent(word, k -> new int[2])[idx]++; + } + } +} From b659134cbe0491b7444115938be24acf4277b029 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 29 Nov 2021 07:08:26 -0800 Subject: [PATCH 0110/1640] Create Find Target Indices After Sorting Array.java --- ...nd Target Indices After Sorting Array.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Find Target Indices After Sorting Array.java diff --git a/Easy/Find Target Indices After Sorting Array.java b/Easy/Find Target Indices After Sorting Array.java new file mode 100644 index 00000000..f0776eba --- /dev/null +++ b/Easy/Find Target Indices After Sorting Array.java @@ -0,0 +1,19 @@ +class Solution { + public List targetIndices(int[] nums, int target) { + int count = 0; + int lessThanCount = 0; + for (int num : nums) { + if (num == target) { + count++; + } + if (num < target) { + lessThanCount++; + } + } + List indices = new ArrayList<>(); + for (int i = 0; i < count; i++) { + indices.add(lessThanCount + i); + } + return indices; + } +} From dcc11e62466c49a8c81664b138b0de4494c14e7b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 4 Dec 2021 06:35:26 -0800 Subject: [PATCH 0111/1640] Update Stream of Characters.java --- Hard/Stream of Characters.java | 49 ++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/Hard/Stream of Characters.java b/Hard/Stream of Characters.java index 02fe377a..2f3fbed7 100644 --- a/Hard/Stream of Characters.java +++ b/Hard/Stream of Characters.java @@ -1,19 +1,23 @@ class StreamChecker { - TrieNode root; + Deque stream; + TrieNode root; public StreamChecker(String[] words) { root = new TrieNode('-'); - stream = new ArrayDeque(); - for (String word : words) { - TrieNode curr = root; - for (int i = word.length() - 1; i >= 0; i--) { - if (!curr.map.containsKey(word.charAt(i))) { - curr.map.put(word.charAt(i), new TrieNode(word.charAt(i))); - } - curr = curr.map.get(word.charAt(i)); + stream = new ArrayDeque<>(); + Arrays.stream(words).forEach(word -> addWord(word)); + } + + public void addWord(String word) { + TrieNode curr = root; + for (int i = word.length() - 1; i >= 0; i--) { + char c = word.charAt(i); + if (curr.children[c - 'a'] == null) { + curr.children[c - 'a'] = new TrieNode(c); } - curr.isWord = true; + curr = curr.children[c - 'a']; } + curr.isWord = true; } public boolean query(char letter) { @@ -23,25 +27,24 @@ public boolean query(char letter) { if (curr.isWord) { return true; } - if (!curr.map.containsKey(c)) { + if (curr.children[c - 'a'] == null) { return false; } - curr = curr.map.get(c); + curr = curr.children[c - 'a']; } return curr.isWord; } -} - - -class TrieNode { - char c; - Map map; - boolean isWord; - public TrieNode(char c) { - this.c = c; - map = new HashMap<>(); - isWord = false; + + class TrieNode { + char c; + TrieNode[] children; + boolean isWord; + + public TrieNode(char c) { + this.c = c; + children = new TrieNode[26]; + } } } From ee8a4c149492a2745d5429f4be88c582209fe50e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 Dec 2021 14:23:47 -0800 Subject: [PATCH 0112/1640] Create Finding 3-Digit Even Numbers.java --- Easy/Finding 3-Digit Even Numbers.java | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Easy/Finding 3-Digit Even Numbers.java diff --git a/Easy/Finding 3-Digit Even Numbers.java b/Easy/Finding 3-Digit Even Numbers.java new file mode 100644 index 00000000..e8feb4aa --- /dev/null +++ b/Easy/Finding 3-Digit Even Numbers.java @@ -0,0 +1,33 @@ +class Solution { + public int[] findEvenNumbers(int[] digits) { + List list = new ArrayList<>(); + int[] counter = new int[10]; + for (int digit : digits) { + counter[digit]++; + } + for (int digitOne = 1; digitOne <= 9; digitOne++) { + if (counter[digitOne] > 0) { + counter[digitOne]--; + for (int digitTwo = 0; digitTwo <= 9; digitTwo++) { + if (counter[digitTwo] > 0) { + counter[digitTwo]--; + for (int digitThree = 0; digitThree <= 8; digitThree += 2) { + if (counter[digitThree] > 0) { + list.add(digitOne * 100 + digitTwo * 10 + digitThree); + } + } + counter[digitTwo]++; + } + } + counter[digitOne]++; + } + } + int[] result = new int[list.size()]; + int idx = 0; + for (int num : list) { + result[idx++] = num; + } + Arrays.sort(result); + return result; + } +} From 5632d7dea94df461ebe0fa3eb643529ec880fdae Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Dec 2021 09:38:30 -0800 Subject: [PATCH 0113/1640] Create Minimum Cost to Move Chips to The Same Position.java --- ...um Cost to Move Chips to The Same Position.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Minimum Cost to Move Chips to The Same Position.java diff --git a/Easy/Minimum Cost to Move Chips to The Same Position.java b/Easy/Minimum Cost to Move Chips to The Same Position.java new file mode 100644 index 00000000..7208148a --- /dev/null +++ b/Easy/Minimum Cost to Move Chips to The Same Position.java @@ -0,0 +1,14 @@ +class Solution { + public int minCostToMoveChips(int[] position) { + int evenCount = 0; + int oddCount = 0; + for (int p : position) { + if (p % 2 == 0) { + evenCount++; + } else { + oddCount++; + } + } + return Math.min(evenCount, oddCount); + } +} From 73ee8a58f3bdf5caef8d8967d65768180aec7c51 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Dec 2021 09:43:45 -0800 Subject: [PATCH 0114/1640] Create Delete the Middle Node of a Linked List.java --- ...lete the Middle Node of a Linked List.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Delete the Middle Node of a Linked List.java diff --git a/Medium/Delete the Middle Node of a Linked List.java b/Medium/Delete the Middle Node of a Linked List.java new file mode 100644 index 00000000..1fe07371 --- /dev/null +++ b/Medium/Delete the Middle Node of a Linked List.java @@ -0,0 +1,25 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode deleteMiddle(ListNode head) { + if (head.next == null) { + return null; + } + ListNode slow = head; + ListNode fast = head.next.next; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + } + slow.next = slow.next.next; + return head; + } +} From b9ae48f66a985fd25318a9caea934511bcb526b8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Dec 2021 07:07:38 -0800 Subject: [PATCH 0115/1640] Update Convert Binary Number in a Linked List to Integer.java --- ...ry Number in a Linked List to Integer.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/Easy/Convert Binary Number in a Linked List to Integer.java b/Easy/Convert Binary Number in a Linked List to Integer.java index 22ed597d..88ac4468 100644 --- a/Easy/Convert Binary Number in a Linked List to Integer.java +++ b/Easy/Convert Binary Number in a Linked List to Integer.java @@ -3,27 +3,25 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public int getDecimalValue(ListNode head) { - int length = getLength(head); - int sum = 0; - while (head != null) { - sum += ((int) Math.pow(2, length - 1)) * head.val; - length--; - head = head.next; + int nodeLength = -1; + ListNode curr = head; + while (curr != null) { + nodeLength++; + curr = curr.next; } - return sum; - } - - private int getLength(ListNode head) { - int count = 0; - while (head != null) { - count++; - head = head.next; + int decimalValue = 0; + curr = head; + while (curr != null) { + decimalValue += curr.val * Math.pow(2, nodeLength--); + curr = curr.next; } - return count; + return decimalValue; } } From 3d94752af01bf762eae65ece11ce30416ac0edbb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Dec 2021 11:31:20 -0800 Subject: [PATCH 0116/1640] Create Step-By-Step Directions From a Binary Tree Node to Another.java --- ...ns From a Binary Tree Node to Another.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Medium/Step-By-Step Directions From a Binary Tree Node to Another.java diff --git a/Medium/Step-By-Step Directions From a Binary Tree Node to Another.java b/Medium/Step-By-Step Directions From a Binary Tree Node to Another.java new file mode 100644 index 00000000..59695899 --- /dev/null +++ b/Medium/Step-By-Step Directions From a Binary Tree Node to Another.java @@ -0,0 +1,44 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public String getDirections(TreeNode root, int startValue, int destValue) { + StringBuilder sourcePath = new StringBuilder(); + StringBuilder destinationPath = new StringBuilder(); + findPath(root, startValue, sourcePath); + findPath(root, destValue, destinationPath); + int idx = 0; + // Remove common prefix + while (idx < Math.min(sourcePath.length(), destinationPath.length()) && + sourcePath.charAt(sourcePath.length() - idx - 1) == destinationPath.charAt(destinationPath.length() - idx - 1)) { + idx++; + } + // Replace remaining sourcePath with 'U' and append remaining destinationPath + return "U".repeat(sourcePath.length() - idx) + destinationPath.reverse().toString().substring(idx); + } + + private boolean findPath(TreeNode root, int value, StringBuilder sb) { + if (root.val == value) { + return true; + } + if (root.left != null && findPath(root.left, value, sb)) { + sb.append("L"); + } + else if (root.right != null && findPath(root.right, value, sb)) { + sb.append("R"); + } + return sb.length() > 0; + } +} From 5f0e3239e3de23f9bab6c770dd92530dbfe44668 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Dec 2021 05:22:53 -0800 Subject: [PATCH 0117/1640] Create Jump Game III.java --- Medium/Jump Game III.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Jump Game III.java diff --git a/Medium/Jump Game III.java b/Medium/Jump Game III.java new file mode 100644 index 00000000..1862ad7c --- /dev/null +++ b/Medium/Jump Game III.java @@ -0,0 +1,27 @@ +class Solution { + public boolean canReach(int[] arr, int start) { + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(); + queue.add(start); + while (!queue.isEmpty()) { + int size = queue.size(); + for (int i = 0; i < size; i++) { + int removed = queue.remove(); + if (arr[removed] == 0) { + return true; + } + if (visited.contains(removed)) { + continue; + } + visited.add(removed); + if (removed + arr[removed] < arr.length) { + queue.add(removed + arr[removed]); + } + if (removed - arr[removed] >= 0) { + queue.add(removed - arr[removed]); + } + } + } + return false; + } +} From 220ad0ef725b549ec20895abf34bae8421b2af37 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Dec 2021 08:19:35 -0800 Subject: [PATCH 0118/1640] Create Rings and Rods.java --- Easy/Rings and Rods.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Rings and Rods.java diff --git a/Easy/Rings and Rods.java b/Easy/Rings and Rods.java new file mode 100644 index 00000000..fd98b60a --- /dev/null +++ b/Easy/Rings and Rods.java @@ -0,0 +1,11 @@ +class Solution { + public int countPoints(String rings) { + Map> map = new HashMap<>(); + for (int i = 0; i < rings.length(); i += 2) { + char ring = rings.charAt(i); + int rod = Character.getNumericValue(rings.charAt(i + 1)); + map.computeIfAbsent(rod, k -> new HashSet()).add(ring); + } + return (int) map.values().stream().filter(v -> v.size() == 3).count(); + } +} From bcb83efe781391a18b82a1579100da7d426b8588 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Dec 2021 12:09:23 -0800 Subject: [PATCH 0119/1640] Rename sum_of_two_integers.java to Sum Of Two Integers.java --- Easy/{sum_of_two_integers.java => Sum Of Two Integers.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Easy/{sum_of_two_integers.java => Sum Of Two Integers.java} (98%) diff --git a/Easy/sum_of_two_integers.java b/Easy/Sum Of Two Integers.java similarity index 98% rename from Easy/sum_of_two_integers.java rename to Easy/Sum Of Two Integers.java index 65f75c56..c1a70d9a 100644 --- a/Easy/sum_of_two_integers.java +++ b/Easy/Sum Of Two Integers.java @@ -5,4 +5,4 @@ public int getSum(int x, int y) { else return getSum( x ^ y, (x & y) << 1); } -} \ No newline at end of file +} From c290f14c2267038ae2b999aa380cae17de366ec3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Dec 2021 17:48:31 -0800 Subject: [PATCH 0120/1640] Create Range Sum of BST.java --- Easy/Range Sum of BST.java | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Easy/Range Sum of BST.java diff --git a/Easy/Range Sum of BST.java b/Easy/Range Sum of BST.java new file mode 100644 index 00000000..35b3b6ae --- /dev/null +++ b/Easy/Range Sum of BST.java @@ -0,0 +1,37 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int rangeSumBST(TreeNode root, int low, int high) { + int[] rangeSum = {0}; + helper(root, low, high, rangeSum); + return rangeSum[0]; + } + + private void helper(TreeNode root, int low, int high, int[] rangeSum) { + if (root == null) { + return; + } + if (root.val >= low && root.val <= high) { + rangeSum[0] += root.val; + } + if (root.val >= low) { + helper(root.left, low, high, rangeSum); + } + if (root.val <= high) { + helper(root.right, low, high, rangeSum); + } + } +} From 35fe776117d57e24f10c9a89667ab56e8af23cc5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Dec 2021 06:48:37 -0800 Subject: [PATCH 0121/1640] Create Find First Palindromic String in the Array.java --- Easy/Find First Palindromic String in the Array.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Find First Palindromic String in the Array.java diff --git a/Easy/Find First Palindromic String in the Array.java b/Easy/Find First Palindromic String in the Array.java new file mode 100644 index 00000000..ba990c09 --- /dev/null +++ b/Easy/Find First Palindromic String in the Array.java @@ -0,0 +1,9 @@ +class Solution { + public String firstPalindrome(String[] words) { + return Arrays.stream(words).filter(Solution::isPalindrome).findFirst().orElse(""); + } + + public static boolean isPalindrome(String s) { + return new StringBuilder().append(s).reverse().toString().equals(s); + } +} From 503b8c4d986877a138d8a60149d0c2f044c760ef Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Dec 2021 06:53:05 -0800 Subject: [PATCH 0122/1640] Create Adding Spaces to a String.java --- Medium/Adding Spaces to a String.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Adding Spaces to a String.java diff --git a/Medium/Adding Spaces to a String.java b/Medium/Adding Spaces to a String.java new file mode 100644 index 00000000..f1a0dc5f --- /dev/null +++ b/Medium/Adding Spaces to a String.java @@ -0,0 +1,12 @@ +class Solution { + public String addSpaces(String s, int[] spaces) { + StringBuilder sb = new StringBuilder(); + int startIdx = 0; + for (int spaceIdx : spaces) { + sb.append(s.substring(startIdx, spaceIdx)).append(" "); + startIdx = spaceIdx; + } + sb.append(s.substring(startIdx)); + return sb.toString(); + } +} From 7f75191ab7dc9e30485b5783d555d6f9bffb8038 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Dec 2021 07:43:12 -0800 Subject: [PATCH 0123/1640] Update Decode String.java --- Medium/Decode String.java | 65 ++++++++++++++++++--------------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/Medium/Decode String.java b/Medium/Decode String.java index 7381fd10..f88449d7 100644 --- a/Medium/Decode String.java +++ b/Medium/Decode String.java @@ -1,39 +1,34 @@ class Solution { - public static String decodeString(String s) { - Stack count = new Stack<>(); - Stack str = new Stack<>(); - int i = 0; - str.push(""); - while(i < s.length()) { - if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { - int start = i; - while (s.charAt(i+1) >= '0' && s.charAt(i+1) <= '9') { - i++; - } - count.push(Integer.parseInt(s.substring(start, i + 1))); - } - else if (s.charAt(i) == '[') { - str.push(""); - } - else if (s.charAt(i) == ']') { - String st = str.pop(); - StringBuilder sb = new StringBuilder(); - int n = count.pop(); - - for (int j = 0; j < n; j++) { - sb.append(st); - } - - str.push(str.pop() + sb.toString()); - } - else { - str.push(str.pop() + s.charAt(i)); - } - - i++; + public String decodeString(String s) { + Stack countStack = new Stack<>(); + Stack wordStack = new Stack<>(); + StringBuilder sb = new StringBuilder(); + int idx = 0; + while (idx < s.length()) { + if (Character.isDigit(s.charAt(idx))) { + int count = 0; + while (idx < s.length() && Character.isDigit(s.charAt(idx))) { + count = count * 10 + Character.getNumericValue(s.charAt(idx++)); } - - return str.pop(); + countStack.push(count); + } else if (Character.isLetter(s.charAt(idx))) { + sb.append(s.charAt(idx++)); + } else if (s.charAt(idx) == '[') { + wordStack.push(sb.toString()); + sb.setLength(0); + idx++; + } else { + StringBuilder temp = new StringBuilder(wordStack.pop()); + String currentString = sb.toString(); + sb.setLength(0); + int count = countStack.pop(); + while (count-- > 0) { + temp.append(currentString); + } + sb.append(temp); + idx++; + } } + return sb.toString(); + } } - From 48fe7cc83d55e1256d5375f0ff29e9e398410946 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Dec 2021 16:32:35 -0800 Subject: [PATCH 0124/1640] Create Number of Smooth Descent Periods of a Stock.java --- ...ber of Smooth Descent Periods of a Stock.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Number of Smooth Descent Periods of a Stock.java diff --git a/Medium/Number of Smooth Descent Periods of a Stock.java b/Medium/Number of Smooth Descent Periods of a Stock.java new file mode 100644 index 00000000..34f34227 --- /dev/null +++ b/Medium/Number of Smooth Descent Periods of a Stock.java @@ -0,0 +1,16 @@ +class Solution { + public long getDescentPeriods(int[] prices) { + long smoothDescentPeriods = 0; + int idx = 0; + while (idx < prices.length) { + long currentDescentPeriod = 1; + idx++; + while (idx < prices.length && prices[idx - 1] - prices[idx] == 1) { + currentDescentPeriod++; + idx++; + } + smoothDescentPeriods += currentDescentPeriod * (currentDescentPeriod + 1) / 2; + } + return smoothDescentPeriods; + } +} From 4b0f3def90a5ff95bde1edda45f39e111301c4c7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Dec 2021 08:17:03 -0800 Subject: [PATCH 0125/1640] Update Minimum Absolute Difference.java --- Easy/Minimum Absolute Difference.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Easy/Minimum Absolute Difference.java b/Easy/Minimum Absolute Difference.java index c7204166..793dd171 100644 --- a/Easy/Minimum Absolute Difference.java +++ b/Easy/Minimum Absolute Difference.java @@ -1,19 +1,16 @@ class Solution { public List> minimumAbsDifference(int[] arr) { - List> list = new ArrayList<>(); int minDiff = Integer.MAX_VALUE; Arrays.sort(arr); for (int i = 0; i < arr.length - 1; i++) { - int diff = arr[i + 1] - arr[i]; - if (diff < minDiff) { - list.clear(); - list.add(Arrays.asList(arr[i], arr[i + 1])); - minDiff = diff; - } - else if (diff == minDiff) { - list.add(Arrays.asList(arr[i], arr[i + 1])); + minDiff = Math.min(minDiff, arr[i + 1] - arr[i]); + } + List> result = new ArrayList<>(); + for (int i = 0; i < arr.length - 1; i++) { + if (arr[i + 1] - arr[i] == minDiff) { + result.add(Arrays.asList(arr[i], arr[i + 1])); } } - return list; + return result; } } From f7e70d06329435012b541be8d7365b6a468fc536 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Dec 2021 16:28:14 -0800 Subject: [PATCH 0126/1640] Update Power of Two.java --- Easy/Power of Two.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Easy/Power of Two.java b/Easy/Power of Two.java index c4ddd0f3..caf0d77a 100644 --- a/Easy/Power of Two.java +++ b/Easy/Power of Two.java @@ -1,21 +1,19 @@ class Solution { public boolean isPowerOfTwo(int n) { - if (n % 2 != 0 && n != 1) { + if (n > 1 && n % 2 != 0) { return false; } int start = 0; int end = n / 2; while (start <= end) { int mid = (start + end) / 2; - int pow = (int) (Math.pow(2, mid)); - if (n == pow) { + int pow = (int) Math.pow(2, mid); + if (pow == n) { return true; - } - else if (n > pow) { - start = mid + 1; - } - else { + } else if (pow > n) { end = mid - 1; + } else { + start = mid + 1; } } return false; From 8df2835f0dbc7b63cce687f4d71ebd17bb112f39 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 21 Dec 2021 16:43:44 -0800 Subject: [PATCH 0127/1640] Update Reorder List.java --- Medium/Reorder List.java | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Medium/Reorder List.java b/Medium/Reorder List.java index beb3390b..f67b973c 100644 --- a/Medium/Reorder List.java +++ b/Medium/Reorder List.java @@ -10,34 +10,35 @@ */ class Solution { public void reorderList(ListNode head) { - if (head == null || head.next == null) { + if (head.next == null) { return; } - ListNode fast = head; + // Find mid point ListNode slow = head; + ListNode fast = head; while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } + // Reverse the second half & break the two halves ListNode secondHalf = reverse(slow.next); slow.next = null; ListNode firstHalf = head; - ListNode firstNext = null; - ListNode secondNext = null; + // Merge first half and second half while (firstHalf != null && secondHalf != null) { - firstNext = firstHalf.next; - secondNext = secondHalf.next; + ListNode firstHalfNext = firstHalf.next; + ListNode secondHalfNext = secondHalf.next; firstHalf.next = secondHalf; - secondHalf.next = firstNext; - firstHalf = firstNext; - secondHalf = secondNext; + secondHalf.next = firstHalfNext; + firstHalf = firstHalfNext; + secondHalf = secondHalfNext; } } - private ListNode reverse(ListNode node) { - ListNode curr = node; - ListNode prev = null; + private ListNode reverse(ListNode head) { + ListNode curr = head; ListNode next = null; + ListNode prev = null; while (curr != null) { next = curr.next; curr.next = prev; From 7b863f4af4a3e36416c15de0b7a0025b47c94a8f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 24 Dec 2021 07:18:44 -0800 Subject: [PATCH 0128/1640] Update Merge Intervals.java --- Medium/Merge Intervals.java | 52 +++++++++++-------------------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/Medium/Merge Intervals.java b/Medium/Merge Intervals.java index c770e419..c4b49872 100644 --- a/Medium/Merge Intervals.java +++ b/Medium/Merge Intervals.java @@ -1,44 +1,22 @@ class Solution { public int[][] merge(int[][] intervals) { - Arrays.sort(intervals, new Comparator(){ - public int compare(int[] o1, int[] o2) { - int c = o1[0] - o2[0]; - if (c != 0) { - return c; - } - return o1[1] - o2[1]; - } - }); - List intervalList = new ArrayList<>(); - int end = 0; - int n = intervals.length; - int currStart = -1; - int currEnd = -1; - while (end < n) { - if (currStart == -1 && currEnd == -1) { - currStart = intervals[end][0]; - currEnd = intervals[end][1]; - end++; - } - if (end < n) { - if (currEnd >= intervals[end][0]) { - currEnd = Math.max(intervals[end][1], currEnd); - end++; - } - else { - intervalList.add(new int[]{currStart, currEnd}); - currStart = -1; - currEnd = -1; - } - } - if (end == n && currStart != -1 && currEnd != -1) { - intervalList.add(new int[]{currStart, currEnd}); + Arrays.sort(intervals, Comparator.comparingInt((int[] o) -> o[0]).thenComparingInt(o -> o[1])); + List mergedIntervals = new ArrayList<>(); + int idx = 0; + while (idx < intervals.length) { + int currentStart = intervals[idx][0]; + int currentEnd = intervals[idx][1]; + idx++; + while (idx < intervals.length && intervals[idx][0] <= currentEnd) { + currentEnd = Math.max(intervals[idx][1], currentEnd); + idx++; } + mergedIntervals.add(new int[]{currentStart, currentEnd}); } - int[][] ans = new int[intervalList.size()][2]; - for (int i = 0; i < intervalList.size(); i++) { - ans[i] = intervalList.get(i); + int[][] result = new int[mergedIntervals.size()][2]; + for (int i = 0; i < mergedIntervals.size(); i++) { + result[i] = mergedIntervals.get(i); } - return ans; + return result; } } From 8219429189694e756c557afa4a0702be0375b4c0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 25 Dec 2021 23:21:28 -0800 Subject: [PATCH 0129/1640] Update and rename Easy/K Closest Points to Origin.java to Medium/K Closest Points to Origin.java --- Easy/K Closest Points to Origin.java | 36 -------------------------- Medium/K Closest Points to Origin.java | 15 +++++++++++ 2 files changed, 15 insertions(+), 36 deletions(-) delete mode 100644 Easy/K Closest Points to Origin.java create mode 100644 Medium/K Closest Points to Origin.java diff --git a/Easy/K Closest Points to Origin.java b/Easy/K Closest Points to Origin.java deleted file mode 100644 index 950e2783..00000000 --- a/Easy/K Closest Points to Origin.java +++ /dev/null @@ -1,36 +0,0 @@ -class Solution { - public int[][] kClosest(int[][] points, int K) { - int[][] ans = new int[K][2]; - PriorityQueue pq = new PriorityQueue<>(new Comparator() { - @Override - public int compare(int[] o1, int[] o2) { - double dist1 = getDistance(o1); - double dist2 = getDistance(o2); - - if (dist1 > dist2) { - return 1; - } - else if (dist1 < dist2) { - return -1; - } - else { - return 0; - } - } - }); - - for (int[] point : points) { - pq.add(point); - } - - for (int i=0; i pq = new PriorityQueue<>((o1, o2) -> { + double diff = Math.sqrt(o1[0] * o1[0] + o1[1] * o1[1]) - Math.sqrt( + o2[0] * o2[0] + o2[1] * o2[1]); + return diff < 0 ? -1 : (diff > 0 ? 1 : 0); + }); + Collections.addAll(pq, points); + int[][] result = new int[k][2]; + for (int i = 0; i < k; i++) { + result[i] = pq.poll(); + } + return result; + } +} From 98def039eda25df01e86912a53be85c37f26b4be Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Dec 2021 07:20:39 -0800 Subject: [PATCH 0130/1640] Create Maximum Number of Words Found in Sentences.java --- Easy/Maximum Number of Words Found in Sentences.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Easy/Maximum Number of Words Found in Sentences.java diff --git a/Easy/Maximum Number of Words Found in Sentences.java b/Easy/Maximum Number of Words Found in Sentences.java new file mode 100644 index 00000000..78b2af40 --- /dev/null +++ b/Easy/Maximum Number of Words Found in Sentences.java @@ -0,0 +1,6 @@ +class Solution { + public int mostWordsFound(String[] sentences) { + return Arrays.stream(sentences).map(sentence -> sentence.split("\\s").length) + .max(Integer::compare).orElse(0); + } +} From 44df3cbb01ebfc2ed14a0d31e35214617c7af333 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Dec 2021 08:00:34 -0800 Subject: [PATCH 0131/1640] Create A Number After a Double Reversal.java --- Easy/A Number After a Double Reversal.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/A Number After a Double Reversal.java diff --git a/Easy/A Number After a Double Reversal.java b/Easy/A Number After a Double Reversal.java new file mode 100644 index 00000000..0175e45f --- /dev/null +++ b/Easy/A Number After a Double Reversal.java @@ -0,0 +1,13 @@ +class Solution { + public boolean isSameAfterReversals(int num) { + return parseToInteger(reverseNum(parseToInteger(reverseNum(num)))) == num; + } + + private String reverseNum(int num) { + return new StringBuilder().append(num).reverse().toString(); + } + + private Integer parseToInteger(String s) { + return Integer.parseInt(s); + } +} From 569f60d4880ed808bfcd593bc24415538b28ba1c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Dec 2021 21:40:08 -0800 Subject: [PATCH 0132/1640] Create Find All Possible Recipes from Given Supplies.java --- ... Possible Recipes from Given Supplies.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Medium/Find All Possible Recipes from Given Supplies.java diff --git a/Medium/Find All Possible Recipes from Given Supplies.java b/Medium/Find All Possible Recipes from Given Supplies.java new file mode 100644 index 00000000..bf0e2976 --- /dev/null +++ b/Medium/Find All Possible Recipes from Given Supplies.java @@ -0,0 +1,30 @@ +class Solution { + public List findAllRecipes(String[] recipes, List> ingredients, + String[] supplies) { + Map> ingredientToRecipeMap = new HashMap<>(); + Map recipeToIngredientCount = new HashMap<>(); + for (int i = 0; i < recipes.length; i++) { + String recipe = recipes[i]; + List ingredientsForRecipe = ingredients.get(i); + recipeToIngredientCount.put(recipe, ingredientsForRecipe.size()); + for (String ingredient : ingredientsForRecipe) { + ingredientToRecipeMap.computeIfAbsent(ingredient, k -> new HashSet<>()).add(recipe); + } + } + Queue queue = new LinkedList<>(List.of(supplies)); + Set result = new HashSet<>(); + while (!queue.isEmpty()) { + String ingredient = queue.remove(); + for (String dependentRecipe : ingredientToRecipeMap.getOrDefault(ingredient, + new HashSet<>())) { + recipeToIngredientCount.put(dependentRecipe, + recipeToIngredientCount.get(dependentRecipe) - 1); + if (recipeToIngredientCount.get(dependentRecipe) == 0) { + result.add(dependentRecipe); + queue.add(dependentRecipe); + } + } + } + return new ArrayList<>(result); + } +} From d8a6a1f2df62d5b5ad47ec1598fe783d4fd4f12d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Dec 2021 10:03:35 -0800 Subject: [PATCH 0133/1640] Create Execution of All Suffix Instructions Staying in a Grid.java --- ...Suffix Instructions Staying in a Grid.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Execution of All Suffix Instructions Staying in a Grid.java diff --git a/Medium/Execution of All Suffix Instructions Staying in a Grid.java b/Medium/Execution of All Suffix Instructions Staying in a Grid.java new file mode 100644 index 00000000..4d231f93 --- /dev/null +++ b/Medium/Execution of All Suffix Instructions Staying in a Grid.java @@ -0,0 +1,25 @@ +class Solution { + public int[] executeInstructions(int n, int[] startPos, String s) { + int[] result = new int[s.length()]; + Map directionToMovementMap = Map.of( + 'R', new int[]{0, 1}, + 'L', new int[]{0, -1}, + 'U', new int[]{-1, 0}, + 'D', new int[]{1, 0} + ); + for (int i = 0; i < s.length(); i++) { + int startX = startPos[0]; + int startY = startPos[1]; + int j = i; + for (; j < s.length(); j++) { + startX += directionToMovementMap.get(s.charAt(j))[0]; + startY += directionToMovementMap.get(s.charAt(j))[1]; + if (startX < 0 || startY < 0 || startX >= n || startY >= n) { + break; + } + } + result[i] = j - i; + } + return result; + } +} From f92f440eaeff9e9a524b8bd2578e7265471a2b0e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Jan 2022 15:04:29 -0800 Subject: [PATCH 0134/1640] Create Check if All A's Appears Before All B's.java --- ...Check if All A's Appears Before All B's.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Check if All A's Appears Before All B's.java diff --git a/Easy/Check if All A's Appears Before All B's.java b/Easy/Check if All A's Appears Before All B's.java new file mode 100644 index 00000000..aab35c42 --- /dev/null +++ b/Easy/Check if All A's Appears Before All B's.java @@ -0,0 +1,17 @@ +class Solution { + public boolean checkString(String s) { + boolean aFound = false; + boolean bFound = false; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == 'a') { + if (bFound) { + return false; + } + aFound = true; + } else { + bFound = true; + } + } + return true; + } +} From 6a6bfb02fa0b8d8b50382287b686593a847f260b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Jan 2022 17:32:57 -0800 Subject: [PATCH 0135/1640] Delete Find the Town Judge.java --- Medium/Find the Town Judge.java | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 Medium/Find the Town Judge.java diff --git a/Medium/Find the Town Judge.java b/Medium/Find the Town Judge.java deleted file mode 100644 index e8597e29..00000000 --- a/Medium/Find the Town Judge.java +++ /dev/null @@ -1,15 +0,0 @@ -class Solution { - public int findJudge(int N, int[][] trust) { - int[] trustScore = new int[N + 1]; - for (int[] trst : trust) { - trustScore[trst[0]]--; - trustScore[trst[1]]++; - } - for (int i = 1; i <= N; i++) { - if (trustScore[i] == (N - 1)) { - return i; - } - } - return -1; - } -} From c45c003f78d2a78a823fa796d05bc5f870698889 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Jan 2022 17:33:39 -0800 Subject: [PATCH 0136/1640] Update Find the Town Judge.java --- Easy/Find the Town Judge.java | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Easy/Find the Town Judge.java b/Easy/Find the Town Judge.java index 60c4a84f..8605e848 100644 --- a/Easy/Find the Town Judge.java +++ b/Easy/Find the Town Judge.java @@ -1,18 +1,15 @@ class Solution { - public int findJudge(int N, int[][] trust) { - int[] count = new int[N + 1]; - - for (int[] item : trust) { - count[item[0]]--; - count[item[1]]++; - } - - for (int i = 1; i <= N; i++) { - if (count[i] == N - 1) { - return i; - } - } - - return -1; + public int findJudge(int n, int[][] trust) { + int[] trustScore = new int[n + 1]; + for (int[] trustPair : trust) { + trustScore[trustPair[1]]++; + trustScore[trustPair[0]]--; } + for (int i = 1; i <= n; i++) { + if (trustScore[i] == n - 1) { + return i; + } + } + return -1; + } } From e5bd56e98bb49209b7501f13f5762074dbbb112a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 3 Jan 2022 08:00:19 -0800 Subject: [PATCH 0137/1640] Create Number of Laser Beams in a Bank.java --- Medium/Number of Laser Beams in a Bank.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Number of Laser Beams in a Bank.java diff --git a/Medium/Number of Laser Beams in a Bank.java b/Medium/Number of Laser Beams in a Bank.java new file mode 100644 index 00000000..9a03ad92 --- /dev/null +++ b/Medium/Number of Laser Beams in a Bank.java @@ -0,0 +1,15 @@ +class Solution { + public int numberOfBeams(String[] bank) { + int prevLaserCount = 0; + int totalNumberOfBeams = 0; + for (String beam : bank) { + if (beam.indexOf('1') != -1) { + int currentBeamCount = (int) beam.chars().mapToObj(c -> (char) c).filter(c -> c == '1') + .count(); + totalNumberOfBeams += prevLaserCount * currentBeamCount; + prevLaserCount = currentBeamCount; + } + } + return totalNumberOfBeams; + } +} From 66bdce518c7055c02ad75e0be01330ca0d17e22c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 5 Jan 2022 06:06:35 -0800 Subject: [PATCH 0138/1640] Create Sum of Beauty of All Substrings.java --- Medium/Sum of Beauty of All Substrings.java | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Sum of Beauty of All Substrings.java diff --git a/Medium/Sum of Beauty of All Substrings.java b/Medium/Sum of Beauty of All Substrings.java new file mode 100644 index 00000000..17d57d14 --- /dev/null +++ b/Medium/Sum of Beauty of All Substrings.java @@ -0,0 +1,26 @@ +class Solution { + public int beautySum(String s) { + int sum = 0; + for (int i = 0; i < s.length(); i++) { + int[] charFrequency = new int[26]; + for (int j = i; j < s.length(); j++) { + charFrequency[s.charAt(j) - 'a']++; + sum += getBeauty(charFrequency); + } + } + return sum; + } + + private int getBeauty(int[] charFrequency) { + int min = Integer.MAX_VALUE ; + int max = Integer.MIN_VALUE; + for (int i = 0; i < 26; i++) { + if (charFrequency[i] == 0) { + continue; + } + min = Math.min(min, charFrequency[i]); + max = Math.max(max, charFrequency[i]); + } + return max - min; + } +} From 9526389329da0d3289327a14dc2d736c999bff4f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 5 Jan 2022 07:13:08 -0800 Subject: [PATCH 0139/1640] Create Most Profit Assigning Work.java --- Medium/Most Profit Assigning Work.java | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/Most Profit Assigning Work.java diff --git a/Medium/Most Profit Assigning Work.java b/Medium/Most Profit Assigning Work.java new file mode 100644 index 00000000..792530db --- /dev/null +++ b/Medium/Most Profit Assigning Work.java @@ -0,0 +1,31 @@ +class Solution { + public int maxProfitAssignment(int[] difficulty, int[] profit, int[] worker) { + List tasks = new ArrayList<>(); + for (int i = 0; i < difficulty.length; i++) { + tasks.add(new Task(profit[i], difficulty[i])); + } + tasks.sort(Comparator.comparingInt(o -> o.difficulty)); + Arrays.sort(worker); + int idx = 0; + int maxProfit = 0; + int workerProfit = 0; + for (int ability : worker) { + while (idx < profit.length && ability >= tasks.get(idx).difficulty) { + workerProfit = Math.max(workerProfit, tasks.get(idx++).profit); + } + maxProfit += workerProfit; + } + return maxProfit; + } + + + class Task { + int profit; + int difficulty; + + public Task(int profit, int difficulty) { + this.profit = profit; + this.difficulty = difficulty; + } + } +} From 560963671bdf1049533a2e64c40d14ed51f8e446 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 5 Jan 2022 17:14:33 -0800 Subject: [PATCH 0140/1640] Update Car Pooling.java --- Medium/Car Pooling.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Medium/Car Pooling.java b/Medium/Car Pooling.java index ab96c443..1199d3b5 100644 --- a/Medium/Car Pooling.java +++ b/Medium/Car Pooling.java @@ -1,20 +1,17 @@ class Solution { public boolean carPooling(int[][] trips, int capacity) { - Arrays.sort(trips, Comparator.comparingInt(o -> o[1])); - int start = 0; + Arrays.sort(trips, Comparator.comparingInt((int[] o) -> o[1]).thenComparingInt(o -> o[2])); + PriorityQueue priorityQueue = new PriorityQueue<>(Comparator.comparingInt(o -> o[2])); int idx = 0; - int n = trips.length; - int currCapacity = 0; - PriorityQueue pq = new PriorityQueue<>((a, b) -> a[2] - b[2]); - while (idx < n) { - while (!pq.isEmpty() && pq.peek()[2] <= trips[idx][1]) { - currCapacity -= pq.poll()[0]; + while (idx < trips.length) { + while (!priorityQueue.isEmpty() && priorityQueue.peek()[2] <= trips[idx][1]) { + capacity += priorityQueue.poll()[0]; } - if (currCapacity + trips[idx][0] > capacity) { + if (capacity < trips[idx][0]) { return false; } - currCapacity += trips[idx][0]; - pq.add(trips[idx++]); + priorityQueue.add(trips[idx]); + capacity -= trips[idx++][0]; } return true; } From 1c93e37f073a249e3e0f0600288893223fedde90 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 7 Jan 2022 08:31:01 -0800 Subject: [PATCH 0141/1640] Update RLE Iterator.java --- Medium/RLE Iterator.java | 55 ++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/Medium/RLE Iterator.java b/Medium/RLE Iterator.java index 2c1f7683..7baf4e97 100644 --- a/Medium/RLE Iterator.java +++ b/Medium/RLE Iterator.java @@ -1,42 +1,31 @@ class RLEIterator { - int[] arr; - int idx; - int len; - public RLEIterator(int[] A) { - arr = A; - idx = 0; - len = A.length; - } - - public int next(int n) { - while (idx < len - 1 && (arr[idx] - n) < 0) { - n -= arr[idx] > 0 ? arr[idx] : 0; - updateIdx(); - - if (idx >= len - 1) { - return -1; - } - } - - if (idx < len - 1 && arr[idx] > 0) { - if (arr[idx] - n >= 0) { - int temp = arr[idx+1]; - arr[idx] -= n; - - return temp; - } - } - + + int[] encoding; + int currCounterIdx; + + public RLEIterator(int[] encoding) { + this.encoding = encoding; + this.currCounterIdx = 0; + } + + public int next(int n) { + while (n > 0) { + while (this.encoding[this.currCounterIdx] == 0 && this.currCounterIdx + 2 < this.encoding.length) { + this.currCounterIdx += 2; + } + if (this.encoding[this.currCounterIdx] == 0) { return -1; + } + int diff = Math.min(this.encoding[this.currCounterIdx], n); + this.encoding[this.currCounterIdx] -= diff; + n -= diff; } - - private void updateIdx() { - idx += 2; - } + return this.encoding[this.currCounterIdx + 1]; + } } /** * Your RLEIterator object will be instantiated and called as such: - * RLEIterator obj = new RLEIterator(A); + * RLEIterator obj = new RLEIterator(encoding); * int param_1 = obj.next(n); */ From 8bcd18ee97cc6a1a654a02f210cb35ebe94964fa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 8 Jan 2022 17:40:14 -0800 Subject: [PATCH 0142/1640] Create Capitalize the Title.java --- Easy/Capitalize the Title.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Capitalize the Title.java diff --git a/Easy/Capitalize the Title.java b/Easy/Capitalize the Title.java new file mode 100644 index 00000000..2481e553 --- /dev/null +++ b/Easy/Capitalize the Title.java @@ -0,0 +1,8 @@ +class Solution { + public String capitalizeTitle(String title) { + return Arrays.stream(title.split("\\s+")) + .map(e -> e.length() <= 2 ? e.toLowerCase() : + e.substring(0, 1).toUpperCase() + e.substring(1).toLowerCase()) + .collect(Collectors.joining(" ")); + } +} From ba5943cf93333c1327615b1ff7d33b114cb19e10 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Jan 2022 06:55:58 -0800 Subject: [PATCH 0143/1640] Create Check if Every Row and Column Contains All Numbers.java --- ... Every Row and Column Contains All Numbers.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Check if Every Row and Column Contains All Numbers.java diff --git a/Easy/Check if Every Row and Column Contains All Numbers.java b/Easy/Check if Every Row and Column Contains All Numbers.java new file mode 100644 index 00000000..f64e1cfc --- /dev/null +++ b/Easy/Check if Every Row and Column Contains All Numbers.java @@ -0,0 +1,14 @@ +class Solution { + public boolean checkValid(int[][] matrix) { + Map> rowMap = new HashMap<>(); + Map> colMap = new HashMap<>(); + for (int i = 0; i < matrix.length; i++) { + for (int j = 0; j < matrix[0].length; j++) { + rowMap.computeIfAbsent(i, k -> new HashSet<>()).add(matrix[i][j]); + colMap.computeIfAbsent(j, k -> new HashSet<>()).add(matrix[i][j]); + } + } + return rowMap.values().stream().allMatch(e -> e.size() == matrix.length) && + colMap.values().stream().allMatch(e -> e.size() == matrix.length); + } +} From 0af0cc05e1135da97de5ecc27c96a8510eb399a5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Jan 2022 07:35:53 -0800 Subject: [PATCH 0144/1640] Create Maximum Twin Sum of a Linked List.java --- Medium/Maximum Twin Sum of a Linked List.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Medium/Maximum Twin Sum of a Linked List.java diff --git a/Medium/Maximum Twin Sum of a Linked List.java b/Medium/Maximum Twin Sum of a Linked List.java new file mode 100644 index 00000000..5f6b44bd --- /dev/null +++ b/Medium/Maximum Twin Sum of a Linked List.java @@ -0,0 +1,41 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public int pairSum(ListNode head) { + ListNode slow = head; + ListNode fast = head.next; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + } + fast = reverse(slow.next); + slow.next = null; + slow = head; + int maxSum = 0; + for (; slow != null && fast != null; slow = slow.next, fast = fast.next) { + maxSum = Math.max(maxSum, slow.val + fast.val); + } + return maxSum; + } + + private ListNode reverse(ListNode node) { + ListNode curr = node; + ListNode prev = null; + ListNode next = null; + while (curr != null) { + next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; + } +} From b7c0c032e02bcebe75b0631682af9e578c41ff47 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Jan 2022 08:37:49 -0800 Subject: [PATCH 0145/1640] Create Design Movie Rental System.java --- Hard/Design Movie Rental System.java | 102 +++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 Hard/Design Movie Rental System.java diff --git a/Hard/Design Movie Rental System.java b/Hard/Design Movie Rental System.java new file mode 100644 index 00000000..0aaeb6c8 --- /dev/null +++ b/Hard/Design Movie Rental System.java @@ -0,0 +1,102 @@ +class MovieRentingSystem { + + Comparator comparator = + (o1, o2) -> { + if (o1.price != o2.price) { + return o1.price - o2.price; + } + if (o1.shopId != o2.shopId) { + return o1.shopId - o2.shopId; + } + return o1.movieId - o2.movieId; + }; + Map> movieToUnrentedShopMapping; + Map shopMoviePairToPriceMapping; + TreeSet rentedMovies; + + public MovieRentingSystem(int n, int[][] entries) { + movieToUnrentedShopMapping = new HashMap<>(); + shopMoviePairToPriceMapping = new HashMap<>(); + rentedMovies = new TreeSet<>(comparator); + for (int[] entry : entries) { + movieToUnrentedShopMapping + .computeIfAbsent(entry[1], k -> new TreeSet<>(comparator)) + .add(new MovieEntry(entry[1], entry[2], entry[0])); + shopMoviePairToPriceMapping.put(new ShopMoviePair(entry[0], entry[1]), entry[2]); + } + } + + public List search(int movie) { + return movieToUnrentedShopMapping.getOrDefault(movie, Collections.emptySet()).stream() + .limit(5) + .map(e -> e.shopId) + .collect(Collectors.toList()); + } + + public void rent(int shop, int movie) { + int price = shopMoviePairToPriceMapping.get(new ShopMoviePair(shop, movie)); + movieToUnrentedShopMapping.get(movie).remove(new MovieEntry(movie, price, shop)); + rentedMovies.add(new MovieEntry(movie, price, shop)); + } + + public void drop(int shop, int movie) { + int price = shopMoviePairToPriceMapping.get(new ShopMoviePair(shop, movie)); + movieToUnrentedShopMapping.get(movie).add(new MovieEntry(movie, price, shop)); + rentedMovies.remove(new MovieEntry(movie, price, shop)); + } + + public List> report() { + return rentedMovies.stream() + .limit(5) + .map(e -> List.of(e.shopId, e.movieId)) + .collect(Collectors.toList()); + } + + class ShopMoviePair { + int shopId; + int movieId; + + public ShopMoviePair(int shopId, int movieId) { + this.shopId = shopId; + this.movieId = movieId; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ShopMoviePair that = (ShopMoviePair) o; + return shopId == that.shopId && movieId == that.movieId; + } + + @Override + public int hashCode() { + return Objects.hash(shopId, movieId); + } + } + + class MovieEntry { + int movieId; + int price; + int shopId; + + public MovieEntry(int movieId, int price, int shopId) { + this.movieId = movieId; + this.price = price; + this.shopId = shopId; + } + } +} + +/** + * Your MovieRentingSystem object will be instantiated and called as such: + * MovieRentingSystem obj = new MovieRentingSystem(n, entries); + * List param_1 = obj.search(movie); + * obj.rent(shop,movie); + * obj.drop(shop,movie); + * List> param_4 = obj.report(); + */ From dd9e4d8f5707f4cd43dfc826737cb5fd06a1b75b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Jan 2022 14:47:45 -0800 Subject: [PATCH 0146/1640] Update Binary Tree Pruning.java --- Medium/Binary Tree Pruning.java | 46 +++++++++++++++++---------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/Medium/Binary Tree Pruning.java b/Medium/Binary Tree Pruning.java index 8bcf8f80..a03af5a7 100644 --- a/Medium/Binary Tree Pruning.java +++ b/Medium/Binary Tree Pruning.java @@ -4,32 +4,34 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public TreeNode pruneTree(TreeNode root) { - return checker(root); + public TreeNode pruneTree(TreeNode root) { + boolean isRootOne = helper(root); + return isRootOne ? root : null; + } + + private boolean helper(TreeNode root) { + if (root == null) { + return false; } - -// A checker method which checks every node and makes it null if it doesn't contain a 1 - public TreeNode checker(TreeNode root) { - if (!checkForOnes(root)) { - root = null; - return root; - } - - root.left = checker(root.left); - root.right = checker(root.right); - - return root; + boolean selfOne = root.val == 1; + boolean leftContainsOne = helper(root.left); + boolean rightContainsOne = helper(root.right); + if (!leftContainsOne) { + root.left = null; } - -// Checks for a 1 in the node - public boolean checkForOnes(TreeNode root) { - if (root == null) return false; - if (root.val == 1) return true; - - return checkForOnes(root.left) || checkForOnes(root.right); + if (!rightContainsOne) { + root.right = null; } + return selfOne || leftContainsOne || rightContainsOne; + } } From b7ad572a6ca8913fb191ed5c47f36a8e19ae841d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 10 Jan 2022 14:47:09 -0800 Subject: [PATCH 0147/1640] Create Maximum Number of Coins You Can Get.java --- Medium/Maximum Number of Coins You Can Get.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Maximum Number of Coins You Can Get.java diff --git a/Medium/Maximum Number of Coins You Can Get.java b/Medium/Maximum Number of Coins You Can Get.java new file mode 100644 index 00000000..7642d7e2 --- /dev/null +++ b/Medium/Maximum Number of Coins You Can Get.java @@ -0,0 +1,11 @@ +class Solution { + public int maxCoins(int[] piles) { + Arrays.sort(piles); + int n = piles.length; + int maxCoinCount = 0; + for (int i = n / 3; i < n; i += 2) { + maxCoinCount += piles[i]; + } + return maxCoinCount; + } +} From 238d0fc0e1605b9c0dd3e98ba3a03de87e193b08 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 10 Jan 2022 16:36:52 -0800 Subject: [PATCH 0148/1640] Create Maximum Nesting Depth of Two Valid Parentheses Strings.java --- ... Depth of Two Valid Parentheses Strings.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java diff --git a/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java b/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java new file mode 100644 index 00000000..2907c330 --- /dev/null +++ b/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java @@ -0,0 +1,17 @@ +class Solution { + public int[] maxDepthAfterSplit(String seq) { + int[] maxDepth = new int[seq.length()]; + int currDepth = 0; + for (int i = 0; i < seq.length(); i++) { + if (seq.charAt(i) == '(') { + currDepth++; + } + System.out.println(i + " " + seq.charAt(i) + " " + currDepth); + maxDepth[i] = currDepth % 2; + if (seq.charAt(i) != '(') { + currDepth--; + } + } + return maxDepth; + } +} From 2dc459f680ec26720913b74f968bc48de1febcd7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 11 Jan 2022 10:06:35 -0800 Subject: [PATCH 0149/1640] Update Sum of Root To Leaf Binary Numbers.java --- Easy/Sum of Root To Leaf Binary Numbers.java | 26 +++++++++----------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/Easy/Sum of Root To Leaf Binary Numbers.java b/Easy/Sum of Root To Leaf Binary Numbers.java index 135a6c6a..48133053 100644 --- a/Easy/Sum of Root To Leaf Binary Numbers.java +++ b/Easy/Sum of Root To Leaf Binary Numbers.java @@ -15,32 +15,30 @@ */ class Solution { public int sumRootToLeaf(TreeNode root) { - int[] sum = {0}; - helper(root, new StringBuilder(), sum); - return sum[0]; + int[] result = {0}; + helper(root, new StringBuilder(), result); + return result[0]; } - private void helper(TreeNode root, StringBuilder sb, int[] sum) { + private void helper(TreeNode root, StringBuilder sb, int[] result) { if (root == null) { return; } sb.append(root.val); if (root.left == null && root.right == null) { - sum[0] += getDecimalValue(sb.toString()); - } - else { - helper(root.left, new StringBuilder(sb.toString()), sum); - helper(root.right, new StringBuilder(sb.toString()), sum); + result[0] += getDecimalValue(sb.toString()); + return; } + helper(root.left, new StringBuilder(sb.toString()), result); + helper(root.right, new StringBuilder(sb.toString()), result); } private int getDecimalValue(String s) { - int val = 0; - int mul = 1; + int value = 0; + int powerOfTwo = 0; for (int i = s.length() - 1; i >= 0; i--) { - val += mul * (s.charAt(i) == '1' ? 1 : 0); - mul *= 2; + value += ((int) Math.pow(2, powerOfTwo++)) * Character.getNumericValue(s.charAt(i)); } - return val; + return value; } } From a774b9af9b0ff11da1051edded7cde6a36123654 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 11 Jan 2022 17:16:54 -0800 Subject: [PATCH 0150/1640] Update Insert into a Binary Search Tree.java --- Medium/Insert into a Binary Search Tree.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Medium/Insert into a Binary Search Tree.java b/Medium/Insert into a Binary Search Tree.java index 30e5ce41..7131fd50 100644 --- a/Medium/Insert into a Binary Search Tree.java +++ b/Medium/Insert into a Binary Search Tree.java @@ -12,16 +12,14 @@ * this.right = right; * } * } - */ +*/ class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { if (root == null) { return new TreeNode(val); - } - if (root.val < val) { + } else if (root.val < val) { root.right = insertIntoBST(root.right, val); - } - else { + } else { root.left = insertIntoBST(root.left, val); } return root; From 0481fdb4f2cb75b6af08a231b19a47f63156681f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Jan 2022 20:11:59 -0800 Subject: [PATCH 0151/1640] Update Minimum Number of Arrows to Burst Balloons.java --- ...um Number of Arrows to Burst Balloons.java | 26 +++++-------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/Medium/Minimum Number of Arrows to Burst Balloons.java b/Medium/Minimum Number of Arrows to Burst Balloons.java index b801e00b..a00d9274 100644 --- a/Medium/Minimum Number of Arrows to Burst Balloons.java +++ b/Medium/Minimum Number of Arrows to Burst Balloons.java @@ -1,26 +1,14 @@ class Solution { public int findMinArrowShots(int[][] points) { - if (points.length == 0) { - return 0; - } - Arrays.sort(points, new Comparator(){ - public int compare(int[] p1, int[] p2) { - int c = p1[0] - p2[0]; - if (c != 0) { - return c; - } - return p1[1] - p2[1]; - } - }); - int end = points[0][1]; - int count = 1; - for (int i = 1; i < points.length; i++) { - if (points[i][0] <= end) { - end = Math.min(end, points[i][1]); - continue; + Arrays.sort(points, Comparator.comparingInt((int[] o) -> o[1])); + int count = 0; + int idx = 0; + while (idx < points.length) { + int currEnd = points[idx][1]; + while (idx < points.length && points[idx][0] <= currEnd) { + idx++; } count++; - end = points[i][1]; } return count; } From 58ab07d1e09e9ec40a361ab7daf3218e0cd0e0fa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 13 Jan 2022 09:46:29 -0800 Subject: [PATCH 0152/1640] Update Number of segments in a String.java --- Easy/Number of segments in a String.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Easy/Number of segments in a String.java b/Easy/Number of segments in a String.java index 1ecd407e..2139e560 100644 --- a/Easy/Number of segments in a String.java +++ b/Easy/Number of segments in a String.java @@ -1,14 +1,11 @@ class Solution { - public int countSegments(String str) { - String[] arr = str.split("\\s+"); - - int count = 0; - for (String s : arr) { - if ((!s.equals("\\s+")) && s.length() > 0) { - count++; - } - } - - return count; + public int countSegments(String s) { + int count = 0; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) != ' ' && (i == 0 || s.charAt(i - 1) == ' ')) { + count++; + } } + return count; + } } From 66cb6a232fd8ef443263ffaa5688c5a43590e0bd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 13 Jan 2022 10:23:37 -0800 Subject: [PATCH 0153/1640] Update Perfect Number.java --- Easy/Perfect Number.java | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Easy/Perfect Number.java b/Easy/Perfect Number.java index 5afc8d1c..6ce680f2 100644 --- a/Easy/Perfect Number.java +++ b/Easy/Perfect Number.java @@ -1,16 +1,18 @@ class Solution { - public boolean checkPerfectNumber(int num) { - if (num == 1) return false; - int sum = 0; - int i = 2; - while (i <= Math.sqrt(num)) { - if (num%i == 0) { - sum += i + num/i; - } - i++; - } - sum++; - - return sum == num; + public boolean checkPerfectNumber(int num) { + if (num == 1) { + return false; + } + return getDivisorSum(num) == num; + } + + private int getDivisorSum(int num) { + int sum = 0; + for (int i = 2; i <= Math.sqrt(num); i++) { + if (num % i == 0) { + sum += i + num / i; + } } + return sum + 1; + } } From 94f87284da0f235428ad0256b502c373ebb5339b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 13 Jan 2022 16:27:59 -0800 Subject: [PATCH 0154/1640] Update String to Integer(atoi).java --- Medium/String to Integer(atoi).java | 49 +++++++++++------------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/Medium/String to Integer(atoi).java b/Medium/String to Integer(atoi).java index 9d2aaf81..54fc622d 100644 --- a/Medium/String to Integer(atoi).java +++ b/Medium/String to Integer(atoi).java @@ -1,34 +1,23 @@ class Solution { - public int myAtoi(String str) { - if (str.length() == 0) { - return 0; - } - - int idx = 0; - int n = str.length(); - int sign = 1; - while (idx < n && str.charAt(idx) == ' ') { - idx++; - } - - if (idx < n && (str.charAt(idx) == '-' || str.charAt(idx) == '+')) { - sign = str.charAt(idx) == '-' ? -1 : 1; - idx++; - } - - long num = 0; - while (idx < n && Character.isDigit(str.charAt(idx))) { - num = num * 10 + Character.getNumericValue(str.charAt(idx++)); - - if ((sign == 1 && num > Integer.MAX_VALUE) || (-num < Integer.MIN_VALUE)) { - return getOverflowValue(sign); - } - } - - return sign * (int) num; + public int myAtoi(String s) { + int idx = 0; + int n = s.length(); + while (idx < n && s.charAt(idx) == ' ') { + idx++; } - - private int getOverflowValue(int sign) { - return sign == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE; + int sign = 1; + if (idx < n && (s.charAt(idx) == '+' || s.charAt(idx) == '-')) { + sign = s.charAt(idx++) == '-' ? -1 : 1; } + long num = 0; + while (idx < n && Character.isDigit(s.charAt(idx))) { + num = num * 10 + Character.getNumericValue(s.charAt(idx++)); + if (sign == 1 && num > Integer.MAX_VALUE) { + return Integer.MAX_VALUE; + } else if (sign == -1 && num * sign < Integer.MIN_VALUE) { + return Integer.MIN_VALUE; + } + } + return (int) (num * sign); + } } From dad3df38ae8e94314ad2ea7cd3474914beddf0b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 14 Jan 2022 13:23:05 -0800 Subject: [PATCH 0155/1640] Create Maximize Sum Of Array After K Negations.java --- .../Maximize Sum Of Array After K Negations.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Maximize Sum Of Array After K Negations.java diff --git a/Easy/Maximize Sum Of Array After K Negations.java b/Easy/Maximize Sum Of Array After K Negations.java new file mode 100644 index 00000000..12201a97 --- /dev/null +++ b/Easy/Maximize Sum Of Array After K Negations.java @@ -0,0 +1,16 @@ +class Solution { + public int largestSumAfterKNegations(int[] nums, int k) { + PriorityQueue pq = new PriorityQueue<>(); + int sum = 0; + for (int num : nums) { + pq.add(num); + sum += num; + } + while (k-- > 0) { + sum -= pq.peek(); + sum += -1 * pq.peek(); + pq.add(-1 * pq.poll()); + } + return sum; + } +} From 9238d70f2576328f252bfee6357b1799d8f39c7d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 15 Jan 2022 17:14:16 -0800 Subject: [PATCH 0156/1640] Update Maximum Nesting Depth of Two Valid Parentheses Strings.java --- .../Maximum Nesting Depth of Two Valid Parentheses Strings.java | 1 - 1 file changed, 1 deletion(-) diff --git a/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java b/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java index 2907c330..444efeb0 100644 --- a/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java +++ b/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java @@ -6,7 +6,6 @@ public int[] maxDepthAfterSplit(String seq) { if (seq.charAt(i) == '(') { currDepth++; } - System.out.println(i + " " + seq.charAt(i) + " " + currDepth); maxDepth[i] = currDepth % 2; if (seq.charAt(i) != '(') { currDepth--; From efbcf7fa53b3ee590a16fc0c3969f436b48d38f4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 15 Jan 2022 20:18:41 -0800 Subject: [PATCH 0157/1640] Create Divide a String Into Groups of Size k.java --- ...Divide a String Into Groups of Size k.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Divide a String Into Groups of Size k.java diff --git a/Easy/Divide a String Into Groups of Size k.java b/Easy/Divide a String Into Groups of Size k.java new file mode 100644 index 00000000..c37d5a6d --- /dev/null +++ b/Easy/Divide a String Into Groups of Size k.java @@ -0,0 +1,20 @@ +class Solution { + public String[] divideString(String s, int k, char fill) { + int n = s.length() % k == 0 ? s.length() / k : s.length() / k + 1; + String[] result = new String[n]; + int idx = 0; + for (int i = 0; i < n; i++) { + String split = s.substring(idx, Math.min(idx + k, s.length())); + result[i] = formString(split, k, fill); + idx += k; + } + return result; + } + + private String formString(String s, int k, char fill) { + if (s.length() != k) { + return s + String.join("", Collections.nCopies(k - s.length(), String.valueOf(fill))); + } + return s; + } +} From bd553bb0271362f06ea0090e62ca17e775b5dd23 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 16 Jan 2022 08:11:26 -0800 Subject: [PATCH 0158/1640] Create Minimum Moves to Reach Target Score.java --- Medium/Minimum Moves to Reach Target Score.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Minimum Moves to Reach Target Score.java diff --git a/Medium/Minimum Moves to Reach Target Score.java b/Medium/Minimum Moves to Reach Target Score.java new file mode 100644 index 00000000..c9bfdfc0 --- /dev/null +++ b/Medium/Minimum Moves to Reach Target Score.java @@ -0,0 +1,15 @@ +class Solution { + public int minMoves(int target, int maxDoubles) { + int numOfSteps = 0; + while (target > 0 && maxDoubles > 0) { + if (target % 2 == 0) { + maxDoubles--; + target /= 2; + } else { + target--; + } + numOfSteps++; + } + return numOfSteps + target - 1; + } +} From 23daad50cb29d21c438710bc5e04fa0234fe58c1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 16 Jan 2022 11:12:25 -0800 Subject: [PATCH 0159/1640] Create Find if Path Exists in Graph.java --- Easy/Find if Path Exists in Graph.java | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Easy/Find if Path Exists in Graph.java diff --git a/Easy/Find if Path Exists in Graph.java b/Easy/Find if Path Exists in Graph.java new file mode 100644 index 00000000..cfa38aaa --- /dev/null +++ b/Easy/Find if Path Exists in Graph.java @@ -0,0 +1,28 @@ +class Solution { + public boolean validPath(int n, int[][] edges, int start, int end) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); + graph.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); + } + Queue queue = new LinkedList<>(); + queue.add(start); + Set visited = new HashSet<>(); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int removed = queue.remove(); + if (removed == end) { + return true; + } + visited.add(removed); + for (Integer connection : graph.getOrDefault(removed, new HashSet<>())) { + if (!visited.contains(connection)) { + queue.add(connection); + } + } + } + } + return false; + } +} From fca506afa3d58ed5b6953a0874cf42f68ef8385c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 17 Jan 2022 08:37:41 -0800 Subject: [PATCH 0160/1640] Update Masking Personal Information.java --- Medium/Masking Personal Information.java | 104 +++++++---------------- 1 file changed, 31 insertions(+), 73 deletions(-) diff --git a/Medium/Masking Personal Information.java b/Medium/Masking Personal Information.java index 841240a6..1d0559dc 100644 --- a/Medium/Masking Personal Information.java +++ b/Medium/Masking Personal Information.java @@ -1,76 +1,34 @@ class Solution { - public static String maskPII(String S) { - if (S.length() == 0) { - return S; - } - - if (S.indexOf('@') != -1) { - return formatEmail(S); - } - else { - return formatNumber(S); - } - } - - private static String formatNumber(String s) { - StringBuilder sb = new StringBuilder(); - int digitCount = getDigitCount(s); - - if (digitCount > 10) { - sb.append("+"); - int extra = digitCount - 10; - while (extra-- > 0) { - sb.append("*"); - } - sb.append("-"); - } - sb.append("***-***-"); - - StringBuilder last4 = new StringBuilder(); - for (int i=s.length()-1; i>=0; i--) { - if (Character.isDigit(s.charAt(i))) { - last4.append(s.charAt(i)); - } - - if (last4.length() == 4) { - break; - } - } - - sb.append(last4.reverse().toString()); - - return sb.toString(); - } - - private static int getDigitCount(String s) { - char[] chars = s.toCharArray(); - int count = 0; - - for (char c : chars) { - if (Character.isDigit(c)) { - count++; - } - } - - return count; - } - - private static String formatEmail(String s) { - int idx = s.indexOf('@'); - int revStart = idx - 1; - while (revStart >= 0 && Character.isLetter(s.charAt(revStart))) { - revStart--; - } - - StringBuilder sb = new StringBuilder(); - - sb. - append(s.substring(0, revStart+1)). - append(Character.toLowerCase(s.charAt(revStart + 1))). - append("*****"). - append(Character.toLowerCase(s.charAt(s.indexOf('@') - 1))). - append(s.substring(s.indexOf('@'))); - - return sb.toString().toLowerCase(); + public String maskPII(String s) { + return s.indexOf('@') != -1 ? maskEmail(s) : maskPhoneNumber(s); + } + + private String maskPhoneNumber(String phoneNumber) { + StringBuilder digits = new StringBuilder(); + for (char c : phoneNumber.toCharArray()) { + if (Character.isDigit(c)) { + digits.append(c); + } } + return getMaskedAreaCode(digits.length()) + "***-***-" + digits.substring(digits.length() - 4); + } + + private String getMaskedAreaCode(int phoneNumberLength) { + return switch (phoneNumberLength) { + case 10 -> ""; + case 11 -> "+*-"; + case 12 -> "+**-"; + case 13 -> "+***-"; + default -> null; + }; + } + + private String maskEmail(String email) { + String[] split = email.split("@"); + String name = split[0]; + String domain = split[1].toLowerCase(); + String maskedName = Character.toLowerCase(name.charAt(0)) + String.join("", Collections.nCopies(5, "*")) + + Character.toLowerCase(name.charAt(name.length() - 1)); + return maskedName + "@" + domain; + } } From 480bba68447e9bdf7d386af61e39af751aabbc07 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Jan 2022 07:58:21 -0800 Subject: [PATCH 0161/1640] Update Can Place Flowers.java --- Easy/Can Place Flowers.java | 41 +++++++++++++++---------------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/Easy/Can Place Flowers.java b/Easy/Can Place Flowers.java index c02aa20b..df188af0 100644 --- a/Easy/Can Place Flowers.java +++ b/Easy/Can Place Flowers.java @@ -1,28 +1,21 @@ class Solution { - public boolean canPlaceFlowers(int[] flowerbed, int n) { - for (int i=0;i 1) { - if (flowerbed[i] == 0 && flowerbed[i+1] == 0) { - flowerbed[i] = 1; - n--; - } - } - else if (flowerbed[i] == 0 && flowerbed.length > 2 && flowerbed[i-1] == 0 && i+1 < flowerbed.length && flowerbed[i+1] == 0) { - flowerbed[i] = 1; - n--; - } - else if (i == flowerbed.length-1 && flowerbed.length > 1) { - if (flowerbed[i-1] == 0 && flowerbed[i] == 0) { - flowerbed[i] = 1; - n--; - } - } - else if (flowerbed.length == 1 && flowerbed[0] == 0) { - n--; - } - - if (n <= 0) break; + public boolean canPlaceFlowers(int[] flowerbed, int n) { + for (int i = 0; i < flowerbed.length && n > 0; i++) { + if (flowerbed[i] == 0) { + if (i == 0 && (i + 1 < flowerbed.length && flowerbed[i + 1] == 0) + || flowerbed.length == 1) { + flowerbed[i] = 1; + n--; + } else if (i == flowerbed.length - 1 && i - 1 >= 0 && flowerbed[i - 1] == 0) { + flowerbed[i] = 1; + n--; + } else if (i + 1 < flowerbed.length && i - 1 >= 0 && flowerbed[i + 1] == 0 + && flowerbed[i - 1] == 0) { + flowerbed[i] = 1; + n--; } - return n<=0; + } } + return n == 0; + } } From 301a5b147bbf8af6e26075339fafdb178d215200 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 19 Jan 2022 07:54:39 -0800 Subject: [PATCH 0162/1640] Update Zigzag Iterator.java --- Medium/Zigzag Iterator.java | 69 ++++++++++++++----------------------- 1 file changed, 26 insertions(+), 43 deletions(-) diff --git a/Medium/Zigzag Iterator.java b/Medium/Zigzag Iterator.java index 442497c1..1b4f8554 100644 --- a/Medium/Zigzag Iterator.java +++ b/Medium/Zigzag Iterator.java @@ -1,52 +1,35 @@ public class ZigzagIterator { - - List l1; - List l2; - int start1; - int start2; - int end1; - int end2; - boolean flag; - - public ZigzagIterator(List v1, List v2) { - l1 = v1; - l2 = v2; - start1 = 0; - start2 = 0; - end1 = l1.size(); - end2 = l2.size(); - flag = true; - } - public int next() { - if (start1 < end1 && start2 < end2) { - int ans = -1; - if (flag) { - ans = l1.get(start1); - start1++; - flag = !flag; - } - else { - ans = l2.get(start2); - start2++; - flag = !flag; - } - - return ans; - } - else if (start1 < end1) { - return l1.get(start1++); - } - else { - return l2.get(start2++); - } - } + private final List listOne; + private final List listTwo; + int idxOne; + int idxTwo; + boolean pickFromListOne; + public ZigzagIterator(List v1, List v2) { + this.listOne = v1; + this.listTwo = v2; + this.idxOne = 0; + this.idxTwo = 0; + this.pickFromListOne = true; + } - public boolean hasNext() { - return !(start1 == end1 && start2 == end2); + public int next() { + if ((pickFromListOne && idxOne < listOne.size()) || (!pickFromListOne + && idxTwo == listTwo.size())) { + pickFromListOne = !pickFromListOne; + return listOne.get(idxOne++); } + pickFromListOne = !pickFromListOne; + return listTwo.get(idxTwo++); + } + + public boolean hasNext() { + return idxOne < listOne.size() || idxTwo < listTwo.size(); + } } + + /** * Your ZigzagIterator object will be instantiated and called as such: * ZigzagIterator i = new ZigzagIterator(v1, v2); From 4ae85605eee3e991be83303658a0b5dd997e72d1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 19 Jan 2022 13:43:50 -0800 Subject: [PATCH 0163/1640] Update Unique Word Abbrevation.java --- Medium/Unique Word Abbrevation.java | 54 ++++++++++++----------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/Medium/Unique Word Abbrevation.java b/Medium/Unique Word Abbrevation.java index 096a2b2a..4cb79291 100644 --- a/Medium/Unique Word Abbrevation.java +++ b/Medium/Unique Word Abbrevation.java @@ -1,41 +1,33 @@ class ValidWordAbbr { - Map map; - public ValidWordAbbr(String[] dictionary) { - map = new HashMap<>(); - - for (String word : dictionary) { - String abbr = getAbbr(word); - if (map.containsKey(abbr)) { - if (!map.get(abbr).equals(word)) { - map.put(abbr, ""); - } - } - else { - map.put(abbr, word); - } - } - } - - public boolean isUnique(String word) { - String abbr = getAbbr(word); - return !map.containsKey(abbr) || map.get(abbr).equals(word); + private final Map abbreviationToWordMap; + + public ValidWordAbbr(String[] dictionary) { + this.abbreviationToWordMap = new HashMap<>(); + for (String word : dictionary) { + String abbreviation = buildAbbreviation(word); + if (this.abbreviationToWordMap.containsKey(abbreviation) && + !this.abbreviationToWordMap.get(abbreviation).equals(word)) { + this.abbreviationToWordMap.put(abbreviation, ""); + } else { + this.abbreviationToWordMap.put(abbreviation, word); + } } + } - private String getAbbr(String word) { - if (word.length() <= 2) { - return word; - } + public boolean isUnique(String word) { + String abbreviation = buildAbbreviation(word); + return !this.abbreviationToWordMap.containsKey(abbreviation) || this.abbreviationToWordMap.get( + abbreviation).equals(word); + } - int num = word.length() - 2; - StringBuilder sb = new StringBuilder(); - sb.append(word.charAt(0)).append(String.valueOf(num)).append(word.charAt(word.length()-1)); - - return sb.toString(); + private String buildAbbreviation(String s) { + if (s.length() <= 2) { + return s; } + return s.charAt(0) + String.valueOf(s.length() - 2) + s.charAt(s.length() - 1); + } } - - /** * Your ValidWordAbbr object will be instantiated and called as such: * ValidWordAbbr obj = new ValidWordAbbr(dictionary); From d7067fe4177e0acccfc5d9b4bae93c1f50357da0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 19 Jan 2022 16:28:20 -0800 Subject: [PATCH 0164/1640] Update Koko Eating Bananas.java --- Medium/Koko Eating Bananas.java | 46 ++++++++++++++++----------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Medium/Koko Eating Bananas.java b/Medium/Koko Eating Bananas.java index f0a7f6cb..e4bab284 100644 --- a/Medium/Koko Eating Bananas.java +++ b/Medium/Koko Eating Bananas.java @@ -1,33 +1,33 @@ class Solution { - public int minEatingSpeed(int[] piles, int H) { - int maxSize = piles[0]; - for (int pile : piles) { - maxSize = Math.max(pile, maxSize); + public int minEatingSpeed(int[] piles, int h) { + int minBananaCount = 1; + int maxBananaCount = maxFromPile(piles); + while (minBananaCount < maxBananaCount) { + int mid = (minBananaCount + maxBananaCount) / 2; + if (canFinishPile(piles, mid, h)) { + maxBananaCount = mid; + } else { + minBananaCount = mid + 1; + } } - return helper(piles, H, 1, maxSize); + return minBananaCount; } - private int helper(int[] piles, int H, int start, int end) { - while (start < end) { - int mid = (start + end) / 2; - if (isPossible(piles, H, mid)) { - end = mid; - } - else { - start = mid + 1; - } + private boolean canFinishPile(int[] piles, int bananaPerHour, int totalHours) { + int totalTime = 0; + for (int pile : piles) { + int numOfHours = pile / bananaPerHour; + totalTime += numOfHours == 0 ? 1 : numOfHours; + totalTime += numOfHours > 0 && pile % bananaPerHour != 0 ? 1 : 0; } - return start; + return totalTime <= totalHours; } - private boolean isPossible(int[] piles, int H, int check) { - int numOfHours = 0; - for (int pile : piles) { - int quot = pile / check; - numOfHours += quot == 0 ? 1 : quot; - numOfHours += quot > 0 && pile % check != 0 ? 1 : 0; + private int maxFromPile(int[] piles) { + int maxCount = piles[0]; + for (int i = 1; i < piles.length; i++) { + maxCount = Math.max(maxCount, piles[i]); } - return numOfHours <= H; + return maxCount; } } - From d1ae41db0bd1ea511f2e4db843d1ec1ee5760010 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 20 Jan 2022 09:47:11 -0800 Subject: [PATCH 0165/1640] Update Design Compressed String Iterator.java --- Easy/Design Compressed String Iterator.java | 86 +++++++++------------ 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/Easy/Design Compressed String Iterator.java b/Easy/Design Compressed String Iterator.java index 8d128e75..a13e5d9e 100644 --- a/Easy/Design Compressed String Iterator.java +++ b/Easy/Design Compressed String Iterator.java @@ -1,61 +1,49 @@ class StringIterator { - int letterPointer = 0; - int numberPointer = letterPointer + 1; - int counter; - char c; - String s; - StringBuilder num; - public StringIterator(String compressedString) { - s = compressedString; - c = s.charAt(letterPointer); - - num = new StringBuilder(); - while (numberPointer s.length()-1) { - return false; - } - } - return true; + public boolean hasNext() { + updateCurrCount(); + return this.currCount > 0; + } + + private void updateCurrCount() { + if (this.currCount != null && this.currCount == 0) { + this.charIdx = this.counterIdx; + this.counterIdx = this.charIdx + 1; } + if (this.currCount == null) { + this.charIdx = 0; + this.counterIdx = this.charIdx + 1; + this.currCount = 0; + } + if (this.currCount == 0) { + while (this.counterIdx < this.s.length() + && Character.isDigit(this.s.charAt(this.counterIdx))) { + this.currCount = + this.currCount * 10 + Character.getNumericValue(this.s.charAt(this.counterIdx++)); + } + } + } } + /** * Your StringIterator object will be instantiated and called as such: * StringIterator obj = new StringIterator(compressedString); From 9e9fd57ab6ca84155aa5c98a0829ea249dbcb4b7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 20 Jan 2022 13:37:41 -0800 Subject: [PATCH 0166/1640] Update Design Search Autocomplete System.java --- Hard/Design Search Autocomplete System.java | 116 +++++++++----------- 1 file changed, 54 insertions(+), 62 deletions(-) diff --git a/Hard/Design Search Autocomplete System.java b/Hard/Design Search Autocomplete System.java index 98888b69..c4c15c9e 100644 --- a/Hard/Design Search Autocomplete System.java +++ b/Hard/Design Search Autocomplete System.java @@ -1,84 +1,76 @@ class AutocompleteSystem { - Map map; - Node root; - Node currNode; + + private final TrieNode root; + private TrieNode queryNode; + private final Map popularityMap; StringBuilder sb; boolean invalidQuery; + public AutocompleteSystem(String[] sentences, int[] times) { - map = new HashMap<>(); - root = new Node('-'); + root = new TrieNode(); + this.popularityMap = new HashMap<>(); for (int i = 0; i < sentences.length; i++) { - addSentence(sentences[i], 0, root); - map.put(sentences[i], map.getOrDefault(sentences[i], 0) + times[i]); + indexSentence(sentences[i], root); + this.popularityMap.put( + sentences[i], this.popularityMap.getOrDefault(sentences[i], 0) + times[i]); } - currNode = root; - invalidQuery = false; - sb = new StringBuilder(); + this.queryNode = root; + this.sb = new StringBuilder(); + this.invalidQuery = false; } - - private void addSentence(String s, int idx, Node root) { - if (idx == s.length()) { - return; - } - char c = s.charAt(idx); - if (!root.children.containsKey(c)) { - root.children.put(c, new Node(c)); + + private void indexSentence(String sentence, TrieNode root) { + for (char c : sentence.toCharArray()) { + if (!root.children.containsKey(c)) { + root.children.put(c, new TrieNode()); + } + root = root.children.get(c); + root.sentences.add(sentence); } - Node node = root.children.get(c); - node.possibleSentences.add(s); - addSentence(s, idx + 1, node); } public List input(char c) { if (c == '#') { - String s = sb.toString(); - map.put(s, map.getOrDefault(s, 0) + 1); - addSentence(s, 0, root); - sb.setLength(0); - currNode = root; - invalidQuery = false; + cleanUp(); return new ArrayList<>(); } - sb.append(c); - if (!currNode.children.containsKey(c) || invalidQuery) { - invalidQuery = true; + this.sb.append(c); + if (!this.queryNode.children.containsKey(c) || invalidQuery) { + this.invalidQuery = true; return new ArrayList<>(); } - else { - List possibleSentences = new ArrayList<>(); - currNode = currNode.children.get(c); - possibleSentences.addAll(currNode.possibleSentences); - return getTopThree(possibleSentences); - } + this.queryNode = this.queryNode.children.get(c); + return this.queryNode.sentences.stream() + .sorted( + (o1, o2) -> { + int c1 = popularityMap.get(o2).compareTo(popularityMap.get(o1)); + if (c1 != 0) { + return c1; + } + return o1.compareTo(o2); + }) + .limit(3) + .collect(Collectors.toList()); } - - private List getTopThree(List list) { - Collections.sort(list, new Comparator(){ - public int compare(String s1, String s2) { - int c = map.get(s2) - map.get(s1); - if (c != 0) { - return c; - } - return s1.compareTo(s2); - } - }); - List ans = new ArrayList<>(); - for (int i = 0; i < list.size() && ans.size() < 3; i++) { - ans.add(list.get(i)); - } - return ans; + + private void cleanUp() { + this.queryNode = root; + String inputString = this.sb.toString(); + this.sb.setLength(0); + this.popularityMap.put(inputString, this.popularityMap.getOrDefault(inputString, 0) + 1); + this.invalidQuery = false; + indexSentence(inputString, root); } -} -class Node { - char c; - Map children; - Set possibleSentences; - - public Node(char c) { - this.c = c; - children = new HashMap<>(); - possibleSentences = new HashSet<>(); + private static class TrieNode { + + private final Map children; + private final Set sentences; + + public TrieNode() { + this.children = new HashMap<>(); + this.sentences = new HashSet<>(); + } } } From 738895581f0f0dc0e2da81f4c206c6e8c4e118d7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 21 Jan 2022 13:31:59 -0800 Subject: [PATCH 0167/1640] Update Logger Rate Limiter.java --- Easy/Logger Rate Limiter.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Easy/Logger Rate Limiter.java b/Easy/Logger Rate Limiter.java index 3e637371..6cdc1665 100644 --- a/Easy/Logger Rate Limiter.java +++ b/Easy/Logger Rate Limiter.java @@ -1,19 +1,16 @@ class Logger { - - /** Initialize your data structure here. */ - Map map; + + private final Map logger; + public Logger() { - map = new HashMap<>(); + this.logger = new HashMap<>(); } - /** Returns true if the message should be printed in the given timestamp, otherwise returns false. - If this method returns false, the message will not be printed. - The timestamp is in seconds granularity. */ public boolean shouldPrintMessage(int timestamp, String message) { - if (map.containsKey(message) && (timestamp - map.get(message)) < 10) { + if (this.logger.containsKey(message) && timestamp - this.logger.get(message) < 10) { return false; } - map.put(message, timestamp); + this.logger.put(message, timestamp); return true; } } From 37796809e5a4e261c255e5f216060903b431daa2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 21 Jan 2022 17:15:41 -0800 Subject: [PATCH 0168/1640] Create Design In-Memory File System.java --- Hard/Design In-Memory File System.java | 111 +++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 Hard/Design In-Memory File System.java diff --git a/Hard/Design In-Memory File System.java b/Hard/Design In-Memory File System.java new file mode 100644 index 00000000..9bc2ba8e --- /dev/null +++ b/Hard/Design In-Memory File System.java @@ -0,0 +1,111 @@ +class FileSystem { + + private final FileNode root; + + public FileSystem() { + this.root = new FileNode("ROOT", FileType.FOLDER); + } + + /* + * If path is a file path, returns a list that only contains this file's name. + * If path is a directory path, returns the list of file and directory names in this directory. + * */ + public List ls(String path) { + String[] split = path.split("/"); + FileNode currNode = root; + for (int i = 1; i < split.length; i++) { + currNode = currNode.subFiles.get(split[i]); + } + if (currNode.fileType.equals(FileType.FILE)) { + return List.of(currNode.value); + } else { + return currNode.subFiles.keySet().stream().sorted().collect(Collectors.toList()); + } + } + + /* + * Makes a new directory according to the given path. The given directory path does not exist. + * If the middle directories in the path do not exist, you should create them as well. + * */ + public void mkdir(String path) { + String[] splits = path.split("/"); + FileNode currNode = root; + for (int i = 1; i < splits.length; i++) { + String fileName = splits[i]; + if (!currNode.subFiles.containsKey(fileName)) { + currNode.subFiles.put(fileName, new FileNode(fileName, FileType.FOLDER)); + } + currNode = currNode.subFiles.get(fileName); + } + } + + /* + * If filePath does not exist, creates that file containing given content. + * If filePath already exists, appends the given content to original content. + * */ + public void addContentToFile(String filePath, String content) { + String[] splits = filePath.split("/"); + FileNode currNode = root; + for (int i = 1; i < splits.length - 1; i++) { + String folderName = splits[i]; + if (!currNode.subFiles.containsKey(folderName)) { + currNode.subFiles.put(folderName, new FileNode(folderName, FileType.FOLDER)); + } + currNode = currNode.subFiles.get(folderName); + } + String fileName = splits[splits.length - 1]; + if (!currNode.subFiles.containsKey(fileName) || + !currNode.subFiles.get(fileName).fileType.equals(FileType.FILE)) { + currNode.subFiles.put(fileName, new FileNode(fileName, FileType.FILE)); + } + currNode = currNode.subFiles.get(fileName); + currNode.addContentToFile(content); + } + + /* + * Returns the content in the file at filePath. + * */ + public String readContentFromFile(String filePath) { + String[] splits = filePath.split("/"); + FileNode currNode = root; + for (int i = 1; i < splits.length; i++) { + String folderName = splits[i]; + currNode = currNode.subFiles.get(folderName); + } + return currNode.fileContent.toString(); + } + + enum FileType { + FILE, FOLDER + } + + static class FileNode { + + private final String value; + private final Map subFiles; + private final FileType fileType; + private StringBuilder fileContent; + + public FileNode(String value, FileType fileType) { + this.value = value; + this.fileType = fileType; + this.subFiles = new HashMap<>(); + } + + public void addContentToFile(String content) { + if (fileContent == null) { + fileContent = new StringBuilder(); + } + fileContent.append(content); + } + } +} + +/** + * Your FileSystem object will be instantiated and called as such: + * FileSystem obj = new FileSystem(); + * List param_1 = obj.ls(path); + * obj.mkdir(path); + * obj.addContentToFile(filePath,content); + * String param_4 = obj.readContentFromFile(filePath); + */ From c96964fa2648742f84a5a14ada47f5f59b2e8d12 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Jan 2022 09:07:56 -0800 Subject: [PATCH 0169/1640] Update Find Nearest Right Node in Binary Tree.java --- ...ind Nearest Right Node in Binary Tree.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/Medium/Find Nearest Right Node in Binary Tree.java b/Medium/Find Nearest Right Node in Binary Tree.java index 0388eddd..5fd92c97 100644 --- a/Medium/Find Nearest Right Node in Binary Tree.java +++ b/Medium/Find Nearest Right Node in Binary Tree.java @@ -14,22 +14,15 @@ * } */ class Solution { - public TreeNode findNeartestRightNode(TreeNode root, TreeNode u) { - if (root == null) { - return null; - } + public TreeNode findNearestRightNode(TreeNode root, TreeNode u) { Queue queue = new LinkedList<>(); queue.add(root); - boolean found = false; while (!queue.isEmpty()) { int size = queue.size(); - while (size-- > 0) { + while (size > 0) { TreeNode removed = queue.remove(); - if (found) { - return removed; - } - if (removed == u) { - found = true; + if (removed.equals(u)) { + return size == 1 ? null : queue.peek(); } if (removed.left != null) { queue.add(removed.left); @@ -37,9 +30,7 @@ public TreeNode findNeartestRightNode(TreeNode root, TreeNode u) { if (removed.right != null) { queue.add(removed.right); } - } - if (found) { - break; + size--; } } return null; From 9c93d39b4f4913741b462676211322106afe37f5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Jan 2022 09:53:16 -0800 Subject: [PATCH 0170/1640] Create Minimum Cost of Buying Candies With Discount.java --- ... Cost of Buying Candies With Discount.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Minimum Cost of Buying Candies With Discount.java diff --git a/Easy/Minimum Cost of Buying Candies With Discount.java b/Easy/Minimum Cost of Buying Candies With Discount.java new file mode 100644 index 00000000..71a2492b --- /dev/null +++ b/Easy/Minimum Cost of Buying Candies With Discount.java @@ -0,0 +1,19 @@ +class Solution { + public int minimumCost(int[] cost) { + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o2 - o1); + for (int price : cost) { + pq.add(price); + } + int totalCost = 0; + while (!pq.isEmpty()) { + totalCost += pq.poll(); + if (!pq.isEmpty()) { + totalCost += pq.poll(); + } + if (!pq.isEmpty()) { + pq.poll(); + } + } + return totalCost; + } +} From 1a9759bfe7f5871f6df4b8f9349939b5a8ad2654 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Jan 2022 21:11:09 -0800 Subject: [PATCH 0171/1640] Create Count Elements With Strictly Smaller and Greater Elements.java --- ...h Strictly Smaller and Greater Elements.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Count Elements With Strictly Smaller and Greater Elements.java diff --git a/Easy/Count Elements With Strictly Smaller and Greater Elements.java b/Easy/Count Elements With Strictly Smaller and Greater Elements.java new file mode 100644 index 00000000..42b3f09d --- /dev/null +++ b/Easy/Count Elements With Strictly Smaller and Greater Elements.java @@ -0,0 +1,17 @@ +class Solution { + public int countElements(int[] nums) { + int minValue = nums[0]; + int maxValue = nums[0]; + for (int num : nums) { + minValue = Math.min(minValue, num); + maxValue = Math.max(maxValue, num); + } + int count = 0; + for (int num : nums) { + if (num > minValue && num < maxValue) { + count++; + } + } + return count; + } +} From 5668ae787d571637fad6f195d2aabfb652f4917f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Jan 2022 21:17:36 -0800 Subject: [PATCH 0172/1640] Create Rearrange Array Elements by Sign.java --- Medium/Rearrange Array Elements by Sign.java | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Medium/Rearrange Array Elements by Sign.java diff --git a/Medium/Rearrange Array Elements by Sign.java b/Medium/Rearrange Array Elements by Sign.java new file mode 100644 index 00000000..d2eb68e7 --- /dev/null +++ b/Medium/Rearrange Array Elements by Sign.java @@ -0,0 +1,21 @@ +class Solution { + public int[] rearrangeArray(int[] nums) { + List positive = new ArrayList<>(); + List negative = new ArrayList<>(); + for (int num : nums) { + if (num > 0) { + positive.add(num); + } else { + negative.add(num); + } + } + int positiveIdx = 0; + int negativeIdx = 0; + boolean positiveFlag = true; + for (int i = 0; i < nums.length; i++) { + nums[i] = positiveFlag ? positive.get(positiveIdx++) : negative.get(negativeIdx++); + positiveFlag = !positiveFlag; + } + return nums; + } +} From aa25b4447f8a9fd4c06bff0e2391405bd9a8f54e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Jan 2022 11:07:18 -0800 Subject: [PATCH 0173/1640] Update Sequential Digits.java --- Medium/Sequential Digits.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Medium/Sequential Digits.java b/Medium/Sequential Digits.java index ab52770d..94cc1b23 100644 --- a/Medium/Sequential Digits.java +++ b/Medium/Sequential Digits.java @@ -2,17 +2,17 @@ class Solution { public List sequentialDigits(int low, int high) { String bucket = "123456789"; int n = 10; - List list = new ArrayList<>(); - int lowLength = String.valueOf(low).length(); - int highLength = String.valueOf(high).length(); - for (int length = lowLength; length < highLength + 1; length++) { - for (int start = 0; start < n - length; start++) { - int num = Integer.parseInt(bucket.substring(start, start + length)); + List result = new ArrayList<>(); + int minLength = String.valueOf(low).length(); + int maxLength = String.valueOf(high).length(); + for (int currLength = minLength; currLength <= maxLength; currLength++) { + for (int idx = 0; idx < n - currLength; idx++) { + int num = Integer.parseInt(bucket.substring(idx, idx + currLength)); if (num >= low && num <= high) { - list.add(num); + result.add(num); } } } - return list; + return result; } } From e7f7a44d511086946f5e2cabf5f02c9814971df5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Jan 2022 14:47:36 -0800 Subject: [PATCH 0174/1640] Create Find All Lonely Numbers in the Array.java --- Medium/Find All Lonely Numbers in the Array.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Find All Lonely Numbers in the Array.java diff --git a/Medium/Find All Lonely Numbers in the Array.java b/Medium/Find All Lonely Numbers in the Array.java new file mode 100644 index 00000000..c55981d5 --- /dev/null +++ b/Medium/Find All Lonely Numbers in the Array.java @@ -0,0 +1,16 @@ +import java.util.Map.Entry; + + +class Solution { + public List findLonely(int[] nums) { + Map map = Arrays.stream(nums) + .boxed() + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); + return map.entrySet().stream() + .filter( + entry -> entry.getValue().equals(1L) && !map.containsKey(entry.getKey() + 1) + && !map.containsKey(entry.getKey() - 1)) + .map(Entry::getKey) + .collect(Collectors.toList()); + } +} From bff7d99d9b2538f0d3bfd67ad4dcaff825481f5b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Jan 2022 14:55:39 -0800 Subject: [PATCH 0175/1640] Update Grumpy Bookstore Owner.java --- Medium/Grumpy Bookstore Owner.java | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Medium/Grumpy Bookstore Owner.java b/Medium/Grumpy Bookstore Owner.java index ac064c2a..996ac4d0 100644 --- a/Medium/Grumpy Bookstore Owner.java +++ b/Medium/Grumpy Bookstore Owner.java @@ -1,19 +1,16 @@ class Solution { - public int maxSatisfied(int[] customers, int[] grumpy, int X) { - int totalSum = 0; - int maxDiff = 0; - int grumpySum = 0; - - for (int i = 0; i < customers.length; i++) { - totalSum += grumpy[i] == 1 ? 0 : customers[i]; - grumpySum += grumpy[i] == 1 ? customers[i] : 0; - if (i >= X) { - grumpySum -= grumpy[i - X] == 1 ? customers[i - X] : 0; - } - - maxDiff = Math.max(maxDiff, grumpySum); - } - - return totalSum + maxDiff; + public int maxSatisfied(int[] customers, int[] grumpy, int minutes) { + int totalSum = 0; + int maxDiff = 0; + int grumpySum = 0; + for (int i = 0; i < customers.length; i++) { + totalSum += grumpy[i] == 1 ? 0 : customers[i]; + grumpySum += grumpy[i] == 1 ? customers[i] : 0; + if (i >= minutes) { + grumpySum -= grumpy[i - minutes] == 1 ? customers[i - minutes] : 0; + } + maxDiff = Math.max(maxDiff, grumpySum); } + return totalSum + maxDiff; + } } From 265f1bb376f65174f2406b1926089914b4f69472 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Jan 2022 14:56:08 -0800 Subject: [PATCH 0176/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b84b9c6d..c09eb6d8 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 900+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1000+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count From 0907e6d516cc8a7ba6a6a3c30fff7756fbbe9a6a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Jan 2022 17:12:58 -0800 Subject: [PATCH 0177/1640] Update Detect Capital.java --- Easy/Detect Capital.java | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Easy/Detect Capital.java b/Easy/Detect Capital.java index dafc6211..b27943e7 100644 --- a/Easy/Detect Capital.java +++ b/Easy/Detect Capital.java @@ -1,25 +1,21 @@ class Solution { public boolean detectCapitalUse(String word) { - int n = word.length(); - if (n == 0) { - return true; - } - boolean firstCaps = Character.isUpperCase(word.charAt(0)); - for (int i = 1; i < n; i++) { - if (firstCaps) { - if (Character.isUpperCase(word.charAt(1)) && !Character.isUpperCase(word.charAt(i))) { + boolean firstCapital = Character.isUpperCase(word.charAt(0)); + for (int i = 1; i < word.length(); i++) { + if (Character.isUpperCase(word.charAt(i))) { + if (!firstCapital || !firstTwoCharactersCapital(word)) { return false; } - if (!Character.isUpperCase(word.charAt(1)) && Character.isUpperCase(word.charAt(i))) { - return false; - } - } - else { - if (Character.isUpperCase(word.charAt(i))) { + } else { + if (i > 1 && firstTwoCharactersCapital(word)) { return false; } } } return true; } + + private boolean firstTwoCharactersCapital(String word) { + return Character.isUpperCase(word.charAt(0)) && Character.isUpperCase(word.charAt(1)); + } } From 128872dd88c8138a720fd3b9e95c5eaffc62228d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 24 Jan 2022 08:08:20 -0800 Subject: [PATCH 0178/1640] Update Moving Average from Data Stream.java --- Easy/Moving Average from Data Stream.java | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Easy/Moving Average from Data Stream.java b/Easy/Moving Average from Data Stream.java index 1c218cfb..e52fa84a 100644 --- a/Easy/Moving Average from Data Stream.java +++ b/Easy/Moving Average from Data Stream.java @@ -1,22 +1,22 @@ class MovingAverage { - - /** Initialize your data structure here. */ - Queue queue; - int size; - double sum; + + private int currSum; + private Queue queue; + private int size; + public MovingAverage(int size) { - sum = 0; + this.currSum = 0; this.size = size; - queue = new LinkedList<>(); + this.queue = new LinkedList<>(); } public double next(int val) { - queue.add(val); - sum += val; - if (queue.size() > size) { - sum -= queue.remove(); + this.queue.add(val); + this.currSum += val; + if (this.queue.size() > this.size) { + this.currSum -= this.queue.remove(); } - return sum / queue.size(); + return ((double) this.currSum) / this.queue.size(); } } From 0d7e41dd8a39648a5da13ad8ab35882f7f9bee10 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 24 Jan 2022 08:28:03 -0800 Subject: [PATCH 0179/1640] Update Design File System.java --- Medium/Design File System.java | 64 +++++++++++++++------------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/Medium/Design File System.java b/Medium/Design File System.java index 91a8dccb..aef4ab97 100644 --- a/Medium/Design File System.java +++ b/Medium/Design File System.java @@ -1,57 +1,51 @@ class FileSystem { - FileNode root; + + private FileNode root; + public FileSystem() { - root = new FileNode("-"); + this.root = new FileNode(); } public boolean createPath(String path, int value) { - FileNode curr = root; - String[] directories = path.split("/"); - for (int i = 0; i < directories.length; i++) { - if (directories[i].equals("")) { - continue; + String[] split = path.split("/"); + FileNode node = root; + for (int i = 1; i < split.length - 1; i++) { + if (!node.children.containsKey(split[i])) { + return false; } - if (!curr.children.containsKey(directories[i])) { - if (i != directories.length - 1) { - return false; - } - curr.children.put(directories[i], new FileNode(directories[i])); - } - curr = curr.children.get(directories[i]); + node = node.children.get(split[i]); } - if (curr.val != -1) { + if (node.children.containsKey(split[split.length - 1])) { return false; } - curr.val = value; + node.children.put(split[split.length - 1], new FileNode(value)); return true; } public int get(String path) { - FileNode curr = root; - String[] directories = path.split("/"); - for (int i = 0; i < directories.length; i++) { - if (directories[i].equals("")) { - continue; - } - if (!curr.children.containsKey(directories[i])) { + String[] split = path.split("/"); + FileNode node = root; + for (int i = 1; i < split.length; i++) { + if (!node.children.containsKey(split[i])) { return -1; } - curr = curr.children.get(directories[i]); + node = node.children.get(split[i]); } - return curr.val; + return node.value == null ? -1 : node.value; } -} + private static class FileNode { + private final Map children; + private Integer value; + + public FileNode() { + this.children = new HashMap<>(); + } -class FileNode { - String fileName; - int val; - Map children; - - public FileNode(String fileName) { - this.fileName = fileName; - val = -1; - children = new HashMap<>(); + public FileNode(Integer value) { + this.children = new HashMap<>(); + this.value = value; + } } } From 05b79f265b0a697fbb7ef36415416695c985cf3e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 24 Jan 2022 14:27:24 -0800 Subject: [PATCH 0180/1640] Update Print Immutable Linked List in Reverse.java --- Medium/Print Immutable Linked List in Reverse.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Medium/Print Immutable Linked List in Reverse.java b/Medium/Print Immutable Linked List in Reverse.java index 0ec55d3e..d571d18e 100644 --- a/Medium/Print Immutable Linked List in Reverse.java +++ b/Medium/Print Immutable Linked List in Reverse.java @@ -9,10 +9,13 @@ class Solution { public void printLinkedListInReverse(ImmutableListNode head) { - if (head == null) { - return; + Stack stack = new Stack<>(); + while (head != null) { + stack.push(head); + head = head.getNext(); + } + while (!stack.isEmpty()) { + stack.pop().printValue(); } - printLinkedListInReverse(head.getNext()); - head.printValue(); } } From 8ead5785a413718cb6c633e12e27c520112696d6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 25 Jan 2022 06:25:20 -0800 Subject: [PATCH 0181/1640] Update and rename Medium/Missing Ranges.java to Easy/Missing Ranges.java --- Easy/Missing Ranges.java | 24 ++++++++++++++++++++++++ Medium/Missing Ranges.java | 25 ------------------------- 2 files changed, 24 insertions(+), 25 deletions(-) create mode 100644 Easy/Missing Ranges.java delete mode 100644 Medium/Missing Ranges.java diff --git a/Easy/Missing Ranges.java b/Easy/Missing Ranges.java new file mode 100644 index 00000000..16581dcb --- /dev/null +++ b/Easy/Missing Ranges.java @@ -0,0 +1,24 @@ +class Solution { + public List findMissingRanges(int[] nums, int lower, int upper) { + List ranges = new ArrayList<>(); + for (int i = 0; i < nums.length; i++) { + if (nums[i] < lower) { + continue; + } + if (nums[i] == lower) { + lower++; + continue; + } + ranges.add(getRange(lower, ( nums[i] - 1))); + lower = nums[i] + 1; + } + if (lower <= upper) { + ranges.add(getRange(lower, upper)); + } + return ranges; + } + + private String getRange(int down, int up) { + return down == up ? String.valueOf(up) : down + "->" + up; + } +} diff --git a/Medium/Missing Ranges.java b/Medium/Missing Ranges.java deleted file mode 100644 index 66d05e39..00000000 --- a/Medium/Missing Ranges.java +++ /dev/null @@ -1,25 +0,0 @@ -class Solution { - public List findMissingRanges(int[] nums, int lower, int upper) { - List ranges = new ArrayList<>(); - long currLower = (long) lower; - for (int i = 0; i < nums.length; i++) { - if (nums[i] < currLower) { - continue; - } - if (nums[i] == currLower) { - currLower++; - continue; - } - ranges.add(getRange(currLower, ((long) nums[i] - 1))); - currLower = ((long) nums[i]) + 1; - } - if (currLower <= upper) { - ranges.add(getRange(currLower, (long) upper)); - } - return ranges; - } - - private String getRange(long down, long up) { - return down == up ? String.valueOf(up) : down + "->" + up; - } -} From 360d353dddb5be4d449ed2f5c358ae03f409cce9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 25 Jan 2022 14:05:21 -0800 Subject: [PATCH 0182/1640] Update Shortest Word Distance.java --- Easy/Shortest Word Distance.java | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Easy/Shortest Word Distance.java b/Easy/Shortest Word Distance.java index 24945f35..9faeb49e 100644 --- a/Easy/Shortest Word Distance.java +++ b/Easy/Shortest Word Distance.java @@ -1,17 +1,16 @@ class Solution { - public int shortestDistance(String[] words, String word1, String word2) { - int idx1 = -1; - int idx2 = -1; - int minDistance = words.length; - for (int i = 0; i < words.length; i++) { - if (words[i].equals(word1)) { - idx1 = i; + public int shortestDistance(String[] wordsDict, String word1, String word2) { + int idxOne = -1; + int idxTwo = -1; + int minDistance = Integer.MAX_VALUE; + for (int i = 0; i < wordsDict.length; i++) { + if (wordsDict[i].equals(word1)) { + idxOne = i; + } else if (wordsDict[i].equals(word2)) { + idxTwo = i; } - else if (words[i].equals(word2)) { - idx2 = i; - } - if (idx1 != -1 && idx2 != -1) { - minDistance = Math.min(minDistance, Math.abs(idx1 - idx2)); + if (idxOne != -1 && idxTwo != -1) { + minDistance = Math.min(minDistance, Math.abs(idxOne - idxTwo)); } } return minDistance; From dfc6ba6402e84dd98402466713bec67aca07dd79 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 25 Jan 2022 14:23:03 -0800 Subject: [PATCH 0183/1640] Update and rename Valid Word Abbrevation.java to Valid Word Abbreviation.java --- Easy/Valid Word Abbrevation.java | 26 -------------------------- Easy/Valid Word Abbreviation.java | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 26 deletions(-) delete mode 100644 Easy/Valid Word Abbrevation.java create mode 100644 Easy/Valid Word Abbreviation.java diff --git a/Easy/Valid Word Abbrevation.java b/Easy/Valid Word Abbrevation.java deleted file mode 100644 index 4299405e..00000000 --- a/Easy/Valid Word Abbrevation.java +++ /dev/null @@ -1,26 +0,0 @@ -class Solution { - public boolean validWordAbbreviation(String word, String abbr) { - int idx1 = 0; - int idx2 = 0; - while (idx1 < word.length() && idx2 < abbr.length()) { - if (!Character.isDigit(abbr.charAt(idx2))) { - if (word.charAt(idx1) != abbr.charAt(idx2)) { - return false; - } - idx1++; - idx2++; - } - else { - if (abbr.charAt(idx2) == '0') { - return false; - } - int count = 0; - while (idx2 < abbr.length() && Character.isDigit(abbr.charAt(idx2))) { - count = count * 10 + Character.getNumericValue(abbr.charAt(idx2++)); - } - idx1 += count; - } - } - return idx1 == word.length() && idx2 == abbr.length(); - } -} diff --git a/Easy/Valid Word Abbreviation.java b/Easy/Valid Word Abbreviation.java new file mode 100644 index 00000000..688b39fe --- /dev/null +++ b/Easy/Valid Word Abbreviation.java @@ -0,0 +1,28 @@ +class Solution { + public boolean validWordAbbreviation(String word, String abbr) { + int wordIdx = 0; + int abbrIdx = 0; + while (wordIdx < word.length() && abbrIdx < abbr.length()) { + if (Character.isDigit(abbr.charAt(abbrIdx))) { + if (abbr.charAt(abbrIdx) == '0') { + return false; + } + int count = 0; + while (abbrIdx < abbr.length() && Character.isDigit(abbr.charAt(abbrIdx))) { + count = count * 10 + Character.getNumericValue(abbr.charAt(abbrIdx++)); + } + wordIdx += count; + if (wordIdx > word.length()) { + return false; + } + } else { + if (word.charAt(wordIdx) != abbr.charAt(abbrIdx)) { + return false; + } + wordIdx++; + abbrIdx++; + } + } + return wordIdx == word.length() && abbrIdx == abbr.length(); + } +} From 5f1e682709d69cd34930b745790d1b7bd3810e11 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 26 Jan 2022 08:24:41 -0800 Subject: [PATCH 0184/1640] Update All Elements in Two Binary Search Trees.java --- ...l Elements in Two Binary Search Trees.java | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/Medium/All Elements in Two Binary Search Trees.java b/Medium/All Elements in Two Binary Search Trees.java index a973fd93..92fc3d9f 100644 --- a/Medium/All Elements in Two Binary Search Trees.java +++ b/Medium/All Elements in Two Binary Search Trees.java @@ -15,33 +15,36 @@ */ class Solution { public List getAllElements(TreeNode root1, TreeNode root2) { - Stack stack1 = new Stack<>(); - Stack stack2 = new Stack<>(); - updateStack(stack1, root1); - updateStack(stack2, root2); + Stack stackOne = new Stack<>(); + Stack stackTwo = new Stack<>(); + while (root1 != null) { + stackOne.push(root1); + root1 = root1.left; + } + while (root2 != null) { + stackTwo.push(root2); + root2 = root2.left; + } List list = new ArrayList<>(); - while (!stack1.isEmpty() || !stack2.isEmpty()) { - if (!stack1.isEmpty() && !stack2.isEmpty()) { - if (stack1.peek().val < stack2.peek().val) { - TreeNode popped = stack1.pop(); + while (!stackOne.isEmpty() || !stackTwo.isEmpty()) { + if (!stackOne.isEmpty() && !stackTwo.isEmpty()) { + if (stackOne.peek().val < stackTwo.peek().val) { + TreeNode popped = stackOne.pop(); list.add(popped.val); - updateStack(stack1, popped.right); - } - else { - TreeNode popped = stack2.pop(); + updateStack(stackOne, popped.right); + } else { + TreeNode popped = stackTwo.pop(); list.add(popped.val); - updateStack(stack2, popped.right); + updateStack(stackTwo, popped.right); } - } - else if (!stack1.isEmpty() && stack2.isEmpty()) { - TreeNode popped = stack1.pop(); + } else if (!stackOne.isEmpty() && stackTwo.isEmpty()) { + TreeNode popped = stackOne.pop(); list.add(popped.val); - updateStack(stack1, popped.right); - } - else { - TreeNode popped = stack2.pop(); + updateStack(stackOne, popped.right); + } else { + TreeNode popped = stackTwo.pop(); list.add(popped.val); - updateStack(stack2, popped.right); + updateStack(stackTwo, popped.right); } } return list; From abcb8622c170b27e2d4bc2eddc389f0e9266c342 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 26 Jan 2022 09:04:26 -0800 Subject: [PATCH 0185/1640] Create Number of Provinces.java --- Medium/Number of Provinces.java | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Medium/Number of Provinces.java diff --git a/Medium/Number of Provinces.java b/Medium/Number of Provinces.java new file mode 100644 index 00000000..436059e3 --- /dev/null +++ b/Medium/Number of Provinces.java @@ -0,0 +1,60 @@ +class Solution { + public int findCircleNum(int[][] isConnected) { + int n = isConnected.length; + DisjointSet disjointSet = new DisjointSet(n); + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (isConnected[i][j] == 1) { + disjointSet.union(i, j); + } + } + } + Set set = new HashSet<>(); + for (int i = 0; i < n; i++) { + set.add(disjointSet.find(i)); + } + return set.size(); + } + + private static class DisjointSet { + + private final int[] root; + private final int[] rank; + + public DisjointSet(int size) { + this.root = new int[size]; + this.rank = new int[size]; + for (int i = 0; i < size; i++) { + this.root[i] = i; + this.rank[i] = 1; + } + } + + public void union(int nodeOne, int nodeTwo) { + int rootOne = find(nodeOne); + int rootTwo = find(nodeTwo); + if (rootOne != rootTwo) { + if (this.rank[rootOne] > this.rank[rootTwo]) { + this.root[rootTwo] = rootOne; + } else if (this.rank[rootOne] < this.rank[rootTwo]) { + this.root[rootOne] = rootTwo; + } else { + this.root[rootTwo] = rootOne; + this.rank[rootOne]++; + } + } + } + + + public int find(int node) { + if (node == root[node]) { + return node; + } + return root[node] = find(root[node]); + } + + public boolean connected(int nodeOne, int nodeTwo) { + return find(nodeOne) == find(nodeTwo); + } + } +} From 732d34432166a8e2721a2c2bbac39c74d01c996e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 26 Jan 2022 12:45:03 -0800 Subject: [PATCH 0186/1640] Update Sentence Similarity.java --- Easy/Sentence Similarity.java | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Easy/Sentence Similarity.java b/Easy/Sentence Similarity.java index 7e779bfe..38f62e43 100644 --- a/Easy/Sentence Similarity.java +++ b/Easy/Sentence Similarity.java @@ -1,21 +1,22 @@ class Solution { - public boolean areSentencesSimilar(String[] words1, String[] words2, List> pairs) { - if (words1.length != words2.length) { + public boolean areSentencesSimilar( + String[] sentence1, String[] sentence2, List> similarPairs) { + if (sentence1.length != sentence2.length) { return false; } - Set set = new HashSet<>(); - for (List pair : pairs) { - String word1 = pair.get(0); - String word2 = pair.get(1); - set.add(word1 + "|" + word2); + Map> similarWords = new HashMap<>(); + for (List pair : similarPairs) { + similarWords.computeIfAbsent(pair.get(0), k -> new HashSet<>()).add(pair.get(1)); + similarWords.computeIfAbsent(pair.get(1), k -> new HashSet<>()).add(pair.get(0)); } - for (int i = 0; i < words1.length; i++) { - String word1 = words1[i]; - String word2 = words2[i]; - if (!(word1.equals(word2) || set.contains(word1 + "|" + word2) || set.contains(word2 + "|" + word1))) { - return false; + for (int i = 0; i < sentence1.length; i++) { + if (sentence1[i].equals(sentence2[i]) + || similarWords.getOrDefault(sentence1[i], new HashSet<>()).contains(sentence2[i]) + || similarWords.getOrDefault(sentence2[i], new HashSet<>()).contains(sentence1[1])) { + continue; } + return false; } - return true; + return sentence1.length != sentence2.length; } } From 99692dec48c958ec825ffe62d0ad338fa2b5cecd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 26 Jan 2022 16:25:38 -0800 Subject: [PATCH 0187/1640] Update Graph Valid Tree.java --- Medium/Graph Valid Tree.java | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/Medium/Graph Valid Tree.java b/Medium/Graph Valid Tree.java index 7b35c66f..1c4aaa48 100644 --- a/Medium/Graph Valid Tree.java +++ b/Medium/Graph Valid Tree.java @@ -1,32 +1,19 @@ class Solution { public boolean validTree(int n, int[][] edges) { - Map> map = new HashMap<>(); + int[] nums = new int[n]; + Arrays.fill(nums, -1); for (int[] edge : edges) { - map.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); - map.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); - } - Queue queue = new LinkedList<>(); - int[] visited = new int[n]; - queue.add(0); - visited[0] = 1; - while (!queue.isEmpty()) { - Integer removed = queue.remove(); - for (Integer connection : map.getOrDefault(removed, new HashSet<>())) { - if (visited[connection] == 1) { - return false; - } - if (visited[connection] == 0) { - visited[connection] = 1; - queue.add(connection); - } - } - visited[removed] = 2; - } - for (int node : visited) { - if (node == 0) { + int rootOne = find(nums, edge[0]); + int rootTwo = find(nums, edge[1]); + if (rootOne == rootTwo) { return false; } + nums[rootOne] = rootTwo; } - return true; + return edges.length == n - 1; + } + + private int find(int[] nums, int n) { + return nums[n] == -1 ? n : find(nums, nums[n]); } } From bb137e4bc12263405b21d1c3457cacca666d5869 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 26 Jan 2022 16:38:29 -0800 Subject: [PATCH 0188/1640] Update Number of Connected Components in an Undirected Graph.java --- ...ted Components in an Undirected Graph.java | 84 +++++++++++-------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/Medium/Number of Connected Components in an Undirected Graph.java b/Medium/Number of Connected Components in an Undirected Graph.java index 2c81b9ee..e794deea 100644 --- a/Medium/Number of Connected Components in an Undirected Graph.java +++ b/Medium/Number of Connected Components in an Undirected Graph.java @@ -1,41 +1,51 @@ class Solution { - public int countComponents(int n, int[][] edges) { - Map> map = new HashMap<>(); - - for (int[] edge : edges) { - map.computeIfAbsent(edge[0], k -> new ArrayList()).add(edge[1]); - map.computeIfAbsent(edge[1], k -> new ArrayList()).add(edge[0]); - } - - Set set = new HashSet<>(); - int count = 0; - - for (Map.Entry> entry : map.entrySet()) { - if (set.contains(entry.getKey())) { - continue; - } - - Queue queue = new LinkedList<>(); - queue.add(entry.getKey()); - set.add(entry.getKey()); - - while (!queue.isEmpty()) { - int popped = queue.remove(); - List connections = map.getOrDefault(popped, new ArrayList()); - - for (int connection : connections) { - if (set.contains(connection)) { - continue; - } - - set.add(connection); - queue.add(connection); - } - } - - count++; + public int countComponents(int n, int[][] edges) { + DisjointSet disjointSet = new DisjointSet(n); + for (int[] edge : edges) { + disjointSet.union(edge[0], edge[1]); + } + Set rootSet = new HashSet<>(); + for (int i = 0; i < n; i++) { + rootSet.add(disjointSet.find(i)); + } + return rootSet.size(); + } + + private static class DisjointSet { + + private final int[] root; + private final int[] rank; + + public DisjointSet(int size) { + this.root = new int[size]; + this.rank = new int[size]; + for (int i = 0; i < size; i++) { + this.root[i] = i; + this.rank[i] = 1; + } + } + + public void union(int nodeOne, int nodeTwo) { + int rootOne = find(nodeOne); + int rootTwo = find(nodeTwo); + if (rootOne != rootTwo) { + if (this.rank[rootOne] > this.rank[rootTwo]) { + this.root[rootTwo] = rootOne; + } else if (this.rank[rootOne] < this.rank[rootTwo]) { + this.root[rootOne] = rootTwo; + } else { + this.root[rootTwo] = rootOne; + this.rank[rootOne]++; } - - return count + (n - set.size()); + } + } + + + public int find(int node) { + if (node == root[node]) { + return node; + } + return root[node] = find(root[node]); } + } } From ef7dabe5ffeb6885789a1146c3231679a279a855 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 27 Jan 2022 08:46:04 -0800 Subject: [PATCH 0189/1640] Update The Earliest Moment When Everyone Become Friends.java --- ...t Moment When Everyone Become Friends.java | 86 ++++++++++--------- 1 file changed, 46 insertions(+), 40 deletions(-) diff --git a/Medium/The Earliest Moment When Everyone Become Friends.java b/Medium/The Earliest Moment When Everyone Become Friends.java index 739711d6..578a04cb 100644 --- a/Medium/The Earliest Moment When Everyone Become Friends.java +++ b/Medium/The Earliest Moment When Everyone Become Friends.java @@ -1,48 +1,54 @@ class Solution { - public int earliestAcq(int[][] logs, int N) { - Arrays.sort(logs, Comparator.comparingInt(o -> o[0])); - Map> map = new HashMap<>(); - - for (int[] log : logs) { - boolean[] allDone = {false}; - map.computeIfAbsent(log[1], k -> new HashSet<>()).add(log[2]); - dfs(map, log[1], log[2], allDone, N); - - map.computeIfAbsent(log[2], k -> new HashSet<>()).add(log[1]); - dfs(map, log[2], log[1], allDone, N); - + public int earliestAcq(int[][] logs, int n) { + Arrays.sort(logs, Comparator.comparingInt(o -> o[0])); + DisjointSet disjointSet = new DisjointSet(n); + for (int[] log : logs) { + disjointSet.union(log[1], log[2]); + if (disjointSet.unionCount == 1) { + return log[0]; + } + } + return -1; + } + + private static final class DisjointSet { + + private final int[] root; + private final int[] rank; + public int unionCount; + + public DisjointSet(int size) { + this.root = new int[size]; + this.rank = new int[size]; + for (int i = 0; i < size; i++) { + this.root[i] = i; + this.rank[i] = 1; + } + this.unionCount = size; + } - if (allDone[0]) { - return log[0]; - } + public void union(int nodeOne, int nodeTwo) { + int rootOne = find(nodeOne); + int rootTwo = find(nodeTwo); + if (rootOne != rootTwo) { + if (this.rank[rootOne] > this.rank[rootTwo]) { + this.root[rootTwo] = rootOne; + } else if (this.rank[rootOne] < this.rank[rootTwo]) { + this.root[rootOne] = rootTwo; + } else { + this.root[rootTwo] = rootOne; + this.rank[rootOne]++; } - - return -1; + this.unionCount--; + } } - private void dfs(Map> map, int f1, int f2, boolean[] allDone, int N) { - Set visited = new HashSet<>(); - Queue queue = new LinkedList<>(); - queue.add(f1); - visited.add(f1); - - while (!queue.isEmpty()) { - int removed = queue.poll(); - Iterator iterator = map.getOrDefault(removed, new HashSet<>()).iterator(); - while (iterator.hasNext()) { - int friend = iterator.next(); - if (!visited.contains(friend)) { - queue.add(friend); - map.computeIfAbsent(friend, k -> new HashSet<>()).add(f2); - map.computeIfAbsent(f2, k -> new HashSet<>()).add(friend); - if (map.get(f2).size() == N || map.get(friend).size() == N) { - allDone[0] = true; - } - - visited.add(friend); - } - } - } + public int find(int node) { + if (node == root[node]) { + return node; + } + return root[node] = find(root[node]); } + } } From 7e583357d930794db2fb138f3ea2d586c438732d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 27 Jan 2022 09:41:02 -0800 Subject: [PATCH 0190/1640] Update Find Anagram Mappings.java --- Easy/Find Anagram Mappings.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Easy/Find Anagram Mappings.java b/Easy/Find Anagram Mappings.java index 74ab5769..2a7c34e3 100644 --- a/Easy/Find Anagram Mappings.java +++ b/Easy/Find Anagram Mappings.java @@ -1,13 +1,12 @@ class Solution { - public int[] anagramMappings(int[] A, int[] B) { - Map map = new HashMap<>(); - for (int i = 0; i < B.length; i++) { - map.put(B[i], i); - } - int[] ans = new int[A.length]; - for (int i = 0; i < A.length; i++) { - ans[i] = map.get(A[i]); - } - return ans; + public int[] anagramMappings(int[] nums1, int[] nums2) { + Map indexMapping = new HashMap<>(); + for (int i = 0; i < nums2.length; i++) { + indexMapping.put(nums2[i], i); } + for (int i = 0; i < nums1.length; i++) { + nums1[i] = indexMapping.get(nums1[i]); + } + return nums1; + } } From 55fe8a831c13379b5a2e83c2cb3eaf5ca93c26b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 27 Jan 2022 09:49:08 -0800 Subject: [PATCH 0191/1640] Update Remove Vowels from a String.java --- Easy/Remove Vowels from a String.java | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Easy/Remove Vowels from a String.java b/Easy/Remove Vowels from a String.java index f389ac47..d5c24c1b 100644 --- a/Easy/Remove Vowels from a String.java +++ b/Easy/Remove Vowels from a String.java @@ -1,14 +1,11 @@ class Solution { - public String removeVowels(String S) { - StringBuilder sb = new StringBuilder(); - Set set = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u')); - - for (char c : S.toCharArray()) { - if (!set.contains(c)) { - sb.append(c); - } - } - - return sb.toString(); - } + public String removeVowels(String s) { + return s.chars() + .mapToObj(c -> (char) c) + .filter(c -> "aeiou".indexOf(c) == -1) + .collect(Collector.of(StringBuilder::new, + StringBuilder::append, + StringBuilder::append, + StringBuilder::toString)); + } } From 4ae59e7231059ad63bbfa241f75bd13c233546ef Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 27 Jan 2022 11:04:51 -0800 Subject: [PATCH 0192/1640] Update Minimum Remove to Make Valid Parentheses.java --- ...imum Remove to Make Valid Parentheses.java | 32 +++++++++---------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/Medium/Minimum Remove to Make Valid Parentheses.java b/Medium/Minimum Remove to Make Valid Parentheses.java index bc1739e4..45734d11 100644 --- a/Medium/Minimum Remove to Make Valid Parentheses.java +++ b/Medium/Minimum Remove to Make Valid Parentheses.java @@ -1,27 +1,25 @@ class Solution { public String minRemoveToMakeValid(String s) { Stack stack = new Stack<>(); - char[] chars = s.toCharArray(); - for (int i = 0; i < chars.length; i++) { - if (chars[i] == '(') { - stack.push(i); - } - else if (chars[i] == ')') { - if (stack.isEmpty()) { - chars[i] = '-'; - } - else { - stack.pop(); + Set validIndexes = new HashSet<>(); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '(') { + stack.add(i); + } else if (s.charAt(i) == ')') { + if (!stack.isEmpty()) { + validIndexes.add(stack.pop()); + validIndexes.add(i); } } } - while (!stack.isEmpty()) { - chars[stack.pop()] = '-'; - } StringBuilder sb = new StringBuilder(); - for (int i = 0; i < chars.length; i++) { - if (chars[i] != '-') { - sb.append(chars[i]); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '(' || s.charAt(i) == ')') { + if (validIndexes.contains(i)) { + sb.append(s.charAt(i)); + } + } else { + sb.append(s.charAt(i)); } } return sb.toString(); From 8ac764a83e264891c5baf136c55032b69c6c9440 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 27 Jan 2022 16:21:19 -0800 Subject: [PATCH 0193/1640] Update and rename Add and Search Word - Data structure design.java to Design Add and Search Words Data Structure.java --- ...d Search Word - Data structure design.java | 68 ------------------- ...n Add and Search Words Data Structure.java | 59 ++++++++++++++++ 2 files changed, 59 insertions(+), 68 deletions(-) delete mode 100644 Medium/Add and Search Word - Data structure design.java create mode 100644 Medium/Design Add and Search Words Data Structure.java diff --git a/Medium/Add and Search Word - Data structure design.java b/Medium/Add and Search Word - Data structure design.java deleted file mode 100644 index 2d73cc43..00000000 --- a/Medium/Add and Search Word - Data structure design.java +++ /dev/null @@ -1,68 +0,0 @@ -class WordDictionary { - - /** Initialize your data structure here. */ - Node root; - public WordDictionary() { - root = new Node('-'); - } - - /** Adds a word into the data structure. */ - public void addWord(String word) { - Node curr = root; - for (char c : word.toCharArray()) { - if (curr.children[c - 'a'] == null) { - curr.children[c - 'a'] = new Node(c); - } - curr = curr.children[c - 'a']; - } - curr.isWord = true; - } - - /** Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. */ - public boolean search(String word) { - Node curr = root; - return searchHelper(curr, word, 0); - } - - private boolean searchHelper(Node curr, String word, int idx) { - if (idx == word.length()) { - return curr.isWord; - } - char c = word.charAt(idx); - if (c != '.') { - if (curr.children[c - 'a'] == null) { - return false; - } - return searchHelper(curr.children[c - 'a'], word, idx + 1); - } - else { - boolean flag = false; - for (Node child : curr.children) { - if (child != null) { - flag = flag | searchHelper(child, word, idx + 1); - } - } - return flag; - } - } -} - - -class Node { - char c; - Node[] children; - boolean isWord; - - public Node(char c) { - this.c = c; - children = new Node[26]; - isWord = false; - } -} - -/** - * Your WordDictionary object will be instantiated and called as such: - * WordDictionary obj = new WordDictionary(); - * obj.addWord(word); - * boolean param_2 = obj.search(word); - */ diff --git a/Medium/Design Add and Search Words Data Structure.java b/Medium/Design Add and Search Words Data Structure.java new file mode 100644 index 00000000..0f87fece --- /dev/null +++ b/Medium/Design Add and Search Words Data Structure.java @@ -0,0 +1,59 @@ +class WordDictionary { + + private final TrieNode root; + + public WordDictionary() { + this.root = new TrieNode(); + } + + public void addWord(String word) { + TrieNode curr = root; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + curr.children.put(c, new TrieNode()); + } + curr = curr.children.get(c); + } + curr.isWord = true; + } + + public boolean search(String word) { + return searchHelper(word, 0, root); + } + + private boolean searchHelper(String word, int idx, TrieNode curr) { + if (idx == word.length()) { + return curr.isWord; + } + if (curr.children.containsKey(word.charAt(idx))) { + return searchHelper(word, idx + 1, curr.children.get(word.charAt(idx))); + } + if (word.charAt(idx) == '.') { + for (char c : curr.children.keySet()) { + if (searchHelper(word, idx + 1, curr.children.get(c))) { + return true; + } + } + } + return false; + } + + + private static class TrieNode { + + private final Map children; + private boolean isWord; + + public TrieNode() { + this.children = new HashMap<>(); + this.isWord = false; + } + } +} + +/** + * Your WordDictionary object will be instantiated and called as such: + * WordDictionary obj = new WordDictionary(); + * obj.addWord(word); + * boolean param_2 = obj.search(word); + */ From 5e1c7d748db6725a44783018312c3eccb02d1b8b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 28 Jan 2022 09:21:15 -0800 Subject: [PATCH 0194/1640] Update Valid Palindrome II.java --- Easy/Valid Palindrome II.java | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/Easy/Valid Palindrome II.java b/Easy/Valid Palindrome II.java index f525f8ce..c0edfc4c 100644 --- a/Easy/Valid Palindrome II.java +++ b/Easy/Valid Palindrome II.java @@ -1,27 +1,21 @@ class Solution { public boolean validPalindrome(String s) { - int start = 0; - int end = s.length() - 1; - while (start < end && s.charAt(start) == s.charAt(end)) { - start++; - end--; - } - if (start >= end) { - return true; - } - if (isPalindrome(s.substring(start + 1, end + 1)) || isPalindrome(s.substring(start, end))) { + int[] firstPalindromeCheck = isPalindromHelper(s); + if (firstPalindromeCheck[0] == -1) { return true; } - return false; + int[] skipLeft = isPalindromHelper(s.substring(firstPalindromeCheck[0] + 1, firstPalindromeCheck[1] + 1)); + int[] skipRight = isPalindromHelper(s.substring(firstPalindromeCheck[0], check[1])); + return skipLeft[0] == -1 || skipRight[0] == -1; } - - private boolean isPalindrome(String s) { - int start = 0; - int end = s.length() - 1; - while (start < end && s.charAt(start) == s.charAt(end)) { - start++; - end--; + + private int[] isPalindromHelper(String s) { + int startIdx = 0; + int endIdx = s.length() - 1; + while (startIdx < endIdx && s.charAt(startIdx) == s.charAt(endIdx)) { + startIdx++; + endIdx--; } - return start >= end; + return startIdx >= endIdx ? new int[]{-1} : new int[]{startIdx, endIdx}; } } From 4b18140aaf851557c95e033a911d82cddc7eb122 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 28 Jan 2022 12:23:22 -0800 Subject: [PATCH 0195/1640] Create Smallest String With Swaps.java --- Medium/Smallest String With Swaps.java | 60 ++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 Medium/Smallest String With Swaps.java diff --git a/Medium/Smallest String With Swaps.java b/Medium/Smallest String With Swaps.java new file mode 100644 index 00000000..e9cea772 --- /dev/null +++ b/Medium/Smallest String With Swaps.java @@ -0,0 +1,60 @@ +class Solution { + public String smallestStringWithSwaps(String s, List> pairs) { + int n = s.length(); + DisjointSet disjointSet = new DisjointSet(n); + for (List pair : pairs) { + disjointSet.union(pair.get(0), pair.get(1)); + } + Map> map = new HashMap<>(); + for (int i = 0; i < n; i++) { + int root = disjointSet.find(i); + map.computeIfAbsent(root, k -> new PriorityQueue<>()).offer(s.charAt(i)); + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + sb.append(map.get(disjointSet.find(i)).poll()); + } + return sb.toString(); + } + + private static final class DisjointSet { + + private final int[] root; + private final int[] rank; + public int unionCount; + + public DisjointSet(int size) { + this.root = new int[size]; + this.rank = new int[size]; + for (int i = 0; i < size; i++) { + this.root[i] = i; + this.rank[i] = 1; + } + this.unionCount = size; + } + + public void union(int nodeOne, int nodeTwo) { + int rootOne = find(nodeOne); + int rootTwo = find(nodeTwo); + if (rootOne != rootTwo) { + if (this.rank[rootOne] > this.rank[rootTwo]) { + this.root[rootTwo] = rootOne; + } else if (this.rank[rootOne] < this.rank[rootTwo]) { + this.root[rootOne] = rootTwo; + } else { + this.root[rootTwo] = rootOne; + this.rank[rootOne]++; + } + this.unionCount--; + } + } + + + public int find(int node) { + if (node == root[node]) { + return node; + } + return root[node] = find(root[node]); + } + } +} From 66dd846b8cebe6bd46570a4b321e572da30ad601 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 29 Jan 2022 07:57:16 -0800 Subject: [PATCH 0196/1640] Create Buildings With an Ocean View.java --- Medium/Buildings With an Ocean View.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Buildings With an Ocean View.java diff --git a/Medium/Buildings With an Ocean View.java b/Medium/Buildings With an Ocean View.java new file mode 100644 index 00000000..b9735daa --- /dev/null +++ b/Medium/Buildings With an Ocean View.java @@ -0,0 +1,13 @@ +class Solution { + public int[] findBuildings(int[] heights) { + List oceanViewBuildings = new ArrayList<>(); + int maxHeight = 0; + for (int i = heights.length - 1; i >= 0; i--) { + if (heights[i] > maxHeight) { + oceanViewBuildings.add(i); + } + maxHeight = Math.max(maxHeight, heights[i]); + } + return oceanViewBuildings.stream().sorted().mapToInt(Integer::valueOf).toArray(); + } +} From 9b51132e20c25a44e349c5373cf3b56121186b7b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 29 Jan 2022 08:20:13 -0800 Subject: [PATCH 0197/1640] Update Group Shifted Strings.java --- Medium/Group Shifted Strings.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Medium/Group Shifted Strings.java b/Medium/Group Shifted Strings.java index 2207727c..b1209bbf 100644 --- a/Medium/Group Shifted Strings.java +++ b/Medium/Group Shifted Strings.java @@ -1,19 +1,17 @@ class Solution { public List> groupStrings(String[] strings) { Map> map = new HashMap<>(); - for (String str : strings) { - map.computeIfAbsent(getKey(str), k -> new ArrayList<>()).add(str); + for (String s : strings) { + map.computeIfAbsent(getShiftedCode(s), k -> new ArrayList<>()).add(s); } return new ArrayList<>(map.values()); } - - private String getKey(String s) { - StringBuilder sb = new StringBuilder(); + + private String getShiftedCode(String s) { + StringBuilder key = new StringBuilder(); for (int i = 1; i < s.length(); i++) { - int diff = s.charAt(i) - s.charAt(i - 1); - diff = diff < 0 ? diff + 26 : diff; - sb.append(diff); + key.append(String.format("%2d", (s.charAt(i) - s.charAt(i-1) + 26) % 26)); } - return sb.toString(); + return key.toString(); } } From 82b507468fa894d9797ca4540b8409517965249b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 29 Jan 2022 14:18:02 -0800 Subject: [PATCH 0198/1640] Update Range Sum of BST.java --- Easy/Range Sum of BST.java | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/Easy/Range Sum of BST.java b/Easy/Range Sum of BST.java index 35b3b6ae..b3d21555 100644 --- a/Easy/Range Sum of BST.java +++ b/Easy/Range Sum of BST.java @@ -15,23 +15,21 @@ */ class Solution { public int rangeSumBST(TreeNode root, int low, int high) { - int[] rangeSum = {0}; - helper(root, low, high, rangeSum); - return rangeSum[0]; - } - - private void helper(TreeNode root, int low, int high, int[] rangeSum) { - if (root == null) { - return; - } - if (root.val >= low && root.val <= high) { - rangeSum[0] += root.val; - } - if (root.val >= low) { - helper(root.left, low, high, rangeSum); - } - if (root.val <= high) { - helper(root.right, low, high, rangeSum); + Stack stack = new Stack<>(); + stack.push(root); + int sum = 0; + while (!stack.isEmpty()) { + TreeNode removed = stack.pop(); + if (removed.val > low && removed.left != null) { + stack.push(removed.left); + } + if (removed.val < high && removed.right != null) { + stack.push(removed.right); + } + if (low <= removed.val && removed.val <= high) { + sum += removed.val; + } } + return sum; } } From 8a2bac633c3fabf9a2d2baa99ec4d9f9729f2d36 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 29 Jan 2022 18:37:25 -0800 Subject: [PATCH 0199/1640] Update Rotate Array.java --- Medium/Rotate Array.java | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Medium/Rotate Array.java b/Medium/Rotate Array.java index 4eefa93c..1090cd86 100644 --- a/Medium/Rotate Array.java +++ b/Medium/Rotate Array.java @@ -1,18 +1,19 @@ class Solution { public void rotate(int[] nums, int k) { - k %= nums.length; - reverse(nums, 0, nums.length - 1); - reverse(nums, 0, k - 1); - reverse(nums, k, nums.length - 1); - } - - private void reverse(int[] nums, int start, int end) { - while (start < end) { - int temp = nums[start]; - nums[start] = nums[end]; - nums[end] = temp; - start++; - end--; + int n = nums.length; + k %= n; + int count = 0; + for (int i = 0; count < n; i++) { + int currIdx = i; + int prevValue = nums[i]; + do { + int nextIdx = (currIdx + k) % n; + int tempValue = nums[nextIdx]; + nums[nextIdx] = prevValue; + prevValue = tempValue; + currIdx = nextIdx; + count++; + } while (i != currIdx); } } } From 725c0458d2e7e1030db7de6fd13f70952f67bfaa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Jan 2022 07:13:47 -0800 Subject: [PATCH 0200/1640] Create Keep Multiplying Found Values by Two.java --- Easy/Keep Multiplying Found Values by Two.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/Keep Multiplying Found Values by Two.java diff --git a/Easy/Keep Multiplying Found Values by Two.java b/Easy/Keep Multiplying Found Values by Two.java new file mode 100644 index 00000000..165e4b74 --- /dev/null +++ b/Easy/Keep Multiplying Found Values by Two.java @@ -0,0 +1,12 @@ +class Solution { + public int findFinalValue(int[] nums, int original) { + Set set = new HashSet<>(); + for (int num : nums) { + set.add(num); + } + while (set.contains(original)) { + original *= 2; + } + return original; + } +} From 0af57ee1ded7e50be94e2c326d85a2fce5e00800 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Jan 2022 07:39:04 -0800 Subject: [PATCH 0201/1640] Create All Divisions With the Highest Score of a Binary Array.java --- ...h the Highest Score of a Binary Array.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/All Divisions With the Highest Score of a Binary Array.java diff --git a/Medium/All Divisions With the Highest Score of a Binary Array.java b/Medium/All Divisions With the Highest Score of a Binary Array.java new file mode 100644 index 00000000..f47caba5 --- /dev/null +++ b/Medium/All Divisions With the Highest Score of a Binary Array.java @@ -0,0 +1,25 @@ +class Solution { + public List maxScoreIndices(int[] nums) { + int n = nums.length; + int[] prefix = new int[n + 1]; + for (int i = 0; i < n; i++) { + prefix[i + 1] = nums[i] + prefix[i]; + } + int maxScore = 0; + Map map = new HashMap<>(); + for (int i = 0; i < n + 1; i++) { + int onesToRight = prefix[n] - prefix[i]; + int zerosToLeft = i - prefix[i]; + int currScore = zerosToLeft + onesToRight; + maxScore = Math.max(maxScore, currScore); + map.put(i, currScore); + } + List result = new ArrayList<>(); + for (Integer key : map.keySet()) { + if (map.get(key).equals(maxScore)) { + result.add(key); + } + } + return result; + } +} From 81f5b630710a85473a844aa720a63e7a487ec48f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 31 Jan 2022 07:34:49 -0800 Subject: [PATCH 0202/1640] Update Binary Tree Vertical Order Traversal.java --- Medium/Binary Tree Vertical Order Traversal.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Medium/Binary Tree Vertical Order Traversal.java b/Medium/Binary Tree Vertical Order Traversal.java index 93c1004a..5d0e954f 100644 --- a/Medium/Binary Tree Vertical Order Traversal.java +++ b/Medium/Binary Tree Vertical Order Traversal.java @@ -36,15 +36,15 @@ public List> verticalOrder(TreeNode root) { } return new ArrayList<>(map.values()); } -} + + private class TreeLevel { + TreeNode node; + int level; -class TreeLevel { - TreeNode node; - int level; - - public TreeLevel(TreeNode node, int level) { - this.node = node; - this.level = level; + public TreeLevel(TreeNode node, int level) { + this.node = node; + this.level = level; + } } } From c9b88ebd5c5b59dfffc3b5dd52327f7cc7b1bbd7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 31 Jan 2022 15:45:41 -0800 Subject: [PATCH 0203/1640] Update Dot Product of Two Sparse Vectors.java --- Medium/Dot Product of Two Sparse Vectors.java | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/Medium/Dot Product of Two Sparse Vectors.java b/Medium/Dot Product of Two Sparse Vectors.java index 92fed72b..912d250e 100644 --- a/Medium/Dot Product of Two Sparse Vectors.java +++ b/Medium/Dot Product of Two Sparse Vectors.java @@ -1,42 +1,29 @@ class SparseVector { - Map map; - int[] nums; + + private Map map; + SparseVector(int[] nums) { - this.nums = nums; - } - - private Map getMap() { - if (map != null) { - return map; - } - map = new HashMap<>(); + this.map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { - map.put(i, nums[i]); + this.map.put(i, nums[i]); } } - return map; } // Return the dotProduct of two sparse vectors public int dotProduct(SparseVector vec) { - Map vecMap = vec.getMap(); - Map map = getMap(); - return map.size() > vecMap.size() ? helper(vecMap, map) : helper(map, vecMap); + return vec.map.size() > this.map.size() ? dotProductHelper(this.map, vec.map) + : dotProductHelper(vec.map, this.map); } - - private int helper(Map map1, Map map2) { - int val = 0; - for (Integer key : map1.keySet()) { - if (map2.containsKey(key)) { - val += map1.get(key) * map2.get(key); + + private int dotProductHelper(Map mapOne, Map mapTwo) { + int product = 0; + for (Integer key : mapOne.keySet()) { + if (mapTwo.containsKey(key)) { + product += mapOne.get(key) * mapTwo.get(key); } } - return val; + return product; } } - -// Your SparseVector object will be instantiated and called as such: -// SparseVector v1 = new SparseVector(nums1); -// SparseVector v2 = new SparseVector(nums2); -// int ans = v1.dotProduct(v2); From 0722deabaad4ab3b0c511980a24f5dd92e9a7d8f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 31 Jan 2022 17:21:56 -0800 Subject: [PATCH 0204/1640] Update Best Time to Buy and Sell Stock.java --- Easy/Best Time to Buy and Sell Stock.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Easy/Best Time to Buy and Sell Stock.java b/Easy/Best Time to Buy and Sell Stock.java index a30f4e9b..08df1870 100644 --- a/Easy/Best Time to Buy and Sell Stock.java +++ b/Easy/Best Time to Buy and Sell Stock.java @@ -1,14 +1,12 @@ class Solution { public int maxProfit(int[] prices) { + int minPrice = prices[0]; int maxProfit = 0; - int currMin = Integer.MAX_VALUE; for (int price : prices) { - if (price > currMin) { - maxProfit = Math.max(maxProfit, price - currMin); - } - else { - currMin = price; + if (price < minPrice) { + minPrice = price; } + maxProfit = Math.max(maxProfit, price - minPrice); } return maxProfit; } From c866e5a361e840da7f2220f926537703f1295252 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Feb 2022 16:15:23 -0800 Subject: [PATCH 0205/1640] Update and rename Medium/Reconstruct Itinerary.java to Hard/Reconstruct Itinerary.java --- Hard/Reconstruct Itinerary.java | 20 +++++++++++++ Medium/Reconstruct Itinerary.java | 49 ------------------------------- 2 files changed, 20 insertions(+), 49 deletions(-) create mode 100644 Hard/Reconstruct Itinerary.java delete mode 100644 Medium/Reconstruct Itinerary.java diff --git a/Hard/Reconstruct Itinerary.java b/Hard/Reconstruct Itinerary.java new file mode 100644 index 00000000..26629d58 --- /dev/null +++ b/Hard/Reconstruct Itinerary.java @@ -0,0 +1,20 @@ +class Solution { + public List findItinerary(List> tickets) { + LinkedList itinerary = new LinkedList<>(); + Map> graph = new HashMap<>(); + Stack stack = new Stack<>(); + for (List ticket : tickets) { + graph.computeIfAbsent(ticket.get(0), k -> new PriorityQueue<>()).add(ticket.get(1)); + } + stack.push("JFK"); + while (!stack.isEmpty()) { + String nextDestination = stack.peek(); + if (!graph.getOrDefault(nextDestination, new PriorityQueue<>()).isEmpty()) { + stack.push(graph.get(nextDestination).poll()); + } else { + itinerary.addFirst(stack.pop()); + } + } + return itinerary; + } +} diff --git a/Medium/Reconstruct Itinerary.java b/Medium/Reconstruct Itinerary.java deleted file mode 100644 index 7951bfc3..00000000 --- a/Medium/Reconstruct Itinerary.java +++ /dev/null @@ -1,49 +0,0 @@ -class Solution { - List result = null; - public List findItinerary(List> tickets) { - Map> map = new HashMap<>(); - int flights = tickets.size(); - for (List ticket : tickets) { - map.computeIfAbsent(ticket.get(0), k -> new ArrayList<>()).add(ticket.get(1)); - } - Map visited = new HashMap<>(); - for (Map.Entry> entry : map.entrySet()) { - Collections.sort(entry.getValue()); - visited.put(entry.getKey(), new boolean[entry.getValue().size()]); - } - LinkedList route = new LinkedList(); - route.add("JFK"); - backtrack(map, visited, flights, route, "JFK"); - return result; - } - - private boolean backtrack( - Map> map, - Map visited, - int flights, - LinkedList route, - String origin - ) { - if (route.size() == (flights + 1)) { - result = (List) route.clone(); - return true; - } - if (!map.containsKey(origin)) { - return false; - } - boolean[] visit = visited.get(origin); - for (int i = 0; i < map.get(origin).size(); i++) { - if (!visit[i]) { - visit[i] = true; - route.add(map.get(origin).get(i)); - boolean res = backtrack(map, visited, flights, route, map.get(origin).get(i)); - route.pollLast(); - visit[i] = false; - if (res) { - return res; - } - } - } - return false; - } -} From c285daeedddc9c1f32ac73faeb97056c560685d8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 2 Feb 2022 07:55:45 -0800 Subject: [PATCH 0206/1640] Create Lowest Common Ancestor of a Binary Tree III.java --- ... Common Ancestor of a Binary Tree III.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Medium/Lowest Common Ancestor of a Binary Tree III.java diff --git a/Medium/Lowest Common Ancestor of a Binary Tree III.java b/Medium/Lowest Common Ancestor of a Binary Tree III.java new file mode 100644 index 00000000..26269fcc --- /dev/null +++ b/Medium/Lowest Common Ancestor of a Binary Tree III.java @@ -0,0 +1,38 @@ +/* +// Definition for a Node. +class Node { + public int val; + public Node left; + public Node right; + public Node parent; +}; +*/ + +class Solution { + public Node lowestCommonAncestor(Node p, Node q) { + int pDepth = getDepth(p); + int qDepth = getDepth(q); + while (pDepth > qDepth) { + pDepth--; + p = p.parent; + } + while (pDepth < qDepth) { + qDepth--; + q = q.parent; + } + while (p != q) { + p = p.parent; + q = q.parent; + } + return p; + } + + private int getDepth(Node node) { + int depth = 0; + while (node != null) { + depth++; + node = node.parent; + } + return depth; + } +} From f2e2544ba6b4e9bff055c67a4fe69548f6b25364 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 2 Feb 2022 14:41:47 -0800 Subject: [PATCH 0207/1640] Update Minimum Add to Make Parentheses Valid.java --- ...Minimum Add to Make Parentheses Valid.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Medium/Minimum Add to Make Parentheses Valid.java b/Medium/Minimum Add to Make Parentheses Valid.java index bc78b451..f119bfe7 100644 --- a/Medium/Minimum Add to Make Parentheses Valid.java +++ b/Medium/Minimum Add to Make Parentheses Valid.java @@ -1,20 +1,18 @@ class Solution { - public int minAddToMakeValid(String S) { + public int minAddToMakeValid(String s) { int count = 0; - int open = 0; - for (char c : S.toCharArray()) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { if (c == '(') { - open++; - } - else { - if (open != 0) { - open--; - } - else { + stack.push(c); + } else { + if (stack.isEmpty()) { count++; + } else { + stack.pop(); } } } - return count + open; + return count + stack.size(); } } From edd245eda95db7a81d6c24d14cf06d51f98c4193 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Feb 2022 11:52:10 -0800 Subject: [PATCH 0208/1640] Update and rename Easy/N-ary Tree Level Order Traversal.java to Medium/N-ary Tree Level Order Traversal.java --- Easy/N-ary Tree Level Order Traversal.java | 42 -------------------- Medium/N-ary Tree Level Order Traversal.java | 42 ++++++++++++++++++++ 2 files changed, 42 insertions(+), 42 deletions(-) delete mode 100644 Easy/N-ary Tree Level Order Traversal.java create mode 100644 Medium/N-ary Tree Level Order Traversal.java diff --git a/Easy/N-ary Tree Level Order Traversal.java b/Easy/N-ary Tree Level Order Traversal.java deleted file mode 100644 index 11aac2e6..00000000 --- a/Easy/N-ary Tree Level Order Traversal.java +++ /dev/null @@ -1,42 +0,0 @@ -/* -// Definition for a Node. -class Node { - public int val; - public List children; - - public Node() {} - - public Node(int _val,List _children) { - val = _val; - children = _children; - } -}; -*/ -class Solution { - public List> levelOrder(Node root) { - List> values = new ArrayList<>(); - - if (root == null) { - return values; - } - - Queue queue = new LinkedList<>(); - queue.add(root); - - while (!queue.isEmpty()) { - int n = queue.size(); - List temp = new ArrayList<>(); - - while(n-- > 0) { - Node node = queue.remove(); - temp.add(node.val); - List childrens = node.children; - queue.addAll(childrens); - } - - values.add(temp); - } - - return values; - } -} diff --git a/Medium/N-ary Tree Level Order Traversal.java b/Medium/N-ary Tree Level Order Traversal.java new file mode 100644 index 00000000..29373207 --- /dev/null +++ b/Medium/N-ary Tree Level Order Traversal.java @@ -0,0 +1,42 @@ +/* +// Definition for a Node. +class Node { + public int val; + public List children; + + public Node() {} + + public Node(int _val) { + val = _val; + } + + public Node(int _val, List _children) { + val = _val; + children = _children; + } +}; +*/ + +class Solution { + public List> levelOrder(Node root) { + if (root == null) { + return new ArrayList<>(); + } + List> result = new ArrayList<>(); + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + List level = new ArrayList<>(); + while (size-- > 0) { + Node removed = queue.remove(); + level.add(removed.val); + for (Node child : removed.children) { + queue.add(child); + } + } + result.add(level); + } + return result; + } +} From fd74e1f50150fdb43efd9cc4c3e9c3bbc6eb1b2c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Feb 2022 12:21:57 -0800 Subject: [PATCH 0209/1640] Update Shortest Path in Binary Matrix.java --- Medium/Shortest Path in Binary Matrix.java | 36 +++++++++++++--------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/Medium/Shortest Path in Binary Matrix.java b/Medium/Shortest Path in Binary Matrix.java index d73302d5..0649b9b0 100644 --- a/Medium/Shortest Path in Binary Matrix.java +++ b/Medium/Shortest Path in Binary Matrix.java @@ -1,34 +1,40 @@ class Solution { - int[][] dirs = {{0,1},{0,-1},{1,0},{-1,0},{1,-1},{-1,1},{-1,-1},{1,1}}; public int shortestPathBinaryMatrix(int[][] grid) { - int rows = grid.length; - int cols = grid[0].length; - if (grid[0][0] == 1 || grid[rows - 1][cols - 1] == 1) { + int n = grid.length; + if (n == 0 || grid[0][0] == 1 || grid[n - 1][n - 1] == 1) { return -1; } - boolean[][] visited = new boolean[rows][cols]; Queue queue = new LinkedList<>(); - queue.add(new int[]{0, 0}); + int numberOfSteps = 0; + boolean[][] visited = new boolean[n][n]; + queue.add(new int[] {0, 0}); visited[0][0] = true; - int steps = 0; while (!queue.isEmpty()) { int size = queue.size(); while (size-- > 0) { int[] removed = queue.remove(); - if (removed[0] == (rows - 1) && removed[1] == (cols - 1)) { - return steps + 1; + if (removed[0] == n - 1 && removed[1] == n - 1) { + return numberOfSteps + 1; } - for (int i = 0; i < dirs.length; i++) { - int newX = removed[0] + dirs[i][0]; - int newY = removed[1] + dirs[i][1]; - if (newX >= 0 && newX < rows && newY >= 0 && newY < cols && !visited[newX][newY] && grid[newX][newY] == 0) { - queue.add(new int[]{newX, newY}); + for (int[] dir : EIGHT_DIRS) { + int newX = removed[0] + dir[0]; + int newY = removed[1] + dir[1]; + if (newX >= 0 + && newX < n + && newY >= 0 + && newY < n + && !visited[newX][newY] + && grid[newX][newY] == 0) { + queue.add(new int[] {newX, newY}); visited[newX][newY] = true; } } } - steps++; + numberOfSteps++; } return -1; } + + private static final int[][] EIGHT_DIRS = { + {0,1},{0,-1},{1,0},{-1,0},{1,-1},{-1,1},{-1,-1},{1,1}}; } From 9e11021284707981b324fadd6e3d45d3e3223372 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 4 Feb 2022 07:52:52 -0800 Subject: [PATCH 0210/1640] Update Contiguous Array.java --- Medium/Contiguous Array.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Medium/Contiguous Array.java b/Medium/Contiguous Array.java index 554d8c65..204c9102 100644 --- a/Medium/Contiguous Array.java +++ b/Medium/Contiguous Array.java @@ -2,17 +2,16 @@ class Solution { public int findMaxLength(int[] nums) { Map map = new HashMap<>(); map.put(0, -1); - int maxLen = 0; + int maxLength = 0; int count = 0; for (int i = 0; i < nums.length; i++) { count += nums[i] == 0 ? -1 : 1; if (map.containsKey(count)) { - maxLen = Math.max(maxLen, i - map.get(count)); - } - else { + maxLength = Math.max(maxLength, i - map.get(count)); + } else { map.put(count, i); } } - return maxLen; + return maxLength; } } From 630e3dd5b8d912d790fadf37b4d14bf193701fb3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 4 Feb 2022 14:00:28 -0800 Subject: [PATCH 0211/1640] Update Nested List Weight Sum.java --- Easy/Nested List Weight Sum.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Easy/Nested List Weight Sum.java b/Easy/Nested List Weight Sum.java index 65fe828b..4a98107d 100644 --- a/Easy/Nested List Weight Sum.java +++ b/Easy/Nested List Weight Sum.java @@ -22,34 +22,33 @@ * public void add(NestedInteger ni); * * // @return the nested list that this NestedInteger holds, if it holds a nested list - * // Return null if this NestedInteger holds a single integer + * // Return empty list if this NestedInteger holds a single integer * public List getList(); * } */ class Solution { public int depthSum(List nestedList) { - int level = 1; Queue queue = new LinkedList<>(); - int sum = 0; + int currLevel = 1; for (NestedInteger nestedInteger : nestedList) { queue.add(nestedInteger); } + int totalSum = 0; while (!queue.isEmpty()) { int size = queue.size(); while (size-- > 0) { - NestedInteger nestedInteger = queue.remove(); - if (nestedInteger.isInteger()) { - sum += nestedInteger.getInteger() * level; - } - else { - List nList = nestedInteger.getList(); - for (NestedInteger nInteger : nList) { - queue.add(nInteger); + NestedInteger removed = queue.remove(); + if (removed.isInteger()) { + totalSum += currLevel * removed.getInteger(); + } else { + List nestedIntegers = removed.getList(); + for (NestedInteger nestedInteger : nestedIntegers) { + queue.add(nestedInteger); } } } - level++; + currLevel++; } - return sum; + return totalSum; } } From b057e54e481abd1c69d4c64ca895f6c2e1bd8ad5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 4 Feb 2022 16:20:29 -0800 Subject: [PATCH 0212/1640] Update Nested List Weight Sum II.java --- Medium/Nested List Weight Sum II.java | 31 ++++++++++++--------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/Medium/Nested List Weight Sum II.java b/Medium/Nested List Weight Sum II.java index c5fcc6e8..f804c67b 100644 --- a/Medium/Nested List Weight Sum II.java +++ b/Medium/Nested List Weight Sum II.java @@ -22,36 +22,33 @@ * public void add(NestedInteger ni); * * // @return the nested list that this NestedInteger holds, if it holds a nested list - * // Return null if this NestedInteger holds a single integer + * // Return empty list if this NestedInteger holds a single integer * public List getList(); * } */ +import java.util.Map.Entry; + + class Solution { public int depthSumInverse(List nestedList) { Queue queue = new LinkedList<>(); - int prevSum = 0; + queue.addAll(nestedList); + int totalSum = 0; int currSum = 0; - for (NestedInteger nestedInteger : nestedList) { - queue.add(nestedInteger); - } while (!queue.isEmpty()) { int size = queue.size(); int levelSum = 0; while (size-- > 0) { - NestedInteger removed = queue.remove(); - if (removed.isInteger()) { - levelSum += removed.getInteger(); - } - else { - List nList = removed.getList(); - for (NestedInteger nInteger : nList) { - queue.add(nInteger); - } + NestedInteger nestedInteger = queue.remove(); + if (nestedInteger.isInteger()) { + levelSum += nestedInteger.getInteger(); + } else { + queue.addAll(nestedInteger.getList()); } } - prevSum += levelSum; - currSum += prevSum; + currSum += levelSum; + totalSum += currSum; } - return currSum; + return totalSum; } } From 0cb47aa954f87270f7a90be546c72b339f7cdefd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Feb 2022 07:20:21 -0800 Subject: [PATCH 0213/1640] Update Palindrome Permutation.java --- Easy/Palindrome Permutation.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Easy/Palindrome Permutation.java b/Easy/Palindrome Permutation.java index f1d5b084..ce4bccb8 100644 --- a/Easy/Palindrome Permutation.java +++ b/Easy/Palindrome Permutation.java @@ -1,13 +1,13 @@ class Solution { public boolean canPermutePalindrome(String s) { - int[] count = new int[256]; + Map frequencyMap = new HashMap<>(); for (char c : s.toCharArray()) { - count[(int) c]++; + frequencyMap.put(c, frequencyMap.getOrDefault(c, 0) + 1); } boolean oddFound = false; - for (int i = 0; i < 256; i++) { - if (count[i] % 2 != 0) { - if (s.length() % 2 == 0 || oddFound) { + for (Character key : frequencyMap.keySet()) { + if (frequencyMap.get(key) % 2 != 0) { + if (oddFound) { return false; } oddFound = true; From d8985bb5d285aa989a36fa9f025ae169d9a95a1b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Feb 2022 16:00:19 -0800 Subject: [PATCH 0214/1640] Create Minimum Sum of Four Digit Number After Splitting Digits.java --- ...m of Four Digit Number After Splitting Digits.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Minimum Sum of Four Digit Number After Splitting Digits.java diff --git a/Easy/Minimum Sum of Four Digit Number After Splitting Digits.java b/Easy/Minimum Sum of Four Digit Number After Splitting Digits.java new file mode 100644 index 00000000..5929e314 --- /dev/null +++ b/Easy/Minimum Sum of Four Digit Number After Splitting Digits.java @@ -0,0 +1,11 @@ +class Solution { + public int minimumSum(int num) { + int[] digits = new int[4]; + for (int i = 0; i < 4; i++) { + digits[i] = num % 10; + num /= 10; + } + Arrays.sort(digits); + return (digits[0] * 10 + digits[2]) + (digits[1] * 10 + digits[3]); + } +} From c9c38c96b0c879602577bbb236affb9f8d3d46f4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Feb 2022 16:16:54 -0800 Subject: [PATCH 0215/1640] Create Partition Array According to Given Pivot.java --- ...tition Array According to Given Pivot.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Partition Array According to Given Pivot.java diff --git a/Medium/Partition Array According to Given Pivot.java b/Medium/Partition Array According to Given Pivot.java new file mode 100644 index 00000000..740b1707 --- /dev/null +++ b/Medium/Partition Array According to Given Pivot.java @@ -0,0 +1,20 @@ +class Solution { + public int[] pivotArray(int[] nums, int pivot) { + int[] result = new int[nums.length]; + int leftIdx = 0; + int rightIdx = nums.length - 1; + for (int i = 0; i < nums.length; i++) { + if (nums[i] < pivot) { + result[leftIdx++] = nums[i]; + } + int tempIdx = nums.length - 1 - i; + if (nums[tempIdx] > pivot) { + result[rightIdx--] = nums[tempIdx]; + } + } + while (leftIdx <= rightIdx) { + result[leftIdx++] = pivot; + } + return result; + } +} From 32e442131c11189e70d0fc03816f1b487f6c69ae Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Feb 2022 16:24:06 -0800 Subject: [PATCH 0216/1640] Update Remove Duplicates From Sorted Array II.java --- ...emove Duplicates From Sorted Array II.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Medium/Remove Duplicates From Sorted Array II.java b/Medium/Remove Duplicates From Sorted Array II.java index 90a056c7..63879666 100644 --- a/Medium/Remove Duplicates From Sorted Array II.java +++ b/Medium/Remove Duplicates From Sorted Array II.java @@ -1,20 +1,19 @@ class Solution { public int removeDuplicates(int[] nums) { - int slow = 0; - int fast = 0; + int startIdx = 0; int n = nums.length; - while (fast < n) { - int currNum = nums[fast]; + int currIdx = 0; + while (currIdx < n) { + int currValue = nums[currIdx]; int count = 0; - while (fast < n && currNum == nums[fast]) { - fast++; + while (currIdx < n && nums[currIdx] == currValue) { + currIdx++; count++; } - int frequency = Math.min(count, 2); - while (frequency-- > 0) { - nums[slow++] = currNum; + for (int i = 0; i < Math.min(2, count); i++) { + nums[startIdx++] = currValue; } } - return slow; + return startIdx; } } From 7f56b04e26db6fe702d443a611f1b7c109f0da14 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Feb 2022 07:57:30 -0800 Subject: [PATCH 0217/1640] Create Sort Even and Odd Indices Independently.java --- ...rt Even and Odd Indices Independently.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Sort Even and Odd Indices Independently.java diff --git a/Easy/Sort Even and Odd Indices Independently.java b/Easy/Sort Even and Odd Indices Independently.java new file mode 100644 index 00000000..7b7e8203 --- /dev/null +++ b/Easy/Sort Even and Odd Indices Independently.java @@ -0,0 +1,22 @@ +class Solution { + public int[] sortEvenOdd(int[] nums) { + PriorityQueue oddIndices = new PriorityQueue<>((o1, o2) -> o2 - o1); + PriorityQueue evenIndices = new PriorityQueue<>(); + for (int i = 0; i < nums.length; i++) { + if (i % 2 == 0) { + evenIndices.add(nums[i]); + } else { + oddIndices.add(nums[i]); + } + } + int[] result = new int[nums.length]; + for (int i = 0; i < nums.length; i++) { + if (i % 2 == 0) { + result[i] = evenIndices.poll(); + } else { + result[i] = oddIndices.poll(); + } + } + return result; + } +} From b89f7fbc9774aa9f09ca1ebafa9ba4bf2d20b3d5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Feb 2022 15:03:28 -0800 Subject: [PATCH 0218/1640] Create Smallest Value of the Rearranged Number.java --- ...allest Value of the Rearranged Number.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Medium/Smallest Value of the Rearranged Number.java diff --git a/Medium/Smallest Value of the Rearranged Number.java b/Medium/Smallest Value of the Rearranged Number.java new file mode 100644 index 00000000..13dfdc46 --- /dev/null +++ b/Medium/Smallest Value of the Rearranged Number.java @@ -0,0 +1,35 @@ +class Solution { + public long smallestNumber(long num) { + return num < 0 ? + getArrangement(Math.abs(num), (o1, o2) -> (int) (o2 - o1), true) * -1 : + getArrangement(num, (o1, o2) -> (int) (o1 - o2), false); + } + + private long getArrangement(long num, Comparator comparator, boolean zeroAtEnd) { + PriorityQueue pq = new PriorityQueue<>(comparator); + long zeroMultiple = 1; + while (num > 0) { + long remainder = num % 10; + if (remainder == 0) { + zeroMultiple *= 10; + } else { + pq.add(remainder); + } + num /= 10; + } + long result = 0; + if (!pq.isEmpty()) { + result = result * 10 + pq.poll(); + } + if (!zeroAtEnd) { + result *= zeroMultiple; + } + while (!pq.isEmpty()) { + result = result * 10 + pq.poll(); + } + if (zeroAtEnd) { + result *= zeroMultiple; + } + return result; + } +} From 4421795fbe729da6cac9ecd344e2ffed450bbe5c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Feb 2022 20:47:12 -0800 Subject: [PATCH 0219/1640] Update Custom Sort String.java --- Medium/Custom Sort String.java | 32 +++++++++++--------------------- 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/Medium/Custom Sort String.java b/Medium/Custom Sort String.java index 1fe011ce..248a721a 100644 --- a/Medium/Custom Sort String.java +++ b/Medium/Custom Sort String.java @@ -1,26 +1,16 @@ class Solution { - public String customSortString(String S, String T) { - Set set = new HashSet<>(); - for (int i = 0; i < S.length(); i++) { - set.add(S.charAt(i)); - } + public String customSortString(String order, String s) { Map map = new HashMap<>(); - StringBuilder sb = new StringBuilder(); - for (char c : T.toCharArray()) { - if (set.contains(c)) { - map.put(c, map.getOrDefault(c, 0) + 1); - } - else { - sb.append(c); - } - } - for (int i = 0; i < S.length(); i++) { - char c = S.charAt(i); - int count = map.getOrDefault(c, 0); - while (count-- > 0) { - sb.append(c); - } + int position = 1; + for (char c : order.toCharArray()) { + map.put(c, position++); } - return sb.toString(); + return s.chars() + .mapToObj(c -> (char) c) + .sorted(Comparator.comparing(o -> map.getOrDefault(o, 0))) + .collect(Collector.of(StringBuilder::new, + StringBuilder::append, + StringBuilder::append, + StringBuilder::toString)); } } From 8954b3387750aad209b5798d0dbd1a9949b811ef Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Feb 2022 16:27:37 -0800 Subject: [PATCH 0220/1640] Update Add Digits.java --- Easy/Add Digits.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Easy/Add Digits.java b/Easy/Add Digits.java index c701c82a..a17de297 100644 --- a/Easy/Add Digits.java +++ b/Easy/Add Digits.java @@ -1,17 +1,13 @@ class Solution { public int addDigits(int num) { - while (String.valueOf(num).length() > 1) { - num = getDigitSum(num); + if (num / 10 == 0) { + return num; } - return num; - } - - private int getDigitSum(int n) { - int newNum = 0; - while (n > 0) { - newNum += n % 10; - n /= 10; + int digitSum = 0; + while (num > 0) { + digitSum += num % 10; + num /= 10; } - return newNum; + return addDigits(digitSum); } } From a2082ac9bedec6356904f23f94c4489a2846ab49 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Feb 2022 16:45:32 -0800 Subject: [PATCH 0221/1640] Update Add Two Numbers.java --- Medium/Add Two Numbers.java | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Medium/Add Two Numbers.java b/Medium/Add Two Numbers.java index 4917bf04..8245945b 100644 --- a/Medium/Add Two Numbers.java +++ b/Medium/Add Two Numbers.java @@ -3,34 +3,34 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { - ListNode ans = new ListNode(-1); - ListNode curr = ans; + ListNode root = new ListNode(-1); + ListNode curr = root; int carry = 0; - while (l1 != null || l2 != null || carry > 0) { - int temp = carry; + while (l1 != null || l2 != null || carry != 0) { + int currSum = carry; if (l1 != null && l2 != null) { - temp += l1.val + l2.val; + currSum += l1.val + l2.val; l1 = l1.next; l2 = l2.next; - } - else if (l1 != null && l2 == null) { - temp += l1.val; + } else if (l1 != null && l2 == null) { + currSum += l1.val; l1 = l1.next; - } - else if (l1 == null && l2 != null) { - temp += l2.val; + } else if (l1 == null && l2 != null) { + currSum += l2.val; l2 = l2.next; } - carry = temp > 9 ? temp / 10 : 0; - temp = temp % 10; - curr.next = new ListNode(temp); + carry = currSum > 9 ? 1 : 0; + currSum %= 10; + curr.next = new ListNode(currSum); curr = curr.next; } - return ans.next; + return root.next; } } From e492bba5c31a264503f6c853869013a44410500c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Feb 2022 07:35:04 -0800 Subject: [PATCH 0222/1640] Update Design Browser History.java --- Medium/Design Browser History.java | 39 ++++++++++++------------------ 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/Medium/Design Browser History.java b/Medium/Design Browser History.java index fb5db3bb..8aa9f71f 100644 --- a/Medium/Design Browser History.java +++ b/Medium/Design Browser History.java @@ -1,40 +1,31 @@ class BrowserHistory { - - Node root; + + private Stack history; + private Stack future; + public BrowserHistory(String homepage) { - root = new Node(homepage); + this.history = new Stack<>(); + this.history.push(homepage); + this.future = new Stack<>(); } public void visit(String url) { - Node node = new Node(url); - root.next = null; - root.next = node; - node.prev = root; - root = root.next; + this.future.removeAllElements(); + this.history.push(url); } public String back(int steps) { - while (steps-- > 0 && root.prev != null) { - root = root.prev; + while (steps-- > 0 && this.history.size() > 1) { + this.future.push(this.history.pop()); } - return root.val; + return this.history.peek(); } public String forward(int steps) { - while (steps-- > 0 && root.next != null) { - root = root.next; + while (steps-- > 0 && !this.future.isEmpty()) { + this.history.push(this.future.pop()); } - return root.val; - } -} - -class Node { - String val; - Node next; - Node prev; - - public Node(String val) { - this.val = val; + return this.history.peek(); } } From 66d3dd5e39243002388579b3a0640bdf2f7298b7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Feb 2022 13:44:07 -0800 Subject: [PATCH 0223/1640] Create Min Cost to Connect All Points.java --- Medium/Min Cost to Connect All Points.java | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Medium/Min Cost to Connect All Points.java diff --git a/Medium/Min Cost to Connect All Points.java b/Medium/Min Cost to Connect All Points.java new file mode 100644 index 00000000..15cc689b --- /dev/null +++ b/Medium/Min Cost to Connect All Points.java @@ -0,0 +1,80 @@ +class Solution { + public int minCostConnectPoints(int[][] points) { + int n = points.length; + PriorityQueue priorityQueue = new PriorityQueue<>((x, y) -> x.cost - y.cost); + UnionFind unionFind = new UnionFind(n); + for (int i = 0; i < n; i++) { + int[] coordinate = points[i]; + for (int j = i + 1; j < n; j++) { + int[] secondCoordinate = points[j]; + int cost = Math.abs(coordinate[0] - secondCoordinate[0]) + Math.abs(coordinate[1] - secondCoordinate[1]); + Edge edge = new Edge(i, j, cost); + priorityQueue.add(edge); + } + } + int minimumCost = 0; + int totalEdges = n - 1; + while (!priorityQueue.isEmpty() && totalEdges > 0) { + Edge edge = priorityQueue.poll(); + if (!unionFind.connected(edge.pointOne, edge.pointTwo)) { + unionFind.union(edge.pointOne, edge.pointTwo); + minimumCost += edge.cost; + totalEdges--; + } + } + return minimumCost; + } + + private static class Edge { + int pointOne; + int pointTwo; + int cost; + + public Edge(int pointOne, int pointTwo, int cost) { + this.pointOne = pointOne; + this.pointTwo = pointTwo; + this.cost = cost; + } + } + + private static class UnionFind { + + private final int[] root; + private final int[] rank; + + public UnionFind(int size) { + this.root = new int[size]; + this.rank = new int[size]; + for (int i = 0; i < size; i++) { + this.root[i] = i; + this.rank[i] = 1; + } + } + + public void union(int nodeOne, int nodeTwo) { + int rootOne = find(nodeOne); + int rootTwo = find(nodeTwo); + if (rootOne != rootTwo) { + if (this.rank[rootOne] > this.rank[rootTwo]) { + this.root[rootTwo] = rootOne; + } else if (this.rank[rootOne] < this.rank[rootTwo]) { + this.root[rootOne] = rootTwo; + } else { + this.root[rootTwo] = rootOne; + this.rank[rootOne]++; + } + } + } + + public int find(int node) { + if (node == root[node]) { + return node; + } + return root[node] = find(root[node]); + } + + public boolean connected(int nodeOne, int nodeTwo) { + return find(nodeOne) == find(nodeTwo); + } + } +} From 63c3f75341f6510cb6617050ed2c3359aa389181 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Feb 2022 16:52:49 -0800 Subject: [PATCH 0224/1640] Create Connecting Cities With Minimum Cost.java --- .../Connecting Cities With Minimum Cost.java | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Medium/Connecting Cities With Minimum Cost.java diff --git a/Medium/Connecting Cities With Minimum Cost.java b/Medium/Connecting Cities With Minimum Cost.java new file mode 100644 index 00000000..e1a90f09 --- /dev/null +++ b/Medium/Connecting Cities With Minimum Cost.java @@ -0,0 +1,59 @@ +class Solution { + public int minimumCost(int n, int[][] connections) { + Arrays.sort(connections, Comparator.comparingInt(a -> a[2])); + UnionFind unionFind = new UnionFind(n); + int totalCost = 0; + for (int[] connection : connections) { + int nodeOne = connection[0] - 1; + int nodeTwo = connection[1] - 1; + if (!unionFind.isConnected(nodeOne, nodeTwo)) { + totalCost += connection[2]; + unionFind.union(nodeOne, nodeTwo); + n--; + } + } + return n == 1 ? totalCost : -1; + } + + private static class UnionFind { + + private final int[] root; + private final int[] rank; + + public UnionFind(int size) { + this.root = new int[size]; + this.rank = new int[size]; + for (int i = 0; i < size; i++) { + this.root[i] = i; + this.rank[i] = 1; + } + } + + public void union(int nodeOne, int nodeTwo) { + int rootOne = find(nodeOne); + int rootTwo = find(nodeTwo); + if (rootOne != rootTwo) { + if (this.rank[rootOne] > this.rank[rootTwo]) { + this.root[rootTwo] = rootOne; + } else if (this.rank[rootOne] < this.rank[rootTwo]) { + this.root[rootOne] = rootTwo; + } else { + this.root[rootTwo] = rootOne; + this.rank[rootOne]++; + } + } + } + + + public int find(int node) { + if (node == root[node]) { + return node; + } + return root[node] = find(root[node]); + } + + public boolean isConnected(int nodeOne, int nodeTwo) { + return find(nodeOne) == find(nodeTwo); + } + } +} From c51290124e9e6ad6f1cc941bf7ad0f1c3afa85b7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Feb 2022 17:03:45 -0800 Subject: [PATCH 0225/1640] Update K-diff Pairs in an Array.java --- Easy/K-diff Pairs in an Array.java | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Easy/K-diff Pairs in an Array.java b/Easy/K-diff Pairs in an Array.java index 72aef035..b2a9e7c7 100644 --- a/Easy/K-diff Pairs in an Array.java +++ b/Easy/K-diff Pairs in an Array.java @@ -1,21 +1,18 @@ class Solution { public int findPairs(int[] nums, int k) { - Arrays.sort(nums); - int left = 0; - int right = 1; + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } int count = 0; - while (left < nums.length && right < nums.length) { - if (left == right || nums[right] - nums[left] < k) { - right++; - } - else if (nums[right] - nums[left] > k) { - left++; - } - else { - left++; - count++; - while (left < nums.length && nums[left] == nums[left - 1]) { - left++; + for (Map.Entry entry : map.entrySet()) { + if (k == 0) { + if (entry.getValue() >= 2) { + count++; + } + } else { + if (map.containsKey(entry.getKey() + k)) { + count++; } } } From 8446b2cde0307d4c320c719d9d5116a5fc5d8cea Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Feb 2022 17:29:57 -0800 Subject: [PATCH 0226/1640] Create Design an Ordered Stream.java --- Easy/Design an Ordered Stream.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Easy/Design an Ordered Stream.java diff --git a/Easy/Design an Ordered Stream.java b/Easy/Design an Ordered Stream.java new file mode 100644 index 00000000..68c1eba7 --- /dev/null +++ b/Easy/Design an Ordered Stream.java @@ -0,0 +1,23 @@ +class OrderedStream { + private String[] stream; + private int currIdx; + public OrderedStream(int n) { + this.stream = new String[n]; + this.currIdx = 0; + } + + public List insert(int idKey, String value) { + this.stream[idKey - 1] = value; + List result = new ArrayList<>(); + while (this.currIdx < stream.length && this.stream[this.currIdx] != null) { + result.add(this.stream[this.currIdx++]); + } + return result; + } +} + +/** + * Your OrderedStream object will be instantiated and called as such: + * OrderedStream obj = new OrderedStream(n); + * List param_1 = obj.insert(idKey,value); + */ From 9b30ec2e3655c55e6bb9239307a13c5b182babc4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Feb 2022 12:24:48 -0800 Subject: [PATCH 0227/1640] Create Longest Word With All Prefixes.java --- Medium/Longest Word With All Prefixes.java | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Medium/Longest Word With All Prefixes.java diff --git a/Medium/Longest Word With All Prefixes.java b/Medium/Longest Word With All Prefixes.java new file mode 100644 index 00000000..567aea3a --- /dev/null +++ b/Medium/Longest Word With All Prefixes.java @@ -0,0 +1,53 @@ +class Solution { + public String longestWord(String[] words) { + TrieNode root = new TrieNode(); + root.isWord = true; + Map> map = new TreeMap<>((o1, o2) -> o2 - o1); + for (String word : words) { + addToTrie(word, root); + map.computeIfAbsent(word.length(), k -> new PriorityQueue<>(String::compareTo)).add(word); + } + for (Integer key : map.keySet()) { + PriorityQueue priorityQueue = map.get(key); + while (!priorityQueue.isEmpty()) { + String candidateWord = priorityQueue.poll(); + if (wordContainAllPrefixes(candidateWord, root)) { + return candidateWord; + } + } + } + return ""; + } + + private boolean wordContainAllPrefixes(String word, TrieNode root) { + TrieNode curr = root; + for (int i = 0; i < word.length(); i++) { + if (!curr.isWord) { + return false; + } + curr = curr.children.get(word.charAt(i)); + } + return curr.isWord; + } + + private void addToTrie(String word, TrieNode root) { + TrieNode curr = root; + for (int i = 0; i < word.length(); i++) { + if (!curr.children.containsKey(word.charAt(i))) { + curr.children.put(word.charAt(i), new TrieNode()); + } + curr = curr.children.get(word.charAt(i)); + } + curr.isWord = true; + } + + private static class TrieNode { + Map children; + boolean isWord; + + public TrieNode() { + this.children = new HashMap<>(); + this.isWord = false; + } + } +} From 9d3ace1200799f39f5f933cab6af61a9ac6350d3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Feb 2022 15:09:24 -0800 Subject: [PATCH 0228/1640] Update Print in Order.java --- Concurrency/Print in Order.java | 81 +++++++++++++++------------------ 1 file changed, 36 insertions(+), 45 deletions(-) diff --git a/Concurrency/Print in Order.java b/Concurrency/Print in Order.java index a23042a0..f9de39ff 100644 --- a/Concurrency/Print in Order.java +++ b/Concurrency/Print in Order.java @@ -1,53 +1,44 @@ +import java.util.concurrent.atomic.AtomicInteger; + class Foo { - - private int counter = 1; - private String mutex = ""; - public Foo() { - - } - public void first(Runnable printFirst) throws InterruptedException { - - // printFirst.run() outputs "first". Do not change or remove this line. - boolean flag = true; - while (flag) { - synchronized(mutex) { - if (counter == 1) { - printFirst.run(); - counter++; - flag = false; - } - } - } + private Object lock; + private AtomicInteger counter; + + public Foo() { + this.lock = new Object(); + this.counter = new AtomicInteger(0); + } + + public void first(Runnable printFirst) throws InterruptedException { + + // printFirst.run() outputs "first". Do not change or remove this line. + synchronized (lock) { + printFirst.run(); + this.counter.incrementAndGet(); + this.lock.notifyAll(); } + } - public void second(Runnable printSecond) throws InterruptedException { - - // printSecond.run() outputs "second". Do not change or remove this line. - boolean flag = true; - while (flag) { - synchronized(mutex) { - if (counter == 2) { - printSecond.run(); - counter++; - flag = false; - } - } - } + public void second(Runnable printSecond) throws InterruptedException { + // printSecond.run() outputs "second". Do not change or remove this line. + synchronized (lock) { + while (this.counter.get() != 1) { + this.lock.wait(); + } + printSecond.run(); + this.counter.incrementAndGet(); + this.lock.notifyAll(); } + } - public void third(Runnable printThird) throws InterruptedException { - - // printThird.run() outputs "third". Do not change or remove this line. - boolean flag = true; - while (flag) { - synchronized(mutex) { - if (counter == 3) { - printThird.run(); - counter++; - flag = false; - } - } - } + public void third(Runnable printThird) throws InterruptedException { + // printThird.run() outputs "third". Do not change or remove this line. + synchronized (lock) { + while (this.counter.get() != 2) { + this.lock.wait(); + } + printThird.run(); } + } } From 43446fd0e060c811bc505022e658b66d1c1d0983 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Feb 2022 16:18:23 -0800 Subject: [PATCH 0229/1640] Update Meeting Scheduler.java --- Medium/Meeting Scheduler.java | 35 +++++++++++------------------------ 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/Medium/Meeting Scheduler.java b/Medium/Meeting Scheduler.java index 42f7b044..d5bf6b16 100644 --- a/Medium/Meeting Scheduler.java +++ b/Medium/Meeting Scheduler.java @@ -1,34 +1,21 @@ class Solution { public List minAvailableDuration(int[][] slots1, int[][] slots2, int duration) { - int idx1 = 0; - int idx2 = 0; - Arrays.sort(slots1, new sortByStartAndEndTime()); - Arrays.sort(slots2, new sortByStartAndEndTime()); - while (idx1 < slots1.length && idx2 < slots2.length) { - int maxStart = Math.max(slots1[idx1][0], slots2[idx2][0]); - int minEnd = Math.min(slots1[idx1][1], slots2[idx2][1]); + Arrays.sort(slots1, Comparator.comparingInt(o -> o[0])); + Arrays.sort(slots2, Comparator.comparingInt(o -> o[0])); + int idxOne = 0; + int idxTwo = 0; + while (idxOne < slots1.length && idxTwo < slots2.length) { + int maxStart = Math.max(slots1[idxOne][0], slots2[idxTwo][0]); + int minEnd = Math.min(slots1[idxOne][1], slots2[idxTwo][1]); if (minEnd - maxStart >= duration) { return Arrays.asList(maxStart, maxStart + duration); } - if (slots1[idx1][1] < slots2[idx2][1]) { - idx1++; - } - else { - idx2++; + if (slots1[idxOne][1] > slots2[idxTwo][1]) { + idxTwo++; + } else { + idxOne++; } } return new ArrayList<>(); } - - class sortByStartAndEndTime implements Comparator { - - @Override - public int compare(int[] o1, int[] o2) { - int c = o1[0] - o2[0]; - if (c != 0) { - return c; - } - return o1[1] - o2[1]; - } - } } From 592ad0e375127f688867b2fc637e615fe6a22bb5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Feb 2022 07:25:43 -0800 Subject: [PATCH 0230/1640] Update Top K Frequent Elements.java --- Medium/Top K Frequent Elements.java | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Medium/Top K Frequent Elements.java b/Medium/Top K Frequent Elements.java index f3f6ae2d..ffb13529 100644 --- a/Medium/Top K Frequent Elements.java +++ b/Medium/Top K Frequent Elements.java @@ -4,21 +4,22 @@ public int[] topKFrequent(int[] nums, int k) { for (int num : nums) { map.put(num, map.getOrDefault(num, 0) + 1); } - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(Integer p1, Integer p2) { - return map.get(p1) - map.get(p2); - } - }); + Map> frequencyToValueMap = new HashMap<>(); for (Integer key : map.keySet()) { - pq.add(key); - if (pq.size() > k) { - pq.poll(); - } + frequencyToValueMap.computeIfAbsent(map.get(key), j -> new ArrayList<>()).add(key); } - int[] ans = new int[k]; - for (int i = 0; i < k; i++) { - ans[i] = pq.poll(); + List result = new ArrayList<>(); + for (int i = nums.length; i >= 0 && result.size() < k; i--) { + List values = frequencyToValueMap.getOrDefault(i, new ArrayList<>()); + if (result.size() + values.size() <= k) { + result.addAll(values); + } else { + int idx = 0; + while (result.size() < k) { + result.add(values.get(idx++)); + } + } } - return ans; + return result.stream().mapToInt(i -> i).toArray(); } } From 91b7257d33433eb480bc057ed86c8e36779c61ed Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Feb 2022 07:35:00 -0800 Subject: [PATCH 0231/1640] Update Permutation in String.java --- Medium/Permutation in String.java | 33 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/Medium/Permutation in String.java b/Medium/Permutation in String.java index e405a988..ff95424e 100644 --- a/Medium/Permutation in String.java +++ b/Medium/Permutation in String.java @@ -1,25 +1,32 @@ class Solution { public boolean checkInclusion(String s1, String s2) { - if (s1.length() > s2.length()) { + if (s2.length() < s1.length()) { return false; } - int[] counter = new int[26]; - for (char c : s1.toCharArray()) { - counter[c - 'a']++; + int[] frequency = new int[26]; + for (int i = 0; i < s1.length(); i++) { + frequency[s1.charAt(i) - 'a']++; + frequency[s2.charAt(i) - 'a']--; } - String targetStr = Arrays.toString(counter); - int[] targetCounter = new int[26]; - for (int i = 0; i < s1.length() - 1; i++) { - targetCounter[s2.charAt(i) - 'a']++; + if (allZeroArray(frequency)) { + return true; } - int start = 0; - for (int i = s1.length() - 1; i < s2.length(); i++) { - targetCounter[s2.charAt(i) - 'a']++; - if (Arrays.toString(targetCounter).equals(targetStr)) { + for (int i = s1.length(); i < s2.length(); i++) { + frequency[s2.charAt(i) - 'a']--; + frequency[s2.charAt(i - s1.length()) - 'a']++; + if (allZeroArray(frequency)) { return true; } - targetCounter[s2.charAt(start++) - 'a']--; } return false; } + + private boolean allZeroArray(int[] frequency) { + for (int count : frequency) { + if (count != 0) { + return false; + } + } + return true; + } } From 6ef27f17bc731542e5eb4ced06ddd4d3061620fb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Feb 2022 14:19:12 -0800 Subject: [PATCH 0232/1640] Update Coin Change.java --- Medium/Coin Change.java | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/Medium/Coin Change.java b/Medium/Coin Change.java index e5bfb1f1..adfc9082 100644 --- a/Medium/Coin Change.java +++ b/Medium/Coin Change.java @@ -1,29 +1,28 @@ class Solution { public int coinChange(int[] coins, int amount) { - if (amount < 1) { - return 0; - } - return coinChange(coins, amount, new int[amount]); + Integer[] memo = new Integer[amount + 1]; + return coinChangeMemoization(coins, amount, memo); } - - private int coinChange(int[] coins, int amount, int[] memo) { + + private int coinChangeMemoization(int[] coins, int amount, Integer[] memo) { if (amount < 0) { return -1; } if (amount == 0) { return 0; } - if (memo[amount - 1] != 0) { - return memo[amount - 1]; + if (memo[amount] != null) { + return memo[amount]; } - int min = Integer.MAX_VALUE; + int minCount = Integer.MAX_VALUE; for (int coin : coins) { - int res = coinChange(coins, amount - coin, memo); - if (res >= 0 && res < min) { - min = 1 + res; + int count = coinChangeMemoization(coins, amount - coin, memo); + if (count == -1) { + continue; } + minCount = Math.min(minCount, count + 1); } - memo[amount - 1] = min == Integer.MAX_VALUE ? -1 : min; - return memo[amount - 1]; + memo[amount] = minCount == Integer.MAX_VALUE ? -1 : minCount; + return memo[amount]; } } From a512165edf5c95be3c44f83e52f434112201e0f7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Feb 2022 14:24:53 -0800 Subject: [PATCH 0233/1640] Update Coin Change.java --- Medium/Coin Change.java | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/Medium/Coin Change.java b/Medium/Coin Change.java index adfc9082..f728e957 100644 --- a/Medium/Coin Change.java +++ b/Medium/Coin Change.java @@ -1,7 +1,17 @@ class Solution { public int coinChange(int[] coins, int amount) { - Integer[] memo = new Integer[amount + 1]; - return coinChangeMemoization(coins, amount, memo); + Integer[] dp = new Integer[amount + 1]; + Arrays.fill(dp, amount + 1); + dp[0] = 0; + for (int i = 1; i <= amount; i++) { + for (int coin : coins) { + if (i - coin < 0) { + continue; + } + dp[i] = Math.min(dp[i], dp[i - coin] + 1); + } + } + return dp[amount] == (amount + 1) ? -1 : dp[amount]; } private int coinChangeMemoization(int[] coins, int amount, Integer[] memo) { @@ -25,4 +35,23 @@ private int coinChangeMemoization(int[] coins, int amount, Integer[] memo) { memo[amount] = minCount == Integer.MAX_VALUE ? -1 : minCount; return memo[amount]; } + + // This approach times out due to overlapping subproblems + private int coinChangeRecursive(int[] coins, int amount) { + if (amount < 0) { + return -1; + } + if (amount == 0) { + return 0; + } + int minCount = Integer.MAX_VALUE; + for (int coin : coins) { + int count = coinChangeRecursive(coins, amount - coin); + if (count == -1) { + continue; + } + minCount = Math.min(minCount, count); + } + return minCount == Integer.MAX_VALUE ? -1 : minCount; + } } From c029de1ce38eaf1e51f2be461bd447b4729b6c46 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Feb 2022 20:08:47 -0800 Subject: [PATCH 0234/1640] Update Subsets.java --- Medium/Subsets.java | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Medium/Subsets.java b/Medium/Subsets.java index e86ccecd..3e0aba4d 100644 --- a/Medium/Subsets.java +++ b/Medium/Subsets.java @@ -1,19 +1,20 @@ class Solution { public List> subsets(int[] nums) { - List> list = new ArrayList<>(); - helper(nums, list, new ArrayList<>(), 0); - return list; + List> result = new ArrayList<>(); + helper(nums, 0, new ArrayList<>(), result); + return new ArrayList<>(result); } - - private void helper(int[] nums, List> list, List curr, int idx) { - list.add(new ArrayList<>(curr)); - if (idx >= nums.length) { + + private void helper(int[] nums, int currIdx, List currSubset, + List> result) { + result.add(new ArrayList<>(currSubset)); + if (currIdx >= nums.length) { return; } - for (int i = idx; i < nums.length; i++) { - curr.add(nums[i]); - helper(nums, list, curr, i + 1); - curr.remove(curr.size() - 1); + for (int i = currIdx; i < nums.length; i++) { + currSubset.add(nums[i]); + helper(nums, i + 1, currSubset, result); + currSubset.remove(currSubset.size() - 1); } } } From ba0078636559a47de72525f9f097d654bb9be30f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Feb 2022 06:41:48 -0800 Subject: [PATCH 0235/1640] Create Count Operations to Obtain Zero.java --- Easy/Count Operations to Obtain Zero.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Count Operations to Obtain Zero.java diff --git a/Easy/Count Operations to Obtain Zero.java b/Easy/Count Operations to Obtain Zero.java new file mode 100644 index 00000000..7f1678c6 --- /dev/null +++ b/Easy/Count Operations to Obtain Zero.java @@ -0,0 +1,14 @@ +class Solution { + public int countOperations(int num1, int num2) { + int numOfOperations = 0; + while (num1 != 0 && num2 != 0) { + if (num1 >= num2) { + num1 -= num2; + } else { + num2 -= num1; + } + numOfOperations++; + } + return numOfOperations; + } +} From 9cd6fbeb1b6ab7d0a8a66bbc3d328632f4cb39fe Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Feb 2022 14:32:14 -0800 Subject: [PATCH 0236/1640] Update Design A Leaderboard.java --- Medium/Design A Leaderboard.java | 64 +++++++++++++++++--------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/Medium/Design A Leaderboard.java b/Medium/Design A Leaderboard.java index 9a5ca751..8ae6740f 100644 --- a/Medium/Design A Leaderboard.java +++ b/Medium/Design A Leaderboard.java @@ -1,39 +1,43 @@ class Leaderboard { - Map scoreMap; - Map> playerMap; - public Leaderboard() { - scoreMap = new HashMap<>(); - playerMap = new TreeMap<>(Collections.reverseOrder()); - } - public void addScore(int playerId, int score) { - if (scoreMap.containsKey(playerId)) { - int prevScore = scoreMap.get(playerId); - playerMap.get(prevScore).remove(playerId); - } - scoreMap.put(playerId, scoreMap.getOrDefault(playerId, 0) + score); - playerMap.computeIfAbsent(scoreMap.get(playerId), k -> new HashSet<>()).add(playerId); - } + private Map playerToScoreMapping; + private Map> scoreToPlayerMapping; - public int top(int K) { - int sum = 0; - for (Integer key : playerMap.keySet()) { - int count = Math.min(K, playerMap.get(key).size()); - sum += key * count; - K -= count; - if (K == 0) { - break; - } - } - return sum; + public Leaderboard() { + this.playerToScoreMapping = new HashMap<>(); + this.scoreToPlayerMapping = new TreeMap<>(Collections.reverseOrder()); + } + + public void addScore(int playerId, int score) { + if (playerToScoreMapping.containsKey(playerId)) { + int previousScore = playerToScoreMapping.get(playerId); + if (scoreToPlayerMapping.getOrDefault(previousScore, new HashSet<>()).contains(playerId)) { + scoreToPlayerMapping.get(previousScore).remove(playerId); + } + score += previousScore; } + playerToScoreMapping.put(playerId, score); + scoreToPlayerMapping.computeIfAbsent(score, k -> new HashSet<>()).add(playerId); + } - public void reset(int playerId) { - int prevScore = scoreMap.get(playerId); - playerMap.get(prevScore).remove(playerId); - scoreMap.put(playerId, 0); - playerMap.computeIfAbsent(0, k -> new HashSet<>()).add(playerId); + public int top(int K) { + int totalScore = 0; + for (Integer currScore : scoreToPlayerMapping.keySet()) { + int totalPlayersWithScore = scoreToPlayerMapping.get(currScore).size(); + int playersRemaining = Math.min(K, totalPlayersWithScore); + totalScore += playersRemaining * currScore; + K -= playersRemaining; + if (K == 0) { + break; + } } + return totalScore; + } + + public void reset(int playerId) { + scoreToPlayerMapping.get(playerToScoreMapping.get(playerId)).remove(playerId); + playerToScoreMapping.put(playerId, 0); + } } /** From 0cd3a9549c0392671d70d7fd9c6d221e478a5548 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Feb 2022 14:54:12 -0800 Subject: [PATCH 0237/1640] Update and rename Hard/Longest Substring with At Most Two Distinct Characters.java to Medium/Longest Substring with At Most Two Distinct Characters.java --- ... with At Most Two Distinct Characters.java | 27 ------------------- ... with At Most Two Distinct Characters.java | 22 +++++++++++++++ 2 files changed, 22 insertions(+), 27 deletions(-) delete mode 100644 Hard/Longest Substring with At Most Two Distinct Characters.java create mode 100644 Medium/Longest Substring with At Most Two Distinct Characters.java diff --git a/Hard/Longest Substring with At Most Two Distinct Characters.java b/Hard/Longest Substring with At Most Two Distinct Characters.java deleted file mode 100644 index deb1b3d7..00000000 --- a/Hard/Longest Substring with At Most Two Distinct Characters.java +++ /dev/null @@ -1,27 +0,0 @@ -class Solution { - public int lengthOfLongestSubstringTwoDistinct(String s) { - Map map = new HashMap<>(); - int slow = 0; - int fast = 0; - int maxLen = 0; - int n = s.length(); - - while (fast < n) { - map.put(s.charAt(fast), map.getOrDefault(s.charAt(fast), 0) + 1); - - while (map.size() > 2) { - map.put(s.charAt(slow), map.getOrDefault(s.charAt(slow), 0) - 1); - if (map.get(s.charAt(slow)) <= 0) { - map.remove(s.charAt(slow)); - } - - slow++; - } - - fast++; - maxLen = Math.max(maxLen, fast - slow); - } - - return maxLen; - } -} diff --git a/Medium/Longest Substring with At Most Two Distinct Characters.java b/Medium/Longest Substring with At Most Two Distinct Characters.java new file mode 100644 index 00000000..2af3a613 --- /dev/null +++ b/Medium/Longest Substring with At Most Two Distinct Characters.java @@ -0,0 +1,22 @@ +class Solution { + public int lengthOfLongestSubstringTwoDistinct(String s) { + Map map = new HashMap<>(); + int startIdx = 0; + int endIdx = 0; + int n = s.length(); + int maxLength = 0; + while (endIdx < n) { + map.put(s.charAt(endIdx), map.getOrDefault(s.charAt(endIdx), 0) + 1); + while (startIdx < endIdx && map.size() > 2) { + map.put(s.charAt(startIdx), map.getOrDefault(s.charAt(startIdx), 0) - 1); + if (map.get(s.charAt(startIdx)) <= 0) { + map.remove(s.charAt(startIdx)); + } + startIdx++; + } + endIdx++; + maxLength = Math.max(endIdx - startIdx, maxLength); + } + return maxLength; + } +} From 8b7a5edb95b8132c9212e3d5e6b94930b00c317f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Feb 2022 21:25:36 -0800 Subject: [PATCH 0238/1640] Update Maximum depth of Binary tree.java --- Easy/Maximum depth of Binary tree.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Easy/Maximum depth of Binary tree.java b/Easy/Maximum depth of Binary tree.java index 98bfb842..8661d52e 100644 --- a/Easy/Maximum depth of Binary tree.java +++ b/Easy/Maximum depth of Binary tree.java @@ -4,14 +4,20 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public int maxDepth(TreeNode root) { - if (root == null) { - return 0; - } - return 1 + Math.max(maxDepth(root.left), maxDepth(root.right)); + public int maxDepth(TreeNode root) { + if (root == null) { + return 0; } + return 1 + Math.max(maxDepth(root.left), maxDepth(root.right)); + } } From effd03f3c96b65b79a157f528e7096dda1a2ab79 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 14 Feb 2022 10:43:50 -0800 Subject: [PATCH 0239/1640] Update Network Delay Time.java --- Medium/Network Delay Time.java | 65 +++++++++++++--------------------- 1 file changed, 24 insertions(+), 41 deletions(-) diff --git a/Medium/Network Delay Time.java b/Medium/Network Delay Time.java index d1dc03be..90ddb22c 100644 --- a/Medium/Network Delay Time.java +++ b/Medium/Network Delay Time.java @@ -1,49 +1,32 @@ class Solution { - public int networkDelayTime(int[][] times, int N, int K) { - Map> map = new HashMap<>(); + public int networkDelayTime(int[][] times, int n, int k) { + // Mapping from node to all outgoing edges alongside weight of each edge + Map> map = new HashMap<>(); for (int[] time : times) { - map.computeIfAbsent(time[0], k -> new ArrayList<>()).add(new Connection(time[1], time[2])); + map.computeIfAbsent(time[0], j -> new ArrayList<>()).add(new int[] {time[1], time[2]}); } - Map dist = new HashMap<>(); - for (int node = 1; node <= N; node++) { - dist.put(node, Integer.MAX_VALUE); - } - dist.put(K, 0); - boolean[] seen = new boolean[N + 1]; - while (true) { - int candNode = -1; - int candDist = Integer.MAX_VALUE; - for (int i = 1; i <= N; ++i) { - if (!seen[i] && dist.get(i) < candDist) { - candDist = dist.get(i); - candNode = i; - } - } - if (candNode < 0) { - break; - } - seen[candNode] = true; - for (Connection con: map.getOrDefault(candNode, new ArrayList<>())) { - dist.put(con.val, Math.min(dist.get(con.val), dist.get(candNode) + con.time)); + // Min heap in order of edge weight + PriorityQueue priorityQueue = new PriorityQueue<>(Comparator.comparingInt(o -> o[0])); + priorityQueue.add(new int[] {0, k}); + Set visited = new HashSet<>(); + int totalTime = 0; + while (!priorityQueue.isEmpty()) { + int[] removed = priorityQueue.poll(); + int currNode = removed[1]; + int edgeWeight = removed[0]; + if (visited.contains(currNode)) { + continue; } - } - int ans = 0; - for (int cand: dist.values()) { - if (cand == Integer.MAX_VALUE) { - return -1; + visited.add(currNode); + totalTime = Math.max(totalTime, edgeWeight); + for (int[] neighbor : map.getOrDefault(removed[1], new ArrayList<>())) { + int neighborNode = neighbor[0]; + int neighborEdgeWeight = neighbor[1]; + if (!visited.contains(neighborNode)) { + priorityQueue.add(new int[] {neighborEdgeWeight + edgeWeight, neighborNode}); + } } - ans = Math.max(ans, cand); } - return ans; - } -} - -class Connection { - int val; - int time; - - public Connection(int val, int time) { - this.val = val; - this.time = time; + return visited.size() == n ? totalTime : -1; } } From c81691fc16898f24c416aa3d87b7df1b9dd68bc8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 14 Feb 2022 11:23:27 -0800 Subject: [PATCH 0240/1640] Update One Edit Distance.java --- Medium/One Edit Distance.java | 79 +++++++++++++++-------------------- 1 file changed, 34 insertions(+), 45 deletions(-) diff --git a/Medium/One Edit Distance.java b/Medium/One Edit Distance.java index 7a78e333..dc32eede 100644 --- a/Medium/One Edit Distance.java +++ b/Medium/One Edit Distance.java @@ -1,50 +1,39 @@ class Solution { - public static boolean isOneEditDistance(String s, String t) { - if (Math.abs(s.length() - t.length()) > 1) { - return false; - } - else if (s.length() - t.length() == 0) { - if (s.equals(t)) { - return false; - } - - boolean missed = false; - for (int i=0; i 1) { + return false; } - - private static boolean oneDeleteOnly(String s, String t) { - if (t.length() == 0) { - return true; - } - int i = 0; - int j = 0; - - while (i < s.length() && j < t.length()) { - if (s.charAt(i) != t.charAt(j)) { - if (i > j) { - return false; - } - i++; - continue; - } - - i++; - j++; + if (s.length() == 0 || t.length() == 0) { + return true; + } + int idxOne = 0; + int idxTwo = 0; + boolean changeDone = false; + while (idxOne < s.length() && idxTwo < t.length()) { + if (s.charAt(idxOne) == t.charAt(idxTwo)) { + idxOne++; + idxTwo++; + continue; + } + if (changeDone) { + return false; + } + if (lengthDiff != 0) { + if (s.length() > t.length()) { + idxOne++; + } else { + idxTwo++; } - - return true; + } else { + idxOne++; + idxTwo++; + } + changeDone = true; + } + if (changeDone && (idxOne != s.length() || idxTwo != t.length())) { + return false; } + return true; + } } From 218ea4f8ff268b1fb679e2c08a837ba1231d03a5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 14 Feb 2022 15:57:16 -0800 Subject: [PATCH 0241/1640] Update Meeting Rooms.java --- Easy/Meeting Rooms.java | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/Easy/Meeting Rooms.java b/Easy/Meeting Rooms.java index 5b3b806c..53af36c7 100644 --- a/Easy/Meeting Rooms.java +++ b/Easy/Meeting Rooms.java @@ -1,30 +1,11 @@ -/** - * Definition for an interval. - * public class Interval { - * int start; - * int end; - * Interval() { start = 0; end = 0; } - * Interval(int s, int e) { start = s; end = e; } - * } - */ class Solution { - public static boolean canAttendMeetings(Interval[] intervals) { - Arrays.sort(intervals, new Comparator() { - @Override - public int compare(Interval o1, Interval o2) { - return o1.start - o2.start; - } - }); - - int i=0; - while (i < intervals.length - 1) { - if (intervals[i].end > intervals[i+1].start) { - return false; - } - - i++; - } - - return true; + public boolean canAttendMeetings(int[][] intervals) { + Arrays.sort(intervals, Comparator.comparingInt((int[] o) -> o[0])); + for (int i = 1; i < intervals.length; i++) { + if (intervals[i][0] < intervals[i - 1][1]) { + return false; + } } + return true; + } } From 81c6d7f0be1cd28a51007e39741df3ceb9ec6a3c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 14 Feb 2022 16:01:57 -0800 Subject: [PATCH 0242/1640] Update Meeting Rooms II.java --- Medium/Meeting Rooms II.java | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/Medium/Meeting Rooms II.java b/Medium/Meeting Rooms II.java index e327a24a..d43eab4e 100644 --- a/Medium/Meeting Rooms II.java +++ b/Medium/Meeting Rooms II.java @@ -1,29 +1,16 @@ class Solution { public int minMeetingRooms(int[][] intervals) { - Arrays.sort(intervals, new Comparator() { - @Override - public int compare(int[] o1, int[] o2) { - int c = o1[0] - o2[0]; - if (c != 0) { - return c; - } - return o1[1] - o2[1]; + Arrays.sort(intervals, Comparator.comparingInt((a) -> a[0])); + PriorityQueue meetingsInProgress = new PriorityQueue<>( + Comparator.comparingInt((a) -> a[1])); + int result = 0; + for (int[] interval : intervals) { + while (!meetingsInProgress.isEmpty() && meetingsInProgress.peek()[1] <= interval[0]) { + meetingsInProgress.poll(); } - }); - PriorityQueue pq = new PriorityQueue<>(new Comparator() { - @Override - public int compare(int[] o1, int[] o2) { - return o1[1] - o2[1]; - } - }); - int maxCount = 0; - for (int i = 0; i < intervals.length; i++) { - while (!pq.isEmpty() && pq.peek()[1] <= intervals[i][0]) { - pq.poll(); - } - pq.add(intervals[i]); - maxCount = Math.max(maxCount, pq.size()); + meetingsInProgress.add(interval); + result = Math.max(result, meetingsInProgress.size()); } - return maxCount; + return result; } } From 0d7374d54e90497ed06969e1097bb9ae8273b5f8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 14 Feb 2022 16:06:00 -0800 Subject: [PATCH 0243/1640] Update Single Number.java --- Easy/Single Number.java | 31 ++++++++----------------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/Easy/Single Number.java b/Easy/Single Number.java index 94568349..9c1601e9 100644 --- a/Easy/Single Number.java +++ b/Easy/Single Number.java @@ -1,24 +1,9 @@ -public class Solution { - public int singleNumber(int[] nums) { - if (nums.length == 1) return nums[0]; - Arrays.sort(nums); - if (nums[0] != nums[1]) { - return nums[0]; - } - boolean twice = true; - for (int i=0;i Date: Tue, 15 Feb 2022 06:39:31 -0800 Subject: [PATCH 0244/1640] Update Flatten 2D Vector.java --- Medium/Flatten 2D Vector.java | 43 ++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/Medium/Flatten 2D Vector.java b/Medium/Flatten 2D Vector.java index c9c0ce8c..d6b9b9d7 100644 --- a/Medium/Flatten 2D Vector.java +++ b/Medium/Flatten 2D Vector.java @@ -1,33 +1,40 @@ class Vector2D { - int vectorIdx; - int currIdx; - int[][] v; - public Vector2D(int[][] v) { - vectorIdx = 0; - currIdx = 0; - this.v = v; + + private int[][] vec; + private int vecIdx; + private int idx; + + public Vector2D(int[][] vec) { + this.vec = vec; + this.idx = 0; + this.vecIdx = 0; + updateIdx(); + } + + private void updateIdx() { + if (this.vecIdx < this.vec.length && this.idx == this.vec[this.vecIdx].length) { + this.idx = 0; + this.vecIdx++; + } + while (this.vecIdx < this.vec.length && this.vec[this.vecIdx].length == 0) { + this.vecIdx++; + } } public int next() { - hasNext(); - return v[vectorIdx][currIdx++]; + int result = this.vec[this.vecIdx][this.idx++]; + updateIdx(); + return result; } public boolean hasNext() { - while (vectorIdx < v.length) { - if (currIdx < v[vectorIdx].length) { - return true; - } - vectorIdx++; - currIdx = 0; - } - return false; + return this.vecIdx < this.vec.length; } } /** * Your Vector2D object will be instantiated and called as such: - * Vector2D obj = new Vector2D(v); + * Vector2D obj = new Vector2D(vec); * int param_1 = obj.next(); * boolean param_2 = obj.hasNext(); */ From 29fbe98b5124eddda7fba6cc19cf46ae731330b2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Feb 2022 07:59:37 -0800 Subject: [PATCH 0245/1640] Update Find K-Length Substrings With No Repeated Characters.java --- ...ubstrings With No Repeated Characters.java | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/Medium/Find K-Length Substrings With No Repeated Characters.java b/Medium/Find K-Length Substrings With No Repeated Characters.java index 5c435fbf..fee2952d 100644 --- a/Medium/Find K-Length Substrings With No Repeated Characters.java +++ b/Medium/Find K-Length Substrings With No Repeated Characters.java @@ -1,26 +1,24 @@ class Solution { - public int numKLenSubstrNoRepeats(String S, int K) { - int count = 0; - int start = 0; - Map map = new HashMap<>(); - for (int i = 0; i < K - 1 && i < S.length(); i++) { - map.put(S.charAt(i), map.getOrDefault(S.charAt(i), 0) + 1); - } - - for (int i = K - 1; i < S.length(); i++) { - map.put(S.charAt(i), map.getOrDefault(S.charAt(i), 0) + 1); - if (map.size() == K) { - count++; - } - - map.put(S.charAt(start), map.get(S.charAt(start)) - 1); - if (map.get(S.charAt(start)) == 0) { - map.remove(S.charAt(start)); - } - - start++; - } - - return count; + public int numKLenSubstrNoRepeats(String s, int k) { + if (s.length() < k) { + return 0; } + Map map = new HashMap<>(); + for (int i = 0; i < k; i++) { + map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1); + } + int resultCount = 0; + for (int i = k; i < s.length(); i++) { + if (map.size() == k) { + resultCount++; + } + int startIdx = i - k; + map.put(s.charAt(startIdx), map.getOrDefault(s.charAt(startIdx), 0) - 1); + if (map.get(s.charAt(startIdx)) == 0) { + map.remove(s.charAt(startIdx)); + } + map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1); + } + return resultCount + (map.size() == k ? 1 : 0); + } } From 14a3a640c406a422689aed6d2aeb4151c5738ff1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Feb 2022 08:46:24 -0800 Subject: [PATCH 0246/1640] Update Inorder Successor in BST.java --- Medium/Inorder Successor in BST.java | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Medium/Inorder Successor in BST.java b/Medium/Inorder Successor in BST.java index 62b37697..f7fb5702 100644 --- a/Medium/Inorder Successor in BST.java +++ b/Medium/Inorder Successor in BST.java @@ -10,24 +10,21 @@ class Solution { public TreeNode inorderSuccessor(TreeNode root, TreeNode p) { if (p.right != null) { - TreeNode node = p.right; - while (node.left != null) { - node = node.left; + TreeNode rightNode = p.right; + while (rightNode != null && rightNode.left != null) { + rightNode = rightNode.left; } - return node; + return rightNode; } - else { - TreeNode lastLeft = null; - while (root != p) { - if (root.val > p.val) { - lastLeft = root; - root = root.left; - } - else { - root = root.right; - } + TreeNode prev = null; + while (root != p) { + if (root.val > p.val) { + prev = root; + root = root.left; + } else { + root = root.right; } - return lastLeft; } + return prev; } } From 5d039b180152e0b6c3aba95fa3a032f785126b6c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Feb 2022 11:27:53 -0800 Subject: [PATCH 0247/1640] Update Inorder Successor in BST II.java --- Medium/Inorder Successor in BST II.java | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/Medium/Inorder Successor in BST II.java b/Medium/Inorder Successor in BST II.java index d6810587..e8c672df 100644 --- a/Medium/Inorder Successor in BST II.java +++ b/Medium/Inorder Successor in BST II.java @@ -10,9 +10,6 @@ class Node { class Solution { public Node inorderSuccessor(Node node) { - if (node == null) { - return null; - } if (node.right != null) { Node rightNode = node.right; while (rightNode.left != null) { @@ -20,17 +17,13 @@ public Node inorderSuccessor(Node node) { } return rightNode; } - else { - Node curr = node; - Node parentNode = node.parent; - while (parentNode != null) { - if (parentNode.left == curr) { - return parentNode; - } - curr = parentNode; - parentNode = parentNode.parent; + while (node.parent != null) { + Node parent = node.parent; + if (parent.left == node) { + return parent; } + node = parent; } - return null; - } + return null; + } } From f16de56d9ebf2e4d9c8556614dc595f773c825e2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Feb 2022 15:43:51 -0800 Subject: [PATCH 0248/1640] Update Lowest Common Ancestor of a Binary Tree.java --- ...west Common Ancestor of a Binary Tree.java | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Medium/Lowest Common Ancestor of a Binary Tree.java b/Medium/Lowest Common Ancestor of a Binary Tree.java index b83d0663..b49de19a 100644 --- a/Medium/Lowest Common Ancestor of a Binary Tree.java +++ b/Medium/Lowest Common Ancestor of a Binary Tree.java @@ -8,18 +8,15 @@ * } */ class Solution { - public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { - if (root == null || root == p || root == q) { - return root; - } - - TreeNode left = lowestCommonAncestor(root.left, p, q); - TreeNode right = lowestCommonAncestor(root.right, p, q); - - if (left != null && right != null) { - return root; - } - - return left != null ? left : right; + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { + if (root == null || root == p || root == q) { + return root; } + TreeNode leftRoot = lowestCommonAncestor(root.left, p, q); + TreeNode rightRoot = lowestCommonAncestor(root.right, p, q); + if (leftRoot != null && rightRoot != null) { + return root; + } + return leftRoot != null ? leftRoot : rightRoot; + } } From c67702c98339a448594be7d60c16b48db7dcca22 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Feb 2022 16:03:49 -0800 Subject: [PATCH 0249/1640] Update Kth Largest Element in an Array.java --- Medium/Kth Largest Element in an Array.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Medium/Kth Largest Element in an Array.java b/Medium/Kth Largest Element in an Array.java index eab17f53..1ba91b65 100644 --- a/Medium/Kth Largest Element in an Array.java +++ b/Medium/Kth Largest Element in an Array.java @@ -1,10 +1,12 @@ class Solution { public int findKthLargest(int[] nums, int k) { - PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o2 - o1); - pq.addAll(Arrays.stream(nums).boxed().collect(Collectors.toList())); - while (k-- > 1) { - pq.poll(); + PriorityQueue priorityQueue = new PriorityQueue<>(); + for (int num : nums) { + priorityQueue.add(num); + if (priorityQueue.size() > k) { + priorityQueue.poll(); + } } - return pq.poll(); + return priorityQueue.peek(); } } From aade1a1153268690b84fd40efa7dba2ebe78c490 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 16 Feb 2022 14:42:30 -0800 Subject: [PATCH 0250/1640] Update Exclusive Time of Functions.java --- Medium/Exclusive Time of Functions.java | 51 ++++++++++++++----------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/Medium/Exclusive Time of Functions.java b/Medium/Exclusive Time of Functions.java index 0138ec69..8212e0c0 100644 --- a/Medium/Exclusive Time of Functions.java +++ b/Medium/Exclusive Time of Functions.java @@ -1,28 +1,33 @@ class Solution { - public int[] exclusiveTime(int n, List logs) { - int[] timer = new int[n]; - Stack stack = new Stack<>(); - int lastTime = 0;; - - for (String log : logs) { - String[] strs = log.split(":"); - int id = Integer.parseInt(strs[0]); - String status = strs[1]; - int time = Integer.parseInt(strs[2]); - - if (!stack.isEmpty()) { - timer[stack.peek()] += time - lastTime; - } - lastTime = time; - if (status.equals("start")) { - stack.push(id); - } - else { - timer[stack.pop()]++; - lastTime++; - } + public int[] exclusiveTime(int n, List logs) { + int[] result = new int[n]; + Stack stack = new Stack<>(); + for (String log : logs) { + Log currentLog = new Log(log); + if (currentLog.isStart) { + stack.push(currentLog); + } else { + Log topLog = stack.pop(); + result[topLog.id] += currentLog.time - topLog.time + 1 - topLog.overLappingTime; + if (!stack.isEmpty()) { + stack.peek().overLappingTime += currentLog.time - topLog.time + 1; } + } + } + return result; + } + + private static class Log { + public int id; + public boolean isStart; + public int time; + public int overLappingTime; - return timer; + public Log(String log) { + String[] split = log.split(":"); + this.id = Integer.parseInt(split[0]); + this.isStart = split[1].equals("start"); + this.time = Integer.parseInt(split[2]); } + } } From 7a27f2f316becc7898184e816434a35e0b6fc1f0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 16 Feb 2022 16:06:11 -0800 Subject: [PATCH 0251/1640] Update and rename Medium/Vertical Order Traversal Of Binary Tree.java to Hard/Vertical Order Traversal Of a Binary Tree.java --- ...ical Order Traversal Of a Binary Tree.java | 56 ++++++++++++++++ ...rtical Order Traversal Of Binary Tree.java | 67 ------------------- 2 files changed, 56 insertions(+), 67 deletions(-) create mode 100644 Hard/Vertical Order Traversal Of a Binary Tree.java delete mode 100644 Medium/Vertical Order Traversal Of Binary Tree.java diff --git a/Hard/Vertical Order Traversal Of a Binary Tree.java b/Hard/Vertical Order Traversal Of a Binary Tree.java new file mode 100644 index 00000000..8d00094a --- /dev/null +++ b/Hard/Vertical Order Traversal Of a Binary Tree.java @@ -0,0 +1,56 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public List> verticalTraversal(TreeNode root) { + Map> map = new TreeMap<>(); + Queue queue = new LinkedList<>(); + queue.add(new TreeCoordinate(root, 0, 0)); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + TreeCoordinate removed = queue.remove(); + map.computeIfAbsent(removed.y, k -> new ArrayList<>()).add(removed); + if (removed.node.left != null) { + queue.add(new TreeCoordinate(removed.node.left, removed.x + 1, removed.y - 1)); + } + if (removed.node.right != null) { + queue.add(new TreeCoordinate(removed.node.right, removed.x + 1, removed.y + 1)); + } + } + } + List> result = new ArrayList<>(); + for (Integer key : map.keySet()) { + List temp = map.get(key); + Collections.sort(temp, + Comparator.comparingInt((TreeCoordinate o) -> o.x).thenComparingInt(o -> o.node.val)); + result.add(temp.stream().map(a -> a.node.val).collect(Collectors.toList())); + } + return result; + } + + private static class TreeCoordinate { + + public TreeNode node; + public int x; + public int y; + + public TreeCoordinate(TreeNode node, int x, int y) { + this.node = node; + this.x = x; + this.y = y; + } + } +} diff --git a/Medium/Vertical Order Traversal Of Binary Tree.java b/Medium/Vertical Order Traversal Of Binary Tree.java deleted file mode 100644 index ec9e234f..00000000 --- a/Medium/Vertical Order Traversal Of Binary Tree.java +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Definition for a binary tree node. - * 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; - * } - * } - */ -class Solution { - public List> verticalTraversal(TreeNode root) { - Comparator nodePointComparator = (o1, o2) -> { - int c = o2.y - o1.y; - if (c != 0) { - return c; - } - return o1.node.val - o2.node.val; - }; - Map> map = new TreeMap<>(); - Queue queue = new LinkedList<>(); - queue.add(new NodePoint(0, 0, root)); - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - NodePoint removed = queue.remove(); - map.computeIfAbsent( - removed.x, k -> new PriorityQueue<>(nodePointComparator)) - .add(removed); - if (removed.node.left != null) { - queue.add(new NodePoint(removed.x - 1, removed.y - 1, removed.node.left)); - } - if (removed.node.right != null) { - queue.add(new NodePoint(removed.x + 1, removed.y - 1, removed.node.right)); - } - } - } - List> result = new ArrayList<>(); - for (Integer key : map.keySet()) { - PriorityQueue pq = map.get(key); - List temp = new ArrayList<>(); - while (!pq.isEmpty()) { - temp.add(pq.poll().node.val); - } - result.add(temp); - } - return result; - } -} - - -class NodePoint { - int x; - int y; - TreeNode node; - - public NodePoint(int x, int y, TreeNode node) { - this.x = x; - this.y = y; - this.node = node; - } -} From 38d230ec0399fb2c1822fa43cc0fba5e0e16a2d7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 17 Feb 2022 08:51:05 -0800 Subject: [PATCH 0252/1640] Update Combination Sum.java --- Medium/Combination Sum.java | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/Medium/Combination Sum.java b/Medium/Combination Sum.java index 6bd7aa66..de3b3740 100644 --- a/Medium/Combination Sum.java +++ b/Medium/Combination Sum.java @@ -1,24 +1,21 @@ class Solution { public List> combinationSum(int[] candidates, int target) { - List> ans = new ArrayList<>(); - helper(candidates, 0, ans, new ArrayList<>(), target); - return ans; + List> result = new ArrayList<>(); + helper(candidates, 0, target, new ArrayList<>(), result); + return result; } - - private void helper( - int[] candidates, int idx, List> ans, List list, int target - ) { + + private void helper(int[] candidates, int idx, int target, List currCombination, + List> result) { if (target == 0) { - ans.add(new ArrayList<>(list)); - return; - } - if (target < 0 || idx == candidates.length) { - return; - } - for (int i = idx; i < candidates.length; i++) { - list.add(candidates[i]); - helper(candidates, i, ans, list, target - candidates[i]); - list.remove(list.size() - 1); + result.add(new ArrayList<>(currCombination)); + } + if (target > 0 && idx < candidates.length) { + for (int i = idx; i < candidates.length; i++) { + currCombination.add(candidates[i]); + helper(candidates, i, target - candidates[i], currCombination, result); + currCombination.remove(currCombination.size() - 1); + } } } } From 61186878656aecc9d55558692b79b27911900eeb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 17 Feb 2022 12:03:49 -0800 Subject: [PATCH 0253/1640] Update Binary Tree Right Side View.java --- Medium/Binary Tree Right Side View.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Medium/Binary Tree Right Side View.java b/Medium/Binary Tree Right Side View.java index b75c8784..6aa6e40b 100644 --- a/Medium/Binary Tree Right Side View.java +++ b/Medium/Binary Tree Right Side View.java @@ -18,26 +18,24 @@ public List rightSideView(TreeNode root) { if (root == null) { return new ArrayList<>(); } - List list = new ArrayList<>(); + List result = new ArrayList<>(); Queue queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { int size = queue.size(); - TreeNode rightMost = null; + int rightMostValue = -1; while (size-- > 0) { TreeNode removed = queue.remove(); - if (rightMost == null) { - rightMost = removed; + rightMostValue = removed.val; + if (removed.left != null) { + queue.add(removed.left); } if (removed.right != null) { queue.add(removed.right); } - if (removed.left != null) { - queue.add(removed.left); - } } - list.add(rightMost.val); + result.add(rightMostValue); } - return list; + return result; } } From a588b83055e3fb3599921f501fee8337b2b162e7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 17 Feb 2022 12:23:29 -0800 Subject: [PATCH 0254/1640] Create Maximum Swap.java --- Medium/Maximum Swap.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Maximum Swap.java diff --git a/Medium/Maximum Swap.java b/Medium/Maximum Swap.java new file mode 100644 index 00000000..530cbdaa --- /dev/null +++ b/Medium/Maximum Swap.java @@ -0,0 +1,29 @@ +class Solution { + public int maximumSwap(int num) { + String stringValue = Integer.toString(num); + Map valToIndexMap = new TreeMap<>(); + int[] digits = new int[String.valueOf(num).length()]; + for (int i = digits.length - 1; i >= 0; i--) { + int digit = num % 10; + num /= 10; + digits[i] = digit; + valToIndexMap.putIfAbsent(digit, i); + } + for (int i = 0; i < digits.length; i++) { + for (int k = 9; k > digits[i]; k--) { + if (valToIndexMap.getOrDefault(k, -1) > i) { + int swapIndex = valToIndexMap.get(k); + return Integer.parseInt( + stringValue.substring(0, i) // Digits before swap index + + k // Swapped value + + stringValue.substring(i + 1, swapIndex) // Digits after original index(i) and before swappedIndex + + digits[i] // Digit at original index(i) + + ((swapIndex + 1) != stringValue.length() // Check if swapIndex is last digit of num + ? stringValue.substring(swapIndex + 1) // If not then add digits that come after the swapIndex + : "")); // Else add an empty string + } + } + } + return Integer.parseInt(stringValue); + } +} From 54bb131982e795802af4b364aa079d82166e5b61 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 17 Feb 2022 12:24:56 -0800 Subject: [PATCH 0255/1640] Update Maximum Swap.java --- Medium/Maximum Swap.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Medium/Maximum Swap.java b/Medium/Maximum Swap.java index 530cbdaa..5d30c780 100644 --- a/Medium/Maximum Swap.java +++ b/Medium/Maximum Swap.java @@ -1,7 +1,7 @@ class Solution { public int maximumSwap(int num) { String stringValue = Integer.toString(num); - Map valToIndexMap = new TreeMap<>(); + Map valToIndexMap = new HashMap<>(); int[] digits = new int[String.valueOf(num).length()]; for (int i = digits.length - 1; i >= 0; i--) { int digit = num % 10; From 655963b840f80d5625140697f5a9bef4f0a1f44c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 17 Feb 2022 13:23:01 -0800 Subject: [PATCH 0256/1640] Update Find Peak Element.java --- Medium/Find Peak Element.java | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/Medium/Find Peak Element.java b/Medium/Find Peak Element.java index b90994cc..5cc6feaa 100644 --- a/Medium/Find Peak Element.java +++ b/Medium/Find Peak Element.java @@ -1,25 +1,18 @@ class Solution { public int findPeakElement(int[] nums) { - int[] index = {-1}; - helper(nums, 0, nums.length - 1, index); - return index[0]; + return helper(nums, 0, nums.length - 1); } - private void helper(int[] nums, int start, int end, int[] index) { - if (start <= end && index[0] == -1) { - int mid = (start + end) / 2; - boolean found = ( - (mid + 1 < nums.length ? nums[mid] > nums[mid + 1] : true) && - (mid - 1 >= 0 ? nums[mid] > nums[mid - 1] : true) - ); - if (found) { - index[0] = mid; - return; - } - else { - helper(nums, start, mid - 1, index); - helper(nums, mid + 1, end, index); - } + private int helper(int[] nums, int startIdx, int endIdx) { + if (startIdx == endIdx) { + return startIdx; + } + int midIdx = (startIdx + endIdx) / 2; + int nextToMid = midIdx + 1; + if (nums[midIdx] > nums[nextToMid]) { + return helper(nums, startIdx, midIdx); + } else { + return helper(nums, nextToMid, endIdx); } } } From e9e4c13f79c46dcd72ddfae4e37aee72a85864ae Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 18 Feb 2022 17:31:25 -0800 Subject: [PATCH 0257/1640] Update Minimize Deviation in Array.java --- Hard/Minimize Deviation in Array.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Hard/Minimize Deviation in Array.java b/Hard/Minimize Deviation in Array.java index cc449c6c..736ccbd0 100644 --- a/Hard/Minimize Deviation in Array.java +++ b/Hard/Minimize Deviation in Array.java @@ -1,21 +1,21 @@ class Solution { public int minimumDeviation(int[] nums) { - int minimumValue = Integer.MAX_VALUE; - PriorityQueue pq = new PriorityQueue<>((a, b) -> b.compareTo(a)); + int currMinimum = Integer.MAX_VALUE; + PriorityQueue priorityQueue = new PriorityQueue<>((a, b) -> b - a); for (int num : nums) { if (num % 2 != 0) { num *= 2; } - minimumValue = Math.min(minimumValue, num); - pq.add(num); + currMinimum = Math.min(currMinimum, num); + priorityQueue.add(num); } - int result = Integer.MAX_VALUE; - while (pq.peek() % 2 == 0) { - int removed = pq.poll() / 2; - minimumValue = Math.min(minimumValue, removed); - pq.add(removed); - result = Math.min(result, pq.peek() - minimumValue); + int deviation = Integer.MAX_VALUE; + while (priorityQueue.peek() % 2 == 0) { + int removed = priorityQueue.poll() / 2; + currMinimum = Math.min(currMinimum, removed); + priorityQueue.add(removed); + deviation = Math.min(deviation, priorityQueue.peek() - currMinimum); } - return result; + return deviation; } } From a28ade00166076dd934a89117a97eadb394b0b04 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 19 Feb 2022 17:46:37 -0800 Subject: [PATCH 0258/1640] Update Remove Covered Intervals.java --- Medium/Remove Covered Intervals.java | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/Medium/Remove Covered Intervals.java b/Medium/Remove Covered Intervals.java index 3adf6ca3..03fdf662 100644 --- a/Medium/Remove Covered Intervals.java +++ b/Medium/Remove Covered Intervals.java @@ -7,18 +7,21 @@ public int removeCoveredIntervals(int[][] intervals) { } return o2[1] - o1[1]; }); - int count = 0; - int idx = 0; + int currIdx = 0; int n = intervals.length; - while (idx < n) { - int start = intervals[idx][0]; - int end = intervals[idx][1]; - idx++; - while (idx < n && intervals[idx][1] <= end) { - idx++; + int intervalCount = 0; + while (currIdx < n) { + int[] currInterval = intervals[currIdx]; + int currIntervalStart = currInterval[0]; + int currIntervalEnd = currInterval[1]; + currIdx++; + while (currIdx < n && + intervals[currIdx][0] >= currIntervalStart && + intervals[currIdx][1] <= currIntervalEnd) { + currIdx++; } - count++; + intervalCount++; } - return count; - } + return intervalCount; + } } From b1cac2376a1e6720f63d022989c7c88eee83e572 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 19 Feb 2022 18:02:05 -0800 Subject: [PATCH 0259/1640] Create Count Equal and Divisible Pairs in an Array.java --- ...Equal and Divisible Pairs in an Array.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Count Equal and Divisible Pairs in an Array.java diff --git a/Easy/Count Equal and Divisible Pairs in an Array.java b/Easy/Count Equal and Divisible Pairs in an Array.java new file mode 100644 index 00000000..309c090a --- /dev/null +++ b/Easy/Count Equal and Divisible Pairs in an Array.java @@ -0,0 +1,19 @@ +class Solution { + public int countPairs(int[] nums, int k) { + Map> map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + map.computeIfAbsent(nums[i], j -> new ArrayList<>()).add(i); + } + int numOfPairs = 0; + for (List indices : map.values()) { + for (int i = 0; i < indices.size(); i++) { + for (int j = 0; j < i; j++) { + if (indices.get(i) * indices.get(j) % k == 0) { + numOfPairs++; + } + } + } + } + return numOfPairs; + } +} From 43ee6c89e4367d571da87d022cb455491d2a4f2f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Feb 2022 06:35:16 -0800 Subject: [PATCH 0260/1640] Create Count Integers With Even Digit Sum.java --- Easy/Count Integers With Even Digit Sum.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Count Integers With Even Digit Sum.java diff --git a/Easy/Count Integers With Even Digit Sum.java b/Easy/Count Integers With Even Digit Sum.java new file mode 100644 index 00000000..172a17d3 --- /dev/null +++ b/Easy/Count Integers With Even Digit Sum.java @@ -0,0 +1,14 @@ +class Solution { + public int countEven(int num) { + return (int) IntStream.range(1, num + 1).boxed().filter(this::isSumOfDigitsEven).count(); + } + + private boolean isSumOfDigitsEven(int num) { + int sum = 0; + while (num > 0) { + sum += num % 10; + num /= 10; + } + return sum % 2 == 0; + } +} From b199b039e76a4986815fa4263d4c1cbb56d24c3d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Feb 2022 16:12:27 -0800 Subject: [PATCH 0261/1640] Create Merge Nodes in Between Zeros.java --- Medium/Merge Nodes in Between Zeros.java | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Merge Nodes in Between Zeros.java diff --git a/Medium/Merge Nodes in Between Zeros.java b/Medium/Merge Nodes in Between Zeros.java new file mode 100644 index 00000000..e4cb4403 --- /dev/null +++ b/Medium/Merge Nodes in Between Zeros.java @@ -0,0 +1,32 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode mergeNodes(ListNode head) { + ListNode newHead = null; + ListNode prev = null; + ListNode curr = head.next; + while (curr != null) { + prev = curr; + if (newHead == null) { + newHead = prev; + } + int sum = 0; + while (curr != null && curr.val != 0) { + sum += curr.val; + curr = curr.next; + } + prev.val = sum; + curr = curr.next; + prev.next = curr; + } + return newHead; + } +} From 9a5783b4d45d73ae4c6d720a319b763078a7b171 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Feb 2022 11:53:56 -0800 Subject: [PATCH 0262/1640] Create Construct String With Repeat Limit.java --- .../Construct String With Repeat Limit.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/Construct String With Repeat Limit.java diff --git a/Medium/Construct String With Repeat Limit.java b/Medium/Construct String With Repeat Limit.java new file mode 100644 index 00000000..4ac21148 --- /dev/null +++ b/Medium/Construct String With Repeat Limit.java @@ -0,0 +1,37 @@ +class Solution { + public String repeatLimitedString(String s, int repeatLimit) { + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o2 - o1); + for (char c : s.toCharArray()) { + pq.add(c); + } + StringBuilder sb = new StringBuilder(); + Stack stack = new Stack<>(); + int currentCharacterCount = 0; + char previousCharacter = pq.peek(); + while (!pq.isEmpty()) { + char currChar = pq.poll(); + if (currChar == previousCharacter) { + if (currentCharacterCount < repeatLimit) { + sb.append(currChar); + } else { + stack.add(currChar); + } + currentCharacterCount++; + } else { + if (stack.isEmpty()) { + sb.append(currChar); + previousCharacter = currChar; + currentCharacterCount = 1; + } else { + sb.append(currChar); + currentCharacterCount = 0; + while (!stack.isEmpty() && currentCharacterCount < repeatLimit) { + sb.append(stack.pop()); + currentCharacterCount++; + } + } + } + } + return sb.toString(); + } +} From 70887cf8ae47b01622152bbd3c3e0364412157cf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Feb 2022 06:34:06 -0800 Subject: [PATCH 0263/1640] Update Excel Sheet Column Number.java --- Easy/Excel Sheet Column Number.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Easy/Excel Sheet Column Number.java b/Easy/Excel Sheet Column Number.java index dc59608e..44720a07 100644 --- a/Easy/Excel Sheet Column Number.java +++ b/Easy/Excel Sheet Column Number.java @@ -1,10 +1,12 @@ class Solution { - public int titleToNumber(String s) { - int num = 0; - int pow = 0; - for (int i = s.length() - 1; i >= 0; i--) { - num += ((int) Math.pow(26, pow++)) * (s.charAt(i) - 'A' + 1); + public int titleToNumber(String columnTitle) { + int numericValue = 0; + int multiplier = 1; + for (int i = columnTitle.length() - 1; i >= 0; i--) { + int currCharNum = columnTitle.charAt(i) - 'A' + 1; + numericValue += multiplier * currCharNum; + multiplier *= 26; } - return num; + return numericValue; } } From bf8b54b566ef87fde6ba6f4a2979096847705279 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Feb 2022 11:46:10 -0800 Subject: [PATCH 0264/1640] Update Analyze User Website Visit Pattern.java --- .../Analyze User Website Visit Pattern.java | 85 +++++++------------ 1 file changed, 32 insertions(+), 53 deletions(-) diff --git a/Medium/Analyze User Website Visit Pattern.java b/Medium/Analyze User Website Visit Pattern.java index def6a086..1fbb2fc3 100644 --- a/Medium/Analyze User Website Visit Pattern.java +++ b/Medium/Analyze User Website Visit Pattern.java @@ -1,62 +1,41 @@ class Solution { public List mostVisitedPattern(String[] username, int[] timestamp, String[] website) { - Map> map = new HashMap<>(); - for (int i = 0; i < timestamp.length; i++) { - map.computeIfAbsent(username[i], k -> new ArrayList<>()).add( - new WebEntry(website[i], timestamp[i], username[i]) - ); + Map> userToVisitMapping = new HashMap<>(); + for (int i = 0; i < username.length; i++) { + userToVisitMapping.computeIfAbsent(username[i], k -> new ArrayList<>()).add(i); } - Map> visitMap = new HashMap<>(); - Set threeSequenceSet = new HashSet<>(); - for (String key : map.keySet()) { - List webentries = map.get(key); - Collections.sort(webentries, new Comparator(){ - public int compare(WebEntry w1, WebEntry w2) { - return w1.timestamp - w2.timestamp; - } - }); - for (int i = 0; i < webentries.size(); i++) { - for (int j = i + 1; j < webentries.size(); j++) { - for (int k = j + 1; k < webentries.size(); k++) { - String websiteKey = ( - webentries.get(i).website + " " + - webentries.get(j).website + " " + - webentries.get(k).website - ); - visitMap.computeIfAbsent(websiteKey, m -> new HashSet<>()).add(key); - threeSequenceSet.add(websiteKey); + Map> patternToUserMapping = new HashMap<>(); + int maxCount = 0; + String resultingPattern = null; + for (String key : userToVisitMapping.keySet()) { + List visitedWebsiteInOrder = + userToVisitMapping.get(key).stream() + .sorted(Comparator.comparingInt(a -> timestamp[a])) + .map(i -> website[i]) + .collect(Collectors.toList()); + for (int i = 0; i < visitedWebsiteInOrder.size() - 2; i++) { + for (int j = i + 1; j < visitedWebsiteInOrder.size() - 1; j++) { + for (int k = j + 1; k < visitedWebsiteInOrder.size(); k++) { + String pattern = + visitedWebsiteInOrder.get(i) + + " " + + visitedWebsiteInOrder.get(j) + + " " + + visitedWebsiteInOrder.get(k); + patternToUserMapping.computeIfAbsent(pattern, l -> new HashSet<>()).add(key); + if (maxCount <= patternToUserMapping.get(pattern).size()) { + if (maxCount < patternToUserMapping.get(pattern).size()) { + resultingPattern = pattern; + maxCount = patternToUserMapping.get(pattern).size(); + } else if (pattern.compareTo(resultingPattern) < 0) { + resultingPattern = pattern; + } + } + maxCount = Math.max(maxCount, patternToUserMapping.get(pattern).size()); } } } } - List threeSequenceList = new ArrayList<>(threeSequenceSet); - Collections.sort(threeSequenceList, new Comparator(){ - public int compare(String s1, String s2) { - int c = visitMap.get(s2).size() - visitMap.get(s1).size(); - if (c != 0) { - return c; - } - return s1.compareTo(s2); - } - }); - String[] ansArr = threeSequenceList.get(0).split("\\s+"); - List ans = new ArrayList<>(); - for (int i = 0; i < ansArr.length; i++) { - ans.add(ansArr[i]); - } - return ans; - } -} - - -class WebEntry { - String website; - int timestamp; - String username; - - public WebEntry(String website, int timestamp, String username) { - this.website = website; - this.timestamp = timestamp; - this.username = username; + return Arrays.stream(resultingPattern.split("\\s+")).collect(Collectors.toList()); } } From bd1c4aff54cb1f49ac6c20dfe0c7d5c1a19dee10 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Feb 2022 14:22:04 -0800 Subject: [PATCH 0265/1640] Update Kill Process.java --- Medium/Kill Process.java | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/Medium/Kill Process.java b/Medium/Kill Process.java index 623bf04f..e0f5cbf7 100644 --- a/Medium/Kill Process.java +++ b/Medium/Kill Process.java @@ -1,25 +1,21 @@ class Solution { public List killProcess(List pid, List ppid, int kill) { - Map> map = new HashMap<>(); + Map> map = new HashMap<>(); for (int i = 0; i < pid.size(); i++) { - if (ppid.get(i) != 0) { - map.computeIfAbsent(ppid.get(i), k -> new ArrayList<>()).add(pid.get(i)); - } + map.computeIfAbsent(ppid.get(i), k -> new HashSet<>()).add(pid.get(i)); } - Set set = new HashSet<>(); - Queue queue = new LinkedList<>(); - queue.add(kill); - set.add(kill); - while (!queue.isEmpty()) { - int removed = queue.remove(); - set.add(removed); - for (Integer child : map.getOrDefault(removed, new ArrayList<>())) { - if (!set.contains(child)) { - queue.add(child); - set.add(child); + Stack stack = new Stack<>(); + stack.push(kill); + Set tasksKilled = new HashSet<>(); + while (!stack.isEmpty()) { + int removedTask = stack.pop(); + tasksKilled.add(removedTask); + for (Integer childTask : map.getOrDefault(removedTask, new HashSet<>())) { + if (!tasksKilled.contains(childTask)) { + stack.push(childTask); } } } - return new ArrayList<>(set); + return new ArrayList<>(tasksKilled); } } From 759dc8e25b6ab4216febb8d5d3e47b3308eca6f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Feb 2022 15:11:33 -0800 Subject: [PATCH 0266/1640] Create Print FooBar Alternately.java --- Concurrency/Print FooBar Alternately.java | 32 +++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Concurrency/Print FooBar Alternately.java diff --git a/Concurrency/Print FooBar Alternately.java b/Concurrency/Print FooBar Alternately.java new file mode 100644 index 00000000..f19a774f --- /dev/null +++ b/Concurrency/Print FooBar Alternately.java @@ -0,0 +1,32 @@ +class FooBar { + private int n; + + private Semaphore fooSemaphore = new Semaphore(1); + private Semaphore barSemaphore = new Semaphore(0); + + public FooBar(int n) { + this.n = n; + } + + public void foo(Runnable printFoo) throws InterruptedException { + + for (int i = 0; i < n; i++) { + + // printFoo.run() outputs "foo". Do not change or remove this line. + fooSemaphore.acquire(); + printFoo.run(); + barSemaphore.release(); + } + } + + public void bar(Runnable printBar) throws InterruptedException { + + for (int i = 0; i < n; i++) { + + // printBar.run() outputs "bar". Do not change or remove this line. + barSemaphore.acquire(); + printBar.run(); + fooSemaphore.release(); + } + } +} From aea67f15b6b98062d1d9d17fb2085c6bb7d1b545 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 23 Feb 2022 15:58:06 -0800 Subject: [PATCH 0267/1640] Create Print Zero Even Odd.java --- Concurrency/Print Zero Even Odd.java | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Concurrency/Print Zero Even Odd.java diff --git a/Concurrency/Print Zero Even Odd.java b/Concurrency/Print Zero Even Odd.java new file mode 100644 index 00000000..35b3a599 --- /dev/null +++ b/Concurrency/Print Zero Even Odd.java @@ -0,0 +1,42 @@ +class ZeroEvenOdd { + private int n; + private int flag = 0; + + public ZeroEvenOdd(int n) { + this.n = n; + } + + // printNumber.accept(x) outputs "x", where x is an integer. + public synchronized void zero(IntConsumer printNumber) throws InterruptedException { + for (int i = 0; i < n; i++) { + while (flag != 0) { + this.wait(); + } + printNumber.accept(0); + flag = i % 2 == 0 ? 1 : 2; + this.notifyAll(); + } + } + + public synchronized void even(IntConsumer printNumber) throws InterruptedException { + for (int i = 2; i <= n; i += 2) { + while (flag != 2) { + this.wait(); + } + printNumber.accept(i); + flag = 0; + this.notifyAll(); + } + } + + public synchronized void odd(IntConsumer printNumber) throws InterruptedException { + for (int i = 1; i <= n; i += 2) { + while (flag != 1) { + this.wait(); + } + printNumber.accept(i); + flag = 0; + this.notifyAll(); + } + } +} From af2f2728d52abc159681ee7f88d4b6211d70984b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 23 Feb 2022 18:35:52 -0800 Subject: [PATCH 0268/1640] Update Sort List.java --- Medium/Sort List.java | 59 +++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/Medium/Sort List.java b/Medium/Sort List.java index 2e0492e6..013db8f6 100644 --- a/Medium/Sort List.java +++ b/Medium/Sort List.java @@ -13,38 +13,41 @@ public ListNode sortList(ListNode head) { if (head == null || head.next == null) { return head; } - ListNode mid = getMid(head); - ListNode left = sortList(head); - ListNode right = sortList(mid); - return merge(left, right); - } - - private ListNode getMid(ListNode head) { - ListNode prev = null; - while (head != null && head.next != null) { - prev = prev == null ? head : prev.next; - head = head.next.next; + ListNode firstHalfTail = head; + ListNode secondHalfHead = head; + ListNode secondHalfTail = head; + while (secondHalfTail != null && secondHalfTail.next != null) { + firstHalfTail = secondHalfHead; + secondHalfHead = secondHalfHead.next; + secondHalfTail = secondHalfTail.next.next; } - ListNode mid = prev.next; - prev.next = null; - return mid; + firstHalfTail.next = null; + ListNode leftHalf = sortList(head); + ListNode rightHalf = sortList(secondHalfHead); + return merge(leftHalf, rightHalf); } - private ListNode merge(ListNode l1, ListNode l2) { - ListNode dummyHead = new ListNode(); - ListNode tail = dummyHead; - while (l1 != null && l2 != null) { - if (l1.val < l2.val) { - tail.next = l1; - l1 = l1.next; - } - else { - tail.next = l2; - l2 = l2.next; + private ListNode merge(ListNode leftHalf, ListNode rightHalf) { + ListNode dummyNode = new ListNode(-1); + ListNode currNode = dummyNode; + while (leftHalf != null || rightHalf != null) { + if (leftHalf != null && rightHalf != null) { + if (leftHalf.val < rightHalf.val) { + currNode.next = new ListNode(leftHalf.val); + leftHalf = leftHalf.next; + } else { + currNode.next = new ListNode(rightHalf.val); + rightHalf = rightHalf.next; + } + } else if (leftHalf != null && rightHalf == null) { + currNode.next = new ListNode(leftHalf.val); + leftHalf = leftHalf.next; + } else { + currNode.next = new ListNode(rightHalf.val); + rightHalf = rightHalf.next; } - tail = tail.next; + currNode = currNode.next; } - tail.next = l1 != null ? l1 : l2; - return dummyHead.next; + return dummyNode.next; } } From d96d64013ab792911a9593792505dc491c167a36 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 24 Feb 2022 06:58:41 -0800 Subject: [PATCH 0269/1640] Update Binary Tree Longest Consecutive Sequence.java --- ...ary Tree Longest Consecutive Sequence.java | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/Medium/Binary Tree Longest Consecutive Sequence.java b/Medium/Binary Tree Longest Consecutive Sequence.java index b5f278aa..92a3e1b4 100644 --- a/Medium/Binary Tree Longest Consecutive Sequence.java +++ b/Medium/Binary Tree Longest Consecutive Sequence.java @@ -4,37 +4,44 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public int longestConsecutive(TreeNode root) { - if (root == null) { - return 0; - } - - int[] ans = {1}; - helper(root, ans, null, 1); - - return ans[0]; + public int longestConsecutive(TreeNode root) { + int maxLength = 0; + Queue queue = new LinkedList<>(); + queue.add(new NodePair(root, 1)); + while (!queue.isEmpty()) { + NodePair removed = queue.remove(); + maxLength = Math.max(maxLength, removed.currLength); + if (removed.node.left != null) { + int sequenceLength = (removed.node.left.val == removed.node.val + 1 + ? removed.currLength + 1 : 1); + queue.add(new NodePair(removed.node.left, sequenceLength)); + } + if (removed.node.right != null) { + int sequenceLength = (removed.node.right.val == removed.node.val + 1 + ? removed.currLength + 1 : 1); + queue.add(new NodePair(removed.node.right, sequenceLength)); + } } + return maxLength; + } + + private class NodePair { + TreeNode node; + int currLength; - private void helper(TreeNode root, int[] ans, TreeNode parent, int count) { - if (root == null) { - return; - } - - if (parent != null) { - if (root.val == parent.val + 1) { - count++; - ans[0] = Math.max(ans[0], count); - } - else { - count = 1; - } - } - - helper(root.left, ans, root, count); - helper(root.right, ans, root, count); + public NodePair(TreeNode node, int currLength) { + this.node = node; + this.currLength = currLength; } + } } From f8a0484622792e841d01c2b29be47e9811db3d2a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 24 Feb 2022 07:17:13 -0800 Subject: [PATCH 0270/1640] Create Tree Diameter.java --- Medium/Tree Diameter.java | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Medium/Tree Diameter.java diff --git a/Medium/Tree Diameter.java b/Medium/Tree Diameter.java new file mode 100644 index 00000000..28dca810 --- /dev/null +++ b/Medium/Tree Diameter.java @@ -0,0 +1,36 @@ +class Solution { + public int treeDiameter(int[][] edges) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); + graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + } + int farthestNode = bfsHelper(graph, 0)[0]; + return bfsHelper(graph, farthestNode)[1]; + } + + private int[] bfsHelper(Map> graph, int node) { + int farthestNode = 0; + int steps = 0; + Queue queue = new LinkedList<>(); + queue.add(node); + Set visited = new HashSet<>(); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int removedNode = queue.remove(); + visited.add(removedNode); + farthestNode = removedNode; + for (Integer peer : graph.getOrDefault(removedNode, new ArrayList<>())) { + if (!visited.contains(peer)) { + queue.add(peer); + } + } + } + if (!queue.isEmpty()) { + steps++; + } + } + return new int[]{farthestNode, steps}; + } +} From d88f76c4a11de05bd1621dbbe4c935ca9a811a2a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Feb 2022 08:00:30 -0800 Subject: [PATCH 0271/1640] Update Compare Version Numbers.java --- Medium/Compare Version Numbers.java | 52 +++++++++++++++-------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/Medium/Compare Version Numbers.java b/Medium/Compare Version Numbers.java index f41cecb0..94e1e7ed 100644 --- a/Medium/Compare Version Numbers.java +++ b/Medium/Compare Version Numbers.java @@ -1,31 +1,33 @@ class Solution { public int compareVersion(String version1, String version2) { - String[] versionSplit1 = version1.split("\\."); - String[] versionSplit2 = version2.split("\\."); - int idx1 = 0; - int idx2 = 0; - while (idx1 < versionSplit1.length || idx2 < versionSplit2.length) { - if (idx1 < versionSplit1.length && idx2 < versionSplit2.length) { - int ver1 = Integer.parseInt(versionSplit1[idx1++]); - int ver2 = Integer.parseInt(versionSplit2[idx2++]); - int c = ver1 - ver2; - if (c != 0) { - return c > 0 ? 1 : -1; - } - } - else if (idx1 < versionSplit1.length || idx2 == versionSplit2.length) { - int ver1 = Integer.parseInt(versionSplit1[idx1++]); - if (ver1 != 0) { - return 1; - } - } - else { - int ver2 = Integer.parseInt(versionSplit2[idx2++]); - if (ver2 != 0) { - return -1; - } + String[] versionOneSplit = version1.split("\\."); + String[] versionTwoSplit = version2.split("\\."); + int idxOne = 0; + int idxTwo = 0; + while (idxOne < versionOneSplit.length && idxTwo < versionTwoSplit.length) { + int diff = Integer.parseInt(versionOneSplit[idxOne]) - Integer.parseInt(versionTwoSplit[idxTwo]); + if (diff < 0) { + return -1; + } else if (diff > 0) { + return 1; } + idxOne++; + idxTwo++; + } + if (containsNonZeroRevision(versionOneSplit, idxOne)) { + return 1; + } else if (containsNonZeroRevision(versionTwoSplit, idxTwo)) { + return -1; } return 0; - } + } + + private boolean containsNonZeroRevision(String[] versions, int idx) { + for (int i = idx; i < versions.length; i++) { + if (Integer.parseInt(versions[i]) > 0) { + return true; + } + } + return false; + } } From a63aac50ad8c557c505b1aa9c2e15c8efee77a62 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Feb 2022 14:01:58 -0800 Subject: [PATCH 0272/1640] Update Flood Fill.java --- Easy/Flood Fill.java | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/Easy/Flood Fill.java b/Easy/Flood Fill.java index 38cb718e..e3806b21 100644 --- a/Easy/Flood Fill.java +++ b/Easy/Flood Fill.java @@ -1,20 +1,31 @@ class Solution { - public int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - public int[][] floodFill(int[][] image, int sr, int sc, int newColor) { - dfs(image, sr, sc, newColor, image[sr][sc]); - return image; + private static final int[][] DIRS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + + public int[][] floodFill(int[][] image, int sr, int sc, int newColor) { + int numOfRows = image.length; + int numOfCols = image[0].length; + int originalColor = image[sr][sc]; + if (newColor == originalColor) { + return image; } - - private void dfs(int[][] image, int x, int y, int newColor, int oldColor) { - if(x < 0 || x >= image.length || y < 0 || y >= image[0].length || image[x][y] == newColor) { - return; - } - - if (image[x][y] == oldColor) { - image[x][y] = newColor; - for (int[] dir : dirs) { - dfs(image, x + dir[0], y + dir[1], newColor, oldColor); - } + Queue queue = new LinkedList<>(); + queue.add(new int[]{sr, sc}); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] coordinate = queue.remove(); + int xPoint = coordinate[0]; + int yPoint = coordinate[1]; + image[xPoint][yPoint] = newColor; + for (int[] dir : DIRS) { + int newXPoint = xPoint + dir[0]; + int newYPoint = yPoint + dir[1]; + if (newXPoint >= 0 && newYPoint >= 0 && newXPoint < numOfRows && newYPoint < numOfCols && image[newXPoint][newYPoint] == originalColor) { + queue.add(new int[]{newXPoint, newYPoint}); + } } + } } + return image; + } } From e024e06c84abfa054e9f942f5572d0da5d096127 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Feb 2022 14:42:26 -0800 Subject: [PATCH 0273/1640] Update Number of Islands.java --- Medium/Number of Islands.java | 47 +++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/Medium/Number of Islands.java b/Medium/Number of Islands.java index 1d6c2a87..cebe59c1 100644 --- a/Medium/Number of Islands.java +++ b/Medium/Number of Islands.java @@ -1,35 +1,38 @@ class Solution { + + private static final int[][] DIRS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + public int numIslands(char[][] grid) { - if (grid.length == 0 || grid[0].length == 0) { - return 0; - } - int rows = grid.length; - int cols = grid[0].length; - int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - boolean[][] visited = new boolean[rows][cols]; - int count = 0; - for (int i = 0; i < rows; i++) { - for (int j = 0; j < cols; j++) { - if (grid[i][j] == '1' && !visited[i][j]) { + int countOfIslands = 0; + int numOfRows = grid.length; + int numOfCols = grid[0].length; + boolean[][] visited = new boolean[numOfRows][numOfCols]; + for (int i = 0; i < numOfRows; i++) { + for (int j = 0; j < numOfCols; j++) { + if (!visited[i][j] && grid[i][j] == '1') { Queue queue = new LinkedList<>(); queue.add(new int[]{i, j}); - visited[i][j] = true; while (!queue.isEmpty()) { - int[] removed = queue.remove(); - for (int[] dir : dirs) { - int newX = removed[0] + dir[0]; - int newY = removed[1] + dir[1]; - if (newX < 0 || newX >= rows || newY < 0 || newY >= cols || visited[newX][newY] || grid[newX][newY] == '0') { - continue; + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + int currX = removed[0]; + int currY = removed[1]; + visited[currX][currY] = true; + for (int[] dir : DIRS) { + int newX = currX + dir[0]; + int newY = currY + dir[1]; + if (newX >= 0 && newY >= 0 && newX < numOfRows && newY < numOfCols && !visited[newX][newY] && grid[newX][newY] == '1') { + queue.add(new int[]{newX, newY}); + visited[newX][newY] = true; + } } - visited[newX][newY] = true; - queue.add(new int[]{newX, newY}); } } - count++; + countOfIslands++; } } } - return count; + return countOfIslands; } } From 1d42b90e566e309037aa3653f505c8611d5cb346 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Feb 2022 13:51:24 -0800 Subject: [PATCH 0274/1640] Create Number of Closed Islands.java --- Medium/Number of Closed Islands.java | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Number of Closed Islands.java diff --git a/Medium/Number of Closed Islands.java b/Medium/Number of Closed Islands.java new file mode 100644 index 00000000..e55843c5 --- /dev/null +++ b/Medium/Number of Closed Islands.java @@ -0,0 +1,32 @@ +class Solution { + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int closedIsland(int[][] grid) { + int numberOfClosedIslands = 0; + for(int i = 0; i < grid.length; i++){ + for(int j = 0; j < grid[0].length; j++){ + if(grid[i][j] == 0){ + if(surroundsSuccessfully(grid, i, j)) { + numberOfClosedIslands++; + } + } + } + } + return numberOfClosedIslands; + } + + private boolean surroundsSuccessfully(int[][] grid, int x, int y) { + if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length) { + return false; + } + if(grid[x][y] == 1) { + return true; + } + grid[x][y] = 1; + boolean result = true; + for(int[] dir : DIRS){ + result = result & surroundsSuccessfully(grid, x + dir[0], y + dir[1]); + } + return result; + } +} From 805b8c8003b283b6f3d28e87f596c8d4e4721b6d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Feb 2022 17:17:57 -0800 Subject: [PATCH 0275/1640] Update Maximum Width of Binary Tree.java --- Medium/Maximum Width of Binary Tree.java | 49 +++++++++++++++++------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/Medium/Maximum Width of Binary Tree.java b/Medium/Maximum Width of Binary Tree.java index a236cec3..3610e37d 100644 --- a/Medium/Maximum Width of Binary Tree.java +++ b/Medium/Maximum Width of Binary Tree.java @@ -4,24 +4,45 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public int widthOfBinaryTree(TreeNode root) { - int[] ans = {0}; - Map map = new HashMap<>(); - dfs(root, 0, 0, ans, map); - return ans[0]; - } - - private void dfs(TreeNode root, int depth, int pos, int[] ans, Map map) { - if (root == null) { - return; + int maxWidth = 0; + Queue queue = new LinkedList<>(); + Map map = new HashMap<>(); + map.put(root, 1); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + int start = 0; + int end = 0; + for (int i = 0; i < size; i++) { + TreeNode node = queue.poll(); + if (i == 0) { + start = map.get(node); + } + if (i == size - 1) { + end = map.get(node); + } + if (node.left != null) { + map.put(node.left, map.get(node) * 2); + queue.add(node.left); + } + if (node.right != null) { + map.put(node.right, map.get(node) * 2 + 1); + queue.add(node.right); + } + } + maxWidth = Math.max(maxWidth, end - start + 1); } - map.putIfAbsent(depth, pos); - ans[0] = Math.max(ans[0], pos - map.get(depth) + 1); - dfs(root.left, depth + 1, 2 * pos, ans, map); - dfs(root.right, depth + 1, 2 * pos + 1, ans, map); + return maxWidth; } } From 6586b0cc7372b046a3bbca4ae6bece859b76947f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Feb 2022 07:31:42 -0800 Subject: [PATCH 0276/1640] Create Counting Words With a Given Prefix.java --- Easy/Counting Words With a Given Prefix.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Counting Words With a Given Prefix.java diff --git a/Easy/Counting Words With a Given Prefix.java b/Easy/Counting Words With a Given Prefix.java new file mode 100644 index 00000000..b3ed8f47 --- /dev/null +++ b/Easy/Counting Words With a Given Prefix.java @@ -0,0 +1,5 @@ +class Solution { + public int prefixCount(String[] words, String pref) { + return (int) Arrays.stream(words).filter(w -> w.startsWith(pref)).count(); + } +} From 3393e5c9fd8979ef48d66f3401f867236424a589 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Feb 2022 07:35:03 -0800 Subject: [PATCH 0277/1640] Create Minimum Number of Steps to Make Two Strings Anagram II.java --- ... of Steps to Make Two Strings Anagram II.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Minimum Number of Steps to Make Two Strings Anagram II.java diff --git a/Medium/Minimum Number of Steps to Make Two Strings Anagram II.java b/Medium/Minimum Number of Steps to Make Two Strings Anagram II.java new file mode 100644 index 00000000..0c72d548 --- /dev/null +++ b/Medium/Minimum Number of Steps to Make Two Strings Anagram II.java @@ -0,0 +1,16 @@ +class Solution { + public int minSteps(String s, String t) { + int[] frequency = new int[26]; + for (char c : s.toCharArray()) { + frequency[c - 'a']++; + } + for (char c : t.toCharArray()) { + frequency[c - 'a']--; + } + int totalSteps = 0; + for (int i = 0; i < 26; i++) { + totalSteps += Math.abs(frequency[i]); + } + return totalSteps; + } +} From 8dbd2a7cdc78cd50e6b59ab6a194a379ac8632a0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Feb 2022 07:51:52 -0800 Subject: [PATCH 0278/1640] Create Minimum Time to Complete Trips.java --- Medium/Minimum Time to Complete Trips.java | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Minimum Time to Complete Trips.java diff --git a/Medium/Minimum Time to Complete Trips.java b/Medium/Minimum Time to Complete Trips.java new file mode 100644 index 00000000..901a3e57 --- /dev/null +++ b/Medium/Minimum Time to Complete Trips.java @@ -0,0 +1,27 @@ +class Solution { + public long minimumTime(int[] time, int totalTrips) { + long minTime = 1; + long fastestBus = time[0]; + for (int t : time) { + fastestBus = Math.min(fastestBus, t); + } + long maxTime = fastestBus * totalTrips; + while (minTime < maxTime) { + long midTime = minTime + (maxTime - minTime) / 2; + if (getNumberOfTripsWithTime(time, midTime) >= totalTrips) { + maxTime = midTime; + } else { + minTime = midTime + 1; + } + } + return minTime; + } + + private long getNumberOfTripsWithTime(int[] time, long currentTime) { + long totalTrips = 0; + for (int t : time) { + totalTrips += currentTime / t; + } + return totalTrips; + } +} From d18e14c97800559c55b0e6c2e8a49e05f869d84c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Feb 2022 06:58:17 -0800 Subject: [PATCH 0279/1640] Create Number of Enclaves.java --- Medium/Number of Enclaves.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Medium/Number of Enclaves.java diff --git a/Medium/Number of Enclaves.java b/Medium/Number of Enclaves.java new file mode 100644 index 00000000..105942a1 --- /dev/null +++ b/Medium/Number of Enclaves.java @@ -0,0 +1,30 @@ +class Solution { + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int numEnclaves(int[][] grid) { + Queue queue = new LinkedList<>(); + int result = 0; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + result += grid[i][j]; + if (i * j == 0 || i == grid.length - 1 || j == grid[i].length - 1) { + queue.add(new int[]{i, j}); + } + } + } + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int x = removed[0]; + int y = removed[1]; + if (x < 0 || y < 0 || x == grid.length || y == grid[0].length || grid[x][y] != 1) { + continue; + } + grid[x][y] = 0; + result--; + for (int[] dir : DIRS) { + queue.add(new int[]{x + dir[0], y + dir[1]}); + } + } + return result; + } +} From 14ad3b99f4240c9569331f6da983816c0d4ab4b0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Feb 2022 11:20:50 -0800 Subject: [PATCH 0280/1640] Update Merge Sorted Array.java --- Easy/Merge Sorted Array.java | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Easy/Merge Sorted Array.java b/Easy/Merge Sorted Array.java index a1baa0d2..e99999f0 100644 --- a/Easy/Merge Sorted Array.java +++ b/Easy/Merge Sorted Array.java @@ -1,13 +1,19 @@ class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { - int idx = m + n - 1; - while (m > 0 || n > 0) { - if (m > 0 && n > 0) { - nums1[idx--] = nums1[m - 1] > nums2[n - 1] ? nums1[m-- - 1] : nums2[n-- - 1]; - } else if (m > 0 && n == 0) { - nums1[idx--] = nums1[m-- - 1]; + int endIdxOne = m - 1; + int endIdxTwo = n - 1; + int currIdx = m + n - 1; + while (endIdxOne >= 0 || endIdxTwo >= 0) { + if (endIdxOne >= 0 && endIdxTwo >= 0) { + if (nums1[endIdxOne] > nums2[endIdxTwo]) { + nums1[currIdx--] = nums1[endIdxOne--]; + } else { + nums1[currIdx--] = nums2[endIdxTwo--]; + } + } else if (endIdxOne >= 0 && endIdxTwo < 0) { + nums1[currIdx--] = nums1[endIdxOne--]; } else { - nums1[idx--] = nums2[n-- - 1]; + nums1[currIdx--] = nums2[endIdxTwo--]; } } } From 49f3bb0a0b33e7866c83c0c3a988444886889637 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 07:18:56 -0800 Subject: [PATCH 0281/1640] Update Shortest Word Distance II.java --- Medium/Shortest Word Distance II.java | 41 ++++++++++++++------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/Medium/Shortest Word Distance II.java b/Medium/Shortest Word Distance II.java index 7dbb3799..3a33f75d 100644 --- a/Medium/Shortest Word Distance II.java +++ b/Medium/Shortest Word Distance II.java @@ -1,33 +1,36 @@ class WordDistance { - Map> map; - public WordDistance(String[] words) { - map = new HashMap<>(); - for (int i = 0; i < words.length; i++) { - map.computeIfAbsent(words[i], k -> new ArrayList<>()).add(i); + + private Map> locations; + + public WordDistance(String[] wordsDict) { + this.locations = new HashMap<>(); + for (int i = 0; i < wordsDict.length; i++) { + this.locations.computeIfAbsent(wordsDict[i], k -> new ArrayList<>()).add(i); } } public int shortest(String word1, String word2) { - List idxList1 = map.get(word1); - List idxList2 = map.get(word2); - int idx1 = 0; - int idx2 = 0; - int minDiff = Math.abs(idxList1.get(idx1) - idxList2.get(idx2)); - while (idx1 < idxList1.size() && idx2 < idxList2.size()) { - minDiff = Math.min(minDiff, Math.abs(idxList1.get(idx1) - idxList2.get(idx2))); - if (idxList1.get(idx1) < idxList2.get(idx2)) { - idx1++; - } - else { - idx2++; + List indicesOne = this.locations.get(word1); + List indicesTwo = this.locations.get(word2); + int idxOne = 0; + int idxTwo = 0; + int minimumIndexDifference = Integer.MAX_VALUE; + while (idxOne < indicesOne.size() && idxTwo < indicesTwo.size()) { + minimumIndexDifference = Math.min( + minimumIndexDifference, + Math.abs(indicesOne.get(idxOne) - indicesTwo.get(idxTwo))); + if (indicesOne.get(idxOne) < indicesTwo.get(idxTwo)) { + idxOne++; + } else { + idxTwo++; } } - return minDiff; + return minimumIndexDifference; } } /** * Your WordDistance object will be instantiated and called as such: - * WordDistance obj = new WordDistance(words); + * WordDistance obj = new WordDistance(wordsDict); * int param_1 = obj.shortest(word1,word2); */ From c286b3b8b50977438925981a69df41c2734635a7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 10:31:03 -0800 Subject: [PATCH 0282/1640] Update Counting Bits.java --- Medium/Counting Bits.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Medium/Counting Bits.java b/Medium/Counting Bits.java index ee39c468..4d948810 100644 --- a/Medium/Counting Bits.java +++ b/Medium/Counting Bits.java @@ -1,13 +1,9 @@ class Solution { - public int[] countBits(int num) { - int result[] = new int[num + 1]; - int offset = 1; - for (int index = 1; index < num + 1; ++index){ - if (offset * 2 == index){ - offset *= 2; - } - result[index] = result[index - offset] + 1; - } - return result; + public int[] countBits(int n) { + int[] numofOnes = new int[n + 1]; + for (int i = 1; i <= n; i++) { + numofOnes[i] = numofOnes[i / 2] + i % 2; } + return numofOnes; + } } From 7e9ca1c927a59b724ed5eb8e703ee51795cdefc3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 10:31:35 -0800 Subject: [PATCH 0283/1640] Rename Medium/Counting Bits.java to Easy/Counting Bits.java --- {Medium => Easy}/Counting Bits.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Medium => Easy}/Counting Bits.java (100%) diff --git a/Medium/Counting Bits.java b/Easy/Counting Bits.java similarity index 100% rename from Medium/Counting Bits.java rename to Easy/Counting Bits.java From ed5210f163c2cb9c7f27cc074f7626b9db6037bf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 10:40:39 -0800 Subject: [PATCH 0284/1640] Update Clone N-ary Tree.java --- Medium/Clone N-ary Tree.java | 42 ++++++++++-------------------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/Medium/Clone N-ary Tree.java b/Medium/Clone N-ary Tree.java index 3943e23c..819cb14d 100644 --- a/Medium/Clone N-ary Tree.java +++ b/Medium/Clone N-ary Tree.java @@ -24,43 +24,23 @@ public Node(int _val,ArrayList _children) { class Solution { public Node cloneTree(Node root) { if (root == null) { - return null; + return root; } - Node copy = new Node(root.val); - for (Node child : root.children) { - copy.children.add(cloneTree(child)); - } - return copy; - } - - Map map; - public Node cloneTreeDetailed(Node root) { - if (root == null) { - return null; - } - map = new HashMap<>(); - copyTree(root); Queue queue = new LinkedList<>(); + Map map = new HashMap<>(); queue.add(root); + map.put(root, new Node(root.val)); while (!queue.isEmpty()) { - Node removed = queue.remove(); - Node copy = map.get(removed); - List children = removed.children; - for (Node child : children) { - copy.children.add(map.get(child)); - queue.add(child); + int size = queue.size(); + while (size-- > 0) { + Node removed = queue.remove(); + for (Node child : removed.children) { + queue.add(child); + map.put(child, new Node(child.val)); + map.get(removed).children.add(map.get(child)); + } } } return map.get(root); } - - private void copyTree(Node root) { - if (root == null) { - return; - } - map.put(root, new Node(root.val)); - for (Node child : root.children) { - copyTree(child); - } - } } From 2b395e27d0d45e12c47608df499b9c9585bab07f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 14:14:32 -0800 Subject: [PATCH 0285/1640] Create Product of Two Run-Length Encoded Arrays.java --- ...duct of Two Run-Length Encoded Arrays.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Medium/Product of Two Run-Length Encoded Arrays.java diff --git a/Medium/Product of Two Run-Length Encoded Arrays.java b/Medium/Product of Two Run-Length Encoded Arrays.java new file mode 100644 index 00000000..7aa0b117 --- /dev/null +++ b/Medium/Product of Two Run-Length Encoded Arrays.java @@ -0,0 +1,39 @@ +class Solution { + public List> findRLEArray(int[][] encoded1, int[][] encoded2) { + int idxOne = 0; + int idxTwo = 0; + List> result = new ArrayList<>(); + while (idxOne < encoded1.length && idxTwo < encoded2.length) { + int valueOne = encoded1[idxOne][0]; + int frequencyOne = 0; + while (idxOne < encoded1.length && encoded1[idxOne][0] == valueOne) { + frequencyOne += encoded1[idxOne++][1]; + } + idxOne--; + encoded1[idxOne][1] = frequencyOne; + int valueTwo = encoded2[idxTwo][0]; + int frequencyTwo = 0; + while (idxTwo < encoded2.length && encoded2[idxTwo][0] == valueTwo) { + frequencyTwo += encoded2[idxTwo++][1]; + } + idxTwo--; + encoded2[idxTwo][1] = frequencyTwo; + int prod = encoded1[idxOne][0] * encoded2[idxTwo][0]; + int frequency = Math.min(encoded1[idxOne][1], encoded2[idxTwo][1]); + if (result.size() > 0 && result.get(result.size() - 1).get(0) == prod) { + result.get(result.size() - 1).set(1, result.get(result.size() - 1).get(1) + frequency); + } else { + result.add(Arrays.asList(prod, frequency)); + } + encoded1[idxOne][1] -= frequency; + encoded2[idxTwo][1] -= frequency; + if (encoded1[idxOne][1] == 0) { + idxOne++; + } + if (encoded2[idxTwo][1] == 0) { + idxTwo++; + } + } + return result; + } +} From 2f5425b77899711e508d667a6d7ce3642c6d07e7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 15:15:23 -0800 Subject: [PATCH 0286/1640] Update Shortest Word Distance III.java --- Medium/Shortest Word Distance III.java | 45 ++++++-------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/Medium/Shortest Word Distance III.java b/Medium/Shortest Word Distance III.java index f2b40359..ba7216c1 100644 --- a/Medium/Shortest Word Distance III.java +++ b/Medium/Shortest Word Distance III.java @@ -1,40 +1,15 @@ class Solution { - public int shortestWordDistance(String[] words, String word1, String word2) { - int idx1 = -1; - int idx2 = -1; - boolean sameWord = word1.equals(word2); - int n = words.length; - int minDiff = Integer.MAX_VALUE; - for (int i = 0; i < words.length; i++) { - if (words[i].equals(word1)) { - if (sameWord) { - if (idx1 == -1) { - idx1 = i; - } - } - else { - idx1 = i; - } - } - if (words[i].equals(word2)) { - if (sameWord) { - if (idx1 != i) { - idx2 = i; - } - } - else { - idx2 = i; - } - } - if (idx1 != -1 && idx2 != -1) { - minDiff = Math.min(minDiff, Math.abs(idx1 - idx2)); - if (sameWord) { - idx1 = idx2; - idx2 = -1; - } + public int shortestWordDistance(String[] wordsDict, String word1, String word2) { + int minIdxDiff = wordsDict.length; + int prevIdx = -1; + for (int i = 0; i < wordsDict.length; i++) { + if (wordsDict[i].equals(word1) || wordsDict[i].equals(word2)) { + if (prevIdx != -1 && (word1.equals(word2) || !wordsDict[prevIdx].equals(wordsDict[i]))) { + minIdxDiff = Math.min(minIdxDiff, Math.abs(prevIdx - i)); + } + prevIdx = i; } } - return minDiff; + return minIdxDiff; } } - From 0894420c3dc60386d3ae3404903576e059df9f56 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 16:25:41 -0800 Subject: [PATCH 0287/1640] Update Is Subsequence.java --- Easy/Is Subsequence.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Easy/Is Subsequence.java b/Easy/Is Subsequence.java index fc28d621..90732379 100644 --- a/Easy/Is Subsequence.java +++ b/Easy/Is Subsequence.java @@ -1,15 +1,11 @@ class Solution { public boolean isSubsequence(String s, String t) { - int idxS = 0; - int idxT = 0; - int lenS = s.length(); - int lenT = t.length(); - while (idxS < lenS && idxT < lenT) { - if (s.charAt(idxS) == t.charAt(idxT)) { - idxS++; + int j = 0; + for (int i = 0; i < t.length() && j < s.length(); i++) { + if (s.charAt(j) == t.charAt(i)) { + j++; } - idxT++; } - return idxS == lenS; + return j == s.length(); } } From 121fb9f9a4594cb9418a08101c03efd8cd9ddb17 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Mar 2022 16:25:48 -0800 Subject: [PATCH 0288/1640] Delete Is Subsequence.java --- Medium/Is Subsequence.java | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 Medium/Is Subsequence.java diff --git a/Medium/Is Subsequence.java b/Medium/Is Subsequence.java deleted file mode 100644 index cde06c72..00000000 --- a/Medium/Is Subsequence.java +++ /dev/null @@ -1,21 +0,0 @@ -class Solution { - public boolean isSubsequence(String s, String t) { - char[] sChar = s.toCharArray(); - char[] tChar = t.toCharArray(); - - int i=0; - int j=0; - int low = s.length(); - int high = t.length(); - - while(i Date: Tue, 1 Mar 2022 18:56:32 -0800 Subject: [PATCH 0289/1640] Update Number of Matching Subsequences.java --- Medium/Number of Matching Subsequences.java | 38 +++++++++++++-------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/Medium/Number of Matching Subsequences.java b/Medium/Number of Matching Subsequences.java index 8de23b10..aa974e8f 100644 --- a/Medium/Number of Matching Subsequences.java +++ b/Medium/Number of Matching Subsequences.java @@ -1,23 +1,33 @@ class Solution { public int numMatchingSubseq(String s, String[] words) { - int count = 0; - for (String word : words) { - if (isSubsequence(s, word)) { - count++; + Map> map = new HashMap<>(); + for (int i = 0; i < words.length; i++) { + map.computeIfAbsent(words[i].charAt(0), k -> new ArrayList<>()).add(new Pair(0, i)); + } + int counter = 0; + for (char c : s.toCharArray()) { + List existingPairs = map.getOrDefault(c, new ArrayList<>()); + map.put(c, new ArrayList<>()); + for (Pair pair : existingPairs) { + int currIdx = pair.currIdx; + if (currIdx + 1 == words[pair.wordIdx].length()) { + counter++; + } else { + map.computeIfAbsent(words[pair.wordIdx].charAt(currIdx + 1), k -> new ArrayList<>()) + .add(new Pair(currIdx + 1, pair.wordIdx)); + } } } - return count; + return counter; } + + private static class Pair { + int currIdx; + int wordIdx; - private boolean isSubsequence(String s, String word) { - int prevIdx = 0; - for (char c : word.toCharArray()) { - int idx = s.indexOf(c, prevIdx); - if (idx == -1) { - return false; - } - prevIdx = idx + 1; + public Pair(int currIdx, int wordIdx) { + this.currIdx = currIdx; + this.wordIdx = wordIdx; } - return true; } } From 5cb844ae2f522e7cbead60fc02c1446116293607 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 2 Mar 2022 10:19:04 -0800 Subject: [PATCH 0290/1640] Update Reverse Words in a String II.java --- Medium/Reverse Words in a String II.java | 41 +++++++++++------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/Medium/Reverse Words in a String II.java b/Medium/Reverse Words in a String II.java index 1931ba7d..c3ce706c 100644 --- a/Medium/Reverse Words in a String II.java +++ b/Medium/Reverse Words in a String II.java @@ -1,27 +1,22 @@ class Solution { - public static void reverseWords(char[] str) { - reverse(str, 0, str.length); - - int start = 0; - for (int i=0; i Date: Wed, 2 Mar 2022 10:27:52 -0800 Subject: [PATCH 0291/1640] Update Binary Tree Upside Down.java --- Medium/Binary Tree Upside Down.java | 52 ++++++++++++++--------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Medium/Binary Tree Upside Down.java b/Medium/Binary Tree Upside Down.java index dde329cc..b93f1b75 100644 --- a/Medium/Binary Tree Upside Down.java +++ b/Medium/Binary Tree Upside Down.java @@ -4,35 +4,35 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public TreeNode upsideDownBinaryTree(TreeNode root) { - if (root == null || root.left == null) { - return root; - } - - TreeNode left = root.left; - TreeNode right = root.right; - - root.left = null; - root.right = null; - - return helper(left, root, right); + public TreeNode upsideDownBinaryTree(TreeNode root) { + if (root == null || root.left == null) { + return root; } - - private TreeNode helper(TreeNode rootLeft, TreeNode root, TreeNode rootRight) { - if (rootLeft == null) { - return root; - } - - TreeNode rootLeftLeft = rootLeft.left; - TreeNode rootLeftRight = rootLeft.right; - - rootLeft.left = rootRight; - rootLeft.right = root; - - return helper(rootLeftLeft, rootLeft, rootLeftRight); + TreeNode rightNode = root.right; + TreeNode leftNode = root.left; + root.left = null; + root.right = null; + return helper(root, leftNode, rightNode); + } + + private TreeNode helper(TreeNode root, TreeNode leftNode, TreeNode rightNode) { + if (leftNode == null) { + return root; } + TreeNode leftNodeLeft = leftNode.left; + TreeNode leftNodeRight = leftNode.right; + leftNode.left = rightNode; + leftNode.right = root; + return helper(leftNode, leftNodeLeft, leftNodeRight); + } } From f5d67d97ea831f677df1603b88978ed41a081202 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 2 Mar 2022 12:48:54 -0800 Subject: [PATCH 0292/1640] Update Accounts Merge.java --- Medium/Accounts Merge.java | 48 +++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/Medium/Accounts Merge.java b/Medium/Accounts Merge.java index caa718e8..97b55568 100644 --- a/Medium/Accounts Merge.java +++ b/Medium/Accounts Merge.java @@ -1,38 +1,38 @@ class Solution { public List> accountsMerge(List> accounts) { - Map emailToNameMap = new HashMap<>(); - Map> graph = new HashMap<>(); + Map> adjacencyList = new HashMap<>(); for (List account : accounts) { - String name = account.get(0); - for (int i = 1; i < account.size(); i++) { - emailToNameMap.put(account.get(i), name); - graph.computeIfAbsent(account.get(i), k -> new HashSet<>()).add(account.get(1)); - graph.computeIfAbsent(account.get(1), k -> new HashSet<>()).add(account.get(i)); + String firstEmail = account.get(1); + for (int i = 2; i < account.size(); i++) { + adjacencyList.computeIfAbsent(firstEmail, k -> new ArrayList<>()).add(account.get(i)); + adjacencyList.computeIfAbsent(account.get(i), k -> new ArrayList<>()).add(firstEmail); } } - Set seen = new HashSet<>(); - List> ans = new ArrayList<>(); - for (String email : graph.keySet()) { - if (!seen.contains(email)) { - seen.add(email); + Set visited = new HashSet<>(); + List> mergedAccounts = new ArrayList<>(); + for (List account : accounts) { + String name = account.get(0); + String firstEmail = account.get(1); + if (!visited.contains(firstEmail)) { Stack stack = new Stack<>(); - stack.push(email); - List component = new ArrayList<>(); + stack.push(firstEmail); + List mergedAccount = new ArrayList<>(); + mergedAccount.add(name); while (!stack.isEmpty()) { - String node = stack.pop(); - component.add(node); - for (String neighbour : graph.get(node)) { - if (!seen.contains(neighbour)) { - seen.add(neighbour); - stack.push(neighbour); + String removedEmail = stack.pop(); + visited.add(removedEmail); + mergedAccount.add(removedEmail); + for (String neighbor : adjacencyList.getOrDefault(removedEmail, new ArrayList<>())) { + if (!visited.contains(neighbor)) { + visited.add(neighbor); + stack.push(neighbor); } } } - Collections.sort(component); - component.add(0, emailToNameMap.get(email)); - ans.add(component); + Collections.sort(mergedAccount.subList(1, mergedAccount.size())); + mergedAccounts.add(mergedAccount); } } - return ans; + return mergedAccounts; } } From 66a9eeb5912acc1c24fc287e3021c1fb2a612cd9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 2 Mar 2022 14:20:35 -0800 Subject: [PATCH 0293/1640] Update 01 Matrix.java --- Medium/01 Matrix.java | 65 +++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/Medium/01 Matrix.java b/Medium/01 Matrix.java index 8892b6fc..1faa99d0 100644 --- a/Medium/01 Matrix.java +++ b/Medium/01 Matrix.java @@ -1,40 +1,33 @@ -public class Solution { - public int[][] updateMatrix(int[][] matrix) { - int m = matrix.length; - int n = matrix[0].length; - - Queue queue = new LinkedList<>(); - for (int i = 0; i < m; i++) { - for (int j = 0; j < n; j++) { - if (matrix[i][j] == 0) { - queue.offer(new int[] {i, j}); - } - else { - matrix[i][j] = Integer.MAX_VALUE; - } - } +class Solution { + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int[][] updateMatrix(int[][] mat) { + int numRows = mat.length; + int numCols = mat[0].length; + int[][] distances = new int[numRows][numCols]; + Queue queue = new LinkedList<>(); + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < numCols; j++) { + if (mat[i][j] == 0) { + queue.add(new int[]{i, j}); + } else { + distances[i][j] = Integer.MAX_VALUE; } - - int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; - - while (!queue.isEmpty()) { - int[] cell = queue.poll(); - for (int[] d : dirs) { - int r = cell[0] + d[0]; - int c = cell[1] + d[1]; - if (r < 0 || - r >= m || - c < 0 || - c >= n || - matrix[r][c] <= matrix[cell[0]][cell[1]] + 1) { - continue; - } - - queue.add(new int[] {r, c}); - matrix[r][c] = matrix[cell[0]][cell[1]] + 1; - } + } + } + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int currX = removed[0]; + int currY = removed[1]; + for (int[] dir : DIRS) { + int newX = currX + dir[0]; + int newY = currY + dir[1]; + if (newX >= 0 && newY >= 0 && newX < numRows && newY < numCols && distances[newX][newY] > distances[currX][currY] + 1) { + queue.add(new int[]{newX, newY}); + distances[newX][newY] = distances[currX][currY] + 1; } - - return matrix; + } } + return distances; + } } From 0d8f89f2d9ffc25ac7a6e6ab4183a0fcbe262252 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 2 Mar 2022 16:17:01 -0800 Subject: [PATCH 0294/1640] Update Arithmetic Slices.java --- Medium/Arithmetic Slices.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Medium/Arithmetic Slices.java b/Medium/Arithmetic Slices.java index 3a9b3cd2..0b620a90 100644 --- a/Medium/Arithmetic Slices.java +++ b/Medium/Arithmetic Slices.java @@ -1,15 +1,13 @@ class Solution { - public int numberOfArithmeticSlices(int[] A) { - int counter = 0; - int n = A.length; - for (int i = 0; i < n - 2; i++) { - int diff = A[i + 1] - A[i]; - int nextIdx = i + 2; - while (nextIdx < n && A[nextIdx] - A[nextIdx - 1] == diff) { - nextIdx++; + public int numberOfArithmeticSlices(int[] nums) { + int[] dp = new int[nums.length]; + int count = 0; + for (int i = 2; i < dp.length; i++) { + if (nums[i] - nums[i - 1] == nums[i - 1] - nums[i - 2]) { + dp[i] = dp[i - 1] + 1; + count += dp[i]; } - counter += nextIdx - i - 2; } - return counter; + return count; } } From d76d4f66528d39c80c6651fcd2ce2259a5472c8a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Mar 2022 06:28:26 -0800 Subject: [PATCH 0295/1640] Update Random Pick With Weight.java --- Medium/Random Pick With Weight.java | 34 +++++++++++++++++------------ 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/Medium/Random Pick With Weight.java b/Medium/Random Pick With Weight.java index 3d3546fa..e620ec63 100644 --- a/Medium/Random Pick With Weight.java +++ b/Medium/Random Pick With Weight.java @@ -1,24 +1,30 @@ class Solution { - int[] arr; - int counter = 0; - Random r = new Random(); + private int[] prefixSum; + private int totalPrefixSum; + public Solution(int[] w) { - arr = new int[w.length]; - counter += w[0]; - arr[0] = w[0]; - for (int i = 1; i < w.length; i++) { - arr[i] = arr[i - 1] + w[i]; - counter += w[i]; + this.prefixSum = new int[w.length]; + int currPrefixSum = 0; + for (int i = 0; i < w.length; i++) { + currPrefixSum += w[i]; + this.prefixSum[i] = currPrefixSum; } + this.totalPrefixSum = currPrefixSum; } public int pickIndex() { - int idx = r.nextInt(counter) + 1; - int ret = Arrays.binarySearch(arr, idx); - if(ret < 0) { - ret = -ret - 1; + double randomTarget = this.totalPrefixSum * Math.random(); + int left = 0; + int right = this.prefixSum.length; + while (left < right) { + int mid = left + (right - left) / 2; + if (randomTarget > this.prefixSum[mid]) { + left = mid + 1; + } else { + right = mid; + } } - return ret; + return left; } } From 8dd11a31dbfcffbf20029e24eb89c12834ef3d88 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Mar 2022 08:05:09 -0800 Subject: [PATCH 0296/1640] Create Pow(x, n).java --- Medium/Pow(x, n).java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Pow(x, n).java diff --git a/Medium/Pow(x, n).java b/Medium/Pow(x, n).java new file mode 100644 index 00000000..541772af --- /dev/null +++ b/Medium/Pow(x, n).java @@ -0,0 +1,11 @@ +class Solution { + public double myPow(double x, int n) { + if (n == 0) { + return 1; + } + if (n < 0) { + return 1 / x * myPow(1 / x, -1 * (n + 1)); + } + return n % 2 == 0 ? myPow(x * x, n / 2) : x * myPow(x * x, n / 2); + } +} From f0e29f2f4b94af5fdd54a0b33b9304423c0f4523 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Mar 2022 08:41:54 -0800 Subject: [PATCH 0297/1640] Update Copy List with Random Pointer.java --- Medium/Copy List with Random Pointer.java | 41 ++++++++++++++++++----- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/Medium/Copy List with Random Pointer.java b/Medium/Copy List with Random Pointer.java index 333941a2..071731bc 100644 --- a/Medium/Copy List with Random Pointer.java +++ b/Medium/Copy List with Random Pointer.java @@ -15,19 +15,44 @@ public Node(int val) { class Solution { public Node copyRandomList(Node head) { - Map map = new HashMap<>(); + if (head == null) { + return head; + } Node curr = head; + /* + List A->B->C + Expected outcome: A->A`->B->B`->C->C` + Where node marked with ` is copied node + */ while (curr != null) { - map.put(curr, new Node(curr.val)); - curr = curr.next; + Node newNode = new Node(curr.val); + newNode.next = curr.next; + curr.next = newNode; + curr = newNode.next; } curr = head; + /* + List A->A`->B->B`->C->C` + | | | (Random pointers) + C A B + Expected outcome: A->A`->B->B`->C->C` + | | | | | | + C C` A A` B B` + */ while (curr != null) { - Node temp = map.get(curr); - temp.next = curr.next == null ? null : map.get(curr.next); - temp.random = curr.random == null ? null : map.get(curr.random); - curr = curr.next; + curr.next.random = curr.random != null ? curr.random.next : null; + curr = curr.next.next; + } + Node oldCurr = head; + Node newCurr = head.next; + Node newHead = head.next; // Retain a pointer to copied list's head + // Separate merged lists into original list & copied list. + while (oldCurr != null) { + oldCurr.next = oldCurr.next.next; + newCurr.next = newCurr.next != null ? newCurr.next.next : null; + oldCurr = oldCurr.next; + newCurr = newCurr.next; } - return map.get(head); + return newHead; } } From 7de0f7cab850ae8a21f8f4efe0411ec4cb9dd531 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Mar 2022 14:57:58 -0800 Subject: [PATCH 0298/1640] Update Symmetric Tree.java --- Easy/Symmetric Tree.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Easy/Symmetric Tree.java b/Easy/Symmetric Tree.java index c50a5256..b20e39a5 100644 --- a/Easy/Symmetric Tree.java +++ b/Easy/Symmetric Tree.java @@ -4,27 +4,27 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } - */ +*/ class Solution { public boolean isSymmetric(TreeNode root) { - if (root == null) { - return true; - } return helper(root.left, root.right); } - private boolean helper(TreeNode r, TreeNode l) { - if (r == null && l == null) { + private boolean helper(TreeNode leftNode, TreeNode rightNode) { + if (leftNode == null && rightNode == null) { return true; } - if (r == null || l == null) { - return false; - } - if (r.val != l.val) { + if ((leftNode == null || rightNode == null) || leftNode.val != rightNode.val) { return false; } - return helper(l.left, r.right) && helper(l.right, r.left); + return helper(leftNode.left, rightNode.right) && helper(leftNode.right, rightNode.left); } } From 1fede887488542a204ee8282abd830b29af496f3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Mar 2022 16:49:22 -0800 Subject: [PATCH 0299/1640] Update Valid Palindrome.java --- Easy/Valid Palindrome.java | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Easy/Valid Palindrome.java b/Easy/Valid Palindrome.java index 255d45ee..11b2358a 100644 --- a/Easy/Valid Palindrome.java +++ b/Easy/Valid Palindrome.java @@ -1,25 +1,23 @@ class Solution { public boolean isPalindrome(String s) { - int start = 0; - int end = s.length() - 1; - while (start < end) { - if (Character.isLetterOrDigit(s.charAt(start)) && Character.isLetterOrDigit(s.charAt(end))) { - char c1 = Character.isLetter(s.charAt(start)) ? Character.toLowerCase(s.charAt(start)) : s.charAt(start); - char c2 = Character.isLetter(s.charAt(end)) ? Character.toLowerCase(s.charAt(end)) : s.charAt(end); - if (c1 != c2) { - return false; - } - start++; - end--; + int startIdx = 0; + int endIdx = s.length() - 1; + while (startIdx < endIdx) { + if (!Character.isLetterOrDigit(s.charAt(startIdx))) { + startIdx++; + continue; } - else { - if (!Character.isLetterOrDigit(s.charAt(start))) { - start++; - } - if (!Character.isLetterOrDigit(s.charAt(end))) { - end--; - } + if (!Character.isLetterOrDigit(s.charAt(endIdx))) { + endIdx--; + continue; } + char startChar = Character.isDigit(s.charAt(startIdx)) ? s.charAt(startIdx) : Character.toLowerCase(s.charAt(startIdx)); + char endChar = Character.isDigit(s.charAt(endIdx)) ? s.charAt(endIdx) : Character.toLowerCase(s.charAt(endIdx)); + if (startChar != endChar) { + return false; + } + startIdx++; + endIdx--; } return true; } From d78c7f03633ec3e338d12a8876a6ae38b1c07564 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Mar 2022 20:18:48 -0800 Subject: [PATCH 0300/1640] Update Add Strings.java --- Easy/Add Strings.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Easy/Add Strings.java b/Easy/Add Strings.java index 6a68a142..16cf5461 100644 --- a/Easy/Add Strings.java +++ b/Easy/Add Strings.java @@ -1,21 +1,19 @@ class Solution { public String addStrings(String num1, String num2) { + int carry = 0; StringBuilder sb = new StringBuilder(); int idxOne = num1.length() - 1; int idxTwo = num2.length() - 1; - int carry = 0; while (idxOne >= 0 || idxTwo >= 0 || carry > 0) { - int temp = carry; if (idxOne >= 0 && idxTwo >= 0) { - temp += Character.getNumericValue(num1.charAt(idxOne--)) + Character.getNumericValue(num2.charAt(idxTwo--)); + carry += Character.getNumericValue(num1.charAt(idxOne--)) + Character.getNumericValue(num2.charAt(idxTwo--)); } else if (idxOne >= 0 && idxTwo < 0) { - temp += Character.getNumericValue(num1.charAt(idxOne--)); + carry += Character.getNumericValue(num1.charAt(idxOne--)); } else if (idxOne < 0 && idxTwo >= 0) { - temp += Character.getNumericValue(num2.charAt(idxTwo--)); + carry += Character.getNumericValue(num2.charAt(idxTwo--)); } - carry = temp > 9 ? 1 : 0; - temp = temp > 9 ? temp % 10 : temp; - sb.append(temp); + sb.append(carry % 10); + carry = carry > 9 ? carry / 10 : 0; } return sb.reverse().toString(); } From 662129817709ef8254ea6298577296f78553b9f5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 4 Mar 2022 12:33:08 -0800 Subject: [PATCH 0301/1640] Update Basic Calculator II.java --- Medium/Basic Calculator II.java | 42 ++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/Medium/Basic Calculator II.java b/Medium/Basic Calculator II.java index 470ec88c..402e394c 100644 --- a/Medium/Basic Calculator II.java +++ b/Medium/Basic Calculator II.java @@ -1,25 +1,16 @@ class Solution { public int calculate(String s) { - int num = 0; char sign = '+'; + int currNum = 0; Stack stack = new Stack<>(); for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (Character.isDigit(c)) { - num = num * 10 + Character.getNumericValue(c); + if (Character.isDigit(s.charAt(i))) { + currNum = currNum * 10 + Character.getNumericValue(s.charAt(i)); } - if (!Character.isDigit(c) && c != ' ' || i == s.length() - 1) { - if (sign == '+') { - stack.push(num); - } else if (sign == '-') { - stack.push(-num); - } else if (sign == '*') { - stack.push(stack.pop() * num); - } else { - stack.push(stack.pop() / num); - } - sign = c; - num = 0; + if ((!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ') || i == s.length() - 1) { + updateStackForPreviousSign(sign, stack, currNum); + currNum = 0; + sign = s.charAt(i); } } int result = 0; @@ -28,4 +19,23 @@ public int calculate(String s) { } return result; } + + private void updateStackForPreviousSign(char sign, Stack stack, int currNum) { + switch (sign) { + case '+': + stack.push(currNum); + break; + case '-': + stack.push(-1 * currNum); + break; + case '/': + stack.push(stack.pop() / currNum); + break; + case '*': + stack.push(stack.pop() * currNum); + break; + default: + break; + } + } } From 243e1cf42136b11db99a0e8f9bc6b87a857196be Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Mar 2022 07:41:30 -0800 Subject: [PATCH 0302/1640] Update Remove All Adjacent Duplicates In String.java --- ...ove All Adjacent Duplicates In String.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/Easy/Remove All Adjacent Duplicates In String.java b/Easy/Remove All Adjacent Duplicates In String.java index e0c7c46d..0eb0caa8 100644 --- a/Easy/Remove All Adjacent Duplicates In String.java +++ b/Easy/Remove All Adjacent Duplicates In String.java @@ -1,22 +1,20 @@ class Solution { - public String removeDuplicates(String S) { - Stack stack = new Stack<>(); - char[] chars = S.toCharArray(); - for (int i = 0; i < S.length(); i++) { - if (stack.isEmpty() || chars[stack.peek()] != chars[i]) { - stack.push(i); - } - else { - chars[i] = '-'; - chars[stack.pop()] = '-'; + public String removeDuplicates(String s) { + Stack stack = new Stack<>(); + int idx = 0; + while (idx < s.length()) { + char c = s.charAt(idx); + if (!stack.isEmpty() && stack.peek() == c) { + stack.pop(); + } else { + stack.push(c); } + idx++; } StringBuilder sb = new StringBuilder(); - for (char c : chars) { - if (c != '-') { - sb.append(c); - } + while (!stack.isEmpty()) { + sb.append(stack.pop()); } - return sb.toString(); + return sb.reverse().toString(); } } From 9821588700db6cc0adbfb5b81a9b220dfb351525 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Mar 2022 10:01:31 -0800 Subject: [PATCH 0303/1640] Create Most Frequent Number Following Key In an Array.java --- ...equent Number Following Key In an Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Most Frequent Number Following Key In an Array.java diff --git a/Easy/Most Frequent Number Following Key In an Array.java b/Easy/Most Frequent Number Following Key In an Array.java new file mode 100644 index 00000000..4f9b8523 --- /dev/null +++ b/Easy/Most Frequent Number Following Key In an Array.java @@ -0,0 +1,17 @@ +class Solution { + public int mostFrequent(int[] nums, int key) { + Map map = new HashMap<>(); + int maxCount = 0; + int maxCountCandidate = -1; + for (int i = 1; i < nums.length; i++) { + if (nums[i - 1] == key) { + map.put(nums[i], map.getOrDefault(nums[i], 0) + 1); + if (map.get(nums[i]) > maxCount) { + maxCount = map.get(nums[i]); + maxCountCandidate = nums[i]; + } + } + } + return maxCountCandidate; + } +} From 1e7c76809afa37f92fac5736ca632f2ca772b49a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Mar 2022 14:32:09 -0800 Subject: [PATCH 0304/1640] Create Cells in a Range on an Excel Sheet.java --- Easy/Cells in a Range on an Excel Sheet.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Cells in a Range on an Excel Sheet.java diff --git a/Easy/Cells in a Range on an Excel Sheet.java b/Easy/Cells in a Range on an Excel Sheet.java new file mode 100644 index 00000000..8307c2b5 --- /dev/null +++ b/Easy/Cells in a Range on an Excel Sheet.java @@ -0,0 +1,16 @@ +class Solution { + public List cellsInRange(String s) { + List cells = new ArrayList<>(); + String[] splits = s.split(":"); + char startCol = splits[0].charAt(0); + int startRow = Character.getNumericValue(splits[0].charAt(1)); + char endCol = splits[1].charAt(0); + int endRow = Character.getNumericValue(splits[1].charAt(1)); + for (char c = startCol; c <= endCol; c = (char) (c + 1)) { + for (int j = startRow; j <= endRow; j++) { + cells.add(c + "" + j); + } + } + return cells; + } +} From 6b3196f272a511b8218bbd072d60204907f00d1c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Mar 2022 15:15:15 -0800 Subject: [PATCH 0305/1640] Create Sort the Jumbled Numbers.java --- Medium/Sort the Jumbled Numbers.java | 31 ++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/Sort the Jumbled Numbers.java diff --git a/Medium/Sort the Jumbled Numbers.java b/Medium/Sort the Jumbled Numbers.java new file mode 100644 index 00000000..83d05724 --- /dev/null +++ b/Medium/Sort the Jumbled Numbers.java @@ -0,0 +1,31 @@ +class Solution { + public int[] sortJumbled(int[] mapping, int[] nums) { + PriorityQueue priorityQueue = new PriorityQueue<>((o1, o2) -> { + if (o1[0] != o2[0]) { + return o1[0] - o2[0]; + } + return o1[1] - o2[1]; + }); + for (int i = 0; i < nums.length; i++) { + priorityQueue.add(new int[]{getUpdatedNumAfterMapping(nums[i], mapping), i, nums[i]}); + } + for (int i = 0; i < nums.length; i++) { + nums[i] = priorityQueue.poll()[2]; + } + return nums; + } + + private int getUpdatedNumAfterMapping(Integer original, int[] mapping) { + if (original <= 9) { + return mapping[original]; + } + int updatedNum = 0; + int factor = 1; + while (original > 0){ + updatedNum += mapping[original % 10] * factor; + factor *= 10; + original /= 10; + } + return updatedNum; + } +} From ff067748a089e7793f060f134938d6b0b0db218c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Mar 2022 17:11:01 -0800 Subject: [PATCH 0306/1640] Update Merge Two Sorted Lists.java --- Easy/Merge Two Sorted Lists.java | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/Easy/Merge Two Sorted Lists.java b/Easy/Merge Two Sorted Lists.java index f4b4c5b5..7ce21fbd 100644 --- a/Easy/Merge Two Sorted Lists.java +++ b/Easy/Merge Two Sorted Lists.java @@ -9,22 +9,26 @@ * } */ class Solution { - public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode dummy = new ListNode(-1); ListNode curr = dummy; - while (l1 != null || l2 != null) { - int val = Math.min( - (l1 == null ? Integer.MAX_VALUE : l1.val), - (l2 == null ? Integer.MAX_VALUE : l2.val) - ); - curr.next = new ListNode(val); - curr = curr.next; - if (l1 != null && l1.val == val) { - l1 = l1.next; - } - else { - l2 = l2.next; + while (list1 != null || list2 != null) { + if (list1 != null && list2 != null) { + if (list1.val > list2.val) { + curr.next = new ListNode(list2.val); + list2 = list2.next; + } else { + curr.next = new ListNode(list1.val); + list1 = list1.next; + } + } else if (list1 != null && list2 == null) { + curr.next = new ListNode(list1.val); + list1 = list1.next; + } else { + curr.next = new ListNode(list2.val); + list2 = list2.next; } + curr = curr.next; } return dummy.next; } From 075068c9d5c3f321a5464361a4506b33b14168c3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Mar 2022 06:50:16 -0800 Subject: [PATCH 0307/1640] Create Append K Integers With Minimal Sum.java --- .../Append K Integers With Minimal Sum.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Append K Integers With Minimal Sum.java diff --git a/Medium/Append K Integers With Minimal Sum.java b/Medium/Append K Integers With Minimal Sum.java new file mode 100644 index 00000000..bea57e93 --- /dev/null +++ b/Medium/Append K Integers With Minimal Sum.java @@ -0,0 +1,20 @@ +class Solution { + public long minimalKSum(int[] nums, int k) { + Arrays.sort(nums); + long sum = 0; + long low = 1; + for (int num : nums) { + if (num > low) { + long high = Math.min(num - 1, low + k - 1); + int count = (int) (high - low + 1); + sum += (low + high) * count / 2; + k -= count; + if (k == 0) { + return sum; + } + } + low = num + 1; + } + return sum + (2 * low + k - 1) * k / 2; + } +} From 3a720a13a00a1886bc50c892fc4b5445411c336d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Mar 2022 07:16:00 -0800 Subject: [PATCH 0308/1640] Create All Ancestors of a Node in a Directed Acyclic Graph.java --- ...of a Node in a Directed Acyclic Graph.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/All Ancestors of a Node in a Directed Acyclic Graph.java diff --git a/Medium/All Ancestors of a Node in a Directed Acyclic Graph.java b/Medium/All Ancestors of a Node in a Directed Acyclic Graph.java new file mode 100644 index 00000000..60ab5900 --- /dev/null +++ b/Medium/All Ancestors of a Node in a Directed Acyclic Graph.java @@ -0,0 +1,26 @@ +class Solution { + public List> getAncestors(int n, int[][] edges) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + } + List> result = new ArrayList<>(); + for (int i = 0; i < n; i++) { + List ancestors = new ArrayList<>(); + Set visited = new HashSet<>(); + Queue queue = new LinkedList<>(graph.getOrDefault(i, new ArrayList<>())); + while (!queue.isEmpty()) { + int removed = queue.remove(); + if (visited.contains(removed)) { + continue; + } + ancestors.add(removed); + visited.add(removed); + queue.addAll(graph.getOrDefault(removed, new ArrayList<>())); + } + Collections.sort(ancestors); + result.add(ancestors); + } + return result; + } +} From df7171877b69cf6b733444c23a60d08a85653eaf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Mar 2022 09:10:44 -0800 Subject: [PATCH 0309/1640] Create Create Binary Tree From Descriptions.java --- .../Create Binary Tree From Descriptions.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/Create Binary Tree From Descriptions.java diff --git a/Medium/Create Binary Tree From Descriptions.java b/Medium/Create Binary Tree From Descriptions.java new file mode 100644 index 00000000..bb04e8d2 --- /dev/null +++ b/Medium/Create Binary Tree From Descriptions.java @@ -0,0 +1,37 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public TreeNode createBinaryTree(int[][] descriptions) { + Map nodeMapping = new HashMap<>(); + Set childNodes = new HashSet<>(); + for (int[] description : descriptions) { + nodeMapping.putIfAbsent(description[0], new TreeNode(description[0])); + nodeMapping.putIfAbsent(description[1], new TreeNode(description[1])); + if (description[2] == 1) { + nodeMapping.get(description[0]).left = nodeMapping.get(description[1]); + } else { + nodeMapping.get(description[0]).right = nodeMapping.get(description[1]); + } + childNodes.add(description[1]); + } + for (Integer key : nodeMapping.keySet()) { + if (!childNodes.contains(key)) { + return nodeMapping.get(key); + } + } + return null; + } +} From d04bd6e12bdfd0cd70ad559d49d20337527cbc2b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Mar 2022 13:29:48 -0800 Subject: [PATCH 0310/1640] Update Diagonal Traverse.java --- Medium/Diagonal Traverse.java | 74 +++++++++++++---------------------- 1 file changed, 28 insertions(+), 46 deletions(-) diff --git a/Medium/Diagonal Traverse.java b/Medium/Diagonal Traverse.java index 0fc4371b..65c991a5 100644 --- a/Medium/Diagonal Traverse.java +++ b/Medium/Diagonal Traverse.java @@ -1,51 +1,33 @@ class Solution { - public int[] findDiagonalOrder(int[][] matrix) { - if (matrix.length == 0 || matrix[0].length == 0) { - return new int[]{}; + public int[] findDiagonalOrder(int[][] matrix) { + int dir = 0; + int x = 0; + int y = 0; + int numOfRows = matrix.length; + int numOfCols = matrix[0].length; + int[] ans = new int[numOfRows * numOfCols]; + for (int i = 0; i < numOfRows * numOfCols; i++) { + ans[i] = matrix[x][y]; + if ((x + y) % 2 == 0) { + if (y == numOfCols - 1) { + x++; + } else if (x == 0) { + y++; + } else { + x--; + y++; } - - int dir = 0; - int x = 0; - int y = 0; - int numOfRows = matrix.length; - int numOfCols = matrix[0].length; - int[] ans = new int[matrix.length * matrix[0].length]; - - for (int i = 0; i < numOfRows * numOfCols; i++) { - ans[i] = matrix[x][y]; - - if ((x + y) % 2 == 0) { - // If last column then go to next row - if (y == numOfCols - 1) { - x++; - } - // If first row but not last column then go to next column - else if (x == 0) { - y++; - } - // Go up - else { - x--; - y++; - } - } - else { - // If last row then go to next column - if (x == numOfRows - 1) { - y++; - } - // If first column but not last row then go to next row - else if (y == 0) { - x++; - } - // Go down - else { - x++; - y--; - } - } + } else { + if (x == numOfRows - 1) { + y++; + } else if (y == 0) { + x++; + } else { + x++; + y--; } - - return ans; + } } + return ans; + } } From 2ea85e40980da972efeade74cc359286e269a68c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Mar 2022 10:42:37 -0800 Subject: [PATCH 0311/1640] Update and rename Medium/Teemo Attacking.java to Easy/Teemo Attacking.java --- Easy/Teemo Attacking.java | 11 +++++++++++ Medium/Teemo Attacking.java | 22 ---------------------- 2 files changed, 11 insertions(+), 22 deletions(-) create mode 100644 Easy/Teemo Attacking.java delete mode 100644 Medium/Teemo Attacking.java diff --git a/Easy/Teemo Attacking.java b/Easy/Teemo Attacking.java new file mode 100644 index 00000000..45e33622 --- /dev/null +++ b/Easy/Teemo Attacking.java @@ -0,0 +1,11 @@ +class Solution { + public int findPoisonedDuration(int[] timeSeries, int duration) { + int totalDuration = 0; + int prevTime = timeSeries[0]; + for (int i = 1; i < timeSeries.length; i++) { + totalDuration += Math.min(duration, timeSeries[i] - prevTime); + prevTime = timeSeries[i]; + } + return totalDuration + duration; + } +} diff --git a/Medium/Teemo Attacking.java b/Medium/Teemo Attacking.java deleted file mode 100644 index f91db3db..00000000 --- a/Medium/Teemo Attacking.java +++ /dev/null @@ -1,22 +0,0 @@ -class Solution { - public int findPoisonedDuration(int[] timeSeries, int duration) { - if (timeSeries.length == 0 || duration <= 0) { - return 0; - } - int totalTimePoisened = 0; - int currPoisenedTime = 0; - int n = timeSeries.length; - for (int i = 0; i < n; i++) { - if (currPoisenedTime > 0) { - if (currPoisenedTime <= timeSeries[i]) { - totalTimePoisened += duration; - } - else { - totalTimePoisened += timeSeries[i] - timeSeries[i - 1]; - } - } - currPoisenedTime = timeSeries[i] + duration; - } - return totalTimePoisened + (currPoisenedTime - timeSeries[n - 1]); - } -} From 768d27350b8dc43e7b949006433929a1aaf9b2f5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Mar 2022 10:56:11 -0800 Subject: [PATCH 0312/1640] Update Toeplitz Matrix.java --- Easy/Toeplitz Matrix.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Easy/Toeplitz Matrix.java b/Easy/Toeplitz Matrix.java index c5422a95..bccbd515 100644 --- a/Easy/Toeplitz Matrix.java +++ b/Easy/Toeplitz Matrix.java @@ -1,11 +1,12 @@ class Solution { - public boolean isToeplitzMatrix(int[][] matrix) { - for (int i=0;i Date: Tue, 8 Mar 2022 13:06:10 -0800 Subject: [PATCH 0313/1640] Update Capacity To Ship Packages Within D Days.java --- ...pacity To Ship Packages Within D Days.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/Medium/Capacity To Ship Packages Within D Days.java b/Medium/Capacity To Ship Packages Within D Days.java index 8b3b587f..8d7ff38e 100644 --- a/Medium/Capacity To Ship Packages Within D Days.java +++ b/Medium/Capacity To Ship Packages Within D Days.java @@ -1,29 +1,31 @@ class Solution { - public int shipWithinDays(int[] weights, int D) { - int maxWeight = weights[0]; - int totalWeight = 0; + public int shipWithinDays(int[] weights, int days) { + int maximumWeight = 0; + int minimumWeight = weights[0]; for (int weight : weights) { - maxWeight = Math.max(maxWeight, weight); - totalWeight += weight; + maximumWeight += weight; + minimumWeight = Math.max(minimumWeight, weight); } - while (maxWeight < totalWeight) { - int midWeight = (maxWeight + totalWeight) / 2; - int need = 1; - int curr = 0; - for (int weight : weights) { - if (curr + weight > midWeight) { - need += 1; - curr = 0; - } - curr += weight; + while (minimumWeight <= maximumWeight) { + int currCapacity = (maximumWeight + minimumWeight) / 2; + if (isShipmentPossible(weights, days, currCapacity)) { + maximumWeight = currCapacity - 1; + } else { + minimumWeight = currCapacity + 1; } - if (need > D) { - maxWeight = midWeight + 1; - } - else { - totalWeight = midWeight; + } + return minimumWeight; + } + + private boolean isShipmentPossible(int[] weights, int days, int capacity) { + int idx = 0; + while (idx < weights.length) { + int currWeight = 0; + while (idx < weights.length && currWeight + weights[idx] <= capacity) { + currWeight += weights[idx++]; } + days--; } - return maxWeight; + return days >= 0; } } From ac4498248a48f68ac26e378dd4a474d5cf1a07b7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Mar 2022 13:49:01 -0800 Subject: [PATCH 0314/1640] Update Sum Root to Leaf Numbers.java --- Medium/Sum Root to Leaf Numbers.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Medium/Sum Root to Leaf Numbers.java b/Medium/Sum Root to Leaf Numbers.java index c24f21aa..63179830 100644 --- a/Medium/Sum Root to Leaf Numbers.java +++ b/Medium/Sum Root to Leaf Numbers.java @@ -16,21 +16,20 @@ class Solution { public int sumNumbers(TreeNode root) { int[] sum = {0}; - helper(root, sum, 0); + helper(root, 0, sum); return sum[0]; } - private void helper(TreeNode node, int[] sum, int currVal) { - if (node == null) { + private void helper(TreeNode root, int currValue, int[] sum) { + if (root == null) { return; } - currVal = currVal * 10 + node.val; - if (node.left == null && node.right == null) { - sum[0] += currVal; - } - else { - helper(node.left, sum, currVal); - helper(node.right, sum, currVal); + currValue = currValue * 10 + root.val; + if (root.left == null && root.right == null) { + sum[0] += currValue; + return; } + helper(root.left, currValue, sum); + helper(root.right, currValue, sum); } } From 1d654e3ec591078f327c2cbafea395dd8472c55e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Mar 2022 14:37:36 -0800 Subject: [PATCH 0315/1640] Update Verifying an Alien Dictionary.java --- Easy/Verifying an Alien Dictionary.java | 29 +++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Easy/Verifying an Alien Dictionary.java b/Easy/Verifying an Alien Dictionary.java index ceccf55b..9c71c049 100644 --- a/Easy/Verifying an Alien Dictionary.java +++ b/Easy/Verifying an Alien Dictionary.java @@ -1,30 +1,31 @@ class Solution { public boolean isAlienSorted(String[] words, String order) { - Map map = new HashMap<>(); + Map dictionary = new HashMap<>(); for (int i = 0; i < order.length(); i++) { - map.put(order.charAt(i), i); + dictionary.put(order.charAt(i), i); } for (int i = 0; i < words.length - 1; i++) { - if (!verifyHelper(words[i], words[i + 1], map)) { + if (!hasCorrectOrder(words[i], words[i + 1], dictionary)) { return false; } } return true; } - private boolean verifyHelper(String s1, String s2, Map map) { - int idx1 = 0; - int idx2 = 0; - while (idx1 < s1.length() && idx2 < s2.length()) { - if (map.get(s1.charAt(idx1)) < map.get(s2.charAt(idx2))) { - return true; - } - if (map.get(s1.charAt(idx1)) > map.get(s2.charAt(idx2))) { + private boolean hasCorrectOrder(String firstWord, String secondWord, Map dictionary) { + int idxOne = 0; + int idxTwo = 0; + boolean correctOrder = false; + while (idxOne < firstWord.length() && idxTwo < secondWord.length()) { + int dictionaryDiff = dictionary.get(firstWord.charAt(idxOne++)) - dictionary.get(secondWord.charAt(idxTwo++)); + if (dictionaryDiff > 0) { return false; + } + if (dictionaryDiff < 0) { + correctOrder = true; + break; } - idx1++; - idx2++; } - return s1.length() <= s2.length(); + return correctOrder || firstWord.length() <= secondWord.length(); } } From 7b8f8695e76a5e2e19406fadee3aebf505d4137f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Mar 2022 16:15:29 -0800 Subject: [PATCH 0316/1640] Update Remove Duplicates from Sorted List II.java --- Medium/Remove Duplicates from Sorted List II.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Medium/Remove Duplicates from Sorted List II.java b/Medium/Remove Duplicates from Sorted List II.java index 62a3b0e3..edb287cc 100644 --- a/Medium/Remove Duplicates from Sorted List II.java +++ b/Medium/Remove Duplicates from Sorted List II.java @@ -3,27 +3,27 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode deleteDuplicates(ListNode head) { - ListNode curr = head; ListNode prev = null; + ListNode curr = head; while (curr != null) { - if (curr.next != null && curr.val == curr.next.val) { + if (curr.next != null && curr.next.val == curr.val) { int currVal = curr.val; while (curr != null && curr.val == currVal) { curr = curr.next; } if (prev == null) { head = curr; - } - else { + } else { prev.next = curr; } - } - else { + } else { prev = curr; curr = curr.next; } From 5ee382ec06979802af8de96737f05abab97d04ca Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Mar 2022 08:11:44 -0800 Subject: [PATCH 0317/1640] Update LRU Cache.java --- Hard/LRU Cache.java | 96 ++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 53 deletions(-) diff --git a/Hard/LRU Cache.java b/Hard/LRU Cache.java index 2f2c70c0..e141637f 100644 --- a/Hard/LRU Cache.java +++ b/Hard/LRU Cache.java @@ -1,79 +1,69 @@ class LRUCache { - Node head; - Node tail; - Map map; - int capacity; + + private final Map map; + private final Node head; + private final Node tail; + private int capacity; + public LRUCache(int capacity) { - head = new Node(-1, -1); - tail = new Node(-1, -1); + this.map = new HashMap<>(); + this.head = new Node(-1, -1); + this.tail = new Node(-1, -1); head.next = tail; tail.prev = head; - map = new HashMap<>(); this.capacity = capacity; } public int get(int key) { - if (!map.containsKey(key)) { + if (!this.map.containsKey(key)) { return -1; } - int val = map.get(key).val; - moveToFront(map.get(key)); - return val; + Node node = this.map.get(key); + removeNode(node); + addNode(node); + return this.map.get(key).val; } public void put(int key, int value) { if (!map.containsKey(key)) { - if (map.size() == capacity) { - evictKey(tail.prev); + if (capacity == 0) { + removeNode(tail.prev); } - Node node = new Node(key, value); - map.put(key, node); - node.next = head.next; - head.next.prev = node; - head.next = node; - node.prev = head; - } - else { - map.get(key).val = value; - moveToFront(map.get(key)); + } else { + removeNode(this.map.get(key)); } + addNode(new Node(key, value)); } - private void moveToFront(Node node) { - Node prev = node.prev; - node.next.prev = prev; - prev.next = node.next; - node.next = head.next; - head.next.prev = node; - node.prev = head; + private void addNode(Node node) { + Node nextToHead = head.next; head.next = node; + node.next = nextToHead; + nextToHead.prev = node; + node.prev = head; + this.map.put(node.key, node); + this.capacity--; } - private void evictKey(Node node) { - Node prev = node.prev; - node.next.prev = prev; - prev.next = node.next; - map.remove(node.key); + private void removeNode(Node node) { + Node nextNode = node.next; + node.prev.next = nextNode; + nextNode.prev = node.prev; + this.map.remove(node.key); + this.capacity++; } -} -/** - * Your LRUCache object will be instantiated and called as such: - * LRUCache obj = new LRUCache(capacity); - * int param_1 = obj.get(key); - * obj.put(key,value); - */ + private static class Node { + Node next; + Node prev; + int key; + int val; -class Node { - int key; - int val; - Node next; - Node prev; - - public Node(int key, int val) { - this.key = key; - this.val = val; - next = null; - prev = null; + public Node(int key, int val) { + this.key = key; + this.val = val; + this.next = null; + this.prev = null; + } } } From 8dc4d7ea946d236d3a6bd3edb30caef5253b400e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Mar 2022 08:15:53 -0800 Subject: [PATCH 0318/1640] Rename Hard/LRU Cache.java to Medium/LRU Cache.java --- {Hard => Medium}/LRU Cache.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Hard => Medium}/LRU Cache.java (100%) diff --git a/Hard/LRU Cache.java b/Medium/LRU Cache.java similarity index 100% rename from Hard/LRU Cache.java rename to Medium/LRU Cache.java From 99e3a52433dec058e8c88f4711e353550c2dc56b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Mar 2022 14:55:30 -0800 Subject: [PATCH 0319/1640] Update Palindromic Substrings.java --- Medium/Palindromic Substrings.java | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Medium/Palindromic Substrings.java b/Medium/Palindromic Substrings.java index 6532847b..01950841 100644 --- a/Medium/Palindromic Substrings.java +++ b/Medium/Palindromic Substrings.java @@ -1,16 +1,18 @@ class Solution { public int countSubstrings(String s) { - int N = s.length(); - int ans = 0; - for (int center = 0; center <= 2 * N - 1; ++center) { - int left = center / 2; - int right = left + center % 2; - while (left >= 0 && right < N && s.charAt(left) == s.charAt(right)) { - ans++; - left--; - right++; - } + int[] palindromeCount = {0}; + for (int i = 0; i < s.length(); i++) { + checkPalindrome(s, i, i, palindromeCount); + checkPalindrome(s, i, i + 1, palindromeCount); + } + return palindromeCount[0]; + } + + private void checkPalindrome(String s, int leftIdx, int rightIdx, int[] palindromeCount) { + while (leftIdx >= 0 && rightIdx < s.length() && s.charAt(leftIdx) == s.charAt(rightIdx)) { + palindromeCount[0]++; + leftIdx--; + rightIdx++; } - return ans; } } From 5e36951e862856cfdeadd2a840a67a61d70657da Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Mar 2022 15:04:22 -0800 Subject: [PATCH 0320/1640] Update Find First and Last Position of Element in Sorted Array.java --- ...t Position of Element in Sorted Array.java | 47 ++++++++++++------- 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/Medium/Find First and Last Position of Element in Sorted Array.java b/Medium/Find First and Last Position of Element in Sorted Array.java index 2d9e263a..89775bdf 100644 --- a/Medium/Find First and Last Position of Element in Sorted Array.java +++ b/Medium/Find First and Last Position of Element in Sorted Array.java @@ -1,28 +1,39 @@ class Solution { public int[] searchRange(int[] nums, int target) { - return new int[]{binarySearchHelper(nums, target, -1), binarySearchHelper(nums, target, 1)}; - } + return new int[]{binarySearchForMinIdx(nums, target), binarySearchForMaxIdx(nums, target)}; + } - private int binarySearchHelper(int[] nums, int target, int dir) { - int start = 0; - int end = nums.length - 1; + private int binarySearchForMinIdx(int[] nums, int target) { + int leftIdx = 0; + int rightIdx = nums.length - 1; int idx = -1; - while (start <= end) { - int mid = (start + end) / 2; + while (leftIdx <= rightIdx) { + int mid = (leftIdx + rightIdx) / 2; if (nums[mid] == target) { idx = mid; - if (dir == -1) { - end = mid - 1; - } - else { - start = mid + 1; - } - } - else if (nums[mid] < target) { - start = mid + 1; + rightIdx = mid - 1; + } else if (nums[mid] > target) { + rightIdx = mid - 1; + } else { + leftIdx = mid + 1; } - else { - end = mid - 1; + } + return idx; + } + + private int binarySearchForMaxIdx(int[] nums, int target) { + int leftIdx = 0; + int rightIdx = nums.length - 1; + int idx = -1; + while (leftIdx <= rightIdx) { + int mid = (leftIdx + rightIdx) / 2; + if (nums[mid] == target) { + idx = mid; + leftIdx = mid + 1; + } else if (nums[mid] > target) { + rightIdx = mid - 1; + } else { + leftIdx = mid + 1; } } return idx; From ae521b43b22afe32ae2f648c4a0bb71b826c07d8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Mar 2022 16:46:00 -0800 Subject: [PATCH 0321/1640] Update Kth Largest Element in an Array.java --- Medium/Kth Largest Element in an Array.java | 24 +++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/Medium/Kth Largest Element in an Array.java b/Medium/Kth Largest Element in an Array.java index 1ba91b65..cc2f716c 100644 --- a/Medium/Kth Largest Element in an Array.java +++ b/Medium/Kth Largest Element in an Array.java @@ -1,12 +1,24 @@ class Solution { public int findKthLargest(int[] nums, int k) { - PriorityQueue priorityQueue = new PriorityQueue<>(); - for (int num : nums) { - priorityQueue.add(num); - if (priorityQueue.size() > k) { - priorityQueue.poll(); + return quickSelect(nums, 0, nums.length - 1, nums.length - k); + } + + private int quickSelect(int[] nums, int leftIdx, int rightIdx, int k) { + int pivot = nums[rightIdx]; + int idx = leftIdx; + for (int i = leftIdx; i < rightIdx; i++) { + if (nums[i] <= pivot) { + swap(nums, i, idx); + idx++; } } - return priorityQueue.peek(); + swap(nums, idx, rightIdx); + return idx == k ? nums[idx] : (idx > k ? quickSelect(nums, leftIdx, idx - 1, k) : quickSelect(nums, idx + 1, rightIdx, k)); + } + + private void swap(int[] nums, int idxOne, int idxTwo) { + int temp = nums[idxOne]; + nums[idxOne] = nums[idxTwo]; + nums[idxTwo] = temp; } } From b2996e0e07450de6393966577bfbaeb76a4af563 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Mar 2022 08:37:33 -0800 Subject: [PATCH 0322/1640] Update Add Bold Tag in String.java --- Medium/Add Bold Tag in String.java | 58 ++++++++++++++++++------------ 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/Medium/Add Bold Tag in String.java b/Medium/Add Bold Tag in String.java index bd262a02..024e1823 100644 --- a/Medium/Add Bold Tag in String.java +++ b/Medium/Add Bold Tag in String.java @@ -1,30 +1,44 @@ class Solution { - public String addBoldTag(String S, String[] dict) { - int N = S.length(); - boolean[] mask = new boolean[N]; - for (int i = 0; i < N; ++i) { - for (String word: dict) search: { - for (int k = 0; k < word.length(); ++k) { - if (k + i >= S.length() || S.charAt(k + i) != word.charAt(k)) { - break search; - } - } - for (int j = i; j < i + word.length(); ++j) { - mask[j] = true; - } + public String addBoldTag(String s, String[] words) { + List indexes = new ArrayList<>(); + for (String word : words) { + indexes.addAll(getIndexPair(s, word)); + } + Collections.sort(indexes, + Comparator.comparingInt((int[] o) -> o[0]).thenComparingInt(o -> o[1])); + Set startIdx = new HashSet<>(); + Set endIdx = new HashSet<>(); + int idx = 0; + while (idx < indexes.size()) { + int currStart = indexes.get(idx)[0]; + int currEnd = indexes.get(idx)[1]; + idx++; + while (idx < indexes.size() && indexes.get(idx)[0] <= currEnd + 1) { + currEnd = Math.max(currEnd, indexes.get(idx++)[1]); } + startIdx.add(currStart); + endIdx.add(currEnd); } - StringBuilder ans = new StringBuilder(); - int anchor = 0; - for (int i = 0; i < N; ++i) { - if (mask[i] && (i == 0 || !mask[i - 1])) { - ans.append(""); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + if (startIdx.contains(i)) { + sb.append(""); + } + sb.append(s.charAt(i)); + if (endIdx.contains(i)) { + sb.append(""); } - ans.append(S.charAt(i)); - if (mask[i] && (i == N - 1 || !mask[i + 1])) { - ans.append(""); + } + return sb.toString(); + } + + private List getIndexPair(String s, String word) { + List indexPairs = new ArrayList<>(); + for (int i = 0; i < s.length() - word.length() + 1; i++) { + if (s.startsWith(word, i)) { + indexPairs.add(new int[]{i, i + word.length() - 1}); } } - return ans.toString(); + return indexPairs; } } From 636a14218a085785aa39b50d878a0eaf850cca21 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Mar 2022 08:38:55 -0800 Subject: [PATCH 0323/1640] Update and rename Easy/Bold Words in String.java to Medium/Bold Words in String.java --- Easy/Bold Words in String.java | 30 ---------------------- Medium/Bold Words in String.java | 44 ++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 30 deletions(-) delete mode 100644 Easy/Bold Words in String.java create mode 100644 Medium/Bold Words in String.java diff --git a/Easy/Bold Words in String.java b/Easy/Bold Words in String.java deleted file mode 100644 index 16d3e6d3..00000000 --- a/Easy/Bold Words in String.java +++ /dev/null @@ -1,30 +0,0 @@ -class Solution { - public String boldWords(String[] words, String S) { - int N = S.length(); - boolean[] mask = new boolean[N]; - for (int i = 0; i < N; ++i) { - for (String word: words) search: { - for (int k = 0; k < word.length(); ++k) { - if (k + i >= S.length() || S.charAt(k + i) != word.charAt(k)) { - break search; - } - } - for (int j = i; j < i + word.length(); ++j) { - mask[j] = true; - } - } - } - StringBuilder ans = new StringBuilder(); - int anchor = 0; - for (int i = 0; i < N; ++i) { - if (mask[i] && (i == 0 || !mask[i - 1])) { - ans.append(""); - } - ans.append(S.charAt(i)); - if (mask[i] && (i == N - 1 || !mask[i + 1])) { - ans.append(""); - } - } - return ans.toString(); - } -} diff --git a/Medium/Bold Words in String.java b/Medium/Bold Words in String.java new file mode 100644 index 00000000..3e19c0a0 --- /dev/null +++ b/Medium/Bold Words in String.java @@ -0,0 +1,44 @@ +class Solution { + public String boldWords(String[] words, String s) { + List indexes = new ArrayList<>(); + for (String word : words) { + indexes.addAll(getIndexPair(s, word)); + } + Collections.sort(indexes, + Comparator.comparingInt((int[] o) -> o[0]).thenComparingInt(o -> o[1])); + Set startIdx = new HashSet<>(); + Set endIdx = new HashSet<>(); + int idx = 0; + while (idx < indexes.size()) { + int currStart = indexes.get(idx)[0]; + int currEnd = indexes.get(idx)[1]; + idx++; + while (idx < indexes.size() && indexes.get(idx)[0] <= currEnd + 1) { + currEnd = Math.max(currEnd, indexes.get(idx++)[1]); + } + startIdx.add(currStart); + endIdx.add(currEnd); + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + if (startIdx.contains(i)) { + sb.append(""); + } + sb.append(s.charAt(i)); + if (endIdx.contains(i)) { + sb.append(""); + } + } + return sb.toString(); + } + + private List getIndexPair(String s, String word) { + List indexPairs = new ArrayList<>(); + for (int i = 0; i < s.length() - word.length() + 1; i++) { + if (s.startsWith(word, i)) { + indexPairs.add(new int[]{i, i + word.length() - 1}); + } + } + return indexPairs; + } +} From ae32f305c409c9b33df8b8eb34c2139d03e97cd9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Mar 2022 17:36:06 -0800 Subject: [PATCH 0324/1640] Update Rotate List.java --- Medium/Rotate List.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Medium/Rotate List.java b/Medium/Rotate List.java index a761b879..ddcbd094 100644 --- a/Medium/Rotate List.java +++ b/Medium/Rotate List.java @@ -13,17 +13,17 @@ public ListNode rotateRight(ListNode head, int k) { if (head == null || k == 0) { return head; } - int listSize = 0; + int n = 0; ListNode curr = head; while (curr != null) { + n++; curr = curr.next; - listSize++; } - k = k % listSize; + k = k % n; if (k == 0) { return head; } - k = listSize - k; + k = n - k; curr = head; while (k-- > 1) { curr = curr.next; From aa1cbf8964eaca736b462b423a17a70125169014 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Mar 2022 08:48:24 -0800 Subject: [PATCH 0325/1640] Update Remove All Adjacent Duplicates in String II.java --- ... All Adjacent Duplicates in String II.java | 37 +++++++++---------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/Medium/Remove All Adjacent Duplicates in String II.java b/Medium/Remove All Adjacent Duplicates in String II.java index f727a688..0cf6d3ac 100644 --- a/Medium/Remove All Adjacent Duplicates in String II.java +++ b/Medium/Remove All Adjacent Duplicates in String II.java @@ -1,36 +1,33 @@ class Solution { public String removeDuplicates(String s, int k) { - Stack stack = new Stack<>(); + Stack stack = new Stack<>(); for (char c : s.toCharArray()) { - if (!stack.isEmpty() && stack.peek().ch == c) { - stack.peek().val++; + if (!stack.isEmpty() && stack.peek().c == c) { + stack.peek().count++; + } else { + stack.push(new CharPair(c)); } - else { - stack.push(new Pair(c, 1)); - } - if (stack.peek().val == k) { + if (stack.peek().count == k) { stack.pop(); } } StringBuilder sb = new StringBuilder(); while (!stack.isEmpty()) { - Pair removed = stack.pop(); - int count = removed.val; - while (count-- > 0) { - sb.append(removed.ch); + CharPair pair = stack.pop(); + for (int i = 0; i < pair.count; i++) { + sb.append(pair.c); } } return sb.reverse().toString(); } -} - - -class Pair { - char ch; - int val; - public Pair(char ch, int val) { - this.ch = ch; - this.val = val; + private static class CharPair { + char c; + int count; + + public CharPair(char c) { + this.c = c; + this.count = 1; + } } } From 79cfcf6df942ce58bff969d3df97c289971c56f4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Mar 2022 12:44:14 -0800 Subject: [PATCH 0326/1640] Update Delete Nodes And Return Forest.java --- Medium/Delete Nodes And Return Forest.java | 55 ++++++++++------------ 1 file changed, 26 insertions(+), 29 deletions(-) diff --git a/Medium/Delete Nodes And Return Forest.java b/Medium/Delete Nodes And Return Forest.java index b65710bc..c3ec8f1b 100644 --- a/Medium/Delete Nodes And Return Forest.java +++ b/Medium/Delete Nodes And Return Forest.java @@ -4,46 +4,43 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public List delNodes(TreeNode root, int[] to_delete) { - List forest = new ArrayList<>(); - Set set = new HashSet<>(); - for (int num : to_delete) { - set.add(num); - } - helper(root, set, forest, null, 0); - return forest; + List result = new ArrayList<>(); + Set deleteSet = Arrays.stream(to_delete).boxed().collect(Collectors.toSet()); + helper(root, deleteSet, result, null); + return result; } - private void helper(TreeNode root, Set set, List forest, TreeNode parent, int side) { - if (root == null) { + private void helper(TreeNode node, Set deleteSet, List result, TreeNode parent) { + if (node == null) { return; } - // Deletion - if (set.contains(root.val)) { - if (parent != null) { - // Decide which node we want to make null based on side - if (side == -1) { + TreeNode nextParent = null; + if (deleteSet.contains(node.val)) { + if (parent != null) { + if (parent.left == node) { parent.left = null; - } - else { + } else { parent.right = null; } - } - // Call the recursive function for left & right with parent as null as we deleted the node - helper(root.left, set, forest, null, 0); - helper(root.right, set, forest, null, 0); - } - // No Deletion - else { - if (parent == null) { // Don't add if we have already added the parent and this is a child node - forest.add(root); - } - helper(root.left, set, forest, root, -1); - helper(root.right, set, forest, root, 1); + } + } else { + if (parent == null) { + result.add(node); + } + nextParent = node; } + helper(node.left, deleteSet, result, nextParent); + helper(node.right, deleteSet, result, nextParent); } } From 4c36f760d050d6cf82ed5f090f0f22e5395f9eba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Mar 2022 13:06:57 -0800 Subject: [PATCH 0327/1640] Update Clone Binary Tree With Random Pointer.java --- ...Clone Binary Tree With Random Pointer.java | 61 +++++++++++-------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/Medium/Clone Binary Tree With Random Pointer.java b/Medium/Clone Binary Tree With Random Pointer.java index 922389ca..323b1b6e 100644 --- a/Medium/Clone Binary Tree With Random Pointer.java +++ b/Medium/Clone Binary Tree With Random Pointer.java @@ -1,5 +1,5 @@ /** - * Definition for a binary tree node. + * Definition for Node. * public class Node { * int val; * Node left; @@ -15,33 +15,46 @@ * } * } */ + class Solution { - Map copyMap; public NodeCopy copyRandomBinaryTree(Node root) { - copyMap = new HashMap<>(); - fillMapTraverse(root); - cloneMapTraverse(root); - return copyMap.get(root); - } - - private void cloneMapTraverse(Node root) { if (root == null) { - return; + return null; } - NodeCopy copy = copyMap.get(root); - copy.left = copyMap.get(root.left); - copy.right = copyMap.get(root.right); - copy.random = copyMap.get(root.random); - cloneMapTraverse(root.left); - cloneMapTraverse(root.right); - } - - private void fillMapTraverse(Node root) { - if (root == null) { - return; + Queue queue = new LinkedList<>(); + Map map = new HashMap<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + Node removed = queue.remove(); + map.put(removed, new NodeCopy(removed.val)); + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + } + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + Node removed = queue.remove(); + if (removed.left != null) { + queue.add(removed.left); + map.get(removed).left = map.get(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + map.get(removed).right = map.get(removed.right); + } + if (removed.random != null) { + map.get(removed).random = map.get(removed.random); + } + } } - copyMap.put(root, new NodeCopy(root.val)); - fillMapTraverse(root.left); - fillMapTraverse(root.right); + return map.get(root); } } From 25d2fb29a89e63c5dcca684ff21d6e41a39163e2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Mar 2022 07:37:35 -0800 Subject: [PATCH 0328/1640] Update Monotonic Array.java --- Easy/Monotonic Array.java | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/Easy/Monotonic Array.java b/Easy/Monotonic Array.java index b9a44bcb..c523cef1 100644 --- a/Easy/Monotonic Array.java +++ b/Easy/Monotonic Array.java @@ -1,25 +1,18 @@ class Solution { - public boolean isMonotonic(int[] A) { - if (A.length <= 1) { + public boolean isMonotonic(int[] nums) { + if (nums.length < 2) { return true; } - int dir = 0; - int idx = 0; - while (idx < A.length - 1 && dir == 0) { - dir = getDir(A, idx); - idx++; - } - while (idx < A.length - 1) { - int tempDir = getDir(A, idx); - if (tempDir != 0 && tempDir != dir) { + Boolean increasing = null; + for (int i = 1; i < nums.length; i++) { + if (nums[i] == nums[i - 1] && increasing == null) { + continue; + } + increasing = increasing == null ? nums[i] > nums[i - 1] : increasing; + if ((nums[i] > nums[i - 1] && !increasing) || (nums[i] < nums[i - 1] && increasing)) { return false; } - idx++; } return true; } - - private int getDir(int[] A, int idx) { - return A[idx] < A[idx + 1] ? -1 : (A[idx] > A[idx + 1] ? 1 : 0); - } } From 9ef91340180d8ad5616966143494dd8daecc5561 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Mar 2022 10:48:33 -0800 Subject: [PATCH 0329/1640] Update Find Leaves of Binary Tree.java --- Medium/Find Leaves of Binary Tree.java | 45 ++++++++++++++++++-------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/Medium/Find Leaves of Binary Tree.java b/Medium/Find Leaves of Binary Tree.java index 1bb713cd..c6449ce2 100644 --- a/Medium/Find Leaves of Binary Tree.java +++ b/Medium/Find Leaves of Binary Tree.java @@ -15,24 +15,43 @@ */ class Solution { public List> findLeaves(TreeNode root) { + Map parentMap = new HashMap<>(); + Queue leaves = new LinkedList<>(); + updateParentAndFindLeaves(root, null, parentMap, leaves); List> result = new ArrayList<>(); - helper(result, root); + while (!leaves.isEmpty()) { + int size = leaves.size(); + List temp = new ArrayList<>(); + while (size-- > 0) { + TreeNode removed = leaves.remove(); + temp.add(removed.val); + if (parentMap.get(removed) == null) { + continue; + } + if (parentMap.get(removed).left == removed) { + parentMap.get(removed).left = null; + } else { + parentMap.get(removed).right = null; + } + if (parentMap.get(removed).left == null && parentMap.get(removed).right == null) { + leaves.add(parentMap.get(removed)); + } + } + result.add(temp); + } return result; } - private int helper(List> result, TreeNode root) { - if (root == null) { - return -1; + private void updateParentAndFindLeaves(TreeNode node, TreeNode parent, Map parentMap, Queue leaves) { + if (node == null) { + return; } - int left = helper(result, root.left); - int right = helper(result, root.right); - int maxDepth = Math.max(left, right) + 1; - if (maxDepth == result.size()) { - result.add(new ArrayList<>()); + parentMap.put(node, parent); + if (node.left == null && node.right == null) { + leaves.add(node); + return; } - result.get(maxDepth).add(root.val); - // Cut the tree - root.left = root.right = null; - return maxDepth; + updateParentAndFindLeaves(node.left, node, parentMap, leaves); + updateParentAndFindLeaves(node.right, node, parentMap, leaves); } } From 34bc252ff4178dc152806ebbaae425e59e445a62 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Mar 2022 16:05:06 -0800 Subject: [PATCH 0330/1640] Update Valid Parentheses.java --- Easy/Valid Parentheses.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Easy/Valid Parentheses.java b/Easy/Valid Parentheses.java index 3e93ca6e..911e52a5 100644 --- a/Easy/Valid Parentheses.java +++ b/Easy/Valid Parentheses.java @@ -1,15 +1,20 @@ class Solution { public boolean isValid(String s) { - String starting = "({["; - String ending = ")}]"; Stack stack = new Stack<>(); for (char c : s.toCharArray()) { - if (starting.indexOf(c) != -1) { + if (c == '[' || c == '{' || c == '(') { stack.push(c); } else { - if (stack.isEmpty() || starting.indexOf(stack.pop()) != ending.indexOf(c)) { + if (stack.isEmpty()) { return false; } + char popped = stack.pop(); + if ((c == ')' && popped == '(') || + (c == ']' && popped == '[') || + (c == '}' && popped == '{')) { + continue; + } + return false; } } return stack.isEmpty(); From cbc5225b144f6c4aaf197a51f8b6569c07a7a7ae Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Mar 2022 16:44:52 -0800 Subject: [PATCH 0331/1640] Update A Number After a Double Reversal.java --- Easy/A Number After a Double Reversal.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Easy/A Number After a Double Reversal.java b/Easy/A Number After a Double Reversal.java index 0175e45f..bace60bb 100644 --- a/Easy/A Number After a Double Reversal.java +++ b/Easy/A Number After a Double Reversal.java @@ -1,13 +1,11 @@ class Solution { public boolean isSameAfterReversals(int num) { - return parseToInteger(reverseNum(parseToInteger(reverseNum(num)))) == num; - } - - private String reverseNum(int num) { - return new StringBuilder().append(num).reverse().toString(); - } - - private Integer parseToInteger(String s) { - return Integer.parseInt(s); + if (num <= 9) { + return true; + } + if (num % 10 == 0) { + return false; + } + return true; } } From 2ff8901ccacb7a13f2cd879b6c29f4ebb394d6f1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Mar 2022 18:53:37 -0800 Subject: [PATCH 0332/1640] Update and rename Easy/String Compression.java to Medium/String Compression.java --- Easy/String Compression.java | 23 ----------------------- Medium/String Compression.java | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 23 deletions(-) delete mode 100644 Easy/String Compression.java create mode 100644 Medium/String Compression.java diff --git a/Easy/String Compression.java b/Easy/String Compression.java deleted file mode 100644 index 6b21d22e..00000000 --- a/Easy/String Compression.java +++ /dev/null @@ -1,23 +0,0 @@ -class Solution { - public int compress(char[] chars) { - int start = 0; - int end = 0; - int n = chars.length; - while (end < n) { - char c = chars[end]; - int count = 0; - while (end < n && chars[end] == c) { - end++; - count++; - } - chars[start++] = c; - if (count > 1) { - String countStr = String.valueOf(count); - for (char countC : countStr.toCharArray()) { - chars[start++] = countC; - } - } - } - return start; - } -} diff --git a/Medium/String Compression.java b/Medium/String Compression.java new file mode 100644 index 00000000..182df66f --- /dev/null +++ b/Medium/String Compression.java @@ -0,0 +1,22 @@ +class Solution { + public int compress(char[] chars) { + int idx = 0; + int startIdx = 0; + while (idx < chars.length) { + char c = chars[idx]; + int count = 0; + while (idx < chars.length && chars[idx] == c) { + idx++; + count++; + } + chars[startIdx++] = c; + if (count > 1) { + String countString = String.valueOf(count); + for (char cs : countString.toCharArray()) { + chars[startIdx++] = cs; + } + } + } + return startIdx; + } +} From 8e0759dce6b7c400d3cf33f42e98fe5bd7606050 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Mar 2022 19:02:38 -0800 Subject: [PATCH 0333/1640] Update Longest Common Prefix.java --- Easy/Longest Common Prefix.java | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/Easy/Longest Common Prefix.java b/Easy/Longest Common Prefix.java index 49a0dc92..fb655701 100644 --- a/Easy/Longest Common Prefix.java +++ b/Easy/Longest Common Prefix.java @@ -1,30 +1,22 @@ class Solution { public String longestCommonPrefix(String[] strs) { - if (strs.length == 0) { - return ""; - } int minLength = Integer.MAX_VALUE; - int idx = -1; + int minLengthIdx = -1; for (int i = 0; i < strs.length; i++) { if (strs[i].length() < minLength) { minLength = strs[i].length(); - idx = i; + minLengthIdx = i; } } StringBuilder sb = new StringBuilder(); - for (int i = 0; i < strs[idx].length(); i++) { - boolean flag = true; + for (int i = 0; i < strs[minLengthIdx].length(); i++) { for (String str : strs) { - if (str.charAt(i) != strs[idx].charAt(i)) { - flag = false; - break; + if (str.charAt(i) != strs[minLengthIdx].charAt(i)) { + return sb.toString(); } } - if (!flag) { - break; - } - sb.append(strs[idx].charAt(i)); + sb.append(strs[minLengthIdx].charAt(i)); } return sb.toString(); - } + } } From 72ce4fc48722dee18b77920ceb2342c782d76fb0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Mar 2022 08:44:22 -0700 Subject: [PATCH 0334/1640] Create Find All K-Distant Indices in an Array.java --- Easy/Find All K-Distant Indices in an Array.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Find All K-Distant Indices in an Array.java diff --git a/Easy/Find All K-Distant Indices in an Array.java b/Easy/Find All K-Distant Indices in an Array.java new file mode 100644 index 00000000..11fedb7d --- /dev/null +++ b/Easy/Find All K-Distant Indices in an Array.java @@ -0,0 +1,14 @@ +class Solution { + public List findKDistantIndices(int[] nums, int key, int k) { + List result = new ArrayList<>(); + for (int i = 0; i < nums.length; i++) { + if (nums[i] == key) { + int start = Math.max(result.size() == 0 ? 0 : result.get(result.size() - 1) + 1, i - k); + for (int j = start; j <= i + k && j < nums.length; j++) { + result.add(j); + } + } + } + return result; + } +} From 4c1b04b01d843d344aaf9c58f0a33c7dfdf588bb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 14 Mar 2022 07:50:57 -0700 Subject: [PATCH 0335/1640] Create Maximize the Topmost Element After K Moves.java --- ...imize the Topmost Element After K Moves.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Maximize the Topmost Element After K Moves.java diff --git a/Medium/Maximize the Topmost Element After K Moves.java b/Medium/Maximize the Topmost Element After K Moves.java new file mode 100644 index 00000000..d8bb4948 --- /dev/null +++ b/Medium/Maximize the Topmost Element After K Moves.java @@ -0,0 +1,17 @@ +class Solution { + public int maximumTop(int[] nums, int k) { + if (nums.length == 1) { + return k % 2 == 1 ? -1 : nums[0]; + } + int maxTop = -1; + if (k < nums.length) { + maxTop = nums[k]; + } else if (k > nums.length) { + k = nums.length + 1; + } + for (int i = 0; i < k - 1; i++) { + maxTop = Math.max(maxTop, nums[i]); + } + return maxTop; + } +} From 7bdd94a324d4f6dffe36f8035d79b53c1c9f07f2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Mar 2022 09:14:27 -0700 Subject: [PATCH 0336/1640] Update Second Minimum Node in a binary tree.java --- .../Second Minimum Node in a binary tree.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Easy/Second Minimum Node in a binary tree.java b/Easy/Second Minimum Node in a binary tree.java index 2a3434b1..8ddeb335 100644 --- a/Easy/Second Minimum Node in a binary tree.java +++ b/Easy/Second Minimum Node in a binary tree.java @@ -13,26 +13,22 @@ * } * } */ -class Solution { - Integer minimum; - long secondMinimum; +class Solution { public int findSecondMinimumValue(TreeNode root) { - minimum = root.val; - secondMinimum = Long.MAX_VALUE; - helper(root); - return secondMinimum == Long.MAX_VALUE ? -1 : (int) secondMinimum; + long[] topTwo = {root.val, Long.MAX_VALUE}; + helper(root, topTwo); + return topTwo[1] == Long.MAX_VALUE ? -1 : (int) topTwo[1]; } - private void helper(TreeNode root) { + private void helper(TreeNode root, long[] topTwo) { if (root == null) { return; } - if (minimum < root.val && root.val < secondMinimum) { - secondMinimum = root.val; - } - else if (root.val == minimum) { - helper(root.left); - helper(root.right); + if (topTwo[0] < root.val && root.val < topTwo[1]) { + topTwo[1] = root.val; + } else { + helper(root.left, topTwo); + helper(root.right, topTwo); } } } From 945d7160409fd3f0caf5564afc9ecf096b5789ed Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Mar 2022 11:57:46 -0700 Subject: [PATCH 0337/1640] Update All Nodes Distance K in Binary Tree.java --- .../All Nodes Distance K in Binary Tree.java | 70 ++++++++----------- 1 file changed, 29 insertions(+), 41 deletions(-) diff --git a/Medium/All Nodes Distance K in Binary Tree.java b/Medium/All Nodes Distance K in Binary Tree.java index 4c2ac67d..13e9485b 100644 --- a/Medium/All Nodes Distance K in Binary Tree.java +++ b/Medium/All Nodes Distance K in Binary Tree.java @@ -8,61 +8,49 @@ * } */ class Solution { - List list; - TreeNode target; - int K; - public List distanceK(TreeNode root, TreeNode target, int K) { - list = new ArrayList<>(); - this.target = target; - this.K = K; - dfs(root); - return list; + public List distanceK(TreeNode root, TreeNode target, int k) { + List result = new ArrayList<>(); + dfs(root, target, k, result); + return new ArrayList<>(result); } - - private int dfs(TreeNode node) { + + private int dfs(TreeNode node, TreeNode target, int k, List result) { if (node == null) { return -1; } - else if (node == target) { - subtreeDfs(node, 0); + if (node == target) { + addToResult(node, 0, result, k); return 1; - } - else { - int L = dfs(node.left); - int R = -1; - if (L != -1) { - if (L == K) { - list.add(node.val); + } else { + int left = dfs(node.left, target, k, result); + int right = dfs(node.right, target, k, result); + if (left != -1) { + if (left == k) { + result.add(node.val); } - subtreeDfs(node.right, L + 1); - return L + 1; - } - else if ((R = dfs(node.right)) != -1) { - if (R == K) { - list.add(node.val); + addToResult(node.right, left + 1, result, k); + return left + 1; + } else if (right != -1) { + if (right == k) { + result.add(node.val); } - subtreeDfs(node.left, R + 1); - return R + 1; - } - else { + addToResult(node.left, right + 1, result, k); + return right + 1; + } else { return -1; } } } - private void subtreeDfs(TreeNode node, int dist) { - if (node == null) { - return; - } - if (dist == K) { - list.add(node.val); - } - else if (dist > K) { + private void addToResult(TreeNode node, int dist, List result, int k) { + if (node == null || dist > k) { return; } - else { - subtreeDfs(node.left, dist + 1); - subtreeDfs(node.right, dist + 1); + if (dist == k) { + result.add(node.val); + } else { + addToResult(node.left, dist + 1, result, k); + addToResult(node.right, dist + 1, result, k); } } } From dd54248743848ef6f497c5f8e604ab983273fae0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Mar 2022 12:00:48 -0700 Subject: [PATCH 0338/1640] Update Implement strStr.java --- Easy/Implement strStr.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Easy/Implement strStr.java b/Easy/Implement strStr.java index bf12a2ed..ea05ba6f 100644 --- a/Easy/Implement strStr.java +++ b/Easy/Implement strStr.java @@ -1,14 +1,10 @@ class Solution { public int strStr(String haystack, String needle) { - int hayLength = haystack.length(); - int needleLength = needle.length(); - int idx = 0; - while (idx + needleLength <= hayLength) { - if (haystack.substring(idx, idx + needleLength).equals(needle)) { - return idx; + for (int i = 0; i < haystack.length() - needle.length() + 1; i++) { + if (haystack.substring(i, i + needle.length()).equals(needle)) { + return i; } - idx++; } return -1; - } + } } From 610f29507cd5c92e3ce197917742c834ef1a3155 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Mar 2022 17:10:08 -0700 Subject: [PATCH 0339/1640] Update Validate Stack Sequences.java --- Medium/Validate Stack Sequences.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Medium/Validate Stack Sequences.java b/Medium/Validate Stack Sequences.java index a7535ce6..87d61d31 100644 --- a/Medium/Validate Stack Sequences.java +++ b/Medium/Validate Stack Sequences.java @@ -1,22 +1,21 @@ class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Stack stack = new Stack<>(); - int pushedIdx = 0; - int poppedIdx = 0; - while (pushedIdx < pushed.length && poppedIdx < popped.length) { - if (!stack.isEmpty() && stack.peek() == popped[poppedIdx]) { + int pushIdx = 0; + int popIdx = 0; + while (pushIdx < pushed.length) { + while (!stack.isEmpty() && popped[popIdx] == stack.peek()) { stack.pop(); - poppedIdx++; - } else { - stack.push(pushed[pushedIdx++]); + popIdx++; } + stack.push(pushed[pushIdx++]); } - while (poppedIdx < popped.length) { - if (stack.peek() != popped[poppedIdx]) { + while (popIdx < popped.length) { + if (stack.isEmpty() || stack.peek() != popped[popIdx]) { return false; } - poppedIdx++; stack.pop(); + popIdx++; } return true; } From a39412cdb605f8aee9568aac09f88726e2a1696d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 16 Mar 2022 14:39:22 -0700 Subject: [PATCH 0340/1640] Update Flatten a Multilevel Doubly Linked List.java --- ...atten a Multilevel Doubly Linked List.java | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Medium/Flatten a Multilevel Doubly Linked List.java b/Medium/Flatten a Multilevel Doubly Linked List.java index 47dfdbb2..3708998f 100644 --- a/Medium/Flatten a Multilevel Doubly Linked List.java +++ b/Medium/Flatten a Multilevel Doubly Linked List.java @@ -11,27 +11,24 @@ class Node { class Solution { public Node flatten(Node head) { if (head == null) { - return null; + return head; } Stack stack = new Stack<>(); stack.push(head); - Node dummy = new Node(0, null, head, null); - Node prev = dummy; - Node curr = dummy; while (!stack.isEmpty()) { - curr = stack.pop(); - prev.next = curr; - curr.prev = prev; - if (curr.next != null) { - stack.push(curr.next); + Node removed = stack.pop(); + if (removed.next != null) { + stack.push(removed.next); } - if (curr.child != null) { - stack.push(curr.child); - curr.child = null; + if (removed.child != null) { + stack.push(removed.child); + } + removed.child = null; + if (!stack.isEmpty()) { + removed.next = stack.peek(); + stack.peek().prev = removed; } - prev = curr; } - dummy.next.prev = null; - return dummy.next; - } + return head; + } } From 319db72e1364e94bc1b7a4af8ac4eec756f8a3a5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 16 Mar 2022 14:44:05 -0700 Subject: [PATCH 0341/1640] Create Count Nodes Equal to Sum of Descendants.java --- ...unt Nodes Equal to Sum of Descendants.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Medium/Count Nodes Equal to Sum of Descendants.java diff --git a/Medium/Count Nodes Equal to Sum of Descendants.java b/Medium/Count Nodes Equal to Sum of Descendants.java new file mode 100644 index 00000000..85597629 --- /dev/null +++ b/Medium/Count Nodes Equal to Sum of Descendants.java @@ -0,0 +1,34 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int equalToDescendants(TreeNode root) { + int[] count = {0}; + helper(root, count); + return count[0]; + } + + private int helper(TreeNode root, int[] count) { + if (root == null) { + return 0; + } + int leftSum = helper(root.left, count); + int rightSum = helper(root.right, count); + if (root.val == leftSum + rightSum) { + count[0]++; + } + return root.val + leftSum + rightSum; + } +} From e5c33844f08652629bfadc4640cf5ccbeb3d94c3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 16 Mar 2022 15:27:02 -0700 Subject: [PATCH 0342/1640] Update Minimum Number of Steps to Make Two Strings Anagram.java --- ... of Steps to Make Two Strings Anagram.java | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Medium/Minimum Number of Steps to Make Two Strings Anagram.java b/Medium/Minimum Number of Steps to Make Two Strings Anagram.java index d81c4868..55139382 100644 --- a/Medium/Minimum Number of Steps to Make Two Strings Anagram.java +++ b/Medium/Minimum Number of Steps to Make Two Strings Anagram.java @@ -1,21 +1,16 @@ class Solution { public int minSteps(String s, String t) { - int[] counterS = getFreqCounter(s); - int[] counterT = getFreqCounter(t); - int count = 0; + int[] frequency = new int[26]; + for (int i = 0; i < s.length(); i++) { + frequency[s.charAt(i) - 'a']++; + frequency[t.charAt(i) - 'a']--; + } + int steps = 0; for (int i = 0; i < 26; i++) { - if (counterT[i] < counterS[i]) { - count += counterS[i] - counterT[i]; + if (frequency[i] > 0) { + steps += frequency[i]; } } - return count; - } - - private int[] getFreqCounter(String s) { - int[] counter = new int[26]; - for (char c : s.toCharArray()) { - counter[c - 'a']++; - } - return counter; + return steps; } } From c1556126f10a818a502c5896300487d3e8bd4963 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 19 Mar 2022 02:36:42 +0530 Subject: [PATCH 0343/1640] Update Remove Duplicate Letters.java --- Medium/Remove Duplicate Letters.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/Medium/Remove Duplicate Letters.java b/Medium/Remove Duplicate Letters.java index 1f01908a..25cfd16c 100644 --- a/Medium/Remove Duplicate Letters.java +++ b/Medium/Remove Duplicate Letters.java @@ -1,27 +1,26 @@ class Solution { public String removeDuplicateLetters(String s) { int[] counter = new int[26]; - char[] charArray = s.toCharArray(); - for (char c : charArray) { + for (char c : s.toCharArray()) { counter[c - 'a']++; } + Stack stack = new Stack<>(); boolean[] visited = new boolean[26]; - Stack stack = new Stack<>(); - for (Character c : charArray) { + for (char c : s.toCharArray()) { int idx = c - 'a'; counter[idx]--; if (visited[idx]) { continue; } - while (!stack.isEmpty() && c < stack.peek() && counter[stack.peek() - 'a'] > 0) { - visited[stack.pop() - 'a'] = false; + while (!stack.isEmpty() && stack.peek() > idx && counter[stack.peek()] > 0) { + visited[stack.pop()] = false; } - stack.push(c); + stack.add(idx); visited[idx] = true; } StringBuilder sb = new StringBuilder(); while (!stack.isEmpty()) { - sb.append(stack.pop()); + sb.append((char) (stack.pop() + 'a')); } return sb.reverse().toString(); } From 57ba3d5cce2924500905dec37d7333b06dc6348d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 19 Mar 2022 08:55:23 +0530 Subject: [PATCH 0344/1640] Create Find Distance in a Binary Tree.java --- Medium/Find Distance in a Binary Tree.java | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Medium/Find Distance in a Binary Tree.java diff --git a/Medium/Find Distance in a Binary Tree.java b/Medium/Find Distance in a Binary Tree.java new file mode 100644 index 00000000..403e1190 --- /dev/null +++ b/Medium/Find Distance in a Binary Tree.java @@ -0,0 +1,51 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int findDistance(TreeNode root, int p, int q) { + if (p == q) { + return 0; + } + int[] result = {-1}; + dfs(root, p, q, result); + return result[0]; + } + + private int dfs(TreeNode root, int p, int q, int[] result) { + if (root == null) { + return -1; + } + int left = dfs(root.left, p, q, result); + int right = dfs(root.right, p, q, result); + if (root.val == p || root.val == q) { + if (left < 0 && right < 0) { + return 0; + } + result[0] = 1 + (left >= 0 ? left : right); + return -1; + } + if (left >= 0 && right >= 0) { + result[0] = left + right + 2; + return -1; + } + if (left >= 0) { + return left + 1; + } + if (right >= 0) { + return right + 1; + } + return -1; + } +} From 9ac0691145332abe4d16d94bf2cc97e93a1eeb83 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 19 Mar 2022 23:41:17 +0530 Subject: [PATCH 0345/1640] Update Maximum Frequency Stack.java --- Hard/Maximum Frequency Stack.java | 33 +++++++++++++++++-------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/Hard/Maximum Frequency Stack.java b/Hard/Maximum Frequency Stack.java index 9acd4a53..a638cede 100644 --- a/Hard/Maximum Frequency Stack.java +++ b/Hard/Maximum Frequency Stack.java @@ -1,24 +1,27 @@ class FreqStack { - Map valueToCurrentFrequency; - Map> frequencyToValues; - int maxFrequency; + + private Map frequencyMap; + private Map> frequencyGroup; + private int maxFrequency; + public FreqStack() { - valueToCurrentFrequency = new HashMap<>(); - frequencyToValues = new HashMap<>(); - maxFrequency = 1; + this.frequencyMap = new HashMap<>(); + this.frequencyGroup = new HashMap<>(); + this.maxFrequency = 0; } - public void push(int x) { - valueToCurrentFrequency.put(x, valueToCurrentFrequency.getOrDefault(x, 0) + 1); - frequencyToValues.computeIfAbsent(valueToCurrentFrequency.get(x), k -> new Stack<>()).add(x); - maxFrequency = Math.max(maxFrequency, valueToCurrentFrequency.get(x)); + public void push(int val) { + int newFrequency = this.frequencyMap.getOrDefault(val, 0) + 1; + this.frequencyMap.put(val, newFrequency); + this.maxFrequency = Math.max(this.maxFrequency, newFrequency); + this.frequencyGroup.computeIfAbsent(newFrequency, k -> new Stack<>()).push(val); } public int pop() { - int val = frequencyToValues.get(maxFrequency).pop(); - valueToCurrentFrequency.put(val, valueToCurrentFrequency.getOrDefault(val, 0) - 1); - if (frequencyToValues.get(maxFrequency).isEmpty()) { - maxFrequency--; + int val = this.frequencyGroup.get(this.maxFrequency).pop(); + this.frequencyMap.put(val, this.frequencyMap.get(val) - 1); + if (this.frequencyGroup.get(this.maxFrequency).isEmpty()) { + this.maxFrequency--; } return val; } @@ -27,6 +30,6 @@ public int pop() { /** * Your FreqStack object will be instantiated and called as such: * FreqStack obj = new FreqStack(); - * obj.push(x); + * obj.push(val); * int param_2 = obj.pop(); */ From f9c4b98c45e5d6ebb2c6f307c0779eac97699dd5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Mar 2022 03:59:52 +0530 Subject: [PATCH 0346/1640] Create Divide Array Into Equal Pairs.java --- Easy/Divide Array Into Equal Pairs.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Divide Array Into Equal Pairs.java diff --git a/Easy/Divide Array Into Equal Pairs.java b/Easy/Divide Array Into Equal Pairs.java new file mode 100644 index 00000000..ce8122d3 --- /dev/null +++ b/Easy/Divide Array Into Equal Pairs.java @@ -0,0 +1,8 @@ +class Solution { + public boolean divideArray(int[] nums) { + return Arrays.stream(nums) + .boxed() + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())) + .values().stream().allMatch(e -> e % 2 == 0); + } +} From c1edc227c3b5b76ea7f9c0f4dbd910b5d8e0f666 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Mar 2022 07:23:09 +0530 Subject: [PATCH 0347/1640] Create Maximize Number of Subsequences in a String.java --- ...mize Number of Subsequences in a String.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Maximize Number of Subsequences in a String.java diff --git a/Medium/Maximize Number of Subsequences in a String.java b/Medium/Maximize Number of Subsequences in a String.java new file mode 100644 index 00000000..c2c26208 --- /dev/null +++ b/Medium/Maximize Number of Subsequences in a String.java @@ -0,0 +1,17 @@ +class Solution { + public long maximumSubsequenceCount(String text, String pattern) { + long result = 0; + int countCharOne = 0; + int countCharTwo = 0; + for (char c : text.toCharArray()) { + if (c == pattern.charAt(1)) { + result += countCharOne; + countCharTwo++; + } + if (c == pattern.charAt(0)) { + countCharOne++; + } + } + return result + Math.max(countCharOne, countCharTwo); + } +} From 06bb8bc812c524904b5c0c459a5b86e4527dbf65 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Mar 2022 05:31:29 +0530 Subject: [PATCH 0348/1640] Create Count Hills and Valleys in an Array.java --- Easy/Count Hills and Valleys in an Array.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Count Hills and Valleys in an Array.java diff --git a/Easy/Count Hills and Valleys in an Array.java b/Easy/Count Hills and Valleys in an Array.java new file mode 100644 index 00000000..750cc964 --- /dev/null +++ b/Easy/Count Hills and Valleys in an Array.java @@ -0,0 +1,19 @@ +class Solution { + public int countHillValley(int[] nums) { + List list = new ArrayList<>(); + list.add(nums[0]); + for (int i = 1; i < nums.length; i++) { + if (nums[i] != nums[i - 1]) { + list.add(nums[i]); + } + } + int hillsAndVallies = 0; + for (int i = 1; i < list.size() - 1; i++) { + if ((list.get(i) < list.get(i - 1) && list.get(i) < list.get(i + 1)) || + (list.get(i) > list.get(i - 1) && list.get(i) > list.get(i + 1))) { + hillsAndVallies++; + } + } + return hillsAndVallies; + } +} From cd3c7b9ea579c69ea2fa392e937ecf61cb01c038 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Mar 2022 06:32:01 +0530 Subject: [PATCH 0349/1640] Create Count Collisions on a Road.java --- Medium/Count Collisions on a Road.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Count Collisions on a Road.java diff --git a/Medium/Count Collisions on a Road.java b/Medium/Count Collisions on a Road.java new file mode 100644 index 00000000..aa3d6358 --- /dev/null +++ b/Medium/Count Collisions on a Road.java @@ -0,0 +1,20 @@ +class Solution { + public int countCollisions(String directions) { + int idx = 0; + while (idx < directions.length() && directions.charAt(idx) == 'L') { + idx++; + } + int carsFromRight = 0; + int collisionCount = 0; + while (idx < directions.length()) { + if (directions.charAt(idx) == 'R') { + carsFromRight++; + } else { + collisionCount += directions.charAt(idx) == 'S' ? carsFromRight : carsFromRight + 1; + carsFromRight = 0; + } + idx++; + } + return collisionCount; + } +} From 9e1c92a3d38302235091cd5afd94c682846d94ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Mar 2022 08:22:48 +0530 Subject: [PATCH 0350/1640] Update Partition Labels.java --- Medium/Partition Labels.java | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Medium/Partition Labels.java b/Medium/Partition Labels.java index c407b224..d8896c4a 100644 --- a/Medium/Partition Labels.java +++ b/Medium/Partition Labels.java @@ -1,22 +1,19 @@ class Solution { - public List partitionLabels(String S) { - if (S == null || S.length() == 0) { - return new ArrayList<>(); + public List partitionLabels(String s) { + Map lastIndex = new HashMap<>(); + for (int i = 0; i < s.length(); i++) { + lastIndex.put(s.charAt(i), i); } - int[] count = new int[26]; - for (int i = 0; i < S.length(); i++) { - count[S.charAt(i) - 'a'] = i; - } - int start = -1; - int end = 0; - List list = new ArrayList<>(); - for (int i = 0; i < S.length(); i++) { - end = Math.max(end, count[S.charAt(i) - 'a']); - if (end == i) { - list.add(end - start); - start = end; + List partitionIndices = new ArrayList<>(); + int currMaxIdx = -1; + int prevIdx = 0; + for (int i = 0; i < s.length(); i++) { + currMaxIdx = Math.max(currMaxIdx, lastIndex.get(s.charAt(i))); + if (i == currMaxIdx) { + partitionIndices.add(i - prevIdx + 1); + prevIdx = i + 1; } } - return list; + return partitionIndices; } } From 2ab955507b4703cf7a2f3e34cde3b99658dbc0b1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Mar 2022 21:03:57 +0530 Subject: [PATCH 0351/1640] Update Reconstruct Original Digits from English.java --- ...onstruct Original Digits from English.java | 55 +++++++++---------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/Medium/Reconstruct Original Digits from English.java b/Medium/Reconstruct Original Digits from English.java index 77f44e20..606452a6 100644 --- a/Medium/Reconstruct Original Digits from English.java +++ b/Medium/Reconstruct Original Digits from English.java @@ -1,31 +1,30 @@ class Solution { - public String originalDigits(String s) { - int[] count = new int[26]; - for (char c : s.toCharArray()) { - count[c - 'a']++; - } - - int[] out = new int[10]; - - out[0] = count['z' - 'a']; - out[2] = count['w' - 'a']; - out[4] = count['u' - 'a']; - out[6] = count['x' - 'a']; - out[8] = count['g' - 'a']; - out[3] = count['h' - 'a'] - out[8]; - out[5] = count['f' - 'a'] - out[4]; - out[7] = count['s' - 'a'] - out[6]; - out[9] = count['i' - 'a'] - out[5] - out[6] - out[8]; - out[1] = count['n' - 'a'] - out[7] - 2 * out[9]; - - StringBuilder sb = new StringBuilder(); - - for (int i = 0; i < 10; i++) { - for (int j = 0; j < out[i]; j++) { - sb.append(i); - } - } - - return sb.toString(); + public String originalDigits(String s) { + int[] count = new int[10]; + for (int i = 0; i < s.length(); i++){ + char c = s.charAt(i); + if (c == 'z') count[0]++; + if (c == 'w') count[2]++; + if (c == 'x') count[6]++; + if (c == 's') count[7]++; //7-6 + if (c == 'g') count[8]++; + if (c == 'u') count[4]++; + if (c == 'f') count[5]++; //5-4 + if (c == 'h') count[3]++; //3-8 + if (c == 'i') count[9]++; //9-8-5-6 + if (c == 'o') count[1]++; //1-0-2-4 } + count[7] -= count[6]; + count[5] -= count[4]; + count[3] -= count[8]; + count[9] = count[9] - count[8] - count[5] - count[6]; + count[1] = count[1] - count[0] - count[2] - count[4]; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i <= 9; i++){ + for (int j = 0; j < count[i]; j++){ + sb.append(i); + } + } + return sb.toString(); + } } From 67036e7edd268a51587ed3e6fa7eb9afcf533442 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Mar 2022 00:58:58 +0530 Subject: [PATCH 0352/1640] Update Design Underground System.java --- Medium/Design Underground System.java | 33 +++++++++++++++------------ 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/Medium/Design Underground System.java b/Medium/Design Underground System.java index 730aaa49..51aa492a 100644 --- a/Medium/Design Underground System.java +++ b/Medium/Design Underground System.java @@ -1,30 +1,33 @@ class UndergroundSystem { - Map checkInMap; - Map timeMap; - Map countMap; + + private Map totalTimeFromStartToEndStation; + private Map numberOfCustomersFromStartToEndStation; + private Map customerIdToStartTime; + private Map customerIdToStartStation; + public UndergroundSystem() { - checkInMap = new HashMap<>(); - timeMap = new HashMap<>(); - countMap = new HashMap<>(); + this.totalTimeFromStartToEndStation = new HashMap<>(); + this.numberOfCustomersFromStartToEndStation = new HashMap<>(); + this.customerIdToStartTime = new HashMap<>(); + this.customerIdToStartStation = new HashMap<>(); } public void checkIn(int id, String stationName, int t) { - checkInMap.put(id, stationName + "," + t); + this.customerIdToStartTime.put(id, t); + this.customerIdToStartStation.put(id, stationName); } public void checkOut(int id, String stationName, int t) { - String val = checkInMap.get(id); - String prevStationName = val.split(",")[0]; - int prevTime = Integer.parseInt(val.split(",")[1]); - String key = prevStationName + "|" + stationName; - timeMap.put(key, timeMap.getOrDefault(key, 0) + t - prevTime); - countMap.put(key, countMap.getOrDefault(key, 0) + 1); + int totalTime = t - this.customerIdToStartTime.get(id); + String key = this.customerIdToStartStation.get(id) + "|" + stationName; + this.totalTimeFromStartToEndStation.put(key, this.totalTimeFromStartToEndStation.getOrDefault(key, 0) + totalTime); + this.numberOfCustomersFromStartToEndStation.put(key, this.numberOfCustomersFromStartToEndStation.getOrDefault(key, 0) + 1); } public double getAverageTime(String startStation, String endStation) { String key = startStation + "|" + endStation; - return ((double) timeMap.get(key)) / countMap.get(key); - } + return this.totalTimeFromStartToEndStation.get(key) / (double) (this.numberOfCustomersFromStartToEndStation.get(key)); + } } /** From 38c9b25378168ed996f9ef91951b17a53f10b9d5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Mar 2022 08:36:33 +0530 Subject: [PATCH 0353/1640] Update Smallest String With A Given Numeric Value.java --- .../Smallest String With A Given Numeric Value.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Medium/Smallest String With A Given Numeric Value.java b/Medium/Smallest String With A Given Numeric Value.java index 929b7ade..6957c53c 100644 --- a/Medium/Smallest String With A Given Numeric Value.java +++ b/Medium/Smallest String With A Given Numeric Value.java @@ -1,14 +1,11 @@ class Solution { public String getSmallestString(int n, int k) { StringBuilder sb = new StringBuilder(); - for (int idx = 0; idx < n; idx++) { - for (int currChar = 26; currChar > 0; currChar--) { - if (currChar <= k && k - currChar >= (n - idx - 1)) { - sb.append((char) (97 + currChar - 1)); - k -= currChar; - break; - } - } + while (k > 0) { + int maxPossible = Math.min(k - n + 1, 26); + sb.append((char) ('a' + maxPossible - 1)); + k -= maxPossible; + n--; } return sb.reverse().toString(); } From 1eff3fb6784df14552daaae83ff201206f14896c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Mar 2022 09:01:36 +0530 Subject: [PATCH 0354/1640] Update and rename Hard/Longest Substring with At Most K Distinct Characters.java to Medium/Longest Substring with At Most K Distinct Characters.java --- ...ng with At Most K Distinct Characters.java | 22 ------------------- ...ng with At Most K Distinct Characters.java | 21 ++++++++++++++++++ 2 files changed, 21 insertions(+), 22 deletions(-) delete mode 100644 Hard/Longest Substring with At Most K Distinct Characters.java create mode 100644 Medium/Longest Substring with At Most K Distinct Characters.java diff --git a/Hard/Longest Substring with At Most K Distinct Characters.java b/Hard/Longest Substring with At Most K Distinct Characters.java deleted file mode 100644 index ae6a1c78..00000000 --- a/Hard/Longest Substring with At Most K Distinct Characters.java +++ /dev/null @@ -1,22 +0,0 @@ -class Solution { - public int lengthOfLongestSubstringKDistinct(String s, int k) { - Map map = new HashMap<>(); - int slow = 0; - int fast = 0; - int n = s.length(); - int maxLength = 0; - while (fast < n) { - map.put(s.charAt(fast), map.getOrDefault(s.charAt(fast), 0) + 1); - while (map.size() > k) { - map.put(s.charAt(slow), map.getOrDefault(s.charAt(slow), 0) - 1); - if (map.get(s.charAt(slow)) == 0) { - map.remove(s.charAt(slow)); - } - slow++; - } - fast++; - maxLength = Math.max(maxLength, fast - slow); - } - return maxLength; - } -} diff --git a/Medium/Longest Substring with At Most K Distinct Characters.java b/Medium/Longest Substring with At Most K Distinct Characters.java new file mode 100644 index 00000000..02936a53 --- /dev/null +++ b/Medium/Longest Substring with At Most K Distinct Characters.java @@ -0,0 +1,21 @@ +class Solution { + public int lengthOfLongestSubstringKDistinct(String s, int k) { + Map map = new HashMap<>(); + int startIdx = 0; + int endIdx = 0; + int maxLength = 0; + while (endIdx < s.length()) { + map.put(s.charAt(endIdx), map.getOrDefault(s.charAt(endIdx), 0) + 1); + endIdx++; + while (startIdx < endIdx && map.size() > k) { + map.put(s.charAt(startIdx), map.getOrDefault(s.charAt(startIdx), 0 ) - 1); + if (map.get(s.charAt(startIdx)) == 0) { + map.remove(s.charAt(startIdx)); + } + startIdx++; + } + maxLength = Math.max(maxLength, endIdx - startIdx); + } + return maxLength; + } +} From f5ee3f0bc7352864af3b29c6ef61059b5ef93246 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 23 Mar 2022 02:01:38 +0530 Subject: [PATCH 0355/1640] Update Reorder Data in Log Files.java --- Easy/Reorder Data in Log Files.java | 34 ++++++++++------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/Easy/Reorder Data in Log Files.java b/Easy/Reorder Data in Log Files.java index df293c3d..86d8786d 100644 --- a/Easy/Reorder Data in Log Files.java +++ b/Easy/Reorder Data in Log Files.java @@ -3,33 +3,23 @@ public String[] reorderLogFiles(String[] logs) { List letterLogs = new ArrayList<>(); List digitLogs = new ArrayList<>(); for (String log : logs) { - String[] strs = log.split("\\s+"); - if (Character.isDigit(strs[1].charAt(0))) { + String[] split = log.split("\\s+"); + if (Character.isDigit(split[1].charAt(0))) { digitLogs.add(log); - } - else { + } else { letterLogs.add(log); } } - Collections.sort(letterLogs, new Comparator(){ - public int compare(String s1, String s2) { - String key1 = s1.substring(s1.indexOf(' ') + 1); - String key2 = s2.substring(s2.indexOf(' ') + 1); - int c = key1.compareTo(key2); - if (c != 0) { - return c; - } - return s1.substring(0, s1.indexOf(' ')).compareTo(s2.substring(0, s2.indexOf(' '))); + letterLogs.sort((o1, o2) -> { + String contentOne = o1.substring(o1.indexOf(" ") + 1); + String contentTwo = o2.substring(o2.indexOf(" ") + 1); + int c = contentOne.compareTo(contentTwo); + if (c != 0) { + return c; } + return o1.substring(0, o1.indexOf(" ")).compareTo(o2.substring(0, o2.indexOf(" "))); }); - String[] ans = new String[logs.length]; - int idx = 0; - for (String log : letterLogs) { - ans[idx++] = log; - } - for (String log : digitLogs) { - ans[idx++] = log; - } - return ans; + letterLogs.addAll(digitLogs); + return letterLogs.toArray(new String[0]); } } From 748c34d88d92c0978aff251814ad28eee1bc5ef6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 23 Mar 2022 22:58:30 +0530 Subject: [PATCH 0356/1640] Update Broken Calculator.java --- Medium/Broken Calculator.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/Medium/Broken Calculator.java b/Medium/Broken Calculator.java index a746211a..ea40c3e7 100644 --- a/Medium/Broken Calculator.java +++ b/Medium/Broken Calculator.java @@ -1,10 +1,14 @@ class Solution { - public int brokenCalc(int X, int Y) { - int count = 0; - while (Y > X) { - count++; - Y = Y % 2 == 1 ? Y + 1 : Y / 2; + public int brokenCalc(int startValue, int target) { + int numOfSteps = 0; + while (target > startValue) { + numOfSteps++; + if (target % 2 == 1) { + target++; + } else { + target /= 2; + } } - return count + X - Y; + return numOfSteps + startValue - target; } } From becfa84e64ec368dc94e9a183d748ac4f1207f6b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 24 Mar 2022 01:35:28 +0530 Subject: [PATCH 0357/1640] Create Implement Trie II (Prefix Tree).java --- Medium/Implement Trie II (Prefix Tree).java | 89 +++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 Medium/Implement Trie II (Prefix Tree).java diff --git a/Medium/Implement Trie II (Prefix Tree).java b/Medium/Implement Trie II (Prefix Tree).java new file mode 100644 index 00000000..e6bae27d --- /dev/null +++ b/Medium/Implement Trie II (Prefix Tree).java @@ -0,0 +1,89 @@ +class Trie { + + private Node head; + + public Trie() { + this.head = new Node('-'); + } + + public void insert(String word) { + Node curr = this.head; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + curr.children.put(c, new Node(c)); + } + curr = curr.children.get(c); + } + curr.wordToFrequency.put(word, curr.wordToFrequency.getOrDefault(word, 0) + 1); + } + + public int countWordsEqualTo(String word) { + Node curr = this.head; + curr = traverseTrie(curr, word); + if (curr == null) { + return 0; + } + return curr.wordToFrequency.getOrDefault(word, 0); + } + + public int countWordsStartingWith(String prefix) { + Node curr = this.head; + curr = traverseTrie(curr, prefix); + if (curr == null) { + return 0; + } + int count = 0; + Queue queue = new LinkedList<>(); + queue.add(curr); + while (!queue.isEmpty()) { + Node removed = queue.remove(); + for (String word : removed.wordToFrequency.keySet()) { + count += removed.wordToFrequency.get(word); + } + for (Character child : removed.children.keySet()) { + queue.add(removed.children.get(child)); + } + } + return count; + } + + public void erase(String word) { + Node curr = this.head; + curr = traverseTrie(curr, word); + if (curr == null || curr.wordToFrequency.getOrDefault(word, 0) == 0) { + return; + } + curr.wordToFrequency.put(word, curr.wordToFrequency.get(word) - 1); + } + + private Node traverseTrie(Node curr, String word) { + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + return null; + } + curr = curr.children.get(c); + } + return curr; + } + + private static class Node { + char c; + Map children; + Map wordToFrequency; + + public Node(char c) { + this.c = c; + this.children = new HashMap<>(); + this.wordToFrequency = new HashMap<>(); + } + } +} + +/** + * Your Trie object will be instantiated and called as such: + * Trie obj = new Trie(); + * obj.insert(word); + * int param_2 = obj.countWordsEqualTo(word); + * int param_3 = obj.countWordsStartingWith(prefix); + * obj.erase(word); + */ From fac10d2b0f873ce16f03911d9717ae95978a8671 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Mar 2022 04:36:31 +0530 Subject: [PATCH 0358/1640] Update Expressive Words.java --- Medium/Expressive Words.java | 73 ++++++++++++++---------------------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/Medium/Expressive Words.java b/Medium/Expressive Words.java index b9b70e1e..2903acba 100644 --- a/Medium/Expressive Words.java +++ b/Medium/Expressive Words.java @@ -1,47 +1,32 @@ class Solution { - public int expressiveWords(String S, String[] words) { - int count = 0; - char[] sChar = S.toCharArray(); - for (String word : words) { - char[] wChar = word.toCharArray(); - if (check(sChar, wChar)) { - count++; - } - } - - return count; - } - - private boolean check(char[] s, char[] w) { - int i = 0; - int j = 0; - - while (i < s.length && j < w.length) { - if (s[i] != w[j]) { - return false; - } - - int tempI = i; - int tempJ = j; - - while (i < s.length && s[i] == s[tempI]) { - i++; - } - - while (j < w.length && w[j] == w[tempJ]) { - j++; - } - - int l1 = i - tempI; - int l2 = j - tempJ; - - if (l1 == l2 || l1 >= 3 && l1 > l2) { - continue; - } - - return false; - } - - return i == s.length && j == w.length; + public int expressiveWords(String s, String[] words) { + return (int) Arrays.stream(words).filter(word -> isExpressive(s, word)).count(); + } + + private boolean isExpressive(String s, String word) { + int sIdx = 0; + int wordIdx = 0; + while (sIdx < s.length() && wordIdx < word.length()) { + if (s.charAt(sIdx) != word.charAt(wordIdx)) { + return false; + } + char c1 = s.charAt(sIdx); + int countC1 = 0; + while (sIdx < s.length() && s.charAt(sIdx) == c1) { + sIdx++; + countC1++; + } + char c2 = word.charAt(wordIdx); + int countC2 = 0; + while (wordIdx < word.length() && word.charAt(wordIdx) == c2) { + wordIdx++; + countC2++; + } + if (countC1 == countC2 || (countC1 > countC2 && countC1 >= 3)) { + continue; + } + return false; } + return sIdx == s.length() && wordIdx == word.length(); + } } From 916cbdb1a53d4e7f3b938d9786f2a1a4351729e6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Mar 2022 10:57:31 +0530 Subject: [PATCH 0359/1640] Update Count Binary Substrings.java --- Easy/Count Binary Substrings.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Easy/Count Binary Substrings.java b/Easy/Count Binary Substrings.java index ff2ee4b0..a0818c9f 100644 --- a/Easy/Count Binary Substrings.java +++ b/Easy/Count Binary Substrings.java @@ -1,19 +1,19 @@ class Solution { public int countBinarySubstrings(String s) { - int currValueCount = 1; - int prevValueCount = 0; - int count = 0; - for (int i = 1; i < s.length(); i++) { - if (s.charAt(i) == s.charAt(i - 1)) { - currValueCount++; + int totalCount = 0; + int currCount = 0; + int oppositeCount = 0; + char currChar = s.charAt(0); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == currChar) { + currCount++; } else { - prevValueCount = currValueCount; - currValueCount = 1; - } - if (prevValueCount >= currValueCount) { - count++; + totalCount += Math.min(currCount, oppositeCount); + oppositeCount = currCount; + currCount = 1; + currChar = s.charAt(i); } } - return count; + return totalCount + Math.min(currCount, oppositeCount); } } From ab4fb5c3fe960abc9b2cdc9f8d5079b376e71692 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Mar 2022 05:34:36 +0530 Subject: [PATCH 0360/1640] Create Find the Difference of Two Arrays.java --- Easy/Find the Difference of Two Arrays.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Find the Difference of Two Arrays.java diff --git a/Easy/Find the Difference of Two Arrays.java b/Easy/Find the Difference of Two Arrays.java new file mode 100644 index 00000000..fa061f5f --- /dev/null +++ b/Easy/Find the Difference of Two Arrays.java @@ -0,0 +1,9 @@ +class Solution { + public List> findDifference(int[] nums1, int[] nums2) { + Set setOne = Arrays.stream(nums1).boxed().collect(Collectors.toSet()); + Set setTwo = Arrays.stream(nums2).boxed().collect(Collectors.toSet()); + return Arrays.asList( + setOne.stream().filter(e -> !setTwo.contains(e)).collect(Collectors.toList()), + setTwo.stream().filter(e -> !setOne.contains(e)).collect(Collectors.toList())); + } +} From c773c121f546ed990be8862528ed56976cab8add Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Mar 2022 09:04:52 +0530 Subject: [PATCH 0361/1640] Create Design Bounded Blocking Queue.java --- .../Design Bounded Blocking Queue.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Concurrency/Design Bounded Blocking Queue.java diff --git a/Concurrency/Design Bounded Blocking Queue.java b/Concurrency/Design Bounded Blocking Queue.java new file mode 100644 index 00000000..a8e0a3d2 --- /dev/null +++ b/Concurrency/Design Bounded Blocking Queue.java @@ -0,0 +1,42 @@ +class BoundedBlockingQueue { + + private final Queue queue; + private final Semaphore mutex; + private final Semaphore items; + private final Semaphore capacityTracker; + private int currentCapacity; + + public BoundedBlockingQueue(int capacity) { + this.queue = new LinkedList<>(); + this.mutex = new Semaphore(1); + this.items = new Semaphore(0); + this.capacityTracker = new Semaphore(capacity); + this.currentCapacity = 0; + } + + public void enqueue(int element) throws InterruptedException { + this.capacityTracker.acquire(); + this.mutex.acquire(); + this.queue.add(element); + this.currentCapacity++; + this.mutex.release(); + this.items.release(); + } + + public int dequeue() throws InterruptedException { + this.items.acquire(); + this.mutex.acquire(); + int result = this.queue.remove(); + this.currentCapacity--; + this.mutex.release(); + this.capacityTracker.release(); + return result; + } + + public int size() throws InterruptedException { + this.mutex.acquire(); + int currentSize = this.currentCapacity; + this.mutex.release(); + return currentSize; + } +} From 066ff00ed89db4c787d779f3b96e7f65719909c2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Mar 2022 21:18:06 +0530 Subject: [PATCH 0362/1640] Update Search in Rotated Sorted Array II.java --- Medium/Search in Rotated Sorted Array II.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/Medium/Search in Rotated Sorted Array II.java b/Medium/Search in Rotated Sorted Array II.java index 83c15734..65081528 100644 --- a/Medium/Search in Rotated Sorted Array II.java +++ b/Medium/Search in Rotated Sorted Array II.java @@ -2,34 +2,27 @@ class Solution { public boolean search(int[] nums, int target) { int start = 0; int end = nums.length - 1; - int mid = -1; while (start <= end) { - mid = (start + end) / 2; + int mid = (start + end) / 2; if (nums[mid] == target) { return true; } - // Either right side is sorted or left side is unsorted if (nums[mid] < nums[end] || nums[mid] < nums[start]) { if (target > nums[mid] && target <= nums[end]) { start = mid + 1; - } - else { + } else { end = mid - 1; } - } - // Either left side is sorted or right side is unsorted - else if (nums[mid] > nums[start] || nums[mid] > nums[end]) { + } else if (nums[mid] > nums[start] || nums[mid] > nums[end]) { if (target < nums[mid] && target >= nums[start]) { end = mid - 1; - } - else { + } else { start = mid + 1; } - } - else { + } else { end--; } } return false; - } + } } From f4076d1aee3badf4c35c1087a2576efbc625e4bd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Mar 2022 22:10:52 +0530 Subject: [PATCH 0363/1640] Create Longest Happy String.java --- Medium/Longest Happy String.java | 42 ++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Medium/Longest Happy String.java diff --git a/Medium/Longest Happy String.java b/Medium/Longest Happy String.java new file mode 100644 index 00000000..145fd638 --- /dev/null +++ b/Medium/Longest Happy String.java @@ -0,0 +1,42 @@ +class Solution { + public String longestDiverseString(int a, int b, int c) { + PriorityQueue priorityQueue = new PriorityQueue<>((o1, o2) -> o2[1] - o1[1]); + if (a > 0) { + priorityQueue.add(new int[]{0, a}); + } + if (b > 0) { + priorityQueue.add(new int[]{1, b}); + } + if (c > 0) { + priorityQueue.add(new int[]{2, c}); + } + StringBuilder sb = new StringBuilder("zz"); + while (!priorityQueue.isEmpty()) { + int[] temp = {-1, -1}; + char peekChar = (char) ('a' + priorityQueue.peek()[0]); + if (peekChar == sb.charAt(sb.length() - 1) && + peekChar == sb.charAt(sb.length() - 2)) { + temp[0] = priorityQueue.peek()[0]; + temp[1] = priorityQueue.peek()[1]; + priorityQueue.poll(); + if (priorityQueue.isEmpty()) { + break; + } + } + peekChar = (char) ('a' + priorityQueue.peek()[0]); + if (peekChar != sb.charAt(sb.length() - 1) || + peekChar != sb.charAt(sb.length() - 2)) { + int[] removed = priorityQueue.poll(); + sb.append(peekChar); + removed[1]--; + if (removed[1] > 0) { + priorityQueue.add(removed); + } + } + if (temp[0] != -1) { + priorityQueue.add(temp); + } + } + return sb.substring(2).toString(); + } +} From 93bc3b7ce1d6562d5bd66a8651935a91fd18e645 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Mar 2022 10:11:13 +0530 Subject: [PATCH 0364/1640] Create Minimum Deletions to Make Array Beautiful.java --- .../Minimum Deletions to Make Array Beautiful.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Minimum Deletions to Make Array Beautiful.java diff --git a/Medium/Minimum Deletions to Make Array Beautiful.java b/Medium/Minimum Deletions to Make Array Beautiful.java new file mode 100644 index 00000000..8567e813 --- /dev/null +++ b/Medium/Minimum Deletions to Make Array Beautiful.java @@ -0,0 +1,14 @@ +class Solution { + public int minDeletion(int[] nums) { + int numOfDeletions = 0; + int prevNum = -1; + for (int num : nums) { + if (num == prevNum) { + numOfDeletions++; + } else { + prevNum = prevNum == -1 ? num : -1; + } + } + return prevNum == -1 ? numOfDeletions : numOfDeletions + 1; + } +} From dbf5f10f181595f8977e83536765b1d3a39786fb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Mar 2022 10:23:13 +0530 Subject: [PATCH 0365/1640] Update and rename Find the duplicate number.java to Find the Duplicate Number.java --- Medium/Find the Duplicate Number.java | 16 ++++++++++++++++ Medium/Find the duplicate number.java | 20 -------------------- 2 files changed, 16 insertions(+), 20 deletions(-) create mode 100644 Medium/Find the Duplicate Number.java delete mode 100644 Medium/Find the duplicate number.java diff --git a/Medium/Find the Duplicate Number.java b/Medium/Find the Duplicate Number.java new file mode 100644 index 00000000..c4f5a541 --- /dev/null +++ b/Medium/Find the Duplicate Number.java @@ -0,0 +1,16 @@ +class Solution { + public int findDuplicate(int[] nums) { + int slow = nums[0]; + int fast = nums[0]; + do { + slow = nums[slow]; + fast = nums[nums[fast]]; + } while (slow != fast); + slow = nums[0]; + while (slow != fast) { + slow = nums[slow]; + fast = nums[fast]; + } + return fast; + } +} diff --git a/Medium/Find the duplicate number.java b/Medium/Find the duplicate number.java deleted file mode 100644 index d05d0a60..00000000 --- a/Medium/Find the duplicate number.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public int findDuplicate(int[] nums) { - int tortoise = nums[0]; - int hare = nums[0]; - while(true) { - tortoise = nums[tortoise]; - hare = nums[nums[hare]]; - if (tortoise == hare) { - break; - } - } - int p1 = nums[0]; - int p2 = tortoise; - while (p1 != p2) { - p1 = nums[p1]; - p2 = nums[p2]; - } - return p1; - } -} From ebc167fecb113569cac589d412a7bea50fb2f694 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Mar 2022 23:20:11 +0530 Subject: [PATCH 0366/1640] Update Path With Maximum Minimum Value.java --- Medium/Path With Maximum Minimum Value.java | 43 +++++++++------------ 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/Medium/Path With Maximum Minimum Value.java b/Medium/Path With Maximum Minimum Value.java index d2204779..31942850 100644 --- a/Medium/Path With Maximum Minimum Value.java +++ b/Medium/Path With Maximum Minimum Value.java @@ -1,34 +1,27 @@ class Solution { - int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - public int maximumMinimumPath(int[][] A) { - int rows = A.length; - int cols = A[0].length; - boolean[][] visited = new boolean[rows][cols]; - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(int[] p1, int[] p2) { - return p2[0] - p1[0]; - } - }); - int maxVal = A[0][0]; - pq.add(new int[]{A[0][0], 0, 0}); - visited[0][0] = true; + + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int maximumMinimumPath(int[][] grid) { + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o2[2] - o1[2]); + pq.add(new int[]{0, 0, grid[0][0]}); + int numRows = grid.length; + int numCols = grid[0].length; + boolean[][] visited = new boolean[numRows][numCols]; while (!pq.isEmpty()) { int[] removed = pq.poll(); - int x = removed[1]; - int y = removed[2]; - maxVal = Math.min(maxVal, removed[0]); - if (x == rows - 1 && y == cols - 1) { - break; + if (removed[0] == numRows - 1 && removed[1] == numCols - 1) { + return removed[2]; } - for (int[] dir : dirs) { - int newX = x + dir[0]; - int newY = y + dir[1]; - if (newX >= 0 && newY >= 0 && newX < rows && newY < cols && !visited[newX][newY]) { - pq.add(new int[]{A[newX][newY], newX, newY}); - visited[newX][newY] = true; + visited[removed[0]][removed[1]] = true; + for (int[] dir : DIRS) { + int newX = removed[0] + dir[0]; + int newY = removed[1] + dir[1]; + if (newX >= 0 && newY >= 0 && newX < numRows && newY < numCols && !visited[newX][newY]) { + pq.add(new int[]{newX, newY, Math.min(removed[2], grid[newX][newY])}); } } } - return maxVal; + return -1; } } From ee812ba77c0b4fd239e670b3376a4fd0b991eb8c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Mar 2022 23:34:14 +0530 Subject: [PATCH 0367/1640] Update Climbing Stairs.java --- Easy/Climbing Stairs.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/Easy/Climbing Stairs.java b/Easy/Climbing Stairs.java index e35175f2..f2ff9386 100644 --- a/Easy/Climbing Stairs.java +++ b/Easy/Climbing Stairs.java @@ -1,20 +1,14 @@ class Solution { - int[] memo; public int climbStairs(int n) { if (n == 1) { return 1; } - memo = new int[n + 1]; - memo[1] = 1; - memo[2] = 2; - return helper(n); - } - - private int helper(int n) { - if (memo[n] != 0) { - return memo[n]; + int[] dp = new int[n + 1]; + dp[1] = 1; + dp[2] = 2; + for (int i = 3; i <= n; i++) { + dp[i] = dp[i - 1] + dp[i - 2]; } - memo[n] = helper(n - 1) + helper(n - 2); - return memo[n]; + return dp[n]; } } From 070bec9cc87ad938092c8796afefe3025baae390 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Mar 2022 23:54:36 +0530 Subject: [PATCH 0368/1640] Update and rename Easy/House Robber.java to Medium/House Robber.java --- Easy/House Robber.java | 14 -------------- Medium/House Robber.java | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) delete mode 100644 Easy/House Robber.java create mode 100644 Medium/House Robber.java diff --git a/Easy/House Robber.java b/Easy/House Robber.java deleted file mode 100644 index 6ec92f46..00000000 --- a/Easy/House Robber.java +++ /dev/null @@ -1,14 +0,0 @@ -class Solution { - public int rob(int[] nums) { - if (nums.length == 0) { - return 0; - } - int[] dp = new int[nums.length + 1]; - dp[0] = 0; - dp[1] = nums[0]; - for (int i = 1; i < nums.length; i++) { - dp[i + 1] = Math.max(dp[i], dp[i - 1] + nums[i]); - } - return dp[nums.length]; - } -} diff --git a/Medium/House Robber.java b/Medium/House Robber.java new file mode 100644 index 00000000..8837a99d --- /dev/null +++ b/Medium/House Robber.java @@ -0,0 +1,14 @@ +class Solution { + public int rob(int[] nums) { + if (nums.length == 1) { + return nums[0]; + } + int[] dp = new int[nums.length]; + dp[0] = nums[0]; + dp[1] = Math.max(nums[0], nums[1]); + for (int i = 2; i < nums.length; i++) { + dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]); + } + return dp[nums.length - 1]; + } +} From f1ed2bc744460d93bb250754478241c9bacdaaf9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 30 Mar 2022 08:57:26 +0530 Subject: [PATCH 0369/1640] Update Search a 2D Matrix.java --- Medium/Search a 2D Matrix.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Medium/Search a 2D Matrix.java b/Medium/Search a 2D Matrix.java index bb5861eb..e7de2a1f 100644 --- a/Medium/Search a 2D Matrix.java +++ b/Medium/Search a 2D Matrix.java @@ -1,23 +1,18 @@ class Solution { public boolean searchMatrix(int[][] matrix, int target) { - if (matrix.length == 0 || matrix[0].length == 0) { - return false; - } int rowIdx = matrix.length - 1; int colIdx = matrix[0].length - 1; while (rowIdx >= 0 && colIdx >= 0) { - int val = matrix[rowIdx][colIdx]; - if (val == target) { + if (matrix[rowIdx][colIdx] == target) { return true; } - if (val >= matrix[rowIdx][0]) { + if (matrix[rowIdx][colIdx] > target) { colIdx--; if (colIdx < 0) { colIdx = matrix[0].length - 1; rowIdx--; } - } - else { + } else { rowIdx--; } } From 1c0e419cb10f87c7d6fa6fb0e69ef6d577b07280 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 30 Mar 2022 17:14:50 +0530 Subject: [PATCH 0370/1640] Update Minimum Deletions to Make Character Frequencies Unique.java --- ... to Make Character Frequencies Unique.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Medium/Minimum Deletions to Make Character Frequencies Unique.java b/Medium/Minimum Deletions to Make Character Frequencies Unique.java index f05bace6..f98fa559 100644 --- a/Medium/Minimum Deletions to Make Character Frequencies Unique.java +++ b/Medium/Minimum Deletions to Make Character Frequencies Unique.java @@ -1,25 +1,25 @@ class Solution { public int minDeletions(String s) { - int[] frequencies = new int[26]; + int[] frequency = new int[26]; for (char c : s.toCharArray()) { - frequencies[c - 'a']++; + frequency[c - 'a']++; } - Arrays.sort(frequencies); - int expectedFrequency = frequencies[25]; - int numOfDeletions = 0; - for (int i = 25; i >= 0; i--) { - if (frequencies[i] == 0) { - break; - } - if (frequencies[i] > expectedFrequency) { - numOfDeletions += frequencies[i] - expectedFrequency; - } else { - expectedFrequency = frequencies[i]; + PriorityQueue pq = new PriorityQueue<>(Collections.reverseOrder()); + for (int freq : frequency) { + if (freq > 0) { + pq.add(freq); } - if (expectedFrequency > 0) { - expectedFrequency--; + } + int numOfDeletions = 0; + while (!pq.isEmpty()) { + int removedFreq = pq.poll(); + if (!pq.isEmpty() && pq.peek() == removedFreq) { + numOfDeletions++; + if (removedFreq > 1) { + pq.add(removedFreq - 1); + } } } return numOfDeletions; - } + } } From 875122b45fa53ef16975862382f1ce5b2d403fcb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 30 Mar 2022 21:35:34 +0530 Subject: [PATCH 0371/1640] Update Remove Duplicates From Sorted Lists.java --- Easy/Remove Duplicates From Sorted Lists.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Easy/Remove Duplicates From Sorted Lists.java b/Easy/Remove Duplicates From Sorted Lists.java index 53626725..fbd899d4 100644 --- a/Easy/Remove Duplicates From Sorted Lists.java +++ b/Easy/Remove Duplicates From Sorted Lists.java @@ -3,19 +3,19 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode curr = head; while (curr != null) { - if (curr.next != null && curr.val == curr.next.val) { + while (curr.next != null && curr.next.val == curr.val) { curr.next = curr.next.next; } - else { - curr = curr.next; - } + curr = curr.next; } return head; } From b7f991fc70349fb80607a22a525724b7335ddbeb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 31 Mar 2022 21:05:41 +0530 Subject: [PATCH 0372/1640] Update Flip Game.java --- Easy/Flip Game.java | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) diff --git a/Easy/Flip Game.java b/Easy/Flip Game.java index 727227e2..75a364a0 100644 --- a/Easy/Flip Game.java +++ b/Easy/Flip Game.java @@ -1,30 +1,11 @@ class Solution { - public static List generatePossibleNextMoves(String s) { - List ans = new ArrayList<>(); - - if (s.length() < 2) { - return ans; - } - - if (s.equals("--")) { - return ans; - } - - int i = 0; - while (i < s.length()-1) { - if (s.charAt(i) == s.charAt(i+1) && s.charAt(i) == '+') { - StringBuilder sb = new StringBuilder(); - sb.append(s.substring(0, i)); - sb.append('-'); - sb.append('-'); - sb.append(s.substring(i+2)); - - ans.add(sb.toString()); - } - - i++; - } - - return ans; + public List generatePossibleNextMoves(String currentState) { + List list = new ArrayList<>(); + for (int i = 1; i < currentState.length(); i++) { + if (currentState.charAt(i) == '+' && currentState.charAt(i - 1) == '+') { + list.add(currentState.substring(0, i - 1) + "--" + currentState.substring(i + 1)); + } } + return list; + } } From 183aed558be71d9a28c180109e6f5548eae1afe8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Apr 2022 10:33:58 +0530 Subject: [PATCH 0373/1640] Update LFU Cache.java --- Hard/LFU Cache.java | 156 +++++++++++++++++++++++++++----------------- 1 file changed, 95 insertions(+), 61 deletions(-) diff --git a/Hard/LFU Cache.java b/Hard/LFU Cache.java index 588f7a60..4d52ade6 100644 --- a/Hard/LFU Cache.java +++ b/Hard/LFU Cache.java @@ -1,78 +1,112 @@ class LFUCache { - private Map valMap; - private Map freqMap; - private Map> freqCountMap; - private int capacity; - private int minValue; + private final Map keyToNodeMap; + private final Map frequencyToNodeMap; + private final Map keyToFrequencyMap; + private int capacity; + private int currentCapacity; - public LFUCache(int capacity) { - valMap = new HashMap<>(); - freqMap = new HashMap<>(); - freqCountMap = new HashMap<>(); - this.capacity = capacity; - minValue = 0; - } + public LFUCache(int capacity) { + this.capacity = capacity; + this.currentCapacity = 0; + this.keyToNodeMap = new HashMap<>(); + this.frequencyToNodeMap = new TreeMap<>(); + this.keyToFrequencyMap = new HashMap<>(); + } - public int get(int key) { - if (!valMap.containsKey(key)) { - return -1; - } + public int get(int key) { + if (!keyToNodeMap.containsKey(key)) { + return -1; + } + Node node = keyToNodeMap.get(key); + removeNode(node); + int currentFrequency = keyToFrequencyMap.get(key); + int newFrequency = currentFrequency + 1; + keyToFrequencyMap.put(key, newFrequency); + addNodeToFrequencyHead(node, newFrequency); + return node.val; + } - // Updating frequency - int oldFreq = freqMap.get(key); - freqMap.put(key, oldFreq + 1); - int newFreq = freqMap.get(key); + public void put(int key, int value) { + if (this.capacity == 0) { + return; + } + removeNodeIfCapacityReached(key); + Node node = getNode(key, value); + int newFrequency = keyToFrequencyMap.getOrDefault(key, 0) + 1; + keyToFrequencyMap.put(key, newFrequency); + keyToNodeMap.put(key, node); + if (newFrequency > 1) { + removeNode(node); + } + addNodeToFrequencyHead(node, newFrequency); + } - // Removing from old frequency set - LinkedHashSet set = freqCountMap.get(oldFreq); - set.remove(key); - if (set.isEmpty()) { - // As this was the only key with min freq so minimum frequency should be updated - if (minValue == oldFreq) { - minValue = oldFreq + 1; - } - freqCountMap.remove(oldFreq); - } - else { - freqCountMap.put(oldFreq, set); + private void removeNodeIfCapacityReached(int key) { + if (!keyToNodeMap.containsKey(key) && this.currentCapacity == capacity) { + for (Integer freq : frequencyToNodeMap.keySet()) { + Node[] nodes = frequencyToNodeMap.get(freq); + if (nodes[1].prev.val == -1) { + continue; } - - // Updating new frequency set - freqCountMap.computeIfAbsent(newFreq, k -> new LinkedHashSet<>()).add(key); - - return valMap.get(key); + Node toRemove = nodes[1].prev; + removeNode(toRemove); + keyToNodeMap.remove(toRemove.key); + keyToFrequencyMap.remove(toRemove.key); + this.currentCapacity--; + break; + } } + } - public void put(int key, int value) { - if (capacity == 0) { - return; - } - - if (get(key) != -1) { - valMap.put(key, value); - return; - } + private Node getNode(int key, int value) { + Node node; + if (keyToNodeMap.containsKey(key)) { + node = keyToNodeMap.get(key); + removeNode(node); + node.val = value; + } else { + this.currentCapacity++; + node = new Node(value, key); + } + return node; + } - if (valMap.size() == capacity) { - LinkedHashSet set = freqCountMap.get(minValue); - int keyToBeDeleted = set.iterator().next(); - valMap.remove(keyToBeDeleted); - freqMap.remove(keyToBeDeleted); - set.remove(keyToBeDeleted); + private void addNodeToFrequencyHead(Node node, int newFrequency) { + if (!frequencyToNodeMap.containsKey(newFrequency)) { + Node head = new Node(-1, Integer.MIN_VALUE); + Node tail = new Node(-1, Integer.MAX_VALUE); + head.next = tail; + tail.prev = head; + frequencyToNodeMap.put(newFrequency, new Node[]{head, tail}); + } + Node headNode = frequencyToNodeMap.get(newFrequency)[0]; + Node nextToHead = headNode.next; + nextToHead.prev = node; + node.next = nextToHead; + headNode.next = node; + node.prev = headNode; + } + + private void removeNode(Node node) { + Node prevNode = node.prev; + Node nextNode = node.next; + prevNode.next = nextNode; + nextNode.prev = prevNode; + } - if (set.isEmpty()) { - freqCountMap.remove(minValue); - } - } + private static class Node { + int val; + int key; + Node next; + Node prev; - valMap.put(key, value); - freqMap.put(key, 1); - freqCountMap.computeIfAbsent(1, k -> new LinkedHashSet<>()).add(key); - minValue = 1; + public Node(int val, int key) { + this.val = val; + this.key = key; } + } } - /** * Your LFUCache object will be instantiated and called as such: * LFUCache obj = new LFUCache(capacity); From 2c237417a8d9b798ed6c38d6616b69a38c938eb8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Apr 2022 17:12:45 +0530 Subject: [PATCH 0374/1640] Update Max Stack.java --- Easy/Max Stack.java | 82 +++++++++++++++++++++++++++++++++------------ 1 file changed, 60 insertions(+), 22 deletions(-) diff --git a/Easy/Max Stack.java b/Easy/Max Stack.java index 3125c3d0..e320e096 100644 --- a/Easy/Max Stack.java +++ b/Easy/Max Stack.java @@ -1,45 +1,83 @@ class MaxStack { - /** initialize your data structure here. */ - Stack stack; - Stack max; + private Node stackHead; + private Node stackTail; + private PriorityQueue maxValues; + private Map> valToNodeMapping; + public MaxStack() { - stack = new Stack<>(); - max = new Stack<>(); + this.stackHead = new Node(Integer.MIN_VALUE); + this.stackTail = new Node(Integer.MAX_VALUE); + this.stackTail.prev = this.stackHead; + this.stackHead.next = this.stackTail; + this.maxValues = new PriorityQueue<>((o1, o2) -> o2 - o1); + this.valToNodeMapping = new HashMap<>(); } public void push(int x) { - stack.push(x); - max.push(max.isEmpty() ? x : Math.max(x, max.peek())); + Node node = new Node(x); + if (!this.valToNodeMapping.containsKey(x)) { + this.maxValues.add(x); + } + addNodeToStack(node); + this.valToNodeMapping.computeIfAbsent(x, k -> new Stack<>()).push(node); } public int pop() { - max.pop(); - return stack.pop(); + Node toRemove = this.stackHead.next; + this.valToNodeMapping.get(toRemove.val).pop(); + removeNodeFromStack(toRemove); + return toRemove.val; } public int top() { - return stack.peek(); + return this.stackHead.next.val; } public int peekMax() { - return max.peek(); + moveToMaxValue(); + int maxVal = this.maxValues.peek(); + return this.valToNodeMapping.get(maxVal).peek().val; } public int popMax() { - int num = max.peek(); - Stack temp = new Stack<>(); - while (stack.peek() != num) { - temp.push(stack.pop()); - max.pop(); + moveToMaxValue(); + int maxVal = this.maxValues.peek(); + Node toRemove = this.valToNodeMapping.get(maxVal).pop(); + removeNodeFromStack(toRemove); + return toRemove.val; + } + + private void moveToMaxValue() { + while (this.valToNodeMapping.get(this.maxValues.peek()).isEmpty()) { + this.valToNodeMapping.remove(this.maxValues.poll()); } - max.pop(); - stack.pop(); - while (!temp.isEmpty()) { - push(temp.pop()); + } + + private void addNodeToStack(Node node) { + Node nextToHead = this.stackHead.next; + nextToHead.prev = node; + node.next = nextToHead; + this.stackHead.next = node; + node.prev = this.stackHead; + } + + private void removeNodeFromStack(Node node) { + Node nextNode = node.next; + Node prevNode = node.prev; + prevNode.next = nextNode; + nextNode.prev = prevNode; + } + + private static class Node { + int val; + Node next; + Node prev; + + public Node(int val) { + this.val = val; } - return num; - } + } } /** From 8a945a7197645e7a1601707bd23a3993e93d7fe5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Apr 2022 09:44:22 +0530 Subject: [PATCH 0375/1640] Update Valid Palindrome II.java --- Easy/Valid Palindrome II.java | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/Easy/Valid Palindrome II.java b/Easy/Valid Palindrome II.java index c0edfc4c..a8627315 100644 --- a/Easy/Valid Palindrome II.java +++ b/Easy/Valid Palindrome II.java @@ -1,21 +1,26 @@ class Solution { public boolean validPalindrome(String s) { - int[] firstPalindromeCheck = isPalindromHelper(s); - if (firstPalindromeCheck[0] == -1) { - return true; - } - int[] skipLeft = isPalindromHelper(s.substring(firstPalindromeCheck[0] + 1, firstPalindromeCheck[1] + 1)); - int[] skipRight = isPalindromHelper(s.substring(firstPalindromeCheck[0], check[1])); - return skipLeft[0] == -1 || skipRight[0] == -1; - } - - private int[] isPalindromHelper(String s) { int startIdx = 0; int endIdx = s.length() - 1; - while (startIdx < endIdx && s.charAt(startIdx) == s.charAt(endIdx)) { + while (startIdx < endIdx) { + if (s.charAt(startIdx) != s.charAt(endIdx)) { + return isPalindromeWithDeletion(s, startIdx + 1, endIdx) || + isPalindromeWithDeletion(s, startIdx, endIdx - 1); + } + startIdx++; + endIdx--; + } + return true; + } + + private boolean isPalindromeWithDeletion(String s, int startIdx, int endIdx) { + while (startIdx < endIdx) { + if (s.charAt(startIdx) != s.charAt(endIdx)) { + return false; + } startIdx++; endIdx--; } - return startIdx >= endIdx ? new int[]{-1} : new int[]{startIdx, endIdx}; + return true; } } From 9389da70efb6e9664ecee48de4d8aed9df26afad Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Apr 2022 12:00:48 +0530 Subject: [PATCH 0376/1640] Create Brace Expansion.java --- Medium/Brace Expansion.java | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Medium/Brace Expansion.java diff --git a/Medium/Brace Expansion.java b/Medium/Brace Expansion.java new file mode 100644 index 00000000..38f0d5a4 --- /dev/null +++ b/Medium/Brace Expansion.java @@ -0,0 +1,47 @@ +class Solution { + public String[] expand(String s) { + List> splits = parseInput(s); + List result = new ArrayList<>(); + StringBuilder sb = new StringBuilder(); + helper(splits, result, sb, 0); + Collections.sort(result); + String[] answer = new String[result.size()]; + for (int i = 0; i < result.size(); i++) { + answer[i] = result.get(i); + } + return answer; + } + + private void helper(List> splits, List result, StringBuilder sb, int idx) { + if (idx >= splits.size()) { + if (sb.length() == splits.size()) { + result.add(new StringBuilder(sb.toString()).toString()); + } + } else { + for (int i = idx; i < splits.size(); i++) { + List currentSplit = splits.get(i); + for (String section : currentSplit) { + sb.append(section); + helper(splits, result, sb, i + 1); + sb.deleteCharAt(sb.length() - 1); + } + } + } + } + + private List> parseInput(String s) { + List> splits = new ArrayList<>(); + int idx = 0; + while (idx < s.length()) { + if (s.charAt(idx) == '{') { + int endIdx = s.indexOf('}', idx); + String[] segements = s.substring(idx + 1, endIdx).split(","); + splits.add(Arrays.asList(segements)); + idx = endIdx + 1; + } else { + splits.add(List.of(String.valueOf(s.charAt(idx++)))); + } + } + return splits; + } +} From 8bf6e50eda11c4dee38e14bc661837cab31c6f38 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Apr 2022 12:57:35 +0530 Subject: [PATCH 0377/1640] Update Min Stack.java --- Easy/Min Stack.java | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Easy/Min Stack.java b/Easy/Min Stack.java index 108f5e0c..70d88780 100644 --- a/Easy/Min Stack.java +++ b/Easy/Min Stack.java @@ -1,36 +1,32 @@ class MinStack { - - /** initialize your data structure here. */ - Stack stack; - Stack min; + private final Stack stack; + public MinStack() { - stack = new Stack<>(); - min = new Stack<>(); - } + this.stack = new Stack<>(); + } - public void push(int x) { - stack.push(x); - min.push(Math.min(x, min.isEmpty() ? Integer.MAX_VALUE : min.peek())); + public void push(int val) { + int min = stack.isEmpty() ? val : Math.min(val, stack.peek()[1]); + stack.push(new int[]{val, min}); } public void pop() { stack.pop(); - min.pop(); } public int top() { - return stack.peek(); + return stack.peek()[0]; } public int getMin() { - return min.peek(); + return stack.peek()[1]; } } /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); - * obj.push(x); + * obj.push(val); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); From 2b90fc1353a531bf8eb5d14e664749e7e71c5848 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Apr 2022 15:52:27 +0530 Subject: [PATCH 0378/1640] Update and rename Hard/Parallel Courses.java to Medium/Parallel Courses.java --- Hard/Parallel Courses.java | 46 ------------------------------------ Medium/Parallel Courses.java | 33 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 46 deletions(-) delete mode 100644 Hard/Parallel Courses.java create mode 100644 Medium/Parallel Courses.java diff --git a/Hard/Parallel Courses.java b/Hard/Parallel Courses.java deleted file mode 100644 index f2470294..00000000 --- a/Hard/Parallel Courses.java +++ /dev/null @@ -1,46 +0,0 @@ -class Solution { - public int minimumSemesters(int N, int[][] relations) { - Map> map = new HashMap<>(); - // A prerequisite counter for each course - int[] prereqs = new int[N + 1]; - - for (int[] relation : relations) { - map.computeIfAbsent(relation[0], k-> new ArrayList<>()).add(relation[1]); - prereqs[relation[1]]++; - } - - Queue queue = new LinkedList<>(); - - // Add all the courses which have no prerequisite - // So that we can take those courses in first semester - for (int i = 1; i <= N; i++) { - if (prereqs[i] == 0) { - queue.add(i); - } - } - - int semester = 0; - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int course = queue.poll(); - // Decrement N as we have taken a course that is removed from the queue - N--; - for (int pre : map.getOrDefault(course, new ArrayList<>())) { - /* - If a course which depends upon the removed course had only the removed course as prereq then we can - add it to the queue - */ - if (--prereqs[pre] == 0) { - queue.add(pre); - } - } - } - - // Semester over. New semester starts - semester++; - } - - return N == 0 ? semester : -1; - } -} diff --git a/Medium/Parallel Courses.java b/Medium/Parallel Courses.java new file mode 100644 index 00000000..a3843f23 --- /dev/null +++ b/Medium/Parallel Courses.java @@ -0,0 +1,33 @@ +class Solution { + public int minimumSemesters(int n, int[][] relations) { + Map> graph = new HashMap<>(); + int[] indegree = new int[n + 1]; + for (int[] relation : relations) { + graph.computeIfAbsent(relation[0], k -> new ArrayList<>()).add(relation[1]); + indegree[relation[1]]++; + } + Queue queue = new LinkedList<>(); + int numOfSemesters = 0; + Set coursesTaken = new HashSet<>(); + for (int i = 1; i <= n; i++) { + if (indegree[i] == 0) { + queue.add(i); + } + } + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int course = queue.remove(); + coursesTaken.add(course); + for (int dependentCourse : graph.getOrDefault(course, new ArrayList<>())) { + indegree[dependentCourse]--; + if (indegree[dependentCourse] <= 0 && !coursesTaken.contains(dependentCourse)) { + queue.add(dependentCourse); + } + } + } + numOfSemesters++; + } + return coursesTaken.size() == n ? numOfSemesters : -1; + } +} From 4ebe08e4fc836a6d308da895204e4335d7d224f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Apr 2022 10:50:31 +0530 Subject: [PATCH 0379/1640] Create Minimum Bit Flips to Convert Number.java --- Easy/Minimum Bit Flips to Convert Number.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Minimum Bit Flips to Convert Number.java diff --git a/Easy/Minimum Bit Flips to Convert Number.java b/Easy/Minimum Bit Flips to Convert Number.java new file mode 100644 index 00000000..d3e2da78 --- /dev/null +++ b/Easy/Minimum Bit Flips to Convert Number.java @@ -0,0 +1,19 @@ +class Solution { + public int minBitFlips(int start, int goal) { + int numOfFlips = 0; + while (start > 0 && goal > 0) { + numOfFlips += start % 2 != goal % 2 ? 1 : 0; + start /= 2; + goal /= 2; + } + while (start > 0) { + numOfFlips += start % 2; + start /= 2; + } + while (goal > 0) { + numOfFlips += goal % 2; + goal /= 2; + } + return numOfFlips; + } +} From 6f4684b8ec975d378d81911f2744b9579bb4988e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Apr 2022 10:56:54 +0530 Subject: [PATCH 0380/1640] Create Minimum Number of Operations to Convert Time.java --- ...um Number of Operations to Convert Time.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Minimum Number of Operations to Convert Time.java diff --git a/Easy/Minimum Number of Operations to Convert Time.java b/Easy/Minimum Number of Operations to Convert Time.java new file mode 100644 index 00000000..8a5f1db2 --- /dev/null +++ b/Easy/Minimum Number of Operations to Convert Time.java @@ -0,0 +1,17 @@ +class Solution { + public int convertTime(String current, String correct) { + int minutesDiff = getMinutes(correct) - getMinutes(current); + int numOfOperations = 0; + int[] incrementFactors = {60, 15, 5, 1}; + for (int i = 0; i < incrementFactors.length; i++) { + numOfOperations += minutesDiff / incrementFactors[i]; + minutesDiff %= incrementFactors[i]; + } + return numOfOperations; + } + + private int getMinutes(String time) { + String[] split = time.split(":"); + return Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1]); + } +} From 30b1345526411b480d2c77c7d8ce55968a7a9ed4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Apr 2022 14:26:25 +0530 Subject: [PATCH 0381/1640] Create Find Players With Zero or One Losses.java --- .../Find Players With Zero or One Losses.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Find Players With Zero or One Losses.java diff --git a/Medium/Find Players With Zero or One Losses.java b/Medium/Find Players With Zero or One Losses.java new file mode 100644 index 00000000..f3f14ff5 --- /dev/null +++ b/Medium/Find Players With Zero or One Losses.java @@ -0,0 +1,24 @@ +class Solution { + public List> findWinners(int[][] matches) { + Map lossCount = new HashMap<>(); + Set players = new HashSet<>(); + for (int[] match : matches) { + lossCount.put(match[1], lossCount.getOrDefault(match[1], 0) + 1); + players.add(match[0]); + players.add(match[1]); + } + List noLoss = new ArrayList<>(); + List exactlyOneLoss = new ArrayList<>(); + for (Integer player : players) { + if (!lossCount.containsKey(player)) { + noLoss.add(player); + } + if (lossCount.getOrDefault(player, 0) == 1) { + exactlyOneLoss.add(player); + } + } + Collections.sort(noLoss); + Collections.sort(exactlyOneLoss); + return Arrays.asList(noLoss, exactlyOneLoss); + } +} From 979fdd6146bdbe91b287260a8822f0e2255f78f3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Apr 2022 12:03:57 +0530 Subject: [PATCH 0382/1640] Update Swapping Nodes in a Linked List.java --- Medium/Swapping Nodes in a Linked List.java | 46 +++++++++++++++------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/Medium/Swapping Nodes in a Linked List.java b/Medium/Swapping Nodes in a Linked List.java index e16f50b1..8fdf72f4 100644 --- a/Medium/Swapping Nodes in a Linked List.java +++ b/Medium/Swapping Nodes in a Linked List.java @@ -10,22 +10,44 @@ */ class Solution { public ListNode swapNodes(ListNode head, int k) { - ListNode fast = null; + int listLength = 0; ListNode curr = head; - int currCount = 1; - while (currCount != k) { + while (curr != null) { + listLength++; curr = curr.next; - currCount++; } - fast = curr; - ListNode slow = head; - while (curr.next != null) { - slow = slow.next; - curr = curr.next; + ListNode startPrev = null; + ListNode start = head; + ListNode endPrev = null; + ListNode end = head; + int count = k - 1; + while (count > 0) { + startPrev = start; + start = start.next; + count--; + } + count = listLength - k; + while (count > 0) { + endPrev = end; + end = end.next; + count--; + } + if (startPrev != null) { + startPrev.next = end; + } + if (endPrev != null) { + endPrev.next = start; + } + ListNode temp = start.next; + start.next = end.next; + end.next = temp; + // Updating head pointers if required + if (k == 1) { + head = end; + } + if (k == listLength) { + head = start; } - int temp = fast.val; - fast.val = slow.val; - slow.val = temp; return head; } } From e4260f92f0662617d1038efad6bb691e88630370 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Apr 2022 19:38:56 +0530 Subject: [PATCH 0383/1640] Create Find Triangular Sum of an Array.java --- Medium/Find Triangular Sum of an Array.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Find Triangular Sum of an Array.java diff --git a/Medium/Find Triangular Sum of an Array.java b/Medium/Find Triangular Sum of an Array.java new file mode 100644 index 00000000..0da1ef52 --- /dev/null +++ b/Medium/Find Triangular Sum of an Array.java @@ -0,0 +1,12 @@ +class Solution { + public int triangularSum(int[] nums) { + int n = nums.length; + while (n > 1) { + for (int i = 0; i + 1 < n; i++) { + nums[i] = (nums[i] + nums[i + 1]) % 10; + } + n--; + } + return nums[0]; + } +} From 1e41ec3004df116a68f4614be1df47ed9ccea18b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Apr 2022 23:25:49 +0530 Subject: [PATCH 0384/1640] Update Course Schedule II.java --- Medium/Course Schedule II.java | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/Medium/Course Schedule II.java b/Medium/Course Schedule II.java index 4dc8b847..78fb8e08 100644 --- a/Medium/Course Schedule II.java +++ b/Medium/Course Schedule II.java @@ -1,29 +1,30 @@ class Solution { public int[] findOrder(int numCourses, int[][] prerequisites) { - Map> map = new HashMap<>(); - int[] prereqCount = new int[numCourses]; + Map> prerequisiteToCourseDependency = new HashMap<>(); + int[] prerequisiteCount = new int[numCourses]; for (int[] prerequisite : prerequisites) { - prereqCount[prerequisite[0]]++; - map.computeIfAbsent(prerequisite[1], k -> new ArrayList<>()).add(prerequisite[0]); + prerequisiteToCourseDependency.computeIfAbsent(prerequisite[1], k -> new ArrayList<>()) + .add(prerequisite[0]); + prerequisiteCount[prerequisite[0]]++; } Queue queue = new LinkedList<>(); for (int i = 0; i < numCourses; i++) { - if (prereqCount[i] == 0) { + if (prerequisiteCount[i] == 0) { queue.add(i); } } - int[] ans = new int[numCourses]; - int idx = 0; + int[] courseOrder = new int[numCourses]; + int courseOrderIdx = 0; while (!queue.isEmpty()) { - int removed = queue.remove(); - for (Integer dependentCourse : map.getOrDefault(removed, new ArrayList<>())) { - prereqCount[dependentCourse]--; - if (prereqCount[dependentCourse] == 0) { + int course = queue.remove(); + courseOrder[courseOrderIdx++] = course; + for (Integer dependentCourse : prerequisiteToCourseDependency.getOrDefault(course, new ArrayList<>())) { + prerequisiteCount[dependentCourse]--; + if (prerequisiteCount[dependentCourse] == 0) { queue.add(dependentCourse); } } - ans[idx++] = removed; } - return idx == numCourses ? ans : new int[]{}; + return courseOrderIdx == numCourses ? courseOrder : new int[]{}; } } From 0772a03dec973be1f7ae35a9ec0ba762a84cfa01 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Apr 2022 23:47:48 +0530 Subject: [PATCH 0385/1640] Update Diameter of N-ary Tree.java --- Medium/Diameter of N-ary Tree.java | 34 +++++++++++++++--------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Medium/Diameter of N-ary Tree.java b/Medium/Diameter of N-ary Tree.java index 96ac97a5..7bf358a5 100644 --- a/Medium/Diameter of N-ary Tree.java +++ b/Medium/Diameter of N-ary Tree.java @@ -23,28 +23,28 @@ public Node(int _val,ArrayList _children) { class Solution { public int diameter(Node root) { - int[] max = {0}; - helper(root, max); - return max[0]; + int[] diameter = {0}; + getHeight(root, diameter); + return diameter[0]; } - private int helper(Node root, int[] max) { - if (root == null) { + private int getHeight(Node node, int[] diameter) { + if (node.children.size() == 0) { return 0; } - int max1 = 0; - int max2 = 0; - for (Node child : root.children) { - int height = helper(child, max); - if (max1 < height) { - max2 = max1; - max1 = height; - } - else if (max2 < height) { - max2 = height; + int maxHeightOne = 0; + int maxHeightTwo = 0; + for (Node child : node.children) { + int parentHeight = getHeight(child, diameter) + 1; + if (parentHeight > maxHeightOne) { + maxHeightTwo = maxHeightOne; + maxHeightOne = parentHeight; + } else if (parentHeight > maxHeightTwo) { + maxHeightTwo = parentHeight; } + int currentDiameter = maxHeightOne + maxHeightTwo; + diameter[0] = Math.max(diameter[0], currentDiameter); } - max[0] = Math.max(max[0], max1 + max2); - return max1 + 1; + return maxHeightOne; } } From 274ebd75bfc4a2d7c39554c08853a0a9284c2f02 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Apr 2022 08:52:04 +0530 Subject: [PATCH 0386/1640] Update Container With Most Water.java --- Medium/Container With Most Water.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Medium/Container With Most Water.java b/Medium/Container With Most Water.java index cbfacba0..17fc1799 100644 --- a/Medium/Container With Most Water.java +++ b/Medium/Container With Most Water.java @@ -1,17 +1,18 @@ class Solution { public int maxArea(int[] height) { - int maxWater = 0; - int start = 0; - int end = height.length - 1; - while (start < end) { - int minHeight = Math.min(height[start], height[end]); - maxWater = Math.max(maxWater, minHeight * (end - start)); - if (height[start] > height[end]) { - end--; + int maximumArea = 0; + int leftIdx = 0; + int rightIdx = height.length - 1; + while (leftIdx < rightIdx) { + int maxHeight = Math.min(height[leftIdx], height[rightIdx]); + int currArea = maxHeight * (rightIdx - leftIdx); + maximumArea = Math.max(currArea, maximumArea); + if (maxHeight == height[leftIdx]) { + leftIdx++; } else { - start++; + rightIdx--; } } - return maxWater; + return maximumArea; } } From 328a063b06c410439d6af2d0d3b868b523a77537 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Apr 2022 14:01:54 +0530 Subject: [PATCH 0387/1640] Update Rank Teams by Votes.java --- Medium/Rank Teams by Votes.java | 37 ++++++++++++++------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/Medium/Rank Teams by Votes.java b/Medium/Rank Teams by Votes.java index f7ced0c6..e3cf32af 100644 --- a/Medium/Rank Teams by Votes.java +++ b/Medium/Rank Teams by Votes.java @@ -1,32 +1,27 @@ class Solution { public String rankTeams(String[] votes) { - Map map = new HashMap<>(); - int n = votes[0].length(); - for(String vote : votes) { - for (int i = 0; i < n; i++) { - if (!map.containsKey(vote.charAt(i))) { - map.put(vote.charAt(i), new int[n]); - } - map.get(vote.charAt(i))[i]++; + Map> map = new HashMap<>(); + int positionCount = votes[0].length(); + for (String vote : votes) { + for (int i = 0; i < vote.length(); i++) { + char c = vote.charAt(i); + map.computeIfAbsent(c, k -> new HashMap<>()); + map.get(c).put(i, map.get(c).getOrDefault(i, 0) + 1); } } - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(Character c1, Character c2) { - for (int i = 0; i < n; i++) { - int c = map.get(c2)[i] - map.get(c1)[i]; - if (c != 0) { - return c; - } + PriorityQueue priorityQueue = new PriorityQueue<>((o1, o2) -> { + for (int i = 0; i < positionCount; i++) { + int c = map.get(o2).getOrDefault(i, 0) - map.get(o1).getOrDefault(i, 0); + if (c != 0) { + return c; } - return c1 - c2; } + return o1 - o2; }); - for (char c : votes[0].toCharArray()) { - pq.add(c); - } + priorityQueue.addAll(map.keySet()); StringBuilder sb = new StringBuilder(); - while (!pq.isEmpty()) { - sb.append(pq.poll()); + while (!priorityQueue.isEmpty()) { + sb.append(priorityQueue.poll()); } return sb.toString(); } From 2e8bd9e98c42ced01c8f765b27cf07e8f9b11a0d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Apr 2022 19:46:25 +0530 Subject: [PATCH 0388/1640] Update Convert Binary Search Tree to Sorted Doubly Linked List.java --- ...rch Tree to Sorted Doubly Linked List.java | 42 +++++++++++-------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/Medium/Convert Binary Search Tree to Sorted Doubly Linked List.java b/Medium/Convert Binary Search Tree to Sorted Doubly Linked List.java index 838934c9..eaf92f02 100644 --- a/Medium/Convert Binary Search Tree to Sorted Doubly Linked List.java +++ b/Medium/Convert Binary Search Tree to Sorted Doubly Linked List.java @@ -20,27 +20,35 @@ public Node(int _val,Node _left,Node _right) { */ class Solution { - Node prev; public Node treeToDoublyList(Node root) { if (root == null) { return root; } - Node dummy = new Node(0); - prev = dummy; - helper(root); - prev.right = dummy.right; - dummy.right.left = prev; - return dummy.right; - } - - private void helper(Node root) { - if (root == null) { - return; + Stack stack = new Stack<>(); + while (root != null) { + stack.push(root); + root = root.left; + } + Node head = null; + Node prev = null; + while (!stack.isEmpty()) { + Node removed = stack.pop(); + Node rightNode = removed.right; + while (rightNode != null) { + stack.push(rightNode); + rightNode = rightNode.left; + } + if (head == null) { + head = removed; + } + if (prev != null) { + prev.right = removed; + } + removed.left = prev; + prev = removed; } - helper(root.left); - prev.right = root; - root.left = prev; - prev = root; - helper(root.right); + head.left = prev; + prev.right = head; + return head; } } From 0a8e11590d1aef88339e18d69b4a26dd39901193 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Apr 2022 20:48:42 +0530 Subject: [PATCH 0389/1640] Create Fizz Buzz Multithreaded.java --- Concurrency/Fizz Buzz Multithreaded.java | 77 ++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Concurrency/Fizz Buzz Multithreaded.java diff --git a/Concurrency/Fizz Buzz Multithreaded.java b/Concurrency/Fizz Buzz Multithreaded.java new file mode 100644 index 00000000..2e213c7c --- /dev/null +++ b/Concurrency/Fizz Buzz Multithreaded.java @@ -0,0 +1,77 @@ +class FizzBuzz { + private int n; + private int count; + private Semaphore fizz; + private Semaphore buzz; + private Semaphore fizzBuzz; + private Semaphore number; + + public FizzBuzz(int n) { + this.n = n; + this.count = 1; + this.fizz = new Semaphore(0); + this.buzz = new Semaphore(0); + this.fizzBuzz = new Semaphore(0); + this.number = new Semaphore(1); + } + + // printFizz.run() outputs "fizz". + public void fizz(Runnable printFizz) throws InterruptedException { + while (this.count <= this.n) { + if (this.count % 3 == 0 && this.count % 5 != 0) { + this.fizz.acquire(); + printFizz.run(); + this.count++; + releaseLock(this.count); + } + } + } + + // printBuzz.run() outputs "buzz". + public void buzz(Runnable printBuzz) throws InterruptedException { + while (this.count <= this.n) { + if (this.count % 3 != 0 && this.count % 5 == 0) { + this.buzz.acquire(); + printBuzz.run(); + this.count++; + releaseLock(this.count); + } + } + } + + // printFizzBuzz.run() outputs "fizzbuzz". + public void fizzbuzz(Runnable printFizzBuzz) throws InterruptedException { + while (this.count <= this.n) { + if (this.count % 3 == 0 && this.count % 5 == 0) { + this.fizzBuzz.acquire(); + printFizzBuzz.run(); + this.count++; + releaseLock(this.count); + } + } + } + + // printNumber.accept(x) outputs "x", where x is an integer. + public void number(IntConsumer printNumber) throws InterruptedException { + while (this.count <= this.n) { + if (this.count % 3 != 0 && this.count % 5 != 0) { + this.number.acquire(); + printNumber.accept(this.count); + this.count++; + releaseLock(this.count); + } + } + } + + private void releaseLock(int n) { + if (n % 15 == 0) { + this.fizzBuzz.release(); + } else if (n % 3 == 0) { + this.fizz.release(); + } else if (n % 5 == 0) { + this.buzz.release(); + } else { + this.number.release(); + } + } +} From 2f1c3ee65fd086eb5da32f69f641e090a9827b5a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Apr 2022 22:30:27 +0530 Subject: [PATCH 0390/1640] Create The Dining Philosophers.java --- Concurrency/The Dining Philosophers.java | 51 ++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Concurrency/The Dining Philosophers.java diff --git a/Concurrency/The Dining Philosophers.java b/Concurrency/The Dining Philosophers.java new file mode 100644 index 00000000..01409d64 --- /dev/null +++ b/Concurrency/The Dining Philosophers.java @@ -0,0 +1,51 @@ +class DiningPhilosophers { + + private List forks; + private Semaphore dinersOnTable; + private List state; + + public DiningPhilosophers() { + this.forks = new ArrayList<>(); + this.state = new ArrayList<>(); + for (int i = 0; i < 5; i++) { + this.forks.add(new Semaphore(1)); + this.state.add("idle"); + } + this.dinersOnTable = new Semaphore(4); + } + + // call the run() method of any runnable to execute its code + public void wantsToEat(int philosopher, + Runnable pickLeftFork, + Runnable pickRightFork, + Runnable eat, + Runnable putLeftFork, + Runnable putRightFork) throws InterruptedException { + int leftForkIdx = philosopher; + int rightForkIdx = (philosopher + 4) % 5; + + this.dinersOnTable.acquire(); + if (this.state.get(philosopher).equals("eating")) { + this.dinersOnTable.release(); + return; + } + this.state.set(philosopher, "eating"); + pickFork(leftForkIdx, pickLeftFork); + pickFork(rightForkIdx, pickRightFork); + eat.run(); + putFork(rightForkIdx, putRightFork); + putFork(leftForkIdx, putLeftFork); + this.state.set(philosopher, "idle"); + this.dinersOnTable.release(); + } + + private void putFork(int idx, Runnable put) { + put.run(); + this.forks.get(idx).release(); + } + + private void pickFork(int idx, Runnable pick) throws InterruptedException { + this.forks.get(idx).acquire(); + pick.run(); + } +} From 01c7d2c13a410f366181d2fda0a2cd71bcf955b2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Apr 2022 08:44:32 +0530 Subject: [PATCH 0391/1640] Update 3Sum.java --- Medium/3Sum.java | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/Medium/3Sum.java b/Medium/3Sum.java index e959d745..d054e15a 100644 --- a/Medium/3Sum.java +++ b/Medium/3Sum.java @@ -1,29 +1,22 @@ class Solution { public List> threeSum(int[] nums) { Arrays.sort(nums); - List> list = new ArrayList<>(); + List> result = new ArrayList<>(); for (int i = 0; i < nums.length && nums[i] <= 0; i++) { if (i == 0 || nums[i - 1] != nums[i]) { - twoSumHelper(nums, i, list); - } - } - return list; - } - - private void twoSumHelper(int[] nums, int i, List> list) { - int low = i + 1; - int high = nums.length - 1; - while (low < high) { - int sum = nums[i] + nums[low] + nums[high]; - if (sum < 0 || (low > i + 1 && nums[low] == nums[low - 1])) { - low++; - } - else if (sum > 0 || (high < nums.length - 1 && nums[high] == nums[high + 1])) { - high--; - } - else { - list.add(Arrays.asList(nums[i], nums[low++], nums[high--])); + Set set = new HashSet<>(); + for (int j = i + 1; j < nums.length; j++) { + int target = -1 * (nums[i] + nums[j]); + if (set.contains(target)) { + result.add(Arrays.asList(nums[i], nums[j], target)); + while (j + 1 < nums.length && nums[j] == nums[j + 1]) { + j++; + } + } + set.add(nums[j]); + } } } + return result; } } From 21c5b71ac7ccd89a84717f1cf9bead61012519b4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Apr 2022 08:57:52 +0530 Subject: [PATCH 0392/1640] Create 3Sum With Multiplicity.java --- Medium/3Sum With Multiplicity.java | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/3Sum With Multiplicity.java diff --git a/Medium/3Sum With Multiplicity.java b/Medium/3Sum With Multiplicity.java new file mode 100644 index 00000000..ca9315b3 --- /dev/null +++ b/Medium/3Sum With Multiplicity.java @@ -0,0 +1,37 @@ +class Solution { + public int threeSumMulti(int[] nums, int target) { + Arrays.sort(nums); + long answer = 0; + for (int i = 0; i < nums.length; i++) { + int updatedTarget = target - nums[i]; + int startIdx = i + 1; + int endIdx = nums.length - 1; + while (startIdx < endIdx) { + if (nums[startIdx] + nums[endIdx] < updatedTarget) { + startIdx++; + } else if (nums[startIdx] + nums[endIdx] > updatedTarget) { + endIdx--; + } else if (nums[startIdx] != nums[endIdx]) { + int leftIdx = 1; + int rightIdx = 1; + while (startIdx + 1 < endIdx && nums[startIdx] == nums[startIdx + 1]) { + leftIdx++; + startIdx++; + } + while (endIdx - 1 > startIdx && nums[endIdx] == nums[endIdx - 1]) { + rightIdx++; + endIdx--; + } + + answer = (answer + leftIdx * rightIdx) % 1000000007; + startIdx++; + endIdx--; + } else { + answer = (answer + ((endIdx - startIdx + 1) * (endIdx - startIdx) / 2)) % 1000000007; + break; + } + } + } + return (int) answer; + } +} From 1bf1b998160cfb15c9108700bae181ae200e863c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Apr 2022 16:58:41 +0530 Subject: [PATCH 0393/1640] Create Building H2O.java --- Concurrency/Building H2O.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Concurrency/Building H2O.java diff --git a/Concurrency/Building H2O.java b/Concurrency/Building H2O.java new file mode 100644 index 00000000..4d2a6a84 --- /dev/null +++ b/Concurrency/Building H2O.java @@ -0,0 +1,26 @@ +class H2O { + private Semaphore hydrogen; + private Semaphore oxygen; + private Semaphore mutex; + + public H2O() { + this.hydrogen = new Semaphore(2); + this.oxygen = new Semaphore(0); + this.mutex = new Semaphore(1); + } + + public void hydrogen(Runnable releaseHydrogen) throws InterruptedException { + // releaseHydrogen.run() outputs "H". Do not change or remove this line. + this.hydrogen.acquire(); + releaseHydrogen.run(); + this.oxygen.release(); + } + + public void oxygen(Runnable releaseOxygen) throws InterruptedException { + this.mutex.acquire(); + this.oxygen.acquire(2); + releaseOxygen.run(); + this.hydrogen.release(2); + this.mutex.release(); + } +} From a14f47a2bc1e24392340201253644b0eb99b2248 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Apr 2022 11:46:46 +0530 Subject: [PATCH 0394/1640] Update Last Stone Weight.java --- Easy/Last Stone Weight.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Easy/Last Stone Weight.java b/Easy/Last Stone Weight.java index abf2a4d9..08f390b1 100644 --- a/Easy/Last Stone Weight.java +++ b/Easy/Last Stone Weight.java @@ -1,16 +1,16 @@ class Solution { public int lastStoneWeight(int[] stones) { - PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o2 - o1); for (int stone : stones) { pq.add(stone); } while (pq.size() > 1) { - int max1 = pq.poll(); - int max2 = pq.poll(); - if (max1 != max2) { - pq.add(max1 - max2); + int firstStone = pq.poll(); + int secondStone = pq.poll(); + if (firstStone != secondStone) { + pq.add(firstStone - secondStone); } } - return pq.isEmpty() ? 0 : pq.peek(); + return pq.isEmpty() ? 0 : pq.poll(); } } From 27848c9eb57e4fae3c199632ca19a188dc4eaa0a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Apr 2022 12:11:23 +0530 Subject: [PATCH 0395/1640] Create Continuous Subarray Sum.java --- Medium/Continuous Subarray Sum.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Continuous Subarray Sum.java diff --git a/Medium/Continuous Subarray Sum.java b/Medium/Continuous Subarray Sum.java new file mode 100644 index 00000000..267857ab --- /dev/null +++ b/Medium/Continuous Subarray Sum.java @@ -0,0 +1,19 @@ +class Solution { + public boolean checkSubarraySum(int[] nums, int k) { + Map map = new HashMap<>(); + map.put(0, -1); + int currSum = 0; + for (int i = 0; i < nums.length; i++) { + currSum += nums[i]; + int rem = currSum % k; + if (map.containsKey(rem)) { + if (i - map.get(rem) >= 2) { + return true; + } + } else { + map.put(rem, i); + } + } + return false; + } +} From 04c96f86a5854b5443d8b5449bc3b4c7d3097628 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Apr 2022 19:56:46 +0530 Subject: [PATCH 0396/1640] Update Find All Possible Recipes from Given Supplies.java --- ... Possible Recipes from Given Supplies.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/Medium/Find All Possible Recipes from Given Supplies.java b/Medium/Find All Possible Recipes from Given Supplies.java index bf0e2976..702d1d15 100644 --- a/Medium/Find All Possible Recipes from Given Supplies.java +++ b/Medium/Find All Possible Recipes from Given Supplies.java @@ -1,30 +1,29 @@ class Solution { - public List findAllRecipes(String[] recipes, List> ingredients, - String[] supplies) { - Map> ingredientToRecipeMap = new HashMap<>(); - Map recipeToIngredientCount = new HashMap<>(); + public List findAllRecipes(String[] recipes, List> ingredients, String[] supplies) { + Map> map = new HashMap<>(); + Map ingredientCounter = new HashMap<>(); for (int i = 0; i < recipes.length; i++) { - String recipe = recipes[i]; - List ingredientsForRecipe = ingredients.get(i); - recipeToIngredientCount.put(recipe, ingredientsForRecipe.size()); - for (String ingredient : ingredientsForRecipe) { - ingredientToRecipeMap.computeIfAbsent(ingredient, k -> new HashSet<>()).add(recipe); + List currentIngredientList = ingredients.get(i); + for (String ingredient : currentIngredientList) { + map.computeIfAbsent(ingredient, k -> new ArrayList<>()).add(recipes[i]); + ingredientCounter.put(recipes[i], ingredientCounter.getOrDefault(recipes[i], 0) + 1); } } - Queue queue = new LinkedList<>(List.of(supplies)); - Set result = new HashSet<>(); + Queue queue = new LinkedList<>(); + Set prepared = new HashSet<>(); + for (String supply : supplies) { + queue.add(supply); + } while (!queue.isEmpty()) { - String ingredient = queue.remove(); - for (String dependentRecipe : ingredientToRecipeMap.getOrDefault(ingredient, - new HashSet<>())) { - recipeToIngredientCount.put(dependentRecipe, - recipeToIngredientCount.get(dependentRecipe) - 1); - if (recipeToIngredientCount.get(dependentRecipe) == 0) { - result.add(dependentRecipe); + String removed = queue.remove(); + for (String dependentRecipe : map.getOrDefault(removed, new ArrayList<>())) { + ingredientCounter.put(dependentRecipe, ingredientCounter.getOrDefault(dependentRecipe, 0) - 1); + if (ingredientCounter.get(dependentRecipe) == 0) { queue.add(dependentRecipe); + prepared.add(dependentRecipe); } } } - return new ArrayList<>(result); + return new ArrayList<>(prepared); } } From d1d2dc1349dd995a04fd2704f44645488885c5f1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 12 Apr 2022 11:23:38 +0530 Subject: [PATCH 0397/1640] Create Largest Number After Digit Swaps by Parity.java --- ...st Number After Digit Swaps by Parity.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Easy/Largest Number After Digit Swaps by Parity.java diff --git a/Easy/Largest Number After Digit Swaps by Parity.java b/Easy/Largest Number After Digit Swaps by Parity.java new file mode 100644 index 00000000..1959ca40 --- /dev/null +++ b/Easy/Largest Number After Digit Swaps by Parity.java @@ -0,0 +1,28 @@ +class Solution { + public int largestInteger(int num) { + char[] digits = String.valueOf(num).toCharArray(); + int[] frequency = new int[10]; + for (int i = 0; i < digits.length; i++) { + frequency[digits[i] - '0']++; + } + int largestNumber = 0; + int evenIdx = 8; + int oddIdx = 9; + for (int i = 0; i < digits.length; i++) { + if (digits[i] % 2 == 0) { + while (frequency[evenIdx] == 0) { + evenIdx -= 2; + } + frequency[evenIdx]--; + largestNumber = largestNumber * 10 + evenIdx; + } else { + while (frequency[oddIdx] == 0) { + oddIdx -= 2; + } + frequency[oddIdx]--; + largestNumber = largestNumber * 10 + oddIdx; + } + } + return largestNumber; + } +} From 4b69e8682ebc037db4f74ac3324eea9098da5580 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Apr 2022 13:30:06 +0530 Subject: [PATCH 0398/1640] Update Kth Largest Element in a Stream.java --- Easy/Kth Largest Element in a Stream.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Easy/Kth Largest Element in a Stream.java b/Easy/Kth Largest Element in a Stream.java index e3ab89a0..30bbc6f6 100644 --- a/Easy/Kth Largest Element in a Stream.java +++ b/Easy/Kth Largest Element in a Stream.java @@ -1,21 +1,22 @@ class KthLargest { - PriorityQueue pq; - int k; + + private PriorityQueue pq; + private int k; public KthLargest(int k, int[] nums) { - pq = new PriorityQueue<>(); this.k = k; + this.pq = new PriorityQueue<>(); for (int num : nums) { - add(num); + pq.add(num); + if (pq.size() > k) { + pq.poll(); + } } } - public int add(int num) { - if (pq.size() < k) { - pq.add(num); - } - else if (pq.peek() < num) { + public int add(int val) { + pq.add(val); + if (pq.size() > k) { pq.poll(); - pq.add(num); } return pq.peek(); } From ff59c63575cffa067ea4c78d3087be04d7f816dd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Apr 2022 13:38:06 +0530 Subject: [PATCH 0399/1640] Update Baseball Game.java --- Easy/Baseball Game.java | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/Easy/Baseball Game.java b/Easy/Baseball Game.java index eb499246..87e2eea4 100644 --- a/Easy/Baseball Game.java +++ b/Easy/Baseball Game.java @@ -1,28 +1,25 @@ class Solution { public int calPoints(String[] ops) { Stack stack = new Stack<>(); - int sum = 0; + int totalScore = 0; for (String op : ops) { - if (op.equals("+")) { - int prev = stack.pop(); - int prevToPrev = stack.peek(); - int newScore = prev + prevToPrev; - sum += newScore; - stack.push(prev); + if (op.equals("D")) { + int newScore = 2 * stack.peek(); + totalScore += newScore; stack.push(newScore); - } - else if (op.equals("C")) { - sum -= stack.pop(); - } - else if (op.equals("D")) { - sum += stack.peek() * 2; - stack.push(stack.peek() * 2); - } - else { + } else if (op.equals("C")) { + totalScore -= stack.pop(); + } else if (op.equals("+")) { + int scoreTwo = stack.pop(); + int newScore = scoreTwo + stack.peek(); + stack.push(scoreTwo); + stack.push(newScore); + totalScore += newScore; + } else { stack.push(Integer.parseInt(op)); - sum += stack.peek(); + totalScore += Integer.parseInt(op); } } - return sum; + return totalScore; } } From 4766ba505d22243e9c04a6eb0bf32cfe7bc23c0a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Apr 2022 06:43:08 +0530 Subject: [PATCH 0400/1640] Update Search in a Binary Search Tree.java --- Easy/Search in a Binary Search Tree.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Easy/Search in a Binary Search Tree.java b/Easy/Search in a Binary Search Tree.java index caed08fe..63e2f736 100644 --- a/Easy/Search in a Binary Search Tree.java +++ b/Easy/Search in a Binary Search Tree.java @@ -16,16 +16,11 @@ class Solution { public TreeNode searchBST(TreeNode root, int val) { if (root == null) { - return null; + return root; } if (root.val == val) { return root; } - else if (root.val > val) { - return searchBST(root.left, val); - } - else { - return searchBST(root.right, val); - } + return root.val > val ? searchBST(root.left, val) : searchBST(root.right, val); } } From cf74591dd18d24ab86a118baff87f27a032f8c69 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Apr 2022 07:28:54 +0530 Subject: [PATCH 0401/1640] Create Minimize Product Sum of Two Arrays.java --- .../Minimize Product Sum of Two Arrays.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Minimize Product Sum of Two Arrays.java diff --git a/Medium/Minimize Product Sum of Two Arrays.java b/Medium/Minimize Product Sum of Two Arrays.java new file mode 100644 index 00000000..4f8e184b --- /dev/null +++ b/Medium/Minimize Product Sum of Two Arrays.java @@ -0,0 +1,29 @@ +class Solution { + public int minProductSum(int[] nums1, int[] nums2) { + int[] frequencyOne = new int[101]; + int[] frequencyTwo = new int[101]; + for (int i = 0; i < nums1.length; i++) { + frequencyOne[nums1[i]]++; + frequencyTwo[nums2[i]]++; + } + int idxOne = 0; + int idxTwo = 100; + int sum = 0; + while (idxOne < 101 && idxTwo >= 0) { + while (idxOne < 101 && frequencyOne[idxOne] == 0) { + idxOne++; + } + while (idxTwo >= 0 && frequencyTwo[idxTwo] == 0) { + idxTwo--; + } + if (idxOne == 101 || idxTwo == -1) { + break; + } + int counter = Math.min(frequencyOne[idxOne], frequencyTwo[idxTwo]); + sum += counter * idxOne * idxTwo; + frequencyOne[idxOne] -= counter; + frequencyTwo[idxTwo] -= counter; + } + return sum; + } +} From e9f848ca47be5da788ffc030ca2531a511232749 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Apr 2022 06:49:00 +0530 Subject: [PATCH 0402/1640] Update Increasing Order Search Tree.java --- Easy/Increasing Order Search Tree.java | 34 ++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/Easy/Increasing Order Search Tree.java b/Easy/Increasing Order Search Tree.java index 93e003f3..1ca57c9b 100644 --- a/Easy/Increasing Order Search Tree.java +++ b/Easy/Increasing Order Search Tree.java @@ -14,22 +14,26 @@ * } */ class Solution { - TreeNode curr; public TreeNode increasingBST(TreeNode root) { - TreeNode ans = new TreeNode(-1); - curr = ans; - inorder(root); - return ans.right; - } - - private void inorder(TreeNode node) { - if (node == null) { - return; + Stack stack = new Stack<>(); + while (root != null) { + stack.push(root); + root = root.left; + } + TreeNode newHead = null; + while (!stack.isEmpty()) { + TreeNode removed = stack.pop(); + if (newHead == null) { + newHead = removed; + } + TreeNode rightNode = removed.right; + while (rightNode != null) { + stack.push(rightNode); + rightNode = rightNode.left; + } + removed.right = stack.isEmpty() ? null : stack.peek(); + removed.left = null; } - inorder(node.left); - node.left = null; - curr.right = node; - curr = node; - inorder(node.right); + return newHead; } } From d90fea8e6157d3a0063830059b71d025a93d6599 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Apr 2022 06:53:35 +0530 Subject: [PATCH 0403/1640] Create Find Closest Number to Zero.java --- Easy/Find Closest Number to Zero.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Find Closest Number to Zero.java diff --git a/Easy/Find Closest Number to Zero.java b/Easy/Find Closest Number to Zero.java new file mode 100644 index 00000000..ecb13d9f --- /dev/null +++ b/Easy/Find Closest Number to Zero.java @@ -0,0 +1,17 @@ +class Solution { + public int findClosestNumber(int[] nums) { + int[] result = {Integer.MAX_VALUE, Integer.MIN_VALUE}; + for (int num : nums) { + int distance = Math.abs(num); + if (distance <= result[0]) { + if (distance < result[0]) { + result[0] = distance; + result[1] = num; + } else { + result[1] = Math.max(num, result[1]); + } + } + } + return result[1]; + } +} From 012db7fa382f390fab5e9b641f29cc9f2a74cb2a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Apr 2022 07:12:17 +0530 Subject: [PATCH 0404/1640] Create Design an ATM Machine.java --- Medium/Design an ATM Machine.java | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Medium/Design an ATM Machine.java diff --git a/Medium/Design an ATM Machine.java b/Medium/Design an ATM Machine.java new file mode 100644 index 00000000..b4888a7a --- /dev/null +++ b/Medium/Design an ATM Machine.java @@ -0,0 +1,43 @@ +class ATM { + + private long[] noteCount; + private int[] noteValue; + + public ATM() { + this.noteCount = new long[5]; + this.noteValue = new int[]{20, 50, 100, 200, 500}; + } + + public void deposit(int[] banknotesCount) { + for (int i = 0; i < banknotesCount.length; i++) { + this.noteCount[i] += banknotesCount[i]; + } + } + + public int[] withdraw(int amount) { + int[] resultNoteCount = new int[5]; + for (int i = this.noteValue.length - 1; i >= 0 && amount > 0; i--) { + if (amount >= this.noteValue[i]) { + long numOfNotes = Math.min(amount / this.noteValue[i], this.noteCount[i]); + amount -= this.noteValue[i] * numOfNotes; + resultNoteCount[i] = (int) numOfNotes; + } + } + if (amount > 0) { + return new int[]{-1}; + } + if (amount == 0) { + for (int i = 0; i < resultNoteCount.length; i++) { + this.noteCount[i] -= resultNoteCount[i]; + } + } + return resultNoteCount; + } +} + +/** + * Your ATM object will be instantiated and called as such: + * ATM obj = new ATM(); + * obj.deposit(banknotesCount); + * int[] param_2 = obj.withdraw(amount); + */ From 1b21e540176e4eade110a8640350b630660915dc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Apr 2022 11:38:19 +0530 Subject: [PATCH 0405/1640] Create Calculate Digit Sum of a String.java --- Easy/Calculate Digit Sum of a String.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Calculate Digit Sum of a String.java diff --git a/Easy/Calculate Digit Sum of a String.java b/Easy/Calculate Digit Sum of a String.java new file mode 100644 index 00000000..cf5e9bad --- /dev/null +++ b/Easy/Calculate Digit Sum of a String.java @@ -0,0 +1,20 @@ +class Solution { + public String digitSum(String s, int k) { + while (s.length() > k) { + s = formDigitSum(s, k); + } + return s; + } + + private String formDigitSum(String s, int k) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i += k) { + int currSum = 0; + for (int j = i; j < Math.min(i + k, s.length()); j++) { + currSum += Character.getNumericValue(s.charAt(j)); + } + sb.append(currSum); + } + return sb.toString(); + } +} From 12c415e5b0be31301607a66815e3ad71e7c3da3d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 19 Apr 2022 09:35:01 +0530 Subject: [PATCH 0406/1640] Create Recover Binary Search Tree.java --- Medium/Recover Binary Search Tree.java | 43 ++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Medium/Recover Binary Search Tree.java diff --git a/Medium/Recover Binary Search Tree.java b/Medium/Recover Binary Search Tree.java new file mode 100644 index 00000000..8a3a133f --- /dev/null +++ b/Medium/Recover Binary Search Tree.java @@ -0,0 +1,43 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public void recoverTree(TreeNode root) { + TreeNode nodeOne = null; + TreeNode nodeTwo = null; + TreeNode prevNode = null; + Stack stack = new Stack<>(); + while (root != null || !stack.isEmpty()) { + while (root != null) { + stack.push(root); + root = root.left; + } + if (!stack.isEmpty()) { + root = stack.pop(); + if (nodeOne == null && prevNode != null && prevNode.val > root.val) { + nodeOne = prevNode; + } + if (nodeOne != null && prevNode.val > root.val) { + nodeTwo = root; + } + prevNode = root; + root = root.right; + } + } + int tempValue = nodeOne.val; + nodeOne.val = nodeTwo.val; + nodeTwo.val = tempValue; + } +} From 8cbbc26e563acde7a4fd7867309069f6c28295ee Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Apr 2022 08:55:42 +0530 Subject: [PATCH 0407/1640] Update Binary Search Tree Iterator.java --- Medium/Binary Search Tree Iterator.java | 28 +++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Medium/Binary Search Tree Iterator.java b/Medium/Binary Search Tree Iterator.java index 28e6aaa4..01b26971 100644 --- a/Medium/Binary Search Tree Iterator.java +++ b/Medium/Binary Search Tree Iterator.java @@ -14,27 +14,29 @@ * } */ class BSTIterator { - Stack stack; + + private Stack stack; + public BSTIterator(TreeNode root) { - stack = new Stack<>(); - while (root != null) { - stack.push(root); - root = root.left; - } + this.stack = new Stack<>(); + updateStack(root); } public int next() { - TreeNode node = stack.pop(); - TreeNode rightNode = node.right; - while (rightNode != null) { - stack.push(rightNode); - rightNode = rightNode.left; - } + TreeNode node = this.stack.pop(); + updateStack(node.right); return node.val; } public boolean hasNext() { - return !stack.isEmpty(); + return !this.stack.isEmpty(); + } + + private void updateStack(TreeNode node) { + while (node != null) { + this.stack.push(node); + node = node.left; + } } } From 173b8bce6b72da0e1e4b672ab11b037b59deee12 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Apr 2022 12:44:21 +0530 Subject: [PATCH 0408/1640] Create Binary Search Tree Iterator II.java --- Medium/Binary Search Tree Iterator II.java | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Medium/Binary Search Tree Iterator II.java diff --git a/Medium/Binary Search Tree Iterator II.java b/Medium/Binary Search Tree Iterator II.java new file mode 100644 index 00000000..9f98110c --- /dev/null +++ b/Medium/Binary Search Tree Iterator II.java @@ -0,0 +1,69 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class BSTIterator { + + private Deque stack; + private List arr; + private TreeNode lastNode; + private int pointer; + + public BSTIterator(TreeNode root) { + this.stack = new ArrayDeque(); + this.arr = new ArrayList<>(); + this.lastNode = root; + this.pointer = -1; + } + + public boolean hasNext() { + return !this.stack.isEmpty() || lastNode != null || this.pointer < arr.size() - 1; + } + + public int next() { + this.pointer++; + if (this.pointer == this.arr.size()) { + updateStack(lastNode); + TreeNode curr = this.stack.pop(); + lastNode = curr.right; + this.arr.add(curr.val); + } + return this.arr.get(this.pointer); + } + + public boolean hasPrev() { + return this.pointer > 0; + } + + public int prev() { + this.pointer--; + return this.arr.get(this.pointer); + } + + private void updateStack(TreeNode node) { + while (node != null) { + this.stack.push(node); + node = node.left; + } + } +} + +/** + * Your BSTIterator object will be instantiated and called as such: + * BSTIterator obj = new BSTIterator(root); + * boolean param_1 = obj.hasNext(); + * int param_2 = obj.next(); + * boolean param_3 = obj.hasPrev(); + * int param_4 = obj.prev(); + */ From 4b673d8a010bc3e12352b5013a64741ca069601a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 21 Apr 2022 18:55:32 +0530 Subject: [PATCH 0409/1640] Rename Easy/Max Area of Island.java to Medium/Max Area of Island.java --- {Easy => Medium}/Max Area of Island.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Easy => Medium}/Max Area of Island.java (100%) diff --git a/Easy/Max Area of Island.java b/Medium/Max Area of Island.java similarity index 100% rename from Easy/Max Area of Island.java rename to Medium/Max Area of Island.java From a5f5817540d69c471a563050d5c50d5cd2a7552a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 21 Apr 2022 19:14:26 +0530 Subject: [PATCH 0410/1640] Update Number of Closed Islands.java --- Medium/Number of Closed Islands.java | 50 ++++++++++++++++------------ 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/Medium/Number of Closed Islands.java b/Medium/Number of Closed Islands.java index e55843c5..201b30a3 100644 --- a/Medium/Number of Closed Islands.java +++ b/Medium/Number of Closed Islands.java @@ -2,31 +2,39 @@ class Solution { private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; public int closedIsland(int[][] grid) { - int numberOfClosedIslands = 0; - for(int i = 0; i < grid.length; i++){ - for(int j = 0; j < grid[0].length; j++){ - if(grid[i][j] == 0){ - if(surroundsSuccessfully(grid, i, j)) { - numberOfClosedIslands++; - } + int closedIslandCount = 0; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + if (grid[i][j] == 0 && isSurroundedSuccessfully(grid, i, j)) { + closedIslandCount++; } } } - return numberOfClosedIslands; + return closedIslandCount; } - - private boolean surroundsSuccessfully(int[][] grid, int x, int y) { - if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length) { - return false; - } - if(grid[x][y] == 1) { - return true; - } - grid[x][y] = 1; - boolean result = true; - for(int[] dir : DIRS){ - result = result & surroundsSuccessfully(grid, x + dir[0], y + dir[1]); + + private boolean isSurroundedSuccessfully(int[][] grid, int i, int j) { + Queue queue = new LinkedList<>(); + queue.add(new int[]{i, j}); + boolean surroundingCheck = true; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int x = removed[0]; + int y = removed[1]; + if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length) { + surroundingCheck = false; + continue; + } + if (grid[x][y] == 1) { + continue; + } + grid[x][y] = 1; + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + queue.add(new int[]{newX, newY}); + } } - return result; + return surroundingCheck; } } From 60cdab24eb68678944f0610b02c18ba0c92466a1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 21 Apr 2022 21:22:14 +0530 Subject: [PATCH 0411/1640] Update Next Permutation.java --- Medium/Next Permutation.java | 47 +++++++++++++++++------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/Medium/Next Permutation.java b/Medium/Next Permutation.java index a29876cb..9b554900 100644 --- a/Medium/Next Permutation.java +++ b/Medium/Next Permutation.java @@ -1,32 +1,29 @@ class Solution { public void nextPermutation(int[] nums) { - boolean flag = true; - int right = nums.length - 1; - int start = right; - while (start >= 1) { - if (nums[start] > nums[start - 1]) { - int idx = right; - while (nums[idx] <= nums[start - 1]) { - idx--; - } - int temp = nums[start - 1]; - nums[start - 1] = nums[idx]; - nums[idx] = temp; - flag = false; - break; - } - start--; - } - if (flag) { - Arrays.sort(nums); + if (nums.length <= 1) { return; } - while (start < right) { - int temp = nums[start]; - nums[start] = nums[right]; - nums[right] = temp; - start++; - right--; + int idx = nums.length - 2; + while (idx >= 0 && nums[idx] >= nums[idx + 1]) { + idx--; + } + if (idx >= 0) { + int endIdx = nums.length - 1; + while (nums[endIdx] <= nums[idx]) { + endIdx--; + } + swap(nums, idx, endIdx); + } + int startIdx = idx + 1; + int endIdx = nums.length - 1; + while (startIdx < endIdx) { + swap(nums, startIdx++, endIdx--); } } + + private void swap(int[] nums, int idxOne, int idxTwo) { + int temp = nums[idxOne]; + nums[idxOne] = nums[idxTwo]; + nums[idxTwo] = temp; + } } From 12cbf33169435f81428a201ab099e31b69da990e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 24 Apr 2022 02:03:51 -0700 Subject: [PATCH 0412/1640] Create Intersection of Multiple Arrays.java --- Easy/Intersection of Multiple Arrays.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Intersection of Multiple Arrays.java diff --git a/Easy/Intersection of Multiple Arrays.java b/Easy/Intersection of Multiple Arrays.java new file mode 100644 index 00000000..f06c30b8 --- /dev/null +++ b/Easy/Intersection of Multiple Arrays.java @@ -0,0 +1,19 @@ +import java.util.Map.Entry; + + +class Solution { + public List intersection(int[][] nums) { + Map counter = new HashMap<>(); + for (int[] num : nums) { + for (int element : num) { + counter.put(element, counter.getOrDefault(element, 0) + 1); + } + } + return counter.entrySet() + .stream() + .filter(entry -> entry.getValue() == nums.length) + .map(Entry::getKey) + .sorted() + .collect(Collectors.toList()); + } +} From f937b5a0e18554a77858dd3db97211a637d09995 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 24 Apr 2022 16:35:51 -0700 Subject: [PATCH 0413/1640] Update Asteroid Collision.java --- Medium/Asteroid Collision.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Medium/Asteroid Collision.java b/Medium/Asteroid Collision.java index 102f3f53..f739ff48 100644 --- a/Medium/Asteroid Collision.java +++ b/Medium/Asteroid Collision.java @@ -10,19 +10,17 @@ public int[] asteroidCollision(int[] asteroids) { if (stack.peek() == Math.abs(asteroid)) { stack.pop(); } - } - else { + } else { stack.push(asteroid); } - } - else { + } else { stack.push(asteroid); } } - int[] state = new int[stack.size()]; - for (int i = state.length - 1; i >= 0; i--) { - state[i] = stack.pop(); + int[] result = new int[stack.size()]; + for (int i = result.length - 1; i >= 0; i--) { + result[i] = stack.pop(); } - return state; + return result; } } From ca2f90813f6c01fa90cac0d40e5d03bfbb1b298d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 24 Apr 2022 18:00:51 -0700 Subject: [PATCH 0414/1640] Update Peeking Iterator.java --- Medium/Peeking Iterator.java | 47 ++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/Medium/Peeking Iterator.java b/Medium/Peeking Iterator.java index 63ab64cb..4a1c6782 100644 --- a/Medium/Peeking Iterator.java +++ b/Medium/Peeking Iterator.java @@ -2,34 +2,35 @@ // https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html class PeekingIterator implements Iterator { - Integer nextElement; - Iterator iterator; + private Iterator iterator; + private Integer topElement; + public PeekingIterator(Iterator iterator) { // initialize any member here. this.iterator = iterator; - updateNext(); - } - - private void updateNext() { - nextElement = iterator.hasNext() ? iterator.next() : null; + populateTopElement(); } - + // Returns the next element in the iteration without advancing the iterator. public Integer peek() { - return nextElement; + return this.topElement; + } + + // hasNext() and next() should behave the same as in the Iterator interface. + // Override them if needed. + @Override + public Integer next() { + Integer nextValue = this.topElement; + populateTopElement(); + return nextValue; + } + + @Override + public boolean hasNext() { + return this.topElement != null; + } + + private void populateTopElement() { + this.topElement = this.iterator.hasNext() ? this.iterator.next() : null; } - - // hasNext() and next() should behave the same as in the Iterator interface. - // Override them if needed. - @Override - public Integer next() { - Integer returnValue = nextElement; - updateNext(); - return returnValue; - } - - @Override - public boolean hasNext() { - return nextElement != null; - } } From 1c4f6a504fd9962be7f0c85bd366cd57d909c118 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Apr 2022 09:42:06 -0700 Subject: [PATCH 0415/1640] Create Count Sub Islands.java --- Medium/Count Sub Islands.java | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Medium/Count Sub Islands.java diff --git a/Medium/Count Sub Islands.java b/Medium/Count Sub Islands.java new file mode 100644 index 00000000..adee5af9 --- /dev/null +++ b/Medium/Count Sub Islands.java @@ -0,0 +1,42 @@ +class Solution { + private final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int countSubIslands(int[][] grid1, int[][] grid2) { + int numRows = grid1.length; + int numCols = grid1[0].length; + int subIslandCount = 0; + boolean[][] visited = new boolean[numRows][numCols]; + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < numCols; j++) { + if (!visited[i][j] && grid2[i][j] == 1) { + Queue queue = new LinkedList<>(); + queue.add(new int[]{i, j}); + boolean isSubisland = true; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int x = removed[0]; + int y = removed[1]; + if (visited[x][y]) { + continue; + } + if (grid1[x][y] != 1) { + isSubisland = false; + } + visited[x][y] = true; + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + if (newX >= 0 && newY >= 0 && newX < numRows && newY < numCols && !visited[newX][newY] && grid2[newX][newY] == 1) { + queue.add(new int[]{newX, newY}); + } + } + } + if (isSubisland) { + subIslandCount++; + } + } + } + } + return subIslandCount; + } +} From 1b1755b0297415fcd71eadd8d5f7dfb1ad60f6c7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Apr 2022 12:08:55 -0700 Subject: [PATCH 0416/1640] Update As Far from Land as Possible.java --- Medium/As Far from Land as Possible.java | 63 ++++++++++++------------ 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/Medium/As Far from Land as Possible.java b/Medium/As Far from Land as Possible.java index 2096777d..2e80a70b 100644 --- a/Medium/As Far from Land as Possible.java +++ b/Medium/As Far from Land as Possible.java @@ -1,36 +1,37 @@ class Solution { - public int maxDistance(int[][] grid) { - if (grid.length == 0 || grid[0].length == 0) { - return -1; + private final int[][] DIRS = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}}; + + public int maxDistance(int[][] grid) { + Queue queue = new LinkedList<>(); + int numRows = grid.length; + int numCols = grid[0].length; + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < numCols; j++) { + if (grid[i][j] == 1) { + queue.add(new int[]{i, j}); } - int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - boolean[][] visited = new boolean[grid.length][grid[0].length]; - Queue queue = new LinkedList<>(); - for (int i = 0; i < grid.length; i++) { - for (int j = 0; j < grid[0].length; j++) { - if (grid[i][j] == 1) { - queue.add(new int[]{i, j}); - visited[i][j] = true; - } - } - } - int maxDist = -1; - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int[] curr = queue.remove(); - for (int[] dir : dirs) { - int x = curr[0] + dir[0]; - int y = curr[1] + dir[1]; - if (x >= 0 && x < grid.length && y >= 0 && y < grid[0].length && !visited[x][y] && grid[x][y] == 0) { - visited[x][y] = true; - queue.add(new int[]{x, y}); - } - } - } - maxDist++; + } + } + if (queue.isEmpty() || queue.size() == numRows * numCols) { + return -1; + } + int distance = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + for (int[] dir : DIRS) { + int x = removed[0] + dir[0]; + int y = removed[1] + dir[1]; + if (x < 0 || y < 0 || x >= numRows || y >= numCols || grid[x][y] == 1) { + continue; + } + grid[x][y] = 1; + queue.add(new int[]{x, y}); } - - return maxDist == 0 ? -1 : maxDist; + } + distance++; } + return distance - 1; + } } From 7deaabf0c2ad2172ec38d09c1b2f18b57d89af32 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 27 Apr 2022 13:32:24 -0700 Subject: [PATCH 0417/1640] Create Pacific Atlantic Water Flow.java --- Medium/Pacific Atlantic Water Flow.java | 52 +++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Medium/Pacific Atlantic Water Flow.java diff --git a/Medium/Pacific Atlantic Water Flow.java b/Medium/Pacific Atlantic Water Flow.java new file mode 100644 index 00000000..3c129529 --- /dev/null +++ b/Medium/Pacific Atlantic Water Flow.java @@ -0,0 +1,52 @@ +class Solution { + private final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public List> pacificAtlantic(int[][] heights) { + int numRows = heights.length; + int numCols = heights[0].length; + Queue pacificQueue = new LinkedList<>(); + Queue atlanticQueue = new LinkedList<>(); + for (int i = 0; i < numRows; i++) { + pacificQueue.add(new int[]{i, 0}); + atlanticQueue.add(new int[]{i, numCols - 1}); + } + for (int i = 0; i < numCols; i++) { + pacificQueue.add(new int[]{0, i}); + atlanticQueue.add(new int[]{numRows - 1, i}); + } + boolean[][] pacificReachable = bfs(pacificQueue, heights); + boolean[][] atlanticReachable = bfs(atlanticQueue, heights); + List> result = new ArrayList<>(); + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < numCols; j++) { + if (pacificReachable[i][j] && atlanticReachable[i][j]) { + result.add(Arrays.asList(i, j)); + } + } + } + return result; + } + + private boolean[][] bfs(Queue queue, int[][] heights) { + int numRows = heights.length; + int numCols = heights[0].length; + boolean[][] reachable = new boolean[numRows][numCols]; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int x = removed[0]; + int y = removed[1]; + reachable[x][y] = true; + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + if (newX < 0 || newY < 0 || newX >= numRows || newY >= numCols || reachable[newX][newY]) { + continue; + } + if (heights[newX][newY] >= heights[x][y]) { + queue.add(new int[]{newX, newY}); + } + } + } + return reachable; + } +} From 859072dd3fd786f565b549e4319d2d7613a89749 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Apr 2022 07:42:27 -0700 Subject: [PATCH 0418/1640] Update Path With Minimum Effort.java --- Medium/Path With Minimum Effort.java | 65 ++++++++++++++++------------ 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/Medium/Path With Minimum Effort.java b/Medium/Path With Minimum Effort.java index 5d336e11..b9c33606 100644 --- a/Medium/Path With Minimum Effort.java +++ b/Medium/Path With Minimum Effort.java @@ -1,38 +1,47 @@ class Solution { + + private final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + public int minimumEffortPath(int[][] heights) { - int rows = heights.length; - int cols = heights[0].length; - int[][] directions = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; - int[][] distance = new int[rows][cols]; - for (int i = 0; i < rows; i++) { - Arrays.fill(distance[i], Integer.MAX_VALUE); + if (heights.length == 1 && heights[0].length == 1) { + return 0; } - PriorityQueue pq = new PriorityQueue<>((a, b) -> a[0] - b[0]); - pq.add(new int[]{0, 0, 0}); - while (!pq.isEmpty()) { - int[] removed = pq.poll(); - int currDistance = removed[0]; - int x = removed[1]; - int y = removed[2]; - if (currDistance > distance[x][y]) { - continue; + int leftBound = 0; + int rightBound = 1000000; + while (leftBound < rightBound) { + int mid = (leftBound + rightBound) / 2; + if (connected(heights, mid)) { + rightBound = mid; + } else { + leftBound = mid + 1; } - if (x == rows - 1 && y == cols - 1) { - return currDistance; + } + return leftBound; + } + + private boolean connected(int[][] heights, int targetEffort) { + int numRows = heights.length; + int numCols = heights[0].length; + Queue queue = new LinkedList<>(); + boolean[][] seen = new boolean[numRows][numCols]; + queue.add(new int[]{0, 0}); + seen[0][0] = true; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int x = removed[0]; + int y = removed[1]; + if (x == numRows - 1 && y == numCols - 1) { + return true; } - for (int[] direction : directions) { - int newX = x + direction[0]; - int newY = y + direction[1]; - if (newX < 0 || newX >= rows || newY < 0 || newY >= cols) { - continue; - } - int newDistance = Math.max(currDistance, Math.abs(heights[newX][newY] - heights[x][y])); - if (distance[newX][newY] > newDistance) { - distance[newX][newY] = newDistance; - pq.add(new int[]{newDistance, newX, newY}); + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + if (newX >= 0 && newY >= 0 && newX < numRows && newY < numCols && !seen[newX][newY] && Math.abs(heights[x][y] - heights[newX][newY]) <= targetEffort) { + queue.add(new int[]{newX, newY}); + seen[newX][newY] = true; } } } - return -1; + return false; } } From 8164bd64c51b9896e6bd99e492d61f85f6361d47 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Apr 2022 12:47:25 -0700 Subject: [PATCH 0419/1640] Update Shortest Path in Binary Matrix.java --- Medium/Shortest Path in Binary Matrix.java | 39 ++++++++++------------ 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Medium/Shortest Path in Binary Matrix.java b/Medium/Shortest Path in Binary Matrix.java index 0649b9b0..9977e11b 100644 --- a/Medium/Shortest Path in Binary Matrix.java +++ b/Medium/Shortest Path in Binary Matrix.java @@ -1,40 +1,37 @@ class Solution { + private final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}, {1, 1}, {-1, 1}, {1, -1}, {-1, -1}}; + public int shortestPathBinaryMatrix(int[][] grid) { - int n = grid.length; - if (n == 0 || grid[0][0] == 1 || grid[n - 1][n - 1] == 1) { + if (grid[0][0] == 1) { return -1; } + int numRows = grid.length; + int numCols = grid[0].length; + boolean[][] visited = new boolean[numRows][numCols]; Queue queue = new LinkedList<>(); - int numberOfSteps = 0; - boolean[][] visited = new boolean[n][n]; - queue.add(new int[] {0, 0}); + queue.add(new int[]{0, 0}); visited[0][0] = true; + int numOfSteps = 0; while (!queue.isEmpty()) { + numOfSteps++; int size = queue.size(); while (size-- > 0) { int[] removed = queue.remove(); - if (removed[0] == n - 1 && removed[1] == n - 1) { - return numberOfSteps + 1; + int x = removed[0]; + int y = removed[1]; + if (x == numRows - 1 && y == numCols - 1) { + return numOfSteps; } - for (int[] dir : EIGHT_DIRS) { - int newX = removed[0] + dir[0]; - int newY = removed[1] + dir[1]; - if (newX >= 0 - && newX < n - && newY >= 0 - && newY < n - && !visited[newX][newY] - && grid[newX][newY] == 0) { - queue.add(new int[] {newX, newY}); + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + if (newX >= 0 && newY >= 0 && newX < numRows && newY < numCols && !visited[newX][newY] && grid[newX][newY] == 0) { + queue.add(new int[]{newX, newY}); visited[newX][newY] = true; } } } - numberOfSteps++; } return -1; } - - private static final int[][] EIGHT_DIRS = { - {0,1},{0,-1},{1,0},{-1,0},{1,-1},{-1,1},{-1,-1},{1,1}}; } From 6e3b0d0759917a906e3e292b32d4ae73d1299495 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Apr 2022 17:30:22 -0700 Subject: [PATCH 0420/1640] Update Is Graph Bipartite.java --- Medium/Is Graph Bipartite.java | 40 ++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/Medium/Is Graph Bipartite.java b/Medium/Is Graph Bipartite.java index 23f4e0bf..c77018dc 100644 --- a/Medium/Is Graph Bipartite.java +++ b/Medium/Is Graph Bipartite.java @@ -4,23 +4,35 @@ public boolean isBipartite(int[][] graph) { int[] color = new int[n]; Arrays.fill(color, -1); for (int i = 0; i < n; i++) { - if (color[i] == -1) { - Stack stack = new Stack<>(); - stack.push(i); - color[i] = 0; - while (!stack.isEmpty()) { - Integer node = stack.pop(); - for (Integer neighbor : graph[node]) { - if (color[neighbor] == -1) { - stack.push(neighbor); - color[neighbor] = color[node] ^ 1; - } - else if (color[neighbor] == color[node]) { - return false; - } + if (color[i] == -1 && !bipartiteCheck(graph, i, color)) { + return false; + } + } + return true; + } + + private boolean bipartiteCheck(int[][] graph, int node, int[] color) { + Queue queue = new LinkedList<>(); + queue.add(node); + int currColor = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int removed = queue.remove(); + if (color[removed] != -1) { + if (color[removed] != currColor) { + return false; + } + continue; + } + color[removed] = currColor; + for (int conn : graph[removed]) { + if (color[conn] == -1) { + queue.add(conn); } } } + currColor = currColor == 1 ? 0 : 1; } return true; } From 5be1437bd2b37ef515fa1c72e973f179f1860481 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Apr 2022 18:15:03 -0700 Subject: [PATCH 0421/1640] Update Design Tic-Tac-Toe.java --- Medium/Design Tic-Tac-Toe.java | 84 ++++++++++++++-------------------- 1 file changed, 34 insertions(+), 50 deletions(-) diff --git a/Medium/Design Tic-Tac-Toe.java b/Medium/Design Tic-Tac-Toe.java index 35c3bd4b..50b57aea 100644 --- a/Medium/Design Tic-Tac-Toe.java +++ b/Medium/Design Tic-Tac-Toe.java @@ -1,66 +1,50 @@ class TicTacToe { - /** Initialize your data structure here. */ - int[][] board; - Map> rowMap; - Map> colMap; - Map leftDiagonalMap; - Map rightDiagonalMap; - int n; + private int n; + private Map> rowMapping; + private Map> colMapping; + private Map> diagonalMapping; + + private final int LEFT_DIAGONAL = 1; + private final int RIGHT_DIAGONAL = -1; + public TicTacToe(int n) { - board = new int[n][n]; - rowMap = new HashMap<>(); - colMap = new HashMap<>(); - leftDiagonalMap = new HashMap<>(); - rightDiagonalMap = new HashMap<>(); this.n = n; + this.rowMapping = new HashMap<>(); + this.colMapping = new HashMap<>(); + this.diagonalMapping = new HashMap<>(); + this.diagonalMapping.put(LEFT_DIAGONAL, new HashMap<>()); + this.diagonalMapping.put(RIGHT_DIAGONAL, new HashMap<>()); } - /** Player {player} makes a move at ({row}, {col}). - @param row The row of the board. - @param col The column of the board. - @param player The player, can be either 1 or 2. - @return The current winning condition, can be either: - 0: No one wins. - 1: Player 1 wins. - 2: Player 2 wins. */ public int move(int row, int col, int player) { - if (!rowMap.containsKey(row)) { - Map map = new HashMap<>(); - rowMap.put(row, map); - } - rowMap.get(row).put(player, rowMap.get(row).getOrDefault(player, 0) + 1); - if (ifWinner(rowMap.get(row), player)) { - return player; - } - if (!colMap.containsKey(col)) { - Map map = new HashMap<>(); - colMap.put(col, map); - } - colMap.get(col).put(player, colMap.get(col).getOrDefault(player, 0) + 1); - if (ifWinner(colMap.get(col), player)) { - return player; - } - if (row == col) { - leftDiagonalMap.put(player, leftDiagonalMap.getOrDefault(player, 0) + 1); - } - if (ifWinner(leftDiagonalMap, player)) { - return player; - } - if (row + col == n - 1) { - rightDiagonalMap.put(player, rightDiagonalMap.getOrDefault(player, 0) + 1); - } - if (ifWinner(rightDiagonalMap, player)) { + recordMove(row, col, player); + if (isWinnerFound(row, col, player)) { return player; } return 0; } - private boolean ifWinner(Map map, int player) { - if (map.size() > 1) { - return false; + private void recordMove(int row, int col, int player) { + this.rowMapping.computeIfAbsent(row, k -> new HashMap<>()); + this.colMapping.computeIfAbsent(col, k -> new HashMap<>()); + this.rowMapping.get(row).put(player, this.rowMapping.get(row).getOrDefault(player, 0) + 1); + this.colMapping.get(col).put(player, this.colMapping.get(col).getOrDefault(player, 0) + 1); + if (row == col) { + this.diagonalMapping.get(LEFT_DIAGONAL) + .put(player, this.diagonalMapping.get(LEFT_DIAGONAL).getOrDefault(player, 0) + 1); + } + if (row + col + 1 == this.n) { + this.diagonalMapping.get(RIGHT_DIAGONAL) + .put(player, this.diagonalMapping.get(RIGHT_DIAGONAL).getOrDefault(player, 0) + 1); } - return map.values().stream().reduce(0, Integer::sum) == n; + } + + private boolean isWinnerFound(int row, int col, int player) { + return this.rowMapping.get(row).get(player) == this.n || + this.colMapping.get(col).get(player) == this.n || + this.diagonalMapping.get(LEFT_DIAGONAL).getOrDefault(player, 0) == this.n || + this.diagonalMapping.get(RIGHT_DIAGONAL).getOrDefault(player, 0) == this.n; } } From 543d42754ed72cb507d62e5f9945da3c3a61e065 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Apr 2022 07:40:22 -0700 Subject: [PATCH 0422/1640] Update Read N characters Given Read4.java --- Easy/Read N characters Given Read4.java | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Easy/Read N characters Given Read4.java b/Easy/Read N characters Given Read4.java index 2ba3d5a6..d8507075 100644 --- a/Easy/Read N characters Given Read4.java +++ b/Easy/Read N characters Given Read4.java @@ -1,6 +1,6 @@ /** * The read4 API is defined in the parent class Reader4. - * int read4(char[] buf); + * int read4(char[] buf4); */ public class Solution extends Reader4 { @@ -10,17 +10,19 @@ public class Solution extends Reader4 { * @return The number of actual characters read */ public int read(char[] buf, int n) { - boolean endOfFile = false; - int totalLength = 0; - char[] temp = new char[4]; - while (!endOfFile && totalLength < n) { - int count = read4(temp); - endOfFile = count < 4; - count = Math.min(count, n - totalLength); - for (int i = 0; i < count; i++) { - buf[totalLength++] = temp[i]; + int copied = 0; + int readLength = 4; + char[] buf4 = new char[4]; + while (copied < n && readLength == 4) { + readLength = read4(buf4); + for (int i = 0; i < readLength; i++) { + if (copied == n) { + return copied; + } + buf[copied] = buf4[i]; + copied++; } } - return totalLength; + return copied; } } From c08eebf05b5f1c4e23452f4ea208a4b8090518b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Apr 2022 09:35:29 -0700 Subject: [PATCH 0423/1640] Update Buddy Strings.java --- Easy/Buddy Strings.java | 58 ++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/Easy/Buddy Strings.java b/Easy/Buddy Strings.java index c6cdc61a..e153e52d 100644 --- a/Easy/Buddy Strings.java +++ b/Easy/Buddy Strings.java @@ -1,44 +1,36 @@ class Solution { - public boolean buddyStrings(String A, String B) { - if (A.length() != B.length()) { + public boolean buddyStrings(String s, String goal) { + if (s.length() != goal.length()) { return false; } - char requiredChar = '-'; - char mismatchChar = '-'; - int[] counter = new int[26]; - for (int i = 0; i < A.length(); i++) { - if (A.charAt(i) != B.charAt(i)) { - // Already done one swap hence cannot do any more swaps - if (requiredChar == '_') { - return false; + if (s.equals(goal)) { + Set set = new HashSet<>(); + for (char c : s.toCharArray()) { + if (set.contains(c)) { + return true; } - if (requiredChar == '-') { - requiredChar = B.charAt(i); - mismatchChar = A.charAt(i); + set.add(c); + } + return false; + } + char[] mismatch = {'-', '-'}; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) != goal.charAt(i)) { + if (mismatch[0] == '|') { + return false; } - else { - // Check if swap is possible from previous mismatch - if (B.charAt(i) == mismatchChar && A.charAt(i) == requiredChar) { - requiredChar = '_'; - } - else { - return false; + if (mismatch[0] == '-') { + mismatch[0] = s.charAt(i); + mismatch[1] = goal.charAt(i); + } else { + if (goal.charAt(i) == mismatch[0] && s.charAt(i) == mismatch[1]) { + mismatch[0] = '|'; + continue; } + return false; } } - else { - counter[A.charAt(i) - 'a']++; - } - } - if (mismatchChar != '-') { - return requiredChar == '_'; - } - // Check if we have more than 1 occurrence of same characters. We can swap them to fulfil the condition - for (int i = 0; i < 26; i++) { - if (counter[i] > 1) { - return true; - } } - return false; + return mismatch[0] == '|'; } } From 7518ae0da7a29d1c3f6db0a2a2f6e5e7358bcf7d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Apr 2022 10:42:59 -0700 Subject: [PATCH 0424/1640] Update Sort the Matrix Diagonally.java --- Medium/Sort the Matrix Diagonally.java | 47 +++++++++++++++++++++----- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/Medium/Sort the Matrix Diagonally.java b/Medium/Sort the Matrix Diagonally.java index f0ec13f3..003410db 100644 --- a/Medium/Sort the Matrix Diagonally.java +++ b/Medium/Sort the Matrix Diagonally.java @@ -1,16 +1,45 @@ class Solution { public int[][] diagonalSort(int[][] mat) { - Map> map = new HashMap<>(); - for (int i = 0; i < mat.length; i++) { - for (int j = 0; j < mat[0].length; j++) { - map.computeIfAbsent(i - j, k -> new PriorityQueue<>()).add(mat[i][j]); - } + int numRows = mat.length; + int numCols = mat[0].length; + for (int i = 0; i < numRows; i++) { + sortDiagonal(i, 0, mat); } - for (int i = 0; i < mat.length; i++) { - for (int j = 0; j < mat[0].length; j++) { - mat[i][j] = map.get(i - j).poll(); - } + for (int i = 0; i < numCols; i++) { + sortDiagonal(0, i, mat); } return mat; } + + private void sortDiagonal(int row, int col, int[][] mat) { + int numRows = mat.length; + int numCols = mat[0].length; + List diagonal = new ArrayList<>(); + int diagonalLength = Math.min(numRows - row, numCols - col); + for (int i = 0; i < diagonalLength; i++) { + diagonal.add(mat[row + i][col + i]); + } + diagonal = countingSort(diagonal); + for (int i = 0; i < diagonalLength; i++) { + mat[row + i][col + i] = diagonal.get(i); + } + } + + private List countingSort(List list) { + int min = 1; + int max = 100; + int range = max - min + 1; + int[] frequency = new int[range]; + for (int num : list) { + frequency[num - min]++; + } + List sortedList = new ArrayList<>(); + for (int i = 0; i < range; i++) { + int count = frequency[i]; + while (count-- > 0) { + sortedList.add(i + min); + } + } + return sortedList; + } } From 0eb294b529eb89c198027ad096e8f3a2549926c1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Apr 2022 14:57:07 -0700 Subject: [PATCH 0425/1640] Update Leftmost Column with at Least a One.java --- .../Leftmost Column with at Least a One.java | 37 ++++++------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/Medium/Leftmost Column with at Least a One.java b/Medium/Leftmost Column with at Least a One.java index 2cda1b1c..8b804b8f 100644 --- a/Medium/Leftmost Column with at Least a One.java +++ b/Medium/Leftmost Column with at Least a One.java @@ -2,38 +2,25 @@ * // This is the BinaryMatrix's API interface. * // You should not implement it, or speculate about its implementation * interface BinaryMatrix { - * public int get(int x, int y) {} + * public int get(int row, int col) {} * public List dimensions {} * }; */ class Solution { public int leftMostColumnWithOne(BinaryMatrix binaryMatrix) { - List dims = binaryMatrix.dimensions(); - int rows = dims.get(0); - int cols = dims.get(1); - int minIdx = Integer.MAX_VALUE; - for (int i = 0; i < rows; i++) { - int idx = binarySearch(binaryMatrix, i, 0, cols - 1); - if (idx != -1) { - minIdx = Math.min(minIdx, idx); + List dimension = binaryMatrix.dimensions(); + int numRows = dimension.get(0); + int numCols = dimension.get(1); + int currRow = 0; + int currCol = numCols - 1; + while (currRow < numRows && currCol >= 0) { + if (binaryMatrix.get(currRow, currCol) == 0) { + currRow++; + } else { + currCol--; } } - return minIdx == Integer.MAX_VALUE ? -1 : minIdx; - } - - private int binarySearch(BinaryMatrix binaryMatrix, int row, int start, int end) { - int minIdx = Integer.MAX_VALUE; - while (start <= end) { - int mid = (start + end) / 2; - if (binaryMatrix.get(row, mid) == 1) { - minIdx = Math.min(minIdx, mid); - end = mid - 1; - } - else { - start = mid + 1; - } - } - return minIdx == Integer.MAX_VALUE ? -1 : minIdx; + return currCol == numCols - 1 ? -1 : currCol + 1; } } From b980b29f79192cb0092364cc7f5f194d9fb52eec Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Apr 2022 06:38:38 -0700 Subject: [PATCH 0426/1640] Update Squares of a Sorted Array.java --- Easy/Squares of a Sorted Array.java | 41 ++++++++++++++++------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/Easy/Squares of a Sorted Array.java b/Easy/Squares of a Sorted Array.java index 1658e567..5308f168 100644 --- a/Easy/Squares of a Sorted Array.java +++ b/Easy/Squares of a Sorted Array.java @@ -1,27 +1,32 @@ class Solution { public int[] sortedSquares(int[] nums) { - int n = nums.length; - int[] squareSorted = new int[n]; - int start = 0; - while (start < n && nums[start] < 0) { - start++; - } - int end = start; - start -= 1; - int idx = 0; - while (start >= 0 || end < n) { - if (start >= 0 && end < n) { - if (nums[start] * nums[start] > nums[end] * nums[end]) { - squareSorted[idx++] = nums[end] * nums[end++]; + int firstNegativeIdx = nums[0] < 0 ? 0 : nums.length; + int lastPositiveIdx = nums[nums.length - 1] >= 0 ? nums.length - 1 : -1; + int[] result = new int[nums.length]; + int idx = result.length - 1; + while (idx >= 0) { + if (firstNegativeIdx < nums.length && lastPositiveIdx >= 0) { + if (Math.abs(nums[firstNegativeIdx]) > nums[lastPositiveIdx]) { + result[idx--] = nums[firstNegativeIdx] * nums[firstNegativeIdx]; + firstNegativeIdx++; + if (firstNegativeIdx < nums.length && nums[firstNegativeIdx] >= 0) { + firstNegativeIdx = nums.length; + } } else { - squareSorted[idx++] = nums[start] * nums[start--]; + result[idx--] = nums[lastPositiveIdx] * nums[lastPositiveIdx]; + lastPositiveIdx--; + if (lastPositiveIdx >= 0 && nums[lastPositiveIdx] < 0) { + lastPositiveIdx = -1; + } } - } else if (start >= 0) { - squareSorted[idx++] = nums[start] * nums[start--]; + } else if (firstNegativeIdx < nums.length && lastPositiveIdx < 0) { + result[idx--] = nums[firstNegativeIdx] * nums[firstNegativeIdx]; + firstNegativeIdx++; } else { - squareSorted[idx++] = nums[end] * nums[end++]; + result[idx--] = nums[lastPositiveIdx] * nums[lastPositiveIdx]; + lastPositiveIdx--; } } - return squareSorted; + return result; } } From 1465f4041408af759db71b314207341aaabaaa08 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Apr 2022 06:42:41 -0700 Subject: [PATCH 0427/1640] Update Custom Sort String.java --- Medium/Custom Sort String.java | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Medium/Custom Sort String.java b/Medium/Custom Sort String.java index 248a721a..ecdcb98d 100644 --- a/Medium/Custom Sort String.java +++ b/Medium/Custom Sort String.java @@ -1,16 +1,23 @@ class Solution { public String customSortString(String order, String s) { - Map map = new HashMap<>(); - int position = 1; + Map frequency = new HashMap<>(); + for (char c : s.toCharArray()) { + frequency.put(c, frequency.getOrDefault(c, 0) + 1); + } + StringBuilder sb = new StringBuilder(); for (char c : order.toCharArray()) { - map.put(c, position++); + int count = frequency.getOrDefault(c, 0); + while (count-- > 0) { + sb.append(c); + } + frequency.put(c, 0); + } + for (Character key : frequency.keySet()) { + int count = frequency.getOrDefault(key, 0); + while (count-- > 0) { + sb.append(key); + } } - return s.chars() - .mapToObj(c -> (char) c) - .sorted(Comparator.comparing(o -> map.getOrDefault(o, 0))) - .collect(Collector.of(StringBuilder::new, - StringBuilder::append, - StringBuilder::append, - StringBuilder::toString)); + return sb.toString(); } } From 37f520b2573adc1cc10db47c0e48b62355b16786 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Apr 2022 14:34:17 -0700 Subject: [PATCH 0428/1640] Create Count Prefixes of a Given String.java --- Easy/Count Prefixes of a Given String.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Count Prefixes of a Given String.java diff --git a/Easy/Count Prefixes of a Given String.java b/Easy/Count Prefixes of a Given String.java new file mode 100644 index 00000000..52438307 --- /dev/null +++ b/Easy/Count Prefixes of a Given String.java @@ -0,0 +1,5 @@ +class Solution { + public int countPrefixes(String[] words, String s) { + return (int) Arrays.stream(words).filter(word -> s.startsWith(word)).count(); + } +} From 5541c9340b5c71e8964bf7e97327ec2afed63a87 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Apr 2022 19:01:12 -0700 Subject: [PATCH 0429/1640] Update Backspace String Compare.java --- Easy/Backspace String Compare.java | 56 +++++++++--------------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/Easy/Backspace String Compare.java b/Easy/Backspace String Compare.java index b480d09f..170f9f69 100644 --- a/Easy/Backspace String Compare.java +++ b/Easy/Backspace String Compare.java @@ -1,45 +1,23 @@ class Solution { - public boolean backspaceCompare(String S, String T) { - int i = S.length() - 1; - int j = T.length() - 1; - int skipS = 0; - int skipT = 0; - while (i >= 0 || j >= 0) { - while (i >= 0) { - if (S.charAt(i) == '#') { - skipS++; - i--; - } - else if (skipS > 0) { - skipS--; - i--; - } - else { - break; - } - } - while (j >= 0) { - if (T.charAt(j) == '#') { - skipT++; - j--; - } - else if (skipT > 0) { - skipT--; - j--; - } - else { - break; + public boolean backspaceCompare(String s, String t) { + return formBackSpaceString(s).equals(formBackSpaceString(t)); + } + + private String formBackSpaceString(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (c == '#') { + if (!stack.isEmpty()) { + stack.pop(); } + } else { + stack.push(c); } - if (i >= 0 && j >= 0 && S.charAt(i) != T.charAt(j)) { - return false; - } - if ((i >= 0) != (j >= 0)) { - return false; - } - i--; - j--; } - return true; + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.toString(); } } From 17dde8d0ac8206a84ec2381ec63fc0aec5d87ac1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 May 2022 07:18:30 -0700 Subject: [PATCH 0430/1640] Create Remove Digit From Number to Maximize Result.java --- ...emove Digit From Number to Maximize Result.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Remove Digit From Number to Maximize Result.java diff --git a/Easy/Remove Digit From Number to Maximize Result.java b/Easy/Remove Digit From Number to Maximize Result.java new file mode 100644 index 00000000..b789ea2c --- /dev/null +++ b/Easy/Remove Digit From Number to Maximize Result.java @@ -0,0 +1,14 @@ +class Solution { + public String removeDigit(String number, char digit) { + int lastOccurrence = -1; + for (int i = 0; i < number.length(); i++) { + if (number.charAt(i) == digit) { + if (i + 1 < number.length() && number.charAt(i + 1) > digit) { + return number.substring(0, i) + number.substring(i + 1); + } + lastOccurrence = i; + } + } + return number.substring(0, lastOccurrence) + number.substring(lastOccurrence + 1); + } +} From ed8ca44694e56f7436c69bbe53dba122118258b5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 May 2022 09:33:36 -0700 Subject: [PATCH 0431/1640] Create Minimum Consecutive Cards to Pick Up.java --- Medium/Minimum Consecutive Cards to Pick Up.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Minimum Consecutive Cards to Pick Up.java diff --git a/Medium/Minimum Consecutive Cards to Pick Up.java b/Medium/Minimum Consecutive Cards to Pick Up.java new file mode 100644 index 00000000..147cc54e --- /dev/null +++ b/Medium/Minimum Consecutive Cards to Pick Up.java @@ -0,0 +1,13 @@ +class Solution { + public int minimumCardPickup(int[] cards) { + int minCount = Integer.MAX_VALUE; + Map map = new HashMap<>(); + for (int i = 0; i < cards.length; i++) { + if (map.containsKey(cards[i])) { + minCount = Math.min(minCount, i - map.get(cards[i]) + 1); + } + map.put(cards[i], i); + } + return minCount == Integer.MAX_VALUE ? -1 : minCount; + } +} From 9bc46611e4f6dce7a88e1cc76ee720d4d9927a6f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 May 2022 16:15:10 -0700 Subject: [PATCH 0432/1640] Create Minimum Average Difference.java --- Medium/Minimum Average Difference.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Minimum Average Difference.java diff --git a/Medium/Minimum Average Difference.java b/Medium/Minimum Average Difference.java new file mode 100644 index 00000000..995bcd11 --- /dev/null +++ b/Medium/Minimum Average Difference.java @@ -0,0 +1,23 @@ +class Solution { + public int minimumAverageDifference(int[] nums) { + int n = nums.length; + long[] prefixSumArray = new long[n]; + long currSum = 0; + for (int i = 0; i < n; i++) { + currSum += nums[i]; + prefixSumArray[i] = currSum; + } + long minDifference = Integer.MAX_VALUE; + int minDifferenceIdx = -1; + for (int i = 0; i < n; i++) { + long leftAverage = prefixSumArray[i] / (i + 1); + long rightAverage = (i == n - 1) ? 0 : (prefixSumArray[n - 1] - prefixSumArray[i]) / (n - 1 - i); + long absoluteDiff = Math.abs(leftAverage - rightAverage); + if (minDifference > absoluteDiff) { + minDifference = absoluteDiff; + minDifferenceIdx = i; + } + } + return minDifferenceIdx; + } +} From b2188e01c553bf7a7a8267be6d15ea31458d7ac7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 2 May 2022 06:57:58 -0700 Subject: [PATCH 0433/1640] Update Merge Two Sorted Lists.java --- Easy/Merge Two Sorted Lists.java | 42 ++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/Easy/Merge Two Sorted Lists.java b/Easy/Merge Two Sorted Lists.java index 7ce21fbd..cb2fff94 100644 --- a/Easy/Merge Two Sorted Lists.java +++ b/Easy/Merge Two Sorted Lists.java @@ -10,26 +10,38 @@ */ class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { - ListNode dummy = new ListNode(-1); - ListNode curr = dummy; - while (list1 != null || list2 != null) { - if (list1 != null && list2 != null) { - if (list1.val > list2.val) { - curr.next = new ListNode(list2.val); - list2 = list2.next; - } else { - curr.next = new ListNode(list1.val); - list1 = list1.next; + if (list1 == null || list2 == null) { + return list1 == null ? list2 : list1; + } + ListNode prev = null; + ListNode head = null; + while (list1 != null && list2 != null) { + if (list1.val <= list2.val) { + prev = list1; + if (head == null) { + head = list1; } - } else if (list1 != null && list2 == null) { - curr.next = new ListNode(list1.val); list1 = list1.next; } else { - curr.next = new ListNode(list2.val); + ListNode node = list2; list2 = list2.next; + if (prev == null) { + node.next = list1; + prev = node; + head = prev; + } else { + prev.next = node; + node.next = list1; + prev = node; + } } - curr = curr.next; } - return dummy.next; + if (list2 != null) { + prev.next = list2; + } + if (list1 != null) { + prev.next = list1; + } + return head; } } From 001695a0577bebdf4ced2ccdef4f27cdc0319d0f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 2 May 2022 15:30:13 -0700 Subject: [PATCH 0434/1640] Update Closest Binary Search Tree Value.java --- Easy/Closest Binary Search Tree Value.java | 35 ++++++++++++---------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/Easy/Closest Binary Search Tree Value.java b/Easy/Closest Binary Search Tree Value.java index 0f1ad50c..cbf397e0 100644 --- a/Easy/Closest Binary Search Tree Value.java +++ b/Easy/Closest Binary Search Tree Value.java @@ -4,30 +4,35 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public int closestValue(TreeNode root, double target) { - int[] ans = {0}; - double minDiff = Double.MAX_VALUE; - helper(root, target, ans, minDiff); - return ans[0]; - } + double[] result = {Double.MAX_VALUE, -1}; + helper(root, target, result); + return (int) result[1]; + } - private void helper(TreeNode root, double target, int[] ans, double minDiff) { + private void helper(TreeNode root, double target, double[] result) { if (root == null) { return; } - if (Math.abs(root.val - target) < minDiff) { - minDiff = Math.abs(root.val - target); - ans[0] = root.val; - } - if (root.val < target) { - helper(root.right, target, ans, minDiff); + double diff = Math.abs(root.val - target); + if (diff <= result[0]) { + result[0] = diff; + result[1] = root.val; } - else { - helper(root.left, target, ans, minDiff); + if (root.val > target) { + helper(root.left, target, result); + } else { + helper(root.right, target, result); } } } From 5f688d268b668366a8db62ae4dcce60a0a479e51 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 May 2022 07:57:29 -0700 Subject: [PATCH 0435/1640] Update Shortest Unsorted Continuous Subarray.java --- ...Shortest Unsorted Continuous Subarray.java | 48 +++++++------------ 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/Easy/Shortest Unsorted Continuous Subarray.java b/Easy/Shortest Unsorted Continuous Subarray.java index 2757ecbd..22fd54da 100644 --- a/Easy/Shortest Unsorted Continuous Subarray.java +++ b/Easy/Shortest Unsorted Continuous Subarray.java @@ -1,33 +1,21 @@ class Solution { - public int findUnsortedSubarray(int[] nums) { - - int[] copy = new int[nums.length]; - for (int i=0;i stack = new Stack<>(); + int start = nums.length; + for (int i = 0; i < nums.length; i++) { + while (!stack.isEmpty() && nums[stack.peek()] > nums[i]) { + start = Math.min(start, stack.pop()); + } + stack.push(i); } + stack.clear(); + int end = 0; + for (int i = nums.length - 1; i >= 0; i--) { + while (!stack.isEmpty() && nums[stack.peek()] < nums[i]) { + end = Math.max(end, stack.pop()); + } + stack.push(i); + } + return end - start > 0 ? end - start + 1 : 0; + } } From 06b495b223f9d524f9e7fdeb99fc38b35e644db8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 May 2022 07:57:48 -0700 Subject: [PATCH 0436/1640] Rename Easy/Shortest Unsorted Continuous Subarray.java to Medium/Shortest Unsorted Continuous Subarray.java --- {Easy => Medium}/Shortest Unsorted Continuous Subarray.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Easy => Medium}/Shortest Unsorted Continuous Subarray.java (100%) diff --git a/Easy/Shortest Unsorted Continuous Subarray.java b/Medium/Shortest Unsorted Continuous Subarray.java similarity index 100% rename from Easy/Shortest Unsorted Continuous Subarray.java rename to Medium/Shortest Unsorted Continuous Subarray.java From 399f4965cc4368b487c6eddfbf5c4d77826e0609 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 May 2022 13:38:56 -0700 Subject: [PATCH 0437/1640] Update Shuffle String.java --- Easy/Shuffle String.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Easy/Shuffle String.java b/Easy/Shuffle String.java index 5b82086f..10340050 100644 --- a/Easy/Shuffle String.java +++ b/Easy/Shuffle String.java @@ -1,9 +1,24 @@ class Solution { public String restoreString(String s, int[] indices) { - char[] letters = new char[s.length()]; + char[] letters = s.toCharArray(); for (int i = 0; i < indices.length; i++) { - letters[indices[i]] = s.charAt(i); + while (indices[i] != i) { + swapLetter(letters, i, indices[i]); + swapIndex(indices, i, indices[i]); + } } return String.valueOf(letters); } + + private void swapLetter(char[] arr, int idxOne, int idxTwo) { + char temp = arr[idxOne]; + arr[idxOne] = arr[idxTwo]; + arr[idxTwo] = temp; + } + + private void swapIndex(int[] arr, int idxOne, int idxTwo) { + int temp = arr[idxOne]; + arr[idxOne] = arr[idxTwo]; + arr[idxTwo] = temp; + } } From cd0ecac29ce2007cf950adb7f7b23b5c70d6d521 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 May 2022 16:26:21 -0700 Subject: [PATCH 0438/1640] Update Intersection of Three Sorted Arrays.java --- Easy/Intersection of Three Sorted Arrays.java | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/Easy/Intersection of Three Sorted Arrays.java b/Easy/Intersection of Three Sorted Arrays.java index 71e66b1c..d7dc12e5 100644 --- a/Easy/Intersection of Three Sorted Arrays.java +++ b/Easy/Intersection of Three Sorted Arrays.java @@ -1,21 +1,28 @@ class Solution { public List arraysIntersection(int[] arr1, int[] arr2, int[] arr3) { - int[] counter = new int[2001]; - updateCounter(counter, arr1); - updateCounter(counter, arr2); - updateCounter(counter, arr3); - List ans = new ArrayList<>(); - for (int i = 0; i < 2001; i++) { - if (counter[i] == 3) { - ans.add(i); + int idxOne = 0; + int idxTwo = 0; + int idxThree = 0; + List result = new ArrayList<>(); + while (idxOne < arr1.length && idxTwo < arr2.length && idxThree < arr3.length) { + if (arr1[idxOne] == arr2[idxTwo] && arr2[idxTwo] == arr3[idxThree]) { + result.add(arr1[idxOne]); + idxOne++; + idxTwo++; + idxThree++; + } else { + int max = Math.max(arr1[idxOne], Math.max(arr2[idxTwo], arr3[idxThree])); + if (arr1[idxOne] < max) { + idxOne++; + } + if (arr2[idxTwo] < max) { + idxTwo++; + } + if (arr3[idxThree] < max) { + idxThree++; + } } } - return ans; - } - - private void updateCounter(int[] counter, int[] arr) { - for (int num : arr) { - counter[num]++; - } + return result; } } From c5acea2e79f6c8fda5f0c2599ac697d196b7df39 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 May 2022 16:28:02 -0700 Subject: [PATCH 0439/1640] Update Next Greater Element I.java --- Easy/Next Greater Element I.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Easy/Next Greater Element I.java b/Easy/Next Greater Element I.java index 8deb6de6..35234857 100644 --- a/Easy/Next Greater Element I.java +++ b/Easy/Next Greater Element I.java @@ -1,20 +1,18 @@ class Solution { public int[] nextGreaterElement(int[] nums1, int[] nums2) { + Map map = new HashMap<>(); Stack stack = new Stack<>(); - int[] nextMaximum = new int[nums2.length]; - Map indexMap = new HashMap<>(); for (int i = nums2.length - 1; i >= 0; i--) { while (!stack.isEmpty() && stack.peek() <= nums2[i]) { stack.pop(); } - nextMaximum[i] = stack.isEmpty() ? -1 : stack.peek(); + map.put(nums2[i], stack.isEmpty() ? -1 : stack.peek()); stack.push(nums2[i]); - indexMap.put(nums2[i], i); } - int[] nextMaximumResult = new int[nums1.length]; + int[] result = new int[nums1.length]; for (int i = 0; i < nums1.length; i++) { - nextMaximumResult[i] = nextMaximum[indexMap.get(nums1[i])]; + result[i] = map.getOrDefault(nums1[i], -1); } - return nextMaximumResult; + return result; } } From 13fc282f2f8ad4ac4b2de4a11e6ef98d68bf114f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 May 2022 10:59:58 -0700 Subject: [PATCH 0440/1640] Update Verifying an Alien Dictionary.java --- Easy/Verifying an Alien Dictionary.java | 30 +++++++++++-------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/Easy/Verifying an Alien Dictionary.java b/Easy/Verifying an Alien Dictionary.java index 9c71c049..e11a4728 100644 --- a/Easy/Verifying an Alien Dictionary.java +++ b/Easy/Verifying an Alien Dictionary.java @@ -1,31 +1,27 @@ class Solution { public boolean isAlienSorted(String[] words, String order) { - Map dictionary = new HashMap<>(); - for (int i = 0; i < order.length(); i++) { - dictionary.put(order.charAt(i), i); + Map map = new HashMap<>(); + int idx = 0; + for (char c : order.toCharArray()) { + map.put(c, idx++); } - for (int i = 0; i < words.length - 1; i++) { - if (!hasCorrectOrder(words[i], words[i + 1], dictionary)) { + for (int i = 1; i < words.length; i++) { + if (!isSorted(words[i - 1], words[i], map)) { return false; } } return true; } - private boolean hasCorrectOrder(String firstWord, String secondWord, Map dictionary) { - int idxOne = 0; - int idxTwo = 0; - boolean correctOrder = false; - while (idxOne < firstWord.length() && idxTwo < secondWord.length()) { - int dictionaryDiff = dictionary.get(firstWord.charAt(idxOne++)) - dictionary.get(secondWord.charAt(idxTwo++)); - if (dictionaryDiff > 0) { + private boolean isSorted(String wordOne, String wordTwo, Map map) { + for (int i = 0; i < Math.min(wordOne.length(), wordTwo.length()); i++) { + int diff = map.get(wordOne.charAt(i)) - map.get(wordTwo.charAt(i)); + if (diff > 0) { return false; - } - if (dictionaryDiff < 0) { - correctOrder = true; - break; + } else if (diff < 0) { + return true; } } - return correctOrder || firstWord.length() <= secondWord.length(); + return wordOne.length() <= wordTwo.length(); } } From ffc081d89843f1b637d57371eb6a6d723edf55b8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 12 May 2022 07:23:50 +0530 Subject: [PATCH 0441/1640] Update Permutations II.java --- Medium/Permutations II.java | 39 ++++++++++++++----------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/Medium/Permutations II.java b/Medium/Permutations II.java index 79757bf3..2469a285 100644 --- a/Medium/Permutations II.java +++ b/Medium/Permutations II.java @@ -1,34 +1,25 @@ class Solution { public List> permuteUnique(int[] nums) { - List> ans = new ArrayList<>(); - if (nums.length == 0) { - return ans; - } - List curr = new ArrayList<>(); + List> result = new ArrayList<>(); Arrays.sort(nums); - helper(nums, ans, curr, new boolean[nums.length]); - return ans; + helper(nums, result, new ArrayList<>(), new boolean[nums.length]); + return result; } - - private void helper(int[] nums, List> ans, List curr, boolean[] used) { + + private void helper(int[] nums, List> result, List curr, boolean[] visited) { if (curr.size() == nums.length) { - ans.add(new ArrayList<>(curr)); + result.add(new ArrayList<>(curr)); + return; } - else { - for (int i = 0; i < nums.length; i++) { - if (used[i]) { - continue; - } - if (i > 0 && nums[i - 1] == nums[i] && !used[i - 1]) { - continue; - } - used[i] = true; - curr.add(nums[i]); - helper(nums, ans, curr, used); - curr.remove(curr.size() - 1); - used[i] = false; + for (int i = 0; i < nums.length; i++) { + if (visited[i] || (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1])) { + continue; } + curr.add(nums[i]); + visited[i] = true; + helper(nums, result, curr, visited); + curr.remove(curr.size() - 1); + visited[i] = false; } } } - From 83e7c600062eee0f05a00f23db5e645c22a8192e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 12 May 2022 07:28:51 +0530 Subject: [PATCH 0442/1640] Create Largest 3-Same-Digit Number in String.java --- Easy/Largest 3-Same-Digit Number in String.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Largest 3-Same-Digit Number in String.java diff --git a/Easy/Largest 3-Same-Digit Number in String.java b/Easy/Largest 3-Same-Digit Number in String.java new file mode 100644 index 00000000..6d0b2680 --- /dev/null +++ b/Easy/Largest 3-Same-Digit Number in String.java @@ -0,0 +1,13 @@ +class Solution { + public String largestGoodInteger(String num) { + int largestIdx = -1; + for (int i = 0; i < num.length() - 2; i++) { + if (num.charAt(i) == num.charAt(i + 1) && num.charAt(i + 1) == num.charAt(i + 2)) { + if (largestIdx == -1 || num.substring(largestIdx, largestIdx + 3).compareTo(num.substring(i, i + 3)) < 0) { + largestIdx = i; + } + } + } + return largestIdx == -1 ? "" : num.substring(largestIdx, largestIdx + 3); + } +} From cced2df2f1fa8e73f8272079697ac740b0653a8c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 12 May 2022 11:50:20 +0530 Subject: [PATCH 0443/1640] Create Count Nodes Equal to Average of Subtree.java --- ...unt Nodes Equal to Average of Subtree.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/Count Nodes Equal to Average of Subtree.java diff --git a/Medium/Count Nodes Equal to Average of Subtree.java b/Medium/Count Nodes Equal to Average of Subtree.java new file mode 100644 index 00000000..a642fc31 --- /dev/null +++ b/Medium/Count Nodes Equal to Average of Subtree.java @@ -0,0 +1,37 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int averageOfSubtree(TreeNode root) { + int[] result = {0}; + helper(root, result); + return result[0]; + } + + private int[] helper(TreeNode root, int[] result) { + if (root == null) { + return new int[]{0, 0}; + } + int[] left = helper(root.left, result); + int[] right = helper(root.right, result); + int sum = left[0] + right[0] + root.val; + int numOfNodes = left[1] + right[1] + 1; + int average = sum / numOfNodes; + if (root.val == average) { + result[0]++; + } + return new int[]{sum, numOfNodes}; + } +} From e0157ee8e6f478553fe147d5e178658116954436 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 14 May 2022 05:52:51 +0530 Subject: [PATCH 0444/1640] Update Populating Next Right Pointers in Each Node II.java --- Medium/Populating Next Right Pointers in Each Node II.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Medium/Populating Next Right Pointers in Each Node II.java b/Medium/Populating Next Right Pointers in Each Node II.java index 96dd48fc..42c9e387 100644 --- a/Medium/Populating Next Right Pointers in Each Node II.java +++ b/Medium/Populating Next Right Pointers in Each Node II.java @@ -23,13 +23,10 @@ public Node(int _val, Node _left, Node _right, Node _next) { class Solution { public Node connect(Node root) { - if (root == null) { - return null; - } Queue queue = new LinkedList<>(); queue.add(root); queue.add(null); - while (!queue.isEmpty() && queue.peek() != null) { + while (queue.peek() != null) { int size = queue.size() - 1; while (size-- > 0) { Node removed = queue.remove(); From a41e4bb94dbbbab2f0a4513c27169cd27495078a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 14 May 2022 17:59:40 +0530 Subject: [PATCH 0445/1640] Update Implement Stack using Queues.java --- Easy/Implement Stack using Queues.java | 82 ++++++++++++++------------ 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/Easy/Implement Stack using Queues.java b/Easy/Implement Stack using Queues.java index 08df7392..43c62339 100644 --- a/Easy/Implement Stack using Queues.java +++ b/Easy/Implement Stack using Queues.java @@ -1,44 +1,52 @@ -import java.util.ArrayList; - class MyStack { - - /** Initialize your data structure here. */ - ArrayList arrNew = new ArrayList<>(); - ArrayList arrOld = new ArrayList<>(); - - - /** Push element x onto stack. */ - public void push(int x) { - arrOld.add(x); - } - - /** Removes the element on top of the stack and returns that element. */ - public int pop() { - for (int i=0;i<=arrOld.size()-1;i++) { - arrNew.add(arrOld.get(i)); - } - int k = arrNew.get(arrNew.size()-1); - arrNew.remove(arrNew.indexOf(k)); - - arrOld.clear(); - return k; + + private Queue primaryQueue; + private Queue secondaryQueue; + + public MyStack() { + this.primaryQueue = new LinkedList<>(); + this.secondaryQueue = new LinkedList<>(); + } + + public void push(int x) { + this.primaryQueue.add(x); + } + + public int pop() { + int result = moveFromPrimaryToSecondary(); + moveFromSecondaryToPrimary(true); + return result; + } + + public int top() { + int result = moveFromPrimaryToSecondary(); + moveFromSecondaryToPrimary(false); + return result; + } + + public boolean empty() { + return this.primaryQueue.isEmpty(); + } + + private int moveFromPrimaryToSecondary() { + int last = this.primaryQueue.peek(); + while (!this.primaryQueue.isEmpty()) { + last = this.primaryQueue.peek(); + this.secondaryQueue.add(this.primaryQueue.remove()); } - - /** Get the top element. */ - public int top() { - for (int i=0;i<=arrOld.size()-1;i++) { - arrNew.add(arrOld.get(i)); - } - int k = arrNew.get(arrNew.size()-1); - - arrOld.clear(); - return k; + return last; + } + + private void moveFromSecondaryToPrimary(boolean removeLast) { + while (this.secondaryQueue.size() > 1) { + this.primaryQueue.add(this.secondaryQueue.remove()); } - - /** Returns whether the stack is empty. */ - public boolean empty() { - return arrNew.size() == 0 && arrOld.size() == 0; + if (removeLast) { + this.secondaryQueue.remove(); + } else { + this.primaryQueue.add(this.secondaryQueue.remove()); } + } } /** From 9f76b519203bc9c041fcfa02307bd0fe6cb1bde4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 16 May 2022 07:13:12 +0530 Subject: [PATCH 0446/1640] Create Find Resultant Array After Removing Anagrams.java --- ...sultant Array After Removing Anagrams.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Easy/Find Resultant Array After Removing Anagrams.java diff --git a/Easy/Find Resultant Array After Removing Anagrams.java b/Easy/Find Resultant Array After Removing Anagrams.java new file mode 100644 index 00000000..c2f0a9b0 --- /dev/null +++ b/Easy/Find Resultant Array After Removing Anagrams.java @@ -0,0 +1,31 @@ +class Solution { + public List removeAnagrams(String[] words) { + List result = new ArrayList<>(); + int startIdx = 0; + for (int i = 1; i < words.length; i++) { + if (!isAnagram(words[i], words[startIdx])) { + result.add(words[startIdx]); + startIdx = i; + } + } + result.add(words[startIdx]); + return result; + } + + private boolean isAnagram(String wordOne, String wordTwo) { + if (wordOne.length() != wordTwo.length()) { + return false; + } + int[] counter = new int[26]; + for (int i = 0; i < wordOne.length(); i++) { + counter[wordOne.charAt(i) - 'a']++; + counter[wordTwo.charAt(i) - 'a']--; + } + for (int i = 0; i < 26; i++) { + if (counter[i] != 0) { + return false; + } + } + return true; + } +} From 67dc0f03eda6b8d8957b633fa03fbaebb05e39cf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 16 May 2022 07:17:39 +0530 Subject: [PATCH 0447/1640] Create Find the K-Beauty of a Number.java --- Easy/Find the K-Beauty of a Number.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Find the K-Beauty of a Number.java diff --git a/Easy/Find the K-Beauty of a Number.java b/Easy/Find the K-Beauty of a Number.java new file mode 100644 index 00000000..a2a1b9f6 --- /dev/null +++ b/Easy/Find the K-Beauty of a Number.java @@ -0,0 +1,13 @@ +class Solution { + public int divisorSubstrings(int num, int k) { + String numString = String.valueOf(num); + int count = 0; + for (int i = 0; i <= numString.length() - k; i++) { + int substringNum = Integer.parseInt(numString.substring(i, i + k)); + if (substringNum != 0 && num % substringNum == 0) { + count++; + } + } + return count; + } +} From bd5b77be3fe3b962d4a29514d7172721dd72af83 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 17 May 2022 13:03:42 +0530 Subject: [PATCH 0448/1640] Update Find a Corresponding Node of a Binary Tree in a Clone of That Tree.java --- ...a Binary Tree in a Clone of That Tree.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/Medium/Find a Corresponding Node of a Binary Tree in a Clone of That Tree.java b/Medium/Find a Corresponding Node of a Binary Tree in a Clone of That Tree.java index 6be836db..0373fe3f 100644 --- a/Medium/Find a Corresponding Node of a Binary Tree in a Clone of That Tree.java +++ b/Medium/Find a Corresponding Node of a Binary Tree in a Clone of That Tree.java @@ -10,13 +10,25 @@ class Solution { public final TreeNode getTargetCopy(final TreeNode original, final TreeNode cloned, final TreeNode target) { - if (original == null || original == target) { - return cloned; + Deque stackOriginal = new ArrayDeque<>(); + Deque stackCloned = new ArrayDeque<>(); + TreeNode nodeOriginal = original; + TreeNode nodeCloned = cloned; + while (!stackOriginal.isEmpty() || nodeOriginal != null) { + while (nodeOriginal != null) { + stackOriginal.add(nodeOriginal); + stackCloned.add(nodeCloned); + nodeOriginal = nodeOriginal.left; + nodeCloned = nodeCloned.left; + } + nodeOriginal = stackOriginal.removeLast(); + nodeCloned = stackCloned.removeLast(); + if (nodeOriginal == target) { + return nodeCloned; + } + nodeOriginal = nodeOriginal.right; + nodeCloned = nodeCloned.right; } - TreeNode leftResult = getTargetCopy(original.left, cloned.left, target); - if (leftResult != null) { - return leftResult; - } - return getTargetCopy(original.right, cloned.right, target); + return null; } } From 5cd7930dca1318728dde13c1535fd7225bf737b5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 17 May 2022 13:53:50 +0530 Subject: [PATCH 0449/1640] Create Number of Ways to Split Array.java --- Medium/Number of Ways to Split Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Number of Ways to Split Array.java diff --git a/Medium/Number of Ways to Split Array.java b/Medium/Number of Ways to Split Array.java new file mode 100644 index 00000000..0c3f54f0 --- /dev/null +++ b/Medium/Number of Ways to Split Array.java @@ -0,0 +1,17 @@ +class Solution { + public int waysToSplitArray(int[] nums) { + long arraySum = 0; + for (int i = 0; i < nums.length; i++) { + arraySum += nums[i]; + } + int ways = 0; + long prefixSum = 0; + for (int i = 0; i < nums.length - 1; i++) { + prefixSum += nums[i]; + if (prefixSum >= arraySum - prefixSum) { + ways++; + } + } + return ways; + } +} From 3fdac5f99fdc5f8d9a8e6f8c5908394dc29055f2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 17 May 2022 14:21:46 +0530 Subject: [PATCH 0450/1640] Update Number of Ways to Split Array.java --- Medium/Number of Ways to Split Array.java | 24 +++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Medium/Number of Ways to Split Array.java b/Medium/Number of Ways to Split Array.java index 0c3f54f0..3cbaed3a 100644 --- a/Medium/Number of Ways to Split Array.java +++ b/Medium/Number of Ways to Split Array.java @@ -1,17 +1,17 @@ class Solution { - public int waysToSplitArray(int[] nums) { - long arraySum = 0; - for (int i = 0; i < nums.length; i++) { - arraySum += nums[i]; - } - int ways = 0; + public int waysToSplitArray(int[] nums) { + long arraySum = 0; + for (int i = 0; i < nums.length; i++) { + arraySum += nums[i]; + } + int ways = 0; long prefixSum = 0; - for (int i = 0; i < nums.length - 1; i++) { + for (int i = 0; i < nums.length - 1; i++) { prefixSum += nums[i]; - if (prefixSum >= arraySum - prefixSum) { - ways++; - } - } - return ways; + if (prefixSum >= arraySum - prefixSum) { + ways++; + } + } + return ways; } } From c8272ac5155e54e8e6484b1887efc5bf3df52bbc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 17 May 2022 15:41:10 +0530 Subject: [PATCH 0451/1640] Create Maximum Consecutive Floors Without Special Floors.java --- ...um Consecutive Floors Without Special Floors.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Maximum Consecutive Floors Without Special Floors.java diff --git a/Medium/Maximum Consecutive Floors Without Special Floors.java b/Medium/Maximum Consecutive Floors Without Special Floors.java new file mode 100644 index 00000000..8d33dc1e --- /dev/null +++ b/Medium/Maximum Consecutive Floors Without Special Floors.java @@ -0,0 +1,12 @@ +class Solution { + public int maxConsecutive(int bottom, int top, int[] special) { + Arrays.sort(special); + int maxConsecutiveFloors = Math.max(special[0] - bottom, top - special[special.length - 1]); + for (int specialFloor : special) { + int emptyFloors = specialFloor - bottom; + bottom = specialFloor + 1; + maxConsecutiveFloors = Math.max(maxConsecutiveFloors, emptyFloors); + } + return maxConsecutiveFloors; + } +} From 8b4e2559dd54c138c3b4dee8ad4828a742f8855e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 18 May 2022 15:45:40 +0530 Subject: [PATCH 0452/1640] Create Critical Connections in a Network.java --- Hard/Critical Connections in a Network.java | 49 +++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Hard/Critical Connections in a Network.java diff --git a/Hard/Critical Connections in a Network.java b/Hard/Critical Connections in a Network.java new file mode 100644 index 00000000..92d73cb4 --- /dev/null +++ b/Hard/Critical Connections in a Network.java @@ -0,0 +1,49 @@ +class Solution { + public List> criticalConnections(int n, List> connections) { + Map> graph = new HashMap<>(); + Map rank = new HashMap<>(); + Set connectionSet = new HashSet<>(); + buildGraph(n, connections, graph, rank, connectionSet); + dfs(0, 0, graph, rank, connectionSet); + List> result = new ArrayList<>(); + for (String conn : connectionSet) { + int nodeOne = Integer.parseInt(conn.split("-")[0]); + int nodeTwo = Integer.parseInt(conn.split("-")[1]); + result.add(Arrays.asList(nodeOne, nodeTwo)); + } + return result; + } + + private void buildGraph(int n, List> connections, Map> graph, Map rank, Set connectionSet) { + for (int i = 0; i < n; i++) { + graph.put(i, new ArrayList<>()); + rank.put(i, null); + } + for (List edge : connections) { + graph.get(edge.get(0)).add(edge.get(1)); + graph.get(edge.get(1)).add(edge.get(0)); + connectionSet.add( + Math.min(edge.get(0), edge.get(1)) + "-" + Math.max(edge.get(0), edge.get(1))); + } + } + + private int dfs(int node, int discoveryRank, Map> graph, Map rank, Set connectionSet) { + if (rank.get(node) != null) { + return rank.get(node); + } + rank.put(node, discoveryRank); + int minimumRank = discoveryRank + 1; + for (Integer neighbor : graph.get(node)) { + Integer neighborRank = rank.get(neighbor); + if (neighborRank != null && neighborRank == discoveryRank - 1) { + continue; + } + int recursiveRank = dfs(neighbor, discoveryRank + 1, graph, rank, connectionSet); + if (recursiveRank <= discoveryRank) { + connectionSet.remove(Math.min(node, neighbor) + "-" + Math.max(node, neighbor)); + } + minimumRank = Math.min(minimumRank, recursiveRank); + } + return minimumRank; + } +} From d1c151fda43e77a9384da9cbd12f59570595a989 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 18 May 2022 16:29:01 +0530 Subject: [PATCH 0453/1640] Update Sort Colors.java --- Medium/Sort Colors.java | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Medium/Sort Colors.java b/Medium/Sort Colors.java index 1bbb3b95..6bfe64e8 100644 --- a/Medium/Sort Colors.java +++ b/Medium/Sort Colors.java @@ -2,21 +2,18 @@ class Solution { public void sortColors(int[] nums) { int zeroIdx = 0; int twoIdx = nums.length - 1; - int currIdx = 0; - while (currIdx <= twoIdx) { - if (nums[currIdx] == 0) { - swap(nums, currIdx++, zeroIdx++); - } else if (nums[currIdx] == 2) { - swap(nums, currIdx, twoIdx--); + for (int i = 0; i <= twoIdx; ) { + if (nums[i] == 0 && i != zeroIdx) { + int temp = nums[zeroIdx]; + nums[zeroIdx++] = nums[i]; + nums[i] = temp; + } else if (nums[i] == 2 && i != twoIdx) { + int temp = nums[twoIdx]; + nums[twoIdx--] = nums[i]; + nums[i] = temp; } else { - currIdx++; + i++; } } } - - private void swap(int[] nums, int idxOne, int idxTwo) { - int temp = nums[idxTwo]; - nums[idxTwo] = nums[idxOne]; - nums[idxOne] = temp; - } } From 3d4b057d6d0e3d96bff422ca4b7944bf0d12f51f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 19 May 2022 05:32:43 +0530 Subject: [PATCH 0454/1640] Update and rename Delete node in a linked list.java to Delete Node in a Linked List.java --- Easy/Delete Node in a Linked List.java | 15 +++++++++++++++ Easy/Delete node in a linked list.java | 14 -------------- 2 files changed, 15 insertions(+), 14 deletions(-) create mode 100644 Easy/Delete Node in a Linked List.java delete mode 100644 Easy/Delete node in a linked list.java diff --git a/Easy/Delete Node in a Linked List.java b/Easy/Delete Node in a Linked List.java new file mode 100644 index 00000000..0cfa6304 --- /dev/null +++ b/Easy/Delete Node in a Linked List.java @@ -0,0 +1,15 @@ +/** +* Definition for singly-linked list. +* public class ListNode { +* int val; +* ListNode next; +* ListNode(int x) { val = x; } +* } +*/ +class Solution { + public void deleteNode(ListNode node) { + int nextVal = node.next.val; + node.next = node.next.next; + node.val = nextVal; + } +} diff --git a/Easy/Delete node in a linked list.java b/Easy/Delete node in a linked list.java deleted file mode 100644 index 3704d05b..00000000 --- a/Easy/Delete node in a linked list.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Definition for singly-linked list. - * public class ListNode { - * int val; - * ListNode next; - * ListNode(int x) { val = x; } - * } - */ -class Solution { - public void deleteNode(ListNode node) { - node.val = node.next.val; - node.next=node.next.next; - } -} \ No newline at end of file From be9503e25581545b8c1ee838ab1418098ce6fb4c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 19 May 2022 06:51:28 +0530 Subject: [PATCH 0455/1640] Update Longest Increasing Path in a Matrix.java --- Hard/Longest Increasing Path in a Matrix.java | 58 +++++++++---------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/Hard/Longest Increasing Path in a Matrix.java b/Hard/Longest Increasing Path in a Matrix.java index 6ba938a2..e7c7f819 100644 --- a/Hard/Longest Increasing Path in a Matrix.java +++ b/Hard/Longest Increasing Path in a Matrix.java @@ -1,36 +1,30 @@ class Solution { - int[][] dirs = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - public int longestIncreasingPath(int[][] matrix) { - if (matrix.length == 0 || matrix[0].length == 0) { - return 0; - } - - int[][] dp = new int[matrix.length][matrix[0].length]; - int max = 0; - for (int i = 0; i < matrix.length; i++) { - for (int j = 0; j < matrix[0].length; j++) { - max = Math.max(max, dfs(matrix, i, j, dp, Integer.MIN_VALUE)); - } - } - - return max; + private final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int longestIncreasingPath(int[][] matrix) { + int numRows = matrix.length; + int numCols = matrix[0].length; + int maxPathLength = 0; + int[][] cache = new int[numRows][numCols]; + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < numCols; j++) { + maxPathLength = Math.max(maxPathLength, helper(matrix, numRows, numCols, i, j, cache)); + } } - - private int dfs(int[][] matrix, int x, int y, int[][] dp, int prevVal) { - if (x < 0 || x >= matrix.length || y < 0 || y >= matrix[0].length || matrix[x][y] <= prevVal) { - return 0; - } - - if (dp[x][y] != 0) { - return dp[x][y]; - } - - int temp = 0; - for (int[] dir : dirs) { - temp = Math.max(temp, dfs(matrix, x + dir[0], y + dir[1], dp, matrix[x][y])); - } - - dp[x][y] = temp + 1; - return dp[x][y]; + return maxPathLength; + } + + private int helper(int[][] matrix, int numRows, int numCols, int i, int j, int[][] cache) { + if (cache[i][j] != 0) { + return cache[i][j]; } + for (int[] dir : DIRS) { + int x = i + dir[0]; + int y = j + dir[1]; + if (x >= 0 && y >= 0 && x < numRows && y < numCols && matrix[x][y] > matrix[i][j]) { + cache[i][j] = Math.max(cache[i][j], helper(matrix, numRows, numCols, x, y, cache)); + } + } + return ++cache[i][j]; + } } From c3251f93973b11d8604ba179b9d3da9a3117bdda Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 21 May 2022 07:59:35 -0700 Subject: [PATCH 0456/1640] Update Unique Paths.java --- Medium/Unique Paths.java | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/Medium/Unique Paths.java b/Medium/Unique Paths.java index 8f1be73d..87e5f34e 100644 --- a/Medium/Unique Paths.java +++ b/Medium/Unique Paths.java @@ -1,20 +1,14 @@ class Solution { public int uniquePaths(int m, int n) { - Integer[][] dp = new Integer[m][n]; - return helper(0, 0, m, n, dp); - } - - private int helper(int currX, int currY, int m, int n, Integer[][] dp) { - if (currX == m - 1 && currY == n - 1) { - return 1; - } - if (currX >= m || currY >= n) { - return 0; + int[][] dp = new int[m][n]; + for (int[] arr : dp) { + Arrays.fill(arr, 1); } - if (dp[currX][currY] != null) { - return dp[currX][currY]; + for (int i = 1; i < m; i++) { + for (int j = 1; j < n; j++) { + dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; + } } - dp[currX][currY] = helper(currX + 1, currY, m, n, dp) + helper(currX, currY + 1, m, n, dp); - return dp[currX][currY]; + return dp[m - 1][n - 1]; } } From 253658143ecaa6d2b6e84577e10ef391688da94a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 21 May 2022 08:52:09 -0700 Subject: [PATCH 0457/1640] Update Sign of the Product of an Array.java --- Easy/Sign of the Product of an Array.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Easy/Sign of the Product of an Array.java b/Easy/Sign of the Product of an Array.java index bbd0d67d..8f286c24 100644 --- a/Easy/Sign of the Product of an Array.java +++ b/Easy/Sign of the Product of an Array.java @@ -1,6 +1,12 @@ class Solution { public int arraySign(int[] nums) { - return Arrays.stream(nums).filter(num -> num == 0).map(e -> 0).findAny() - .orElse(Arrays.stream(nums).filter(num -> num < 0).count() % 2 == 0 ? 1 : -1); + int negativeCount = 0; + for (int num : nums) { + if (num == 0) { + return 0; + } + negativeCount += num < 0 ? 1 : 0; + } + return negativeCount % 2 == 0 ? 1 : -1; } } From 8b600216422f278b10abf949bdd468632c63e5e3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 May 2022 14:22:15 -0700 Subject: [PATCH 0458/1640] Create Percentage of Letter in String.java --- Easy/Percentage of Letter in String.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Percentage of Letter in String.java diff --git a/Easy/Percentage of Letter in String.java b/Easy/Percentage of Letter in String.java new file mode 100644 index 00000000..96c0526c --- /dev/null +++ b/Easy/Percentage of Letter in String.java @@ -0,0 +1,11 @@ +class Solution { + public int percentageLetter(String s, char letter) { + int letterCount = 0; + for (char c : s.toCharArray()) { + if (c == letter) { + letterCount++; + } + } + return (letterCount * 100) / s.length(); + } +} From d8777ec4057551232ca819fbcf4ea47ac59a287b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 May 2022 14:30:34 -0700 Subject: [PATCH 0459/1640] Create Maximum Bags With Full Capacity of Rocks.java --- .../Maximum Bags With Full Capacity of Rocks.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Maximum Bags With Full Capacity of Rocks.java diff --git a/Medium/Maximum Bags With Full Capacity of Rocks.java b/Medium/Maximum Bags With Full Capacity of Rocks.java new file mode 100644 index 00000000..e73a7826 --- /dev/null +++ b/Medium/Maximum Bags With Full Capacity of Rocks.java @@ -0,0 +1,15 @@ +class Solution { + public int maximumBags(int[] capacity, int[] rocks, int additionalRocks) { + PriorityQueue pq = new PriorityQueue<>(); + for (int i = 0; i < capacity.length; i++) { + pq.add(capacity[i] - rocks[i]); + } + while (!pq.isEmpty()) { + if (pq.peek() > additionalRocks) { + return capacity.length - pq.size(); + } + additionalRocks -= pq.poll(); + } + return capacity.length; + } +} From 17e21d1025a861a4c61ecb5c99afe1782177ecd1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 May 2022 17:24:15 -0700 Subject: [PATCH 0460/1640] Create Ones and Zeroes.java --- Medium/Ones and Zeroes.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Ones and Zeroes.java diff --git a/Medium/Ones and Zeroes.java b/Medium/Ones and Zeroes.java new file mode 100644 index 00000000..d4e6335f --- /dev/null +++ b/Medium/Ones and Zeroes.java @@ -0,0 +1,26 @@ +class Solution { + public int findMaxForm(String[] strs, int m, int n) { + int[][] dp = new int[m + 1][n + 1]; + for (String s : strs) { + int[] count = getCountForZeroAndOne(s); + for (int zeroes = m; zeroes >= count[0]; zeroes--) { + for (int ones = n; ones >= count[1]; ones--) { + dp[zeroes][ones] = Math.max(1 + dp[zeroes - count[0]][ones - count[1]], dp[zeroes][ones]); + } + } + } + return dp[m][n]; + } + + private int[] getCountForZeroAndOne(String s) { + int[] count = {0, 0}; + for (char c : s.toCharArray()) { + if (c == '0') { + count[0]++; + } else { + count[1]++; + } + } + return count; + } +} From 7b54544c6ba7c3554a9f632f4e250512656a6612 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 May 2022 07:07:48 -0700 Subject: [PATCH 0461/1640] Update 1-bit and 2-bit Characters.java --- Easy/1-bit and 2-bit Characters.java | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/Easy/1-bit and 2-bit Characters.java b/Easy/1-bit and 2-bit Characters.java index c2031613..f58ff16a 100644 --- a/Easy/1-bit and 2-bit Characters.java +++ b/Easy/1-bit and 2-bit Characters.java @@ -1,20 +1,12 @@ class Solution { public boolean isOneBitCharacter(int[] bits) { int idx = 0; - int n = bits.length; - while (idx < n) { - if (bits[idx] == 1) { - if (idx + 1 == n - 1) { - return false; - } - else { - idx += 2; - } - } - else { + while (idx < bits.length - 1) { + if (bits[idx] != 0) { idx++; } + idx++; } - return true; - } + return idx == bits.length - 1; + } } From 972071a5831530e288bb02d8cc2eae1f5613f759 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 May 2022 07:32:38 -0700 Subject: [PATCH 0462/1640] Update Majority Element II.java --- Medium/Majority Element II.java | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/Medium/Majority Element II.java b/Medium/Majority Element II.java index 4d55d74e..a44275b4 100644 --- a/Medium/Majority Element II.java +++ b/Medium/Majority Element II.java @@ -1,25 +1,21 @@ class Solution { public List majorityElement(int[] nums) { + Integer majorityElementOne = null; + Integer majorityElementTwo = null; int countOne = 0; int countTwo = 0; - Integer candidateOne = null; - Integer candidateTwo = null; for (int num : nums) { - if (candidateOne != null && candidateOne == num) { + if (majorityElementOne != null && num == majorityElementOne) { countOne++; - } - else if (candidateTwo != null && candidateTwo == num) { + } else if (majorityElementTwo != null && num == majorityElementTwo) { countTwo++; - } - else if (countOne == 0) { - candidateOne = num; + } else if (countOne == 0) { + majorityElementOne = num; countOne = 1; - } - else if (countTwo == 0) { - candidateTwo = num; + } else if (countTwo == 0) { + majorityElementTwo = num; countTwo = 1; - } - else { + } else { countOne--; countTwo--; } @@ -28,18 +24,18 @@ else if (countTwo == 0) { countOne = 0; countTwo = 0; for (int num : nums) { - if (candidateOne != null && candidateOne == num) { + if (majorityElementOne != null && majorityElementOne == num) { countOne++; } - else if (candidateTwo != null && candidateTwo == num) { + if (majorityElementTwo != null && majorityElementTwo == num) { countTwo++; } } if (countOne > nums.length / 3) { - result.add(candidateOne); + result.add(majorityElementOne); } if (countTwo > nums.length / 3) { - result.add(candidateTwo); + result.add(majorityElementTwo); } return result; } From 90e405c538076acbd10b6206e1ec5e071f8bf519 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 May 2022 10:58:49 -0700 Subject: [PATCH 0463/1640] Create Friends Of Appropriate Ages.java --- Medium/Friends Of Appropriate Ages.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Friends Of Appropriate Ages.java diff --git a/Medium/Friends Of Appropriate Ages.java b/Medium/Friends Of Appropriate Ages.java new file mode 100644 index 00000000..8d63064c --- /dev/null +++ b/Medium/Friends Of Appropriate Ages.java @@ -0,0 +1,17 @@ +class Solution { + public int numFriendRequests(int[] ages) { + Map map = new HashMap<>(); + for (int age : ages) { + map.put(age, map.getOrDefault(age, 0) + 1); + } + int totalFriendRequests = 0; + for (Integer ageOne : map.keySet()) { + for (Integer ageTwo : map.keySet()) { + if (!((ageTwo <= 0.5 * ageOne + 7) || (ageTwo > ageOne) || (ageTwo > 100 && ageOne < 100))) { + totalFriendRequests += map.get(ageOne) * (map.get(ageTwo) - (ageOne == ageTwo ? 1 : 0)); + } + } + } + return totalFriendRequests; + } +} From 6b0ffffae799facb223796bce58e9f7440bd199c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 May 2022 11:22:25 -0700 Subject: [PATCH 0464/1640] Update Check Completeness of a Binary Tree.java --- .../Check Completeness of a Binary Tree.java | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/Medium/Check Completeness of a Binary Tree.java b/Medium/Check Completeness of a Binary Tree.java index a0f1e5f5..30ee5adb 100644 --- a/Medium/Check Completeness of a Binary Tree.java +++ b/Medium/Check Completeness of a Binary Tree.java @@ -15,27 +15,21 @@ */ class Solution { public boolean isCompleteTree(TreeNode root) { - List nodes = new ArrayList<>(); - nodes.add(new HelperNode(root, 1)); - int idx = 0 ; - while (idx < nodes.size()) { - HelperNode hnode = nodes.get(idx++); - if (hnode.node != null) { - nodes.add(new HelperNode(hnode.node.left, 2 * hnode.level)); - nodes.add(new HelperNode(hnode.node.right, 2 * hnode.level + 1)); + Queue queue = new LinkedList<>(); + queue.add(root); + boolean end = false; + while (!queue.isEmpty()) { + TreeNode removed = queue.poll(); + if (removed == null) { + end = true; + } else { + if (end) { + return false; + } + queue.add(removed.left); + queue.add(removed.right); } } - return nodes.get(idx - 1).level == nodes.size(); - } -} - - -class HelperNode { - TreeNode node; - int level; - - public HelperNode(TreeNode node, int level) { - this.node = node; - this.level = level; + return true; } } From a054043a8c5171c8f156c5037e3f86ba1b4e12cd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 May 2022 13:52:55 -0700 Subject: [PATCH 0465/1640] Update Palindrome Number.java --- Easy/Palindrome Number.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Easy/Palindrome Number.java b/Easy/Palindrome Number.java index 6c5be699..a3206088 100644 --- a/Easy/Palindrome Number.java +++ b/Easy/Palindrome Number.java @@ -3,15 +3,13 @@ public boolean isPalindrome(int x) { if (x < 0) { return false; } - return x - reverse(x) == 0; - } - - private int reverse(int n) { - int newNum = 0; - while (n > 0) { - newNum = newNum * 10 + n % 10; - n /= 10; + int reversedNum = 0; + int xCopy = x; + while (x > 0) { + int rem = x % 10; + reversedNum = reversedNum * 10 + rem; + x /= 10; } - return newNum; + return reversedNum == xCopy; } } From 01cd82a0f5160389a8a547a8e6d598e6a5aa94ad Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 May 2022 15:24:18 -0700 Subject: [PATCH 0466/1640] Update Remove Element.java --- Easy/Remove Element.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Easy/Remove Element.java b/Easy/Remove Element.java index f879483d..c75e9bb7 100644 --- a/Easy/Remove Element.java +++ b/Easy/Remove Element.java @@ -1,14 +1,11 @@ class Solution { public int removeElement(int[] nums, int val) { - int start = 0; - int end = 0; - int n = nums.length; - while (end < n) { - if (nums[end] != val) { - nums[start++] = nums[end]; + int idx = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] != val) { + nums[idx++] = nums[i]; } - end++; } - return start; + return idx; } } From 44323f051ed01a0f3d8e38376774356afee48941 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 04:48:27 -0700 Subject: [PATCH 0467/1640] Create Longest Valid Parentheses.java --- Hard/Longest Valid Parentheses.java | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Hard/Longest Valid Parentheses.java diff --git a/Hard/Longest Valid Parentheses.java b/Hard/Longest Valid Parentheses.java new file mode 100644 index 00000000..5f0d934c --- /dev/null +++ b/Hard/Longest Valid Parentheses.java @@ -0,0 +1,34 @@ +class Solution { + public int longestValidParentheses(String s) { + int maxLength = 0; + int leftIdx = 0; + int rightIdx = 0; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '(') { + leftIdx++; + } else { + rightIdx++; + } + if (leftIdx == rightIdx) { + maxLength = Math.max(maxLength, 2 * rightIdx); + } else if (rightIdx > leftIdx) { + leftIdx = rightIdx = 0; + } + } + leftIdx = 0; + rightIdx = 0; + for (int i = s.length() - 1; i >= 0; i--) { + if (s.charAt(i) == '(') { + leftIdx++; + } else { + rightIdx++; + } + if (leftIdx == rightIdx) { + maxLength = Math.max(maxLength, 2 * rightIdx); + } else if (leftIdx > rightIdx) { + leftIdx = rightIdx = 0; + } + } + return maxLength; + } +} From 1d353a55ebfe30a17dfd3601460515d19653db60 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 05:23:00 -0700 Subject: [PATCH 0468/1640] Update Reorder Data in Log Files.java --- Easy/Reorder Data in Log Files.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/Easy/Reorder Data in Log Files.java b/Easy/Reorder Data in Log Files.java index 86d8786d..e924d7ab 100644 --- a/Easy/Reorder Data in Log Files.java +++ b/Easy/Reorder Data in Log Files.java @@ -10,16 +10,9 @@ public String[] reorderLogFiles(String[] logs) { letterLogs.add(log); } } - letterLogs.sort((o1, o2) -> { - String contentOne = o1.substring(o1.indexOf(" ") + 1); - String contentTwo = o2.substring(o2.indexOf(" ") + 1); - int c = contentOne.compareTo(contentTwo); - if (c != 0) { - return c; - } - return o1.substring(0, o1.indexOf(" ")).compareTo(o2.substring(0, o2.indexOf(" "))); - }); + letterLogs.sort(Comparator.comparing((String o) -> o.substring(o.indexOf(' ') + 1)) + .thenComparing(o -> o.substring(0, o.indexOf(' ')))); letterLogs.addAll(digitLogs); - return letterLogs.toArray(new String[0]); - } + return letterLogs.toArray(new String[]{}); + } } From c4e3fcaab1b6cb4f5fb608adfe43a41ce19f9665 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 05:24:00 -0700 Subject: [PATCH 0469/1640] Update Generate Parentheses.java --- Medium/Generate Parentheses.java | 42 +++++++++++++++----------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/Medium/Generate Parentheses.java b/Medium/Generate Parentheses.java index 7b311c92..5d22b059 100644 --- a/Medium/Generate Parentheses.java +++ b/Medium/Generate Parentheses.java @@ -1,30 +1,28 @@ class Solution { - Set set; public List generateParenthesis(int n) { - set = new HashSet<>(); - StringBuilder sb = new StringBuilder(); - helper(n, 0, 0, sb); - return new ArrayList<>(set); + List result = new ArrayList<>(); + helper(result, 0, 0, n, new StringBuilder()); + return result; } - private void helper(int n, int open, int close, StringBuilder sb) { - if (sb.length() == 2 * n) { - set.add(sb.toString()); - } - else { - if (open <= close) { - sb.append('('); - helper(n, open + 1, close, new StringBuilder(sb.toString())); - } - else { - sb.append(')'); - helper(n, open, close + 1, new StringBuilder(sb.toString())); - sb.deleteCharAt(sb.length() - 1); - if (open < n) { - sb.append('('); - helper(n, open + 1, close, new StringBuilder(sb.toString())); - } + private void helper(List result, int start, int end, int n, StringBuilder sb) { + if (start + end == 2 * n) { + if (start == end) { + result.add(new StringBuilder(sb.toString()).toString()); } + return; + } + if (start > end) { + sb.append('('); + helper(result, start + 1, end, n, sb); + sb.deleteCharAt(sb.length() - 1); + sb.append(')'); + helper(result, start, end + 1, n, sb); + sb.deleteCharAt(sb.length() - 1); + } else if (start == end) { + sb.append('('); + helper(result, start + 1, end, n, sb); + sb.deleteCharAt(sb.length() - 1); } } } From de0a584947394ab439df7fa80cbbbcac37694fd6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 07:05:33 -0700 Subject: [PATCH 0470/1640] Update and rename Sum of left leaves.java to Sum of Left Leaves.java --- ...ft leaves.java => Sum of Left Leaves.java} | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) rename Easy/{Sum of left leaves.java => Sum of Left Leaves.java} (52%) diff --git a/Easy/Sum of left leaves.java b/Easy/Sum of Left Leaves.java similarity index 52% rename from Easy/Sum of left leaves.java rename to Easy/Sum of Left Leaves.java index 7197aa1c..622dd1c4 100644 --- a/Easy/Sum of left leaves.java +++ b/Easy/Sum of Left Leaves.java @@ -15,25 +15,26 @@ */ class Solution { public int sumOfLeftLeaves(TreeNode root) { - if (root == null) { - return 0; - } int sum = 0; Queue queue = new LinkedList<>(); queue.add(new TreeNode[]{root, null}); while (!queue.isEmpty()) { - TreeNode[] removed = queue.remove(); - if (removed[0].left == null && removed[0].right == null) { - if (removed[1] != null && removed[1].left == removed[0]) { - sum += removed[0].val; - } - } - else { - if (removed[0].left != null) { - queue.add(new TreeNode[]{removed[0].left, removed[0]}); - } - if (removed[0].right != null) { - queue.add(new TreeNode[]{removed[0].right, removed[0]}); + int size = queue.size(); + while (size-- > 0) { + TreeNode[] removed = queue.remove(); + TreeNode node = removed[0]; + TreeNode parent = removed[1]; + if (node.left == null && node.right == null) { + if (parent != null && parent.left == node) { + sum += node.val; + } + } else { + if (node.left != null) { + queue.add(new TreeNode[]{node.left, node}); + } + if (node.right != null) { + queue.add(new TreeNode[]{node.right, node}); + } } } } From 9845f6f98ea1538a0ef70e2941beaf160b14a7dd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 14:43:21 -0700 Subject: [PATCH 0471/1640] Update Strobogrammatic Number.java --- Easy/Strobogrammatic Number.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Easy/Strobogrammatic Number.java b/Easy/Strobogrammatic Number.java index c258a0c2..76ceb310 100644 --- a/Easy/Strobogrammatic Number.java +++ b/Easy/Strobogrammatic Number.java @@ -2,13 +2,11 @@ class Solution { public boolean isStrobogrammatic(String num) { StringBuilder sb = new StringBuilder(); for (char c : num.toCharArray()) { - if (c == '0' || c == '1' || c == '8') { - sb.append(c); - } - else if (c == '6' || c == '9') { + if (c == '6' || c == '9') { sb.append(c == '6' ? '9' : '6'); - } - else { + } else if (c == '0' || c == '8' || c == '1') { + sb.append(c); + } else { return false; } } From 255b9a17444f937b27458de030b84307e1f1c62c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 14:55:19 -0700 Subject: [PATCH 0472/1640] Update Diet Plan Performance.java --- Easy/Diet Plan Performance.java | 35 +++++++++++---------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/Easy/Diet Plan Performance.java b/Easy/Diet Plan Performance.java index 719e5797..f2cc1fab 100644 --- a/Easy/Diet Plan Performance.java +++ b/Easy/Diet Plan Performance.java @@ -1,27 +1,16 @@ class Solution { - int points; - public int dietPlanPerformance(int[] calories, int k, int lower, int upper) { - points = 0; - int totalCal = 0; - int start = 0; - for (int i = 0; i < k; i++) { - totalCal += calories[i]; - } - for (int i = k; i < calories.length; i++) { - updatePoints(totalCal, lower, upper); - totalCal -= calories[start++]; - totalCal += calories[i]; - } - updatePoints(totalCal, lower, upper); - return points; + public int dietPlanPerformance(int[] calories, int k, int lower, int upper) { + int points = 0; + int totalCalories = 0; + for (int i = 0; i < k - 1; i++) { + totalCalories += calories[i]; } - - private void updatePoints(int currCal, int lower, int upper) { - if (currCal < lower) { - points--; - } - if (currCal > upper) { - points++; - } + for (int i = k - 1; i < calories.length; i++) { + totalCalories += calories[i]; + points += totalCalories < lower ? -1 : 0; + points += totalCalories > upper ? 1 : 0; + totalCalories -= calories[i - k + 1]; } + return points; + } } From b27a158f9d466420bb333bed555fe35a4e5d0f4b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 14:56:05 -0700 Subject: [PATCH 0473/1640] Update Subtree of Another Tree.java --- Easy/Subtree of Another Tree.java | 48 +++++++++++++++++-------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/Easy/Subtree of Another Tree.java b/Easy/Subtree of Another Tree.java index f132ee85..a88e3642 100644 --- a/Easy/Subtree of Another Tree.java +++ b/Easy/Subtree of Another Tree.java @@ -4,30 +4,36 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public boolean isSubtree(TreeNode s, TreeNode t) { - if (s == null) { - return false; - } - if (helper(s, t)) { - return true; - } - return isSubtree(s.left, t) || isSubtree(s.right, t); + public boolean isSubtree(TreeNode root, TreeNode subRoot) { + if (root == null) { + return false; } - - private boolean helper(TreeNode s, TreeNode t) { - if (s == null && t == null) { - return true; - } - if ((s == null && t != null) || (s != null && t == null)) { - return false; - } - if (s.val != t.val) { - return false; - } - return helper(s.left, t.left) && helper(s.right, t.right); + if (isSubtreeHelper(root, subRoot)) { + return true; } + return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot); + } + + private boolean isSubtreeHelper(TreeNode root, TreeNode subRoot) { + if (root == null && subRoot == null) { + return true; + } + if (root == null || subRoot == null) { + return false; + } + if (root.val != subRoot.val) { + return false; + } + return isSubtreeHelper(root.left, subRoot.left) && isSubtreeHelper(root.right, subRoot.right); + } } From 48f6f53310ae121fa7af7bb498ad7a39c81c8ff2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 May 2022 15:11:44 -0700 Subject: [PATCH 0474/1640] Update and rename Medium/Rectangle Overlap.java to Easy/Rectangle Overlap.java --- Easy/Rectangle Overlap.java | 6 ++++++ Medium/Rectangle Overlap.java | 20 -------------------- 2 files changed, 6 insertions(+), 20 deletions(-) create mode 100644 Easy/Rectangle Overlap.java delete mode 100644 Medium/Rectangle Overlap.java diff --git a/Easy/Rectangle Overlap.java b/Easy/Rectangle Overlap.java new file mode 100644 index 00000000..cd471934 --- /dev/null +++ b/Easy/Rectangle Overlap.java @@ -0,0 +1,6 @@ +class Solution { + public boolean isRectangleOverlap(int[] rec1, int[] rec2) { + return (Math.min(rec1[2], rec2[2]) > Math.max(rec1[0], rec2[0]) && + Math.min(rec1[3], rec2[3]) > Math.max(rec1[1], rec2[1])); + } +} diff --git a/Medium/Rectangle Overlap.java b/Medium/Rectangle Overlap.java deleted file mode 100644 index 26b038d2..00000000 --- a/Medium/Rectangle Overlap.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public boolean isRectangleOverlap(int[] rec1, int[] rec2) { - int rec1X1 = rec1[0]; - int rec1X2 = rec1[2]; - int rec1Y1 = rec1[1]; - int rec1Y2 = rec1[3]; - - int rec2X1 = rec2[0]; - int rec2X2 = rec2[2]; - int rec2Y1 = rec2[1]; - int rec2Y2 = rec2[3]; - - return !( - rec1X1 >= rec2X2 || - rec1X2 <= rec2X1 || - rec1Y2 <= rec2Y1 || - rec1Y1 >= rec2Y2 - ); - } -} From 32f38f57ad537286625df734901789fb4bde2d1e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 08:41:55 -0700 Subject: [PATCH 0475/1640] Update and rename Easy/Reverse Integer.java to Medium/Reverse Integer.java --- Easy/Reverse Integer.java | 17 ----------------- Medium/Reverse Integer.java | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 Easy/Reverse Integer.java create mode 100644 Medium/Reverse Integer.java diff --git a/Easy/Reverse Integer.java b/Easy/Reverse Integer.java deleted file mode 100644 index 330bbff2..00000000 --- a/Easy/Reverse Integer.java +++ /dev/null @@ -1,17 +0,0 @@ -public class Solution { - public int reverse(int x) { - int result = 0; - - while (x != 0) - { - int tail = x % 10; - int newResult = result * 10 + tail; - if ((newResult - tail) / 10 != result) - { return 0; } - result = newResult; - x = x / 10; - } - - return result; - } -} \ No newline at end of file diff --git a/Medium/Reverse Integer.java b/Medium/Reverse Integer.java new file mode 100644 index 00000000..6acc2d42 --- /dev/null +++ b/Medium/Reverse Integer.java @@ -0,0 +1,17 @@ +class Solution { + public int reverse(int x) { + int reverse = 0; + while (x != 0) { + int rem = x % 10; + x /= 10; + if (reverse > Integer.MAX_VALUE / 10 || (reverse == Integer.MAX_VALUE / 10 && rem > 7)) { + return 0; + } + if (reverse < Integer.MIN_VALUE / 10 || (reverse == Integer.MIN_VALUE / 10 && rem < -8)) { + return 0; + } + reverse = reverse * 10 + rem; + } + return reverse; + } +} From cb2a3bff75d18c88c374751fa35f4273637b8a96 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 08:46:24 -0700 Subject: [PATCH 0476/1640] Update Array Partition I.java --- Easy/Array Partition I.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Easy/Array Partition I.java b/Easy/Array Partition I.java index 8e6012c2..9c263d99 100644 --- a/Easy/Array Partition I.java +++ b/Easy/Array Partition I.java @@ -1,18 +1,18 @@ class Solution { public int arrayPairSum(int[] nums) { - int[] arr = new int[20001]; + int[] counter = new int[20001]; for (int num : nums) { - arr[num + 10000]++; + counter[num + 10000]++; } int sum = 0; - boolean odd = true; - for (int i = 0; i < arr.length; i++) { - while (arr[i] > 0) { - if (odd) { + boolean pickFirst = true; + for (int i = 0; i < counter.length; i++) { + while (counter[i] > 0) { + if (pickFirst) { sum += i - 10000; } - odd = !odd; - arr[i]--; + pickFirst = !pickFirst; + counter[i]--; } } return sum; From 9cb960c41aaa7c31b153c3124a287aa3997bc21d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 12:18:47 -0700 Subject: [PATCH 0477/1640] Update Sum of Root To Leaf Binary Numbers.java --- Easy/Sum of Root To Leaf Binary Numbers.java | 52 +++++++++++++------- 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/Easy/Sum of Root To Leaf Binary Numbers.java b/Easy/Sum of Root To Leaf Binary Numbers.java index 48133053..d49907f2 100644 --- a/Easy/Sum of Root To Leaf Binary Numbers.java +++ b/Easy/Sum of Root To Leaf Binary Numbers.java @@ -15,30 +15,46 @@ */ class Solution { public int sumRootToLeaf(TreeNode root) { - int[] result = {0}; - helper(root, new StringBuilder(), result); - return result[0]; - } - - private void helper(TreeNode root, StringBuilder sb, int[] result) { - if (root == null) { - return; - } - sb.append(root.val); - if (root.left == null && root.right == null) { - result[0] += getDecimalValue(sb.toString()); - return; + Queue queue = new LinkedList<>(); + queue.add(new NodeToBinaryRepresentation(root, new StringBuilder())); + int sum = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + NodeToBinaryRepresentation removed = queue.remove(); + StringBuilder sb = new StringBuilder().append(removed.sb.toString()).append(removed.node.val); + if (removed.node.left == null && removed.node.right == null) { + sum += getIntegerValue(sb.toString()); + } else { + if (removed.node.left != null) { + queue.add(new NodeToBinaryRepresentation(removed.node.left, sb)); + } + if (removed.node.right != null) { + queue.add(new NodeToBinaryRepresentation(removed.node.right, sb)); + } + } + } } - helper(root.left, new StringBuilder(sb.toString()), result); - helper(root.right, new StringBuilder(sb.toString()), result); + return sum; } - private int getDecimalValue(String s) { + private int getIntegerValue(String s) { int value = 0; - int powerOfTwo = 0; + int multiplier = 1; for (int i = s.length() - 1; i >= 0; i--) { - value += ((int) Math.pow(2, powerOfTwo++)) * Character.getNumericValue(s.charAt(i)); + value += Character.getNumericValue(s.charAt(i)) * multiplier; + multiplier *= 2; } return value; } + + private static class NodeToBinaryRepresentation { + TreeNode node; + StringBuilder sb; + + public NodeToBinaryRepresentation(TreeNode node, StringBuilder sb) { + this.node = node; + this.sb = sb; + } + } } From 001718b17f3deaea9178c454b0f5419ae4abe2f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 12:19:53 -0700 Subject: [PATCH 0478/1640] Create Synonymous Sentences.java --- Medium/Synonymous Sentences.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Synonymous Sentences.java diff --git a/Medium/Synonymous Sentences.java b/Medium/Synonymous Sentences.java new file mode 100644 index 00000000..6de8d907 --- /dev/null +++ b/Medium/Synonymous Sentences.java @@ -0,0 +1,27 @@ +class Solution { + public List generateSentences(List> synonyms, String text) { + Map> synonymMapping = new HashMap<>(); + for (List synonym : synonyms) { + synonymMapping.computeIfAbsent(synonym.get(0), k -> new ArrayList<>()).add(synonym.get(1)); + synonymMapping.computeIfAbsent(synonym.get(1), k -> new ArrayList<>()).add(synonym.get(0)); + } + Set result = new TreeSet<>(); + Queue queue = new LinkedList<>(); + queue.add(text); + while (!queue.isEmpty()) { + String removed = queue.remove(); + result.add(removed); + String[] words = removed.split("\\s+"); + for (int i = 0; i < words.length; i++) { + for (String synonym : synonymMapping.getOrDefault(words[i], new ArrayList<>())) { + words[i] = synonym; + String updatedSentence = String.join(" ", words); + if (!result.contains(updatedSentence)) { + queue.add(updatedSentence); + } + } + } + } + return new ArrayList<>(result); + } +} From 3fb3702aba7fd2a41632e5de0a89d1f58956c337 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 12:37:17 -0700 Subject: [PATCH 0479/1640] Update Uncommon Words from Two Sentences.java --- Easy/Uncommon Words from Two Sentences.java | 33 +++++++++++---------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/Easy/Uncommon Words from Two Sentences.java b/Easy/Uncommon Words from Two Sentences.java index 4693b5c9..3b7eab9e 100644 --- a/Easy/Uncommon Words from Two Sentences.java +++ b/Easy/Uncommon Words from Two Sentences.java @@ -1,19 +1,20 @@ class Solution { - public static String[] uncommonFromSentences(String A, String B) { - Map map = Arrays. - stream((A + " " + B). - split("\\s+")). - collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); - - List uncommon = map. - entrySet(). - stream(). - filter(e -> e.getValue() == 1). - map(e -> e.getKey()). - collect(Collectors.toList()); - - String[] ans = new String[uncommon.size()]; - - return uncommon.toArray(ans); + public String[] uncommonFromSentences(String s1, String s2) { + Map map = new HashMap<>(); + String[] wordsOne = s1.split("\\s+"); + for (String word : wordsOne) { + map.put(word, map.getOrDefault(word, 0) + 1); } + String[] wordsTwo = s2.split("\\s+"); + for (String word : wordsTwo) { + map.put(word, map.getOrDefault(word, 0) + 1); + } + List result = new ArrayList<>(); + for (String key : map.keySet()) { + if (map.get(key) == 1) { + result.add(key); + } + } + return result.toArray(new String[]{}); + } } From 2c015331641fcaf9c414ba9aee8f50845b18aa89 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 12:50:23 -0700 Subject: [PATCH 0480/1640] Update How Many Apples Can You Put into the Basket.java --- ...ny Apples Can You Put into the Basket.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Easy/How Many Apples Can You Put into the Basket.java b/Easy/How Many Apples Can You Put into the Basket.java index 4626ce53..5e6b8543 100644 --- a/Easy/How Many Apples Can You Put into the Basket.java +++ b/Easy/How Many Apples Can You Put into the Basket.java @@ -1,12 +1,18 @@ class Solution { - public int maxNumberOfApples(int[] arr) { - int weight = 0; - int currCount = 0; - Arrays.sort(arr); - for (int i = 0; i < arr.length && weight + arr[i] <= 5000; i++) { - weight += arr[i]; - currCount++; + public int maxNumberOfApples(int[] weight) { + int[] counter = new int[1001]; + for (int w : weight) { + counter[w]++; } - return currCount; + int numberOfApples = 0; + int totalWeight = 0; + for (int i = 1; i < counter.length && totalWeight <= 5000; i++) { + int count = counter[i]; + while (count-- > 0 && totalWeight + i <= 5000) { + numberOfApples++; + totalWeight += i; + } + } + return numberOfApples; } } From 571393889e9bec48afb9a8fcf19a612624273d74 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 14:34:24 -0700 Subject: [PATCH 0481/1640] Update Reverse String II.java --- Easy/Reverse String II.java | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/Easy/Reverse String II.java b/Easy/Reverse String II.java index a2e13d9a..168f553d 100644 --- a/Easy/Reverse String II.java +++ b/Easy/Reverse String II.java @@ -1,26 +1,15 @@ class Solution { public String reverseStr(String s, int k) { + boolean reverse = true; StringBuilder sb = new StringBuilder(); - boolean current = true; - int idx = 0; - int n = s.length(); - while (idx < n) { - int endIdx = Math.min(idx + k - 1, n - 1); - if (current) { - int end = idx; - int start = endIdx; - for (int i = start; i >= end; i--) { - sb.append(s.charAt(i)); - } - idx = endIdx + 1; + for (int i = 0; i < s.length(); i += k) { + String substring = s.substring(i, Math.min(i + k, s.length())); + if (reverse) { + sb.append(new StringBuilder().append(substring).reverse().toString()); + } else { + sb.append(substring); } - else { - while (idx <= endIdx) { - sb.append(s.charAt(idx++)); - } - } - current = !current; - System.out.println(idx); + reverse = !reverse; } return sb.toString(); } From a887be56e2797d4cc3f3634ac66131d864a5c62a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 15:51:09 -0700 Subject: [PATCH 0482/1640] Update Two Sum IV - Input is a BST.java --- Easy/Two Sum IV - Input is a BST.java | 57 ++++++++++----------------- 1 file changed, 20 insertions(+), 37 deletions(-) diff --git a/Easy/Two Sum IV - Input is a BST.java b/Easy/Two Sum IV - Input is a BST.java index 84f1f8cd..5f38ca2a 100644 --- a/Easy/Two Sum IV - Input is a BST.java +++ b/Easy/Two Sum IV - Input is a BST.java @@ -4,46 +4,29 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public boolean findTarget(TreeNode root, int k) { - Stack stack = new Stack<>(); - while (root != null) { - stack.push(root); - root = root.left; - } - - Set set = new HashSet<>(); - int min = popStack(stack); - set.add(min); - - while (!stack.isEmpty()) { - int num = popStack(stack); - if (set.contains(k-num)) { - return true; - } - - if (min + num > k) { - return false; - } - - set.add(num); - } - - return false; + public boolean findTarget(TreeNode root, int k) { + Set set = new HashSet<>(); + return helper(root, k, set); + } + + private boolean helper(TreeNode root, int k, Set set) { + if (root == null) { + return false; } - - private int popStack(Stack stack) { - TreeNode n = stack.pop(); - TreeNode right = n.right; - - while (right != null) { - stack.push(right); - right = right.left; - } - - return n.val; + if (set.contains(k - root.val)) { + return true; } + set.add(root.val); + return helper(root.left, k, set) || helper(root.right, k, set); + } } From 2fe07f9a9bb28a3494e122417021f21890a5c585 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 May 2022 15:51:54 -0700 Subject: [PATCH 0483/1640] Update Greatest Common Divisor of Strings.java --- Easy/Greatest Common Divisor of Strings.java | 43 +++++--------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/Easy/Greatest Common Divisor of Strings.java b/Easy/Greatest Common Divisor of Strings.java index 3a08a29f..263b6caa 100644 --- a/Easy/Greatest Common Divisor of Strings.java +++ b/Easy/Greatest Common Divisor of Strings.java @@ -1,36 +1,13 @@ class Solution { - public String gcdOfStrings(String str1, String str2) { - return stringGcd(str1, str2); - } - - private String stringGcd(String s1, String s2) { - if (s1.length() == 0) { - return s2; - } - - if (s2.length() == 0) { - return s1; - } - - if (s1.equals(s2)) { - return s1; - } - - if (s1.length() > s2.length()) { - for (int i = 0; i < s2.length(); i++) { - if (s1.charAt(i) != s2.charAt(i)) { - return ""; - } - } - - String temp = s1.substring(s2.length()); - return stringGcd(temp, s2); - } - - if (s2.length() > s1.length()) { - return stringGcd(s2, s1); - } - - return ""; + public String gcdOfStrings(String str1, String str2) { + if (str1.length() < str2.length()) { + return gcdOfStrings(str2, str1); + } else if (!str1.startsWith(str2)) { + return ""; + } else if (str2.isEmpty()) { + return str1; + } else { + return gcdOfStrings(str1.substring(str2.length()), str2); } + } } From 777a467d2c2c71d297ba342ddadcb4794fccba2e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 27 May 2022 18:01:08 -0700 Subject: [PATCH 0484/1640] Update Missing Number.java --- Easy/Missing Number.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Easy/Missing Number.java b/Easy/Missing Number.java index 5e9021db..5d737295 100644 --- a/Easy/Missing Number.java +++ b/Easy/Missing Number.java @@ -1,6 +1,11 @@ class Solution { public int missingNumber(int[] nums) { - return (nums.length * (nums.length + 1) / 2) - Arrays.stream(nums).boxed() - .reduce(0, Integer::sum); + int totalSum = 0; + for (int num : nums) { + totalSum += num; + } + int n = nums.length; + int expectedSum = (n * (n + 1)) / 2; + return expectedSum - totalSum; } } From b82b111a4c7c9aba534083dddc847023ccf93e37 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 29 May 2022 06:41:57 -0700 Subject: [PATCH 0485/1640] Create Maximum Product of Word Lengths.java --- Medium/Maximum Product of Word Lengths.java | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Maximum Product of Word Lengths.java diff --git a/Medium/Maximum Product of Word Lengths.java b/Medium/Maximum Product of Word Lengths.java new file mode 100644 index 00000000..d98a03bb --- /dev/null +++ b/Medium/Maximum Product of Word Lengths.java @@ -0,0 +1,25 @@ +class Solution { + public int maxProduct(String[] words) { + int maxProd = 0; + for (int i = 0; i < words.length; i++) { + for (int j = i + 1; j < words.length; j++) { + if (noCommonLetters(words[i], words[j])) { + maxProd = Math.max(maxProd, words[i].length() * words[j].length()); + } + } + } + return maxProd; + } + + private boolean noCommonLetters(String s1, String s2) { + int bitMaskOne = 0; + int bitMaskTwo = 0; + for (char c : s1.toCharArray()) { + bitMaskOne |= 1 << ((int) c - (int) 'a'); + } + for (char c : s2.toCharArray()) { + bitMaskTwo |= 1 << ((int) c - (int) 'a'); + } + return (bitMaskOne & bitMaskTwo) == 0; + } +} From 88af1c286e48261f972c6345ac823221b2315769 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 29 May 2022 06:50:53 -0700 Subject: [PATCH 0486/1640] Create Rearrange Characters to Make Target String.java --- ...rrange Characters to Make Target String.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Rearrange Characters to Make Target String.java diff --git a/Easy/Rearrange Characters to Make Target String.java b/Easy/Rearrange Characters to Make Target String.java new file mode 100644 index 00000000..352e45f9 --- /dev/null +++ b/Easy/Rearrange Characters to Make Target String.java @@ -0,0 +1,17 @@ +class Solution { + public int rearrangeCharacters(String s, String target) { + int[] frequencyS = new int[26]; + int[] frequencyTarget = new int[26]; + for(char ch : s.toCharArray()) { + frequencyS[ch-'a']++; + } + for(char ch : target.toCharArray()) { + frequencyTarget[ch-'a']++; + } + int maxCopies = Integer.MAX_VALUE; + for(char ch : target.toCharArray()) { + maxCopies = Math.min(maxCopies, frequencyS[ch - 'a'] / frequencyTarget[ch - 'a']); + } + return maxCopies; + } +} From 75eef622be9a4beb92b5d0cf7c11770256fccfe6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 29 May 2022 06:56:26 -0700 Subject: [PATCH 0487/1640] Create Check if Number Has Equal Digit Count and Digit Value.java --- ...er Has Equal Digit Count and Digit Value.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Check if Number Has Equal Digit Count and Digit Value.java diff --git a/Easy/Check if Number Has Equal Digit Count and Digit Value.java b/Easy/Check if Number Has Equal Digit Count and Digit Value.java new file mode 100644 index 00000000..8ea9bbc7 --- /dev/null +++ b/Easy/Check if Number Has Equal Digit Count and Digit Value.java @@ -0,0 +1,16 @@ +class Solution { + public boolean digitCount(String num) { + int[] frequency = new int[10]; + for (char c : num.toCharArray()) { + frequency[Character.getNumericValue(c)]++; + } + for (int i = 0; i < num.length(); i++) { + int digit = i; + int expectedFrequency = Character.getNumericValue(num.charAt(i)); + if (frequency[digit] != expectedFrequency) { + return false; + } + } + return true; + } +} From fcc7e332f353979ff83e3ddc64bfbbe3e9e71588 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 31 May 2022 15:30:29 -0700 Subject: [PATCH 0488/1640] Update Valid Parentheses.java --- Easy/Valid Parentheses.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Easy/Valid Parentheses.java b/Easy/Valid Parentheses.java index 911e52a5..da0a68f1 100644 --- a/Easy/Valid Parentheses.java +++ b/Easy/Valid Parentheses.java @@ -1,20 +1,17 @@ class Solution { public boolean isValid(String s) { - Stack stack = new Stack<>(); + Deque stack = new ArrayDeque<>(); for (char c : s.toCharArray()) { - if (c == '[' || c == '{' || c == '(') { - stack.push(c); + if (c == '(' || c == '[' || c == '{') { + stack.add(c); } else { if (stack.isEmpty()) { return false; } - char popped = stack.pop(); - if ((c == ')' && popped == '(') || - (c == ']' && popped == '[') || - (c == '}' && popped == '{')) { - continue; + char popped = stack.removeLast(); + if (!((c == ')' && popped == '(') || (c == ']' && popped == '[') || (c == '}' && popped == '{'))) { + return false; } - return false; } } return stack.isEmpty(); From 0a51c4ab8bd0c8e624cdb01c7588999da8ae8e25 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Jun 2022 09:58:27 -0700 Subject: [PATCH 0489/1640] Update Running Sum of 1d Array.java --- Easy/Running Sum of 1d Array.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Easy/Running Sum of 1d Array.java b/Easy/Running Sum of 1d Array.java index a724f9d9..bc5f422a 100644 --- a/Easy/Running Sum of 1d Array.java +++ b/Easy/Running Sum of 1d Array.java @@ -1,9 +1,10 @@ class Solution { public int[] runningSum(int[] nums) { - int[] ans = new int[nums.length]; + int sum = 0; for (int i = 0; i < nums.length; i++) { - ans[i] = nums[i] + (i == 0 ? 0 : ans[i - 1]); + sum += nums[i]; + nums[i] = sum; } - return ans; + return nums; } } From 8f79499bce09caad0d13c23acea17621ab64058f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Jun 2022 19:05:38 -0700 Subject: [PATCH 0490/1640] Update Transpose Matrix.java --- Easy/Transpose Matrix.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Easy/Transpose Matrix.java b/Easy/Transpose Matrix.java index f59cb99f..996dd16f 100644 --- a/Easy/Transpose Matrix.java +++ b/Easy/Transpose Matrix.java @@ -1,14 +1,13 @@ class Solution { - public int[][] transpose(int[][] A) { - if (A.length == 0 || A[0].length == 0) { - return A; - } - int[][] ans = new int[A[0].length][A.length]; - for (int i = 0; i < A[0].length; i++) { - for (int j = 0; j < A.length; j++) { - ans[i][j] = A[j][i]; + public int[][] transpose(int[][] matrix) { + int rows = matrix.length; + int cols = matrix[0].length; + int[][] result = new int[cols][rows]; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + result[j][i] = matrix[i][j]; } } - return ans; + return result; } } From 3b0dfd28e69dfba250bccfed29f34a912661c0ea Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Jun 2022 19:11:37 -0700 Subject: [PATCH 0491/1640] Create Sender With Largest Word Count.java --- Medium/Sender With Largest Word Count.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Medium/Sender With Largest Word Count.java diff --git a/Medium/Sender With Largest Word Count.java b/Medium/Sender With Largest Word Count.java new file mode 100644 index 00000000..6bb1bf25 --- /dev/null +++ b/Medium/Sender With Largest Word Count.java @@ -0,0 +1,22 @@ +import java.util.Map.Entry; + + +class Solution { + public String largestWordCount(String[] messages, String[] senders) { + Map map = new HashMap<>(); + for (int i = 0; i < messages.length; i++) { + int wordCount = messages[i].split("\\s+").length; + map.put(senders[i], map.getOrDefault(senders[i], 0) + wordCount); + } + return map.entrySet().stream() + .sorted((o1, o2) -> { + int c = o2.getValue() - o1.getValue(); + if (c != 0) { + return c; + } + return o2.getKey().compareTo(o1.getKey());}) + .map(Entry::getKey) + .findFirst() + .orElse(""); + } +} From f4ac6795bf9de5d0ccac64951457072522431778 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Jun 2022 19:31:15 -0700 Subject: [PATCH 0492/1640] Create Apply Discount to Prices.java --- Medium/Apply Discount to Prices.java | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Medium/Apply Discount to Prices.java diff --git a/Medium/Apply Discount to Prices.java b/Medium/Apply Discount to Prices.java new file mode 100644 index 00000000..6c3974c9 --- /dev/null +++ b/Medium/Apply Discount to Prices.java @@ -0,0 +1,48 @@ +class Solution { + public String discountPrices(String sentence, int discount) { + StringBuilder sb = new StringBuilder(); + int idx = 0; + int n = sentence.length(); + while (idx < n) { + if (sentence.charAt(idx) == '$') { + if (idx == 0 || sentence.charAt(idx - 1) == ' ') { + sb.append(sentence.charAt(idx++)); + StringBuilder possibleDigit = new StringBuilder(); + boolean isDigit = true; + while (idx < n && sentence.charAt(idx) != ' ') { + if (!Character.isDigit(sentence.charAt(idx))) { + isDigit = false; + } + possibleDigit.append(sentence.charAt(idx++)); + } + if (possibleDigit.length() == 0) { + continue; + } + if (isDigit) { + long price = Long.parseLong(possibleDigit.toString()); + long updatedPrice = price * (100 - discount); + sb.append(getFormattedPrice(updatedPrice)); + } else { + sb.append(possibleDigit); + } + } else { + sb.append(sentence.charAt(idx++)); + } + } else { + sb.append(sentence.charAt(idx++)); + } + } + return sb.toString(); + } + + private String getFormattedPrice(long price) { + if (price < 10) { + return "0.0" + price; + } else if (price < 100) { + return "0." + price; + } else { + String priceString = String.valueOf(price); + return priceString.substring(0, priceString.length() - 2) + "." + priceString.substring(priceString.length() - 2); + } + } +} From 7ee88c3075731cf57b4a7d5d3b78e7243c7a7658 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 2 Jun 2022 14:59:10 -0700 Subject: [PATCH 0493/1640] Update Minimum Knight Moves.java --- Medium/Minimum Knight Moves.java | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/Medium/Minimum Knight Moves.java b/Medium/Minimum Knight Moves.java index 94d27fbe..e1352ac4 100644 --- a/Medium/Minimum Knight Moves.java +++ b/Medium/Minimum Knight Moves.java @@ -1,36 +1,28 @@ class Solution { - public final int[][] DIRS = {{2, 1}, {1, 2}, {-1, 2}, {-2, 1}, {-2, -1}, {-1, -2}, {1, -2}, {2, -1}}; + private final int[][] DIRS = {{1, 2}, {2, 1}, {1, -2}, {-2, 1}, {2, -1}, {-2, -1}, {-1, -2}, {-1, 2}}; + public int minKnightMoves(int x, int y) { - int currX = 0; - int currY = 0; - int targetX = Math.abs(x); - int targetY = Math.abs(y); - Set visited = new HashSet<>(); - Queue queue = new LinkedList<>(); int numOfSteps = 0; - visited.add(currX + "|" + currY); - queue.add(new int[]{currX, currY}); + boolean[][] visited = new boolean[607][607]; + Queue queue = new LinkedList<>(); + queue.add(new int[]{0, 0}); while (!queue.isEmpty()) { int size = queue.size(); - boolean found = false; while (size-- > 0) { int[] removed = queue.remove(); - if (removed[0] == targetX && removed[1] == targetY) { - found = true; - break; + if (removed[0] == x && removed[1] == y) { + return numOfSteps; } for (int[] dir : DIRS) { int newX = removed[0] + dir[0]; int newY = removed[1] + dir[1]; - if (!visited.contains(newX + "|" + newY) && newX >= -1 && newY >= -1) { - visited.add(newX + "|" + newY); - queue.add(new int[]{newX, newY}); + if (visited[newX + 302][newY + 302]) { + continue; } + visited[newX + 302][newY + 302] = true; + queue.add(new int[]{newX, newY}); } } - if (found) { - break; - } numOfSteps++; } return numOfSteps; From 98863f108159c671fffffb570ad63adee834bb31 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 2 Jun 2022 15:19:50 -0700 Subject: [PATCH 0494/1640] Create Maximum Total Importance of Roads.java --- Medium/Maximum Total Importance of Roads.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Maximum Total Importance of Roads.java diff --git a/Medium/Maximum Total Importance of Roads.java b/Medium/Maximum Total Importance of Roads.java new file mode 100644 index 00000000..52e5eea7 --- /dev/null +++ b/Medium/Maximum Total Importance of Roads.java @@ -0,0 +1,17 @@ +class Solution { + public long maximumImportance(int n, int[][] roads) { + int[] outDegree = new int[n]; + for (int[] road : roads) { + outDegree[road[0]]++; + outDegree[road[1]]++; + } + Arrays.sort(outDegree); + long totalImportance = 0; + long importanceMultiple = 1L; + for (int count : outDegree) { + totalImportance += importanceMultiple * count; + importanceMultiple++; + } + return totalImportance; + } +} From 7839237825b95e83f64bd7762179fb37f97e6535 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 3 Jun 2022 07:15:49 -0700 Subject: [PATCH 0495/1640] Update Range Sum Query 2D-Immutable.java --- Medium/Range Sum Query 2D-Immutable.java | 27 +++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/Medium/Range Sum Query 2D-Immutable.java b/Medium/Range Sum Query 2D-Immutable.java index 9139dcef..bd30c3e1 100644 --- a/Medium/Range Sum Query 2D-Immutable.java +++ b/Medium/Range Sum Query 2D-Immutable.java @@ -1,21 +1,28 @@ class NumMatrix { - int[][] dp; + + int rows; + int cols; + int[][] rowLevelSum; public NumMatrix(int[][] matrix) { - if (matrix.length == 0 || matrix[0].length == 0) { - return; - } - dp = new int[matrix.length][matrix[0].length + 1]; - for (int i = 0; i < matrix.length; i++) { - for (int j = 0; j < matrix[0].length; j++) { - dp[i][j + 1] = dp[i][j] + matrix[i][j]; + this.rows = matrix.length; + this.cols = matrix[0].length; + this.rowLevelSum = new int[rows][cols]; + for (int i = 0; i < rows; i++) { + int sum = 0; + for (int j = 0; j < cols; j++) { + sum += matrix[i][j]; + this.rowLevelSum[i][j] = sum; } } } public int sumRegion(int row1, int col1, int row2, int col2) { int sum = 0; - for (int row = row1; row <= row2; row++) { - sum += dp[row][col2 + 1] - dp[row][col1]; + for (int i = row1; i <= row2; i++) { + sum += rowLevelSum[i][col2]; + if (col1 > 0) { + sum -= rowLevelSum[i][col1 - 1]; + } } return sum; } From bf5a9513c33501479883e8b0af84ea58fb0690e2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 3 Jun 2022 07:51:37 -0700 Subject: [PATCH 0496/1640] Update Number of Equivalent Domino Pairs.java --- Easy/Number of Equivalent Domino Pairs.java | 25 ++++++--------------- 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/Easy/Number of Equivalent Domino Pairs.java b/Easy/Number of Equivalent Domino Pairs.java index 718169ae..422b51e2 100644 --- a/Easy/Number of Equivalent Domino Pairs.java +++ b/Easy/Number of Equivalent Domino Pairs.java @@ -1,23 +1,12 @@ class Solution { public int numEquivDominoPairs(int[][] dominoes) { - int count = 0; - Map map = new HashMap<>(); - for (int i = 0; i < dominoes.length; i++) { - String straightKey = dominoes[i][0] + "/" + dominoes[i][1]; - String revKey = dominoes[i][1] + "/" + dominoes[i][0]; - if (map.containsKey(straightKey)) { - count += map.get(straightKey); - } - else if (!straightKey.equals(revKey)) { - if (map.containsKey(revKey)) { - count += map.get(revKey); - } - } - map.put(straightKey, map.getOrDefault(straightKey, 0) + 1); - if (dominoes[i][0] != dominoes[i][1]) { - map.put(revKey, map.getOrDefault(revKey, 0) + 1); - } + int numOfPairs = 0; + Map map = new HashMap<>(); + for (int[] dominoe : dominoes) { + int key = Math.min(dominoe[0], dominoe[1]) * 10 + Math.max(dominoe[0], dominoe[1]); + numOfPairs += map.getOrDefault(key, 0); + map.put(key, map.getOrDefault(key, 0) + 1); } - return count; + return numOfPairs; } } From 190ad7eacef08166a2bd24d46ab633bbd736c08e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 3 Jun 2022 16:00:23 -0700 Subject: [PATCH 0497/1640] Update Find All Numbers Disappeared in an Array.java --- ...Find All Numbers Disappeared in an Array.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Easy/Find All Numbers Disappeared in an Array.java b/Easy/Find All Numbers Disappeared in an Array.java index 4e3865b9..4cab6c67 100644 --- a/Easy/Find All Numbers Disappeared in an Array.java +++ b/Easy/Find All Numbers Disappeared in an Array.java @@ -1,17 +1,17 @@ class Solution { public List findDisappearedNumbers(int[] nums) { + List result = new ArrayList<>(); for (int i = 0; i < nums.length; i++) { - int newIdx = Math.abs(nums[i]) - 1; - if (nums[newIdx] > 0) { - nums[newIdx] *= -1; + int idx = Math.abs(nums[i]) - 1; + if (nums[idx] > 0) { + nums[idx] *= -1; } } - List list = new ArrayList<>(); - for (int i = 1; i <= nums.length; i++) { - if (nums[i - 1] > 0) { - list.add(i); + for (int i = 0; i < nums.length; i++) { + if (nums[i] > 0) { + result.add(i + 1); } } - return list; + return result; } } From bf0fca1f4eacbb5af99badc54dc9046f2322b311 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 4 Jun 2022 08:39:22 -0700 Subject: [PATCH 0498/1640] Update N-Queens.java --- Hard/N-Queens.java | 71 +++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 38 deletions(-) diff --git a/Hard/N-Queens.java b/Hard/N-Queens.java index 2e382180..0551c884 100644 --- a/Hard/N-Queens.java +++ b/Hard/N-Queens.java @@ -1,50 +1,45 @@ class Solution { public List> solveNQueens(int n) { - List> ans = new ArrayList <>(); - helper(n, 0, new ArrayList<>(), ans); - return ans; + List> result = new ArrayList<>(); + char[][] board = new char[n][n]; + for (char[] row : board) { + Arrays.fill(row, '.'); + } + backtrack(0, new HashSet<>(), new HashSet<>(), new HashSet<>(), board, result, n); + return result; } - - private void helper(int n, int row, List selections, List> ans) { + + private void backtrack(int row, Set diagonals, Set antiDiagonals, Set columns, char[][] board, List> result, int n) { if (row == n) { - ans.add(convertToString(selections, n)); + result.add(buildBoard(board, n)); + return; } - else { - for (int i = 0; i < n; i++) { - selections.add(i); - if (isValid(selections)) { - helper(n, row + 1, selections, ans); - } - selections.remove(selections.size() - 1); + for (int col = 0; col < n; col++) { + int currDiagonal = row - col; + int currAntiDiagonal = row + col; + if (columns.contains(col) || diagonals.contains(currDiagonal) || antiDiagonals.contains(currAntiDiagonal)) { + continue; } - } - } + columns.add(col); + diagonals.add(currDiagonal); + antiDiagonals.add(currAntiDiagonal); + board[row][col] = 'Q'; - private List convertToString(List selections, int n) { - List ret = new ArrayList<>(); - for (int i = 0; i < selections.size(); i++) { - StringBuilder sb = new StringBuilder(); - for (int j = 0; j < n; j++) { - if (j == selections.get(i)) { - sb.append("Q"); - } - else { - sb.append("."); - } - } - ret.add(sb.toString()); + backtrack(row + 1, diagonals, antiDiagonals, columns, board, result, n); + + columns.remove(col); + diagonals.remove(currDiagonal); + antiDiagonals.remove(currAntiDiagonal); + board[row][col] = '.'; } - return ret; } - - private boolean isValid(List selections) { - int row = selections.size() - 1; - for (int i = 0; i < row; i++) { - int diff = Math.abs(selections.get(i) - selections.get(row)); - if (diff == 0 || diff == row - i) { - return false; - } + + private List buildBoard(char[][] board, int n) { + List resultBoard = new ArrayList<>(); + for (int row = 0; row < n; row++) { + String currentRow = new String(board[row]); + resultBoard.add(currentRow); } - return true; + return resultBoard; } } From 5aeda12919900db6d2b9f278be09c566326378a3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 4 Jun 2022 18:37:46 -0700 Subject: [PATCH 0499/1640] Create N-Queens II.java --- Hard/N-Queens II.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Hard/N-Queens II.java diff --git a/Hard/N-Queens II.java b/Hard/N-Queens II.java new file mode 100644 index 00000000..0cc14059 --- /dev/null +++ b/Hard/N-Queens II.java @@ -0,0 +1,29 @@ +class Solution { + public int totalNQueens(int n) { + return backtrack(0, new HashSet<>(), new HashSet<>(), new HashSet<>(), n); + } + + private int backtrack(int row, Set diagonals, Set antiDiagonals, Set columns, int n) { + if (row == n) { + return 1; + } + int possibleSolutions = 0; + for (int col = 0; col < n; col++) { + int currDiagonal = row - col; + int currAntiDiagonal = row + col; + if (columns.contains(col) || diagonals.contains(currDiagonal) || antiDiagonals.contains(currAntiDiagonal)) { + continue; + } + columns.add(col); + diagonals.add(currDiagonal); + antiDiagonals.add(currAntiDiagonal); + + possibleSolutions += backtrack(row + 1, diagonals, antiDiagonals, columns, n); + + columns.remove(col); + diagonals.remove(currDiagonal); + antiDiagonals.remove(currAntiDiagonal); + } + return possibleSolutions; + } +} From 5da9421f25fda2aa9d744c2f31b3189a16336cc8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 Jun 2022 10:57:36 -0700 Subject: [PATCH 0500/1640] Create Min Max Game.java --- Easy/Min Max Game.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Easy/Min Max Game.java diff --git a/Easy/Min Max Game.java b/Easy/Min Max Game.java new file mode 100644 index 00000000..f2405c20 --- /dev/null +++ b/Easy/Min Max Game.java @@ -0,0 +1,21 @@ +class Solution { + public int minMaxGame(int[] nums) { + Queue queue = new LinkedList<>(); + for (int num : nums) { + queue.add(num); + } + while (queue.size() > 1) { + int size = queue.size(); + boolean even = true; + for (int i = 0; i < size; i += 2) { + if (even) { + queue.add(Math.min(queue.remove(), queue.remove())); + } else { + queue.add(Math.max(queue.remove(), queue.remove())); + } + even = !even; + } + } + return queue.remove(); + } +} From 835a30a0429869173f7fcfefaaa45b8457e1385d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 Jun 2022 11:05:17 -0700 Subject: [PATCH 0501/1640] Create Replace Elements in an Array.java --- Medium/Replace Elements in an Array.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Replace Elements in an Array.java diff --git a/Medium/Replace Elements in an Array.java b/Medium/Replace Elements in an Array.java new file mode 100644 index 00000000..77140194 --- /dev/null +++ b/Medium/Replace Elements in an Array.java @@ -0,0 +1,14 @@ +class Solution { + public int[] arrayChange(int[] nums, int[][] operations) { + Map indexMap = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + indexMap.put(nums[i], i); + } + for (int[] operation : operations) { + int prevElementIdx = indexMap.get(operation[0]); + indexMap.put(operation[1], prevElementIdx); + nums[prevElementIdx] = operation[1]; + } + return nums; + } +} From ffd93c31f316b95089052026712b4bf63ddce292 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Jun 2022 07:10:39 -0700 Subject: [PATCH 0502/1640] Update Intersection of two Linked Lists.java --- Easy/Intersection of two Linked Lists.java | 38 ++++------------------ 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/Easy/Intersection of two Linked Lists.java b/Easy/Intersection of two Linked Lists.java index f515b847..2da135fb 100644 --- a/Easy/Intersection of two Linked Lists.java +++ b/Easy/Intersection of two Linked Lists.java @@ -11,38 +11,12 @@ */ public class Solution { public ListNode getIntersectionNode(ListNode headA, ListNode headB) { - int lenA = getLength(headA); - int lenB = getLength(headB); - ListNode currA = headA; - ListNode currB = headB; - if (lenA > lenB) { - int diff = lenA - lenB; - while (diff-- > 0) { - currA = currA.next; - } + ListNode copyA = headA; + ListNode copyB = headB; + while (copyA != copyB) { + copyA = copyA == null ? headB : copyA.next; + copyB = copyB == null ? headA : copyB.next; } - if (lenB > lenA) { - int diff = lenB - lenA; - while (diff-- > 0) { - currB = currB.next; - } - } - while (currA != null && currB != null) { - if (currA == currB) { - return currA; - } - currA = currA.next; - currB = currB.next; - } - return null; - } - - private int getLength(ListNode node) { - int len = 0; - while (node != null) { - node = node.next; - len++; - } - return len; + return copyA; } } From c10eed376c9d7e4bed98fe1a2d80af3ddba1db4d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Jun 2022 08:02:21 -0700 Subject: [PATCH 0503/1640] Update and rename Easy/Count and Say.java to Medium/Count and Say.java --- Easy/Count and Say.java | 23 ----------------------- Medium/Count and Say.java | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 23 deletions(-) delete mode 100644 Easy/Count and Say.java create mode 100644 Medium/Count and Say.java diff --git a/Easy/Count and Say.java b/Easy/Count and Say.java deleted file mode 100644 index 7f2eed96..00000000 --- a/Easy/Count and Say.java +++ /dev/null @@ -1,23 +0,0 @@ -class Solution { - public String countAndSay(int n) { - return rec(n, "1"); - } - - private String rec(int n, String s) { - if (n == 1) { - return s; - } - StringBuilder sb = new StringBuilder(); - int idx = 0; - while (idx < s.length()) { - char c = s.charAt(idx); - int count = 0; - while (idx < s.length() && s.charAt(idx) == c) { - idx++; - count++; - } - sb.append(count).append(c); - } - return rec(n - 1, sb.toString()); - } -} diff --git a/Medium/Count and Say.java b/Medium/Count and Say.java new file mode 100644 index 00000000..a32318be --- /dev/null +++ b/Medium/Count and Say.java @@ -0,0 +1,19 @@ +class Solution { + public String countAndSay(int n) { + String s = "1"; + for (int i = 1; i < n; i++) { + StringBuilder sb = new StringBuilder(); + for (int j = 1, count = 1; j <= s.length(); j++) { + if (j == s.length() || s.charAt(j - 1) != s.charAt(j)) { + sb.append(count); + sb.append(s.charAt(j - 1)); + count = 1; + } else { + count++; + } + } + s = sb.toString(); + } + return s; + } +} From d46093df1fae35def2d6652e0247d9a6dbac17df Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Jun 2022 09:42:08 -0700 Subject: [PATCH 0504/1640] Update Two Sum BSTs.java --- Medium/Two Sum BSTs.java | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/Medium/Two Sum BSTs.java b/Medium/Two Sum BSTs.java index 1a796d58..d6dd2cf3 100644 --- a/Medium/Two Sum BSTs.java +++ b/Medium/Two Sum BSTs.java @@ -15,35 +15,27 @@ */ class Solution { public boolean twoSumBSTs(TreeNode root1, TreeNode root2, int target) { - if (root1 == null || root2 == null) { - return false; - } + ArrayDeque stack = new ArrayDeque<>(); Set set = new HashSet<>(); - Queue queue = new LinkedList<>(); - queue.add(root2); - while (!queue.isEmpty()) { - TreeNode removed = queue.remove(); - set.add(removed.val); - if (removed.left != null) { - queue.add(removed.left); - } - if (removed.right != null) { - queue.add(removed.right); + while (!stack.isEmpty() || root1 != null) { + while (root1 != null) { + stack.push(root1); + root1 = root1.left; } + root1 = stack.pop(); + set.add(target - root1.val); + root1 = root1.right; } - queue = new LinkedList<>(); - queue.add(root1); - while (!queue.isEmpty()) { - TreeNode removed = queue.remove(); - if (set.contains(target - removed.val)) { - return true; + while (!stack.isEmpty() || root2 != null) { + while (root2 != null) { + stack.push(root2); + root2 = root2.left; } - if (removed.left != null) { - queue.add(removed.left); - } - if (removed.right != null) { - queue.add(removed.right); + root2 = stack.pop(); + if (set.contains(root2.val)) { + return true; } + root2 = root2.right; } return false; } From b07f32df3974d96494cf2de252a20cd7e682a78b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Jun 2022 09:43:04 -0700 Subject: [PATCH 0505/1640] Update Rank Transform of an Array.java --- Easy/Rank Transform of an Array.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Easy/Rank Transform of an Array.java b/Easy/Rank Transform of an Array.java index 951115ae..401c317b 100644 --- a/Easy/Rank Transform of an Array.java +++ b/Easy/Rank Transform of an Array.java @@ -1,20 +1,20 @@ class Solution { public int[] arrayRankTransform(int[] arr) { - PriorityQueue pq = Arrays.stream(arr).boxed() - .collect(Collectors.toCollection(PriorityQueue::new)); + PriorityQueue pq = new PriorityQueue<>(); + for (int num : arr) { + pq.add(num); + } int rank = 1; - Map rankMap = new HashMap<>(); + Map map = new HashMap<>(); while (!pq.isEmpty()) { - int key = pq.poll(); - rankMap.put(key, rank++); - while (!pq.isEmpty() && pq.peek() == key) { - pq.poll(); + int removed = pq.poll(); + if (!map.containsKey(removed)) { + map.put(removed, rank++); } } - int[] ans = new int[arr.length]; for (int i = 0; i < arr.length; i++) { - ans[i] = rankMap.get(arr[i]); + arr[i] = map.get(arr[i]); } - return ans; + return arr; } } From 1f62fb365709dfc7f75978ef60799923a957195d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Jun 2022 15:10:37 -0700 Subject: [PATCH 0506/1640] Update Relative Sort Array.java --- Easy/Relative Sort Array.java | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/Easy/Relative Sort Array.java b/Easy/Relative Sort Array.java index 886b0c71..efee0153 100644 --- a/Easy/Relative Sort Array.java +++ b/Easy/Relative Sort Array.java @@ -1,32 +1,21 @@ class Solution { public int[] relativeSortArray(int[] arr1, int[] arr2) { - Map map = new HashMap<>(); - for (int i = 0; i < arr2.length; i++) { - map.put(arr2[i], i); - } - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(Integer o1, Integer o2) { - return map.get(o1) - map.get(o2); - } - }); - List notPresent = new ArrayList<>(); + int[] frequency = new int[1001]; for (int num : arr1) { - if (map.containsKey(num)) { - pq.add(num); - } - else { - notPresent.add(num); - } + frequency[num]++; } - int[] ans = new int[arr1.length]; + int[] result = new int[arr1.length]; int idx = 0; - while (!pq.isEmpty()) { - ans[idx++] = pq.poll(); + for (int num : arr2) { + while (frequency[num]-- > 0) { + result[idx++] = num; + } } - Collections.sort(notPresent); - for (int num : notPresent) { - ans[idx++] = num; + for (int i = 0; i < 1001; i++) { + while (frequency[i]-- > 0) { + result[idx++] = i; + } } - return ans; + return result; } } From a996e3bb9c1bdfd35a93fc206c289c0498ba2595 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Jun 2022 15:23:19 -0700 Subject: [PATCH 0507/1640] Update Find N Unique Integers Sum up to Zero.java --- ...Find N Unique Integers Sum up to Zero.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Easy/Find N Unique Integers Sum up to Zero.java b/Easy/Find N Unique Integers Sum up to Zero.java index 3eb3d777..1b1de933 100644 --- a/Easy/Find N Unique Integers Sum up to Zero.java +++ b/Easy/Find N Unique Integers Sum up to Zero.java @@ -1,20 +1,17 @@ class Solution { public int[] sumZero(int n) { - int[] arr = new int[n]; + int[] result = new int[n]; int idx = 0; - int num = n / 2; - while (idx < n / 2) { - arr[idx++] = num * -1; - num--; + int half = n / 2; + for (int i = -1 * half; i < 0; i++) { + result[idx++] = i; } if (n % 2 != 0) { - arr[idx++] = 0; + result[idx++] = 0; } - num = n / 2; - while (idx < n) { - arr[idx++] = num; - num--; + for (int i = 1; i <= half; i++) { + result[idx++] = i; } - return arr; + return result; } } From 1e8651b810299592d9fc5ea033227a822173edc3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Jun 2022 09:49:08 -0700 Subject: [PATCH 0508/1640] Update Reverse Words in a String.java --- Medium/Reverse Words in a String.java | 61 ++++++++++++++++++--------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/Medium/Reverse Words in a String.java b/Medium/Reverse Words in a String.java index 491b3d51..4d70c9e9 100644 --- a/Medium/Reverse Words in a String.java +++ b/Medium/Reverse Words in a String.java @@ -1,28 +1,49 @@ class Solution { public String reverseWords(String s) { - Stack stack = new Stack<>(); - StringBuilder sb = new StringBuilder(); - int idx = 0; - int n = s.length(); - while (idx < n) { - if (s.charAt(idx) != ' ') { - sb.append(s.charAt(idx)); - } - if (s.charAt(idx) == ' ' || idx == n - 1) { - if (sb.length() > 0) { - stack.push(sb.toString()); - sb.setLength(0); - } + StringBuilder sb = trimSpace(s); + reverse(sb, 0, sb.length() - 1); + int start = 0; + int end = 0; + int n = sb.length(); + while (start < n) { + while (end < n && sb.charAt(end) != ' ') { + end++; } - idx++; + reverse(sb, start, end - 1); + start = end + 1; + end++; + } + return sb.toString(); + } + + private void reverse(StringBuilder sb, int start, int end) { + while (start <= end) { + char temp = sb.charAt(start); + sb.setCharAt(start++, sb.charAt(end)); + sb.setCharAt(end--, temp); } - sb.setLength(0); - while (!stack.isEmpty()) { - sb.append(stack.pop()); - if (!stack.isEmpty()) { - sb.append(" "); + } + + private StringBuilder trimSpace(String s) { + StringBuilder sb = new StringBuilder(); + int start = 0; + int end = s.length() - 1; + while (start <= end && s.charAt(start) == ' ') { + start++; + } + while (end >= start && s.charAt(end) == ' ') { + end--; + } + while (start <= end) { + if (s.charAt(start) != ' ') { + sb.append(s.charAt(start++)); + } else { + if (sb.charAt(sb.length() - 1) != ' ') { + sb.append(s.charAt(start)); + } + start++; } } - return sb.toString(); + return sb; } } From 8bfb9b0fd0c62012b518b22b165f21434392a5aa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Jun 2022 14:24:49 -0700 Subject: [PATCH 0509/1640] Update Add Two Numbers II.java --- Medium/Add Two Numbers II.java | 93 ++++++++++++++-------------------- 1 file changed, 37 insertions(+), 56 deletions(-) diff --git a/Medium/Add Two Numbers II.java b/Medium/Add Two Numbers II.java index ae9591cd..fe08935f 100644 --- a/Medium/Add Two Numbers II.java +++ b/Medium/Add Two Numbers II.java @@ -3,65 +3,46 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { - public ListNode addTwoNumbers(ListNode l1, ListNode l2) { - ListNode l1Rev = reverse(l1); - ListNode l2Rev = reverse(l2); - - ListNode ans = new ListNode(-1); - ListNode curr = ans; - int carry = 0; - - while (l1Rev != null || l2Rev != null) { - int temp = 0; - if (l1Rev != null && l2Rev != null) { - temp = l1Rev.val + l2Rev.val + carry; - l1Rev = l1Rev.next; - l2Rev = l2Rev.next; - } - else if(l1Rev != null) { - temp = l1Rev.val + carry; - l1Rev = l1Rev.next; - } - else { - temp = l2Rev.val + carry; - l2Rev = l2Rev.next; - } - - if (temp > 9) { - carry = temp/10; - temp = temp%10; - } - else { - carry = 0; - } - curr.next = new ListNode(temp); - curr = curr.next; - } - - if (carry != 0) { - curr.next = new ListNode(carry); - curr = curr.next; - } - - return reverse(ans.next); + public ListNode addTwoNumbers(ListNode l1, ListNode l2) { + ListNode revL1 = reverse(l1); + ListNode revL2 = reverse(l2); + ListNode dummy = new ListNode(0); + ListNode curr = dummy; + int carry = 0; + while (revL1 != null || revL2 != null || carry != 0) { + if (revL1 != null && revL2 != null) { + carry += revL1.val + revL2.val; + revL1 = revL1.next; + revL2 = revL2.next; + } else if (revL1 != null && revL2 == null) { + carry += revL1.val; + revL1 = revL1.next; + } else if (revL1 == null && revL2 != null) { + carry += revL2.val; + revL2 = revL2.next; + } + curr.next = new ListNode(carry % 10); + carry /= 10; + curr = curr.next; } - - private ListNode reverse(ListNode head) { - ListNode curr = head; - ListNode prev = null; - ListNode next = null; - - while (curr != null) { - next = curr.next; - curr.next = prev; - prev = curr; - curr = next; - } - - return prev; + return reverse(dummy.next); + } + + private ListNode reverse(ListNode root) { + ListNode curr = root; + ListNode prev = null; + while (curr != null) { + ListNode next = curr.next; + curr.next = prev; + prev = curr; + curr = next; } + return prev; + } } From 772e260fdd31f2f88fd6477643e708b2dcb97d60 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Jun 2022 17:02:36 -0700 Subject: [PATCH 0510/1640] Update Find Words That Can Be Formed by Characters.java --- ...ords That Can Be Formed by Characters.java | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/Easy/Find Words That Can Be Formed by Characters.java b/Easy/Find Words That Can Be Formed by Characters.java index 46d11d0f..1dce1552 100644 --- a/Easy/Find Words That Can Be Formed by Characters.java +++ b/Easy/Find Words That Can Be Formed by Characters.java @@ -1,29 +1,27 @@ class Solution { public int countCharacters(String[] words, String chars) { - Map charFreq = getMap(chars); - int length = 0; - for (String word : words) { - if (canBeFormed(charFreq, getMap(word))) { - length += word.length(); - } - } - return length; - } - - private Map getMap(String s) { - Map map = new HashMap<>(); - for (char c : s.toCharArray()) { - map.put(c, map.getOrDefault(c, 0) + 1); - } - return map; + Map frequency = getFrequencyMap(chars); + return Arrays.stream(words) + .filter(word -> canBeFormed(word, frequency)) + .map(word -> word.length()) + .reduce(0, Integer::sum); } - private boolean canBeFormed(Map main, Map toBeChecked) { - for (Character key : toBeChecked.keySet()) { - if (main.getOrDefault(key, 0) < toBeChecked.get(key)) { + private boolean canBeFormed(String word, Map frequency) { + Map wordFrequency = getFrequencyMap(word); + for (Character key : wordFrequency.keySet()) { + if (frequency.getOrDefault(key, 0) < wordFrequency.get(key)) { return false; } } return true; } + + private Map getFrequencyMap(String s) { + Map frequency = new HashMap<>(); + for (char c : s.toCharArray()) { + frequency.put(c, frequency.getOrDefault(c, 0) + 1); + } + return frequency; + } } From 5ae4cf113002be4d20623d25bb2c316287255da3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Jun 2022 17:37:37 -0700 Subject: [PATCH 0511/1640] Create Remove Palindromic Subsequences.java --- Easy/Remove Palindromic Subsequences.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Remove Palindromic Subsequences.java diff --git a/Easy/Remove Palindromic Subsequences.java b/Easy/Remove Palindromic Subsequences.java new file mode 100644 index 00000000..e4e10845 --- /dev/null +++ b/Easy/Remove Palindromic Subsequences.java @@ -0,0 +1,17 @@ +class Solution { + public int removePalindromeSub(String s) { + if (s.length() == 0) { + return 0; + } + int start = 0; + int end = s.length() - 1; + while (start <= end) { + if (s.charAt(start) != s.charAt(end)) { + return 2; + } + start++; + end--; + } + return 1; + } +} From 8d984d35b2fca88d7536369055ee20a512e5f7cb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Jun 2022 08:17:56 -0700 Subject: [PATCH 0512/1640] Create Minimum Swaps to Group All 1's Together.java --- ...nimum Swaps to Group All 1's Together.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Minimum Swaps to Group All 1's Together.java diff --git a/Medium/Minimum Swaps to Group All 1's Together.java b/Medium/Minimum Swaps to Group All 1's Together.java new file mode 100644 index 00000000..ea3d82c8 --- /dev/null +++ b/Medium/Minimum Swaps to Group All 1's Together.java @@ -0,0 +1,20 @@ +class Solution { + public int minSwaps(int[] data) { + int totalOnes = 0; + for (int num : data) { + totalOnes += num; + } + int leftIdx = 0; + int rightIdx = 0; + int currOnes = 0; + int maxOnes = 0; + while (rightIdx < data.length) { + currOnes += data[rightIdx++]; + if (rightIdx - leftIdx > totalOnes) { + currOnes -= data[leftIdx++]; + } + maxOnes = Math.max(maxOnes, currOnes); + } + return totalOnes - maxOnes; + } +} From 813273dd3c081936d140a5daa2d21308ff61d702 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Jun 2022 11:33:33 -0700 Subject: [PATCH 0513/1640] Update Longest Palindrome.java --- Easy/Longest Palindrome.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Easy/Longest Palindrome.java b/Easy/Longest Palindrome.java index 59688ba8..aa91e564 100644 --- a/Easy/Longest Palindrome.java +++ b/Easy/Longest Palindrome.java @@ -4,16 +4,15 @@ public int longestPalindrome(String s) { for (char c : s.toCharArray()) { map.put(c, map.getOrDefault(c, 0) + 1); } - int count = 0; + int totalLength = 0; boolean oddTaken = false; for (Character key : map.keySet()) { - int val = map.get(key); - count += (val / 2) * 2; - if ((val == 1 || val % 2 != 0) && !oddTaken) { - oddTaken = true; - count++; + totalLength += (map.get(key) / 2) * 2; + if (!oddTaken && map.get(key) % 2 != 0) { + totalLength++; + oddTaken = !oddTaken; } } - return count; + return totalLength; } } From 927d5a48cf82a965ef9b0cac6616556c08896cec Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Jun 2022 11:34:18 -0700 Subject: [PATCH 0514/1640] Update K Closest Points to Origin.java --- Medium/K Closest Points to Origin.java | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Medium/K Closest Points to Origin.java b/Medium/K Closest Points to Origin.java index 20275fe3..4f92b4a6 100644 --- a/Medium/K Closest Points to Origin.java +++ b/Medium/K Closest Points to Origin.java @@ -1,15 +1,20 @@ class Solution { public int[][] kClosest(int[][] points, int k) { - PriorityQueue pq = new PriorityQueue<>((o1, o2) -> { - double diff = Math.sqrt(o1[0] * o1[0] + o1[1] * o1[1]) - Math.sqrt( - o2[0] * o2[0] + o2[1] * o2[1]); - return diff < 0 ? -1 : (diff > 0 ? 1 : 0); - }); - Collections.addAll(pq, points); - int[][] result = new int[k][2]; - for (int i = 0; i < k; i++) { + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> getDistance(o2) - getDistance(o1)); + for (int[] point : points) { + pq.add(point); + if (pq.size() > k) { + pq.poll(); + } + } + int[][] result = new int[pq.size()][2]; + for (int i = 0; i < result.length; i++) { result[i] = pq.poll(); } return result; } + + private int getDistance(int[] point) { + return (point[0] * point[0]) + (point[1] * point[1]); + } } From 404be1017861fad7c7e4e6f8dd0af52a8e95523b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Jun 2022 11:35:32 -0700 Subject: [PATCH 0515/1640] Update Longest Palindromic Substring.java --- Medium/Longest Palindromic Substring.java | 42 +++++++++++------------ 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/Medium/Longest Palindromic Substring.java b/Medium/Longest Palindromic Substring.java index aee6dd60..c22fec2d 100644 --- a/Medium/Longest Palindromic Substring.java +++ b/Medium/Longest Palindromic Substring.java @@ -1,26 +1,24 @@ class Solution { - - public boolean isPalindrome(String s,int begin, int end) { - if (begin < 0) return false; - while(begin < end) { - if (s.charAt(begin++) != s.charAt(end--)) return false; - } - return true; + public String longestPalindrome(String s) { + int start = 0; + int end = 0; + for (int i = 0; i < s.length(); i++) { + int lenOne = helper(s, i, i); + int lenTwo = helper(s, i, i + 1); + int maxLength = Math.max(lenOne, lenTwo); + if (maxLength > end - start) { + start = i - (maxLength - 1) / 2; + end = i + maxLength / 2; + } } - - public String longestPalindrome(String s) { - String res = ""; - int currLength = 0; - for (int i=0;i= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) { + left--; + right++; } + return right - left - 1; + } } From 525d1fd7f403bb6affa319fadce3aabeaa4d3428 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Jun 2022 16:04:02 -0700 Subject: [PATCH 0516/1640] Update and rename Fibonacci Numbers.java to Fibonacci Number.java --- Easy/Fibonacci Number.java | 14 ++++++++++++++ Easy/Fibonacci Numbers.java | 20 -------------------- 2 files changed, 14 insertions(+), 20 deletions(-) create mode 100644 Easy/Fibonacci Number.java delete mode 100644 Easy/Fibonacci Numbers.java diff --git a/Easy/Fibonacci Number.java b/Easy/Fibonacci Number.java new file mode 100644 index 00000000..dfd1ea21 --- /dev/null +++ b/Easy/Fibonacci Number.java @@ -0,0 +1,14 @@ +class Solution { + public int fib(int n) { + if (n == 0) { + return 0; + } + int[] result = new int[n + 1]; + result[0] = 0; + result[1] = 1; + for (int i = 2; i <= n; i++) { + result[i] = result[i - 1] + result[i - 2]; + } + return result[n]; + } +} diff --git a/Easy/Fibonacci Numbers.java b/Easy/Fibonacci Numbers.java deleted file mode 100644 index f5e33e3b..00000000 --- a/Easy/Fibonacci Numbers.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public int fib(int N) { - Integer[] memo = new Integer[N + 1]; - return getFib(memo, N); - } - - private int getFib(Integer[] memo, int N) { - if (memo[N] != null) { - return memo[N]; - } - else if (N == 0) { - return 0; - } - else if (N == 1) { - return 1; - } - memo[N] = getFib(memo, N - 1) + getFib(memo, N - 2); - return memo[N]; - } -} From e4d27f97ce65aaebcd069c1e27e5ab97112ac70f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Jun 2022 07:56:26 -0700 Subject: [PATCH 0517/1640] Update and rename Two Sum II.java to Two Sum II - Input Array Is Sorted.java --- Easy/Two Sum II - Input Array Is Sorted.java | 17 +++++++++++++++++ Easy/Two Sum II.java | 19 ------------------- 2 files changed, 17 insertions(+), 19 deletions(-) create mode 100644 Easy/Two Sum II - Input Array Is Sorted.java delete mode 100644 Easy/Two Sum II.java diff --git a/Easy/Two Sum II - Input Array Is Sorted.java b/Easy/Two Sum II - Input Array Is Sorted.java new file mode 100644 index 00000000..f896157c --- /dev/null +++ b/Easy/Two Sum II - Input Array Is Sorted.java @@ -0,0 +1,17 @@ +class Solution { + public int[] twoSum(int[] numbers, int target) { + int leftIdx = 0; + int rightIdx = numbers.length - 1; + while (leftIdx < rightIdx) { + int currSum = numbers[leftIdx] + numbers[rightIdx]; + if (currSum == target) { + return new int[]{leftIdx + 1, rightIdx + 1}; + } else if (currSum > target) { + rightIdx--; + } else { + leftIdx++; + } + } + return new int[]{0}; + } +} diff --git a/Easy/Two Sum II.java b/Easy/Two Sum II.java deleted file mode 100644 index 6d313038..00000000 --- a/Easy/Two Sum II.java +++ /dev/null @@ -1,19 +0,0 @@ -class Solution { - public int[] twoSum(int[] numbers, int target) { - int[] ans = new int[2]; - int i = 0; - int j = numbers.length-1; - while (numbers[i] + numbers[j] != target) { - if (numbers[i] + numbers[j] > target) { - j--; - } - else { - i++; - } - } - ans[0] = i+1; - ans[1] = j+1; - - return ans; - } -} From 65fcb29fa250898b419017ed1352e3fcac6c5703 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Jun 2022 07:56:45 -0700 Subject: [PATCH 0518/1640] Rename Easy/Two Sum II - Input Array Is Sorted.java to Medium/Two Sum II - Input Array Is Sorted.java --- {Easy => Medium}/Two Sum II - Input Array Is Sorted.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Easy => Medium}/Two Sum II - Input Array Is Sorted.java (100%) diff --git a/Easy/Two Sum II - Input Array Is Sorted.java b/Medium/Two Sum II - Input Array Is Sorted.java similarity index 100% rename from Easy/Two Sum II - Input Array Is Sorted.java rename to Medium/Two Sum II - Input Array Is Sorted.java From aa80afc99264da8c29385086511b948e6f73aa44 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Jun 2022 16:32:00 -0700 Subject: [PATCH 0519/1640] Update Rotting Oranges.java --- Medium/Rotting Oranges.java | 52 +++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/Medium/Rotting Oranges.java b/Medium/Rotting Oranges.java index 39ea7886..dd9a1be5 100644 --- a/Medium/Rotting Oranges.java +++ b/Medium/Rotting Oranges.java @@ -1,41 +1,37 @@ class Solution { - private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - + private final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + public int orangesRotting(int[][] grid) { - Queue infectedOranges = new LinkedList<>(); - int numOfFreshOranges = 0; - for (int i = 0; i < grid.length; i++) { - for (int j = 0; j < grid[i].length; j++) { + Queue queue = new LinkedList<>(); + int nonRottenCount = 0; + int numRows = grid.length; + int numCols = grid[0].length; + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < numCols; j++) { if (grid[i][j] == 2) { - infectedOranges.add(new int[]{i, j}); + queue.add(new int[]{i, j}); + } else if (grid[i][j] == 1) { + nonRottenCount++; } - numOfFreshOranges += grid[i][j] == 1 ? 1 : 0; } } - int numOfMinutes = 0; - while (!infectedOranges.isEmpty()) { - int infectedOrangeSize = infectedOranges.size(); - boolean newInfected = false; - while (infectedOrangeSize-- > 0) { - int[] infectedOrangeCoordinate = infectedOranges.poll(); + int totalTime = 0; + while (!queue.isEmpty() && nonRottenCount > 0) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); for (int[] dir : DIRS) { - int newRowCoordinate = infectedOrangeCoordinate[0] + dir[0]; - int newColCoordinate = infectedOrangeCoordinate[1] + dir[1]; - if (isValidInfection(grid, newRowCoordinate, newColCoordinate)) { - infectedOranges.add(new int[]{newRowCoordinate, newColCoordinate}); - grid[newRowCoordinate][newColCoordinate] = 2; - newInfected = true; - numOfFreshOranges--; + int newX = removed[0] + dir[0]; + int newY = removed[1] + dir[1]; + if (newX >= 0 && newY >= 0 && newX < numRows && newY < numCols && grid[newX][newY] == 1) { + grid[newX][newY] = 2; + nonRottenCount--; + queue.add(new int[]{newX, newY}); } } } - numOfMinutes += newInfected ? 1 : 0; + totalTime++; } - return numOfFreshOranges > 0 ? -1 : numOfMinutes; - } - - private boolean isValidInfection(int[][] grid, int rowCoordinate, int colCoordinate) { - return rowCoordinate >= 0 && colCoordinate >= 0 && rowCoordinate < grid.length - && colCoordinate < grid[0].length && grid[rowCoordinate][colCoordinate] == 1; + return nonRottenCount == 0 ? totalTime : -1; } } From f34aa47d225ef745f5203fc14144a5bcbc7b2212 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 10 Jun 2022 11:28:41 -0700 Subject: [PATCH 0520/1640] Update and rename Easy/Two City Scheduling.java to Medium/Two City Scheduling.java --- Easy/Two City Scheduling.java | 15 --------------- Medium/Two City Scheduling.java | 11 +++++++++++ 2 files changed, 11 insertions(+), 15 deletions(-) delete mode 100644 Easy/Two City Scheduling.java create mode 100644 Medium/Two City Scheduling.java diff --git a/Easy/Two City Scheduling.java b/Easy/Two City Scheduling.java deleted file mode 100644 index 6bcb5602..00000000 --- a/Easy/Two City Scheduling.java +++ /dev/null @@ -1,15 +0,0 @@ -class Solution { - public int twoCitySchedCost(int[][] costs) { - Arrays.sort(costs, new Comparator(){ - public int compare(int[] o1, int[] o2) { - return o1[0] - o1[1] - (o2[0] - o2[1]); - } - }); - int total = 0; - int n = costs.length / 2; - for (int i = 0; i < n; i++) { - total += costs[i][0] + costs[i + n][1]; - } - return total; - } -} diff --git a/Medium/Two City Scheduling.java b/Medium/Two City Scheduling.java new file mode 100644 index 00000000..6f75aeda --- /dev/null +++ b/Medium/Two City Scheduling.java @@ -0,0 +1,11 @@ +class Solution { + public int twoCitySchedCost(int[][] costs) { + Arrays.sort(costs, (o1, o2) -> o1[0] - o1[1] - (o2[0] - o2[1])); + int total = 0; + int n = costs.length / 2; + for (int i = 0; i < n; ++i) { + total += costs[i][0] + costs[i + n][1]; + } + return total; + } +} From 4efda243330a57edeb80397dd735a1735564c181 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 10 Jun 2022 11:35:02 -0700 Subject: [PATCH 0521/1640] Update Invalid Transactions.java --- Medium/Invalid Transactions.java | 68 ++++++++++++++------------------ 1 file changed, 30 insertions(+), 38 deletions(-) diff --git a/Medium/Invalid Transactions.java b/Medium/Invalid Transactions.java index 1d0d9b6d..aa48c7db 100644 --- a/Medium/Invalid Transactions.java +++ b/Medium/Invalid Transactions.java @@ -1,46 +1,38 @@ class Solution { public List invalidTransactions(String[] transactions) { - Map> map = new HashMap<>(); - Set invalidTransactions = new HashSet<>(); - for (int i = 0; i < transactions.length; i++) { - String[] details = transactions[i].split(","); - String name = details[0]; - int time = Integer.parseInt(details[1]); - int amount = Integer.parseInt(details[2]); - String city = details[3]; + Set invalidTransactionSet = new HashSet<>(); + Map> map = new HashMap<>(); + Map transactionOccurenceCount = new HashMap<>(); + for (String transactionString : transactions) { + transactionOccurenceCount.put(transactionString, transactionOccurenceCount.getOrDefault(transactionString, 0) + 1); + String[] transaction = transactionString.split(","); + String name = transaction[0]; + int amount = Integer.parseInt(transaction[2]); + String city = transaction[3]; + int time = Integer.parseInt(transaction[1]); if (amount > 1000) { - invalidTransactions.add(transactions[i]); - } - if (map.containsKey(name)) { - List otherTransactions = map.get(name); - for (Transaction transaction : otherTransactions) { - if (!transaction.city.equals(city) && Math.abs(transaction.time - time) <= 60) { - invalidTransactions.add(transactions[transaction.idx]); - invalidTransactions.add(transactions[i]); - } + invalidTransactionSet.add(transactionString); + } + map.computeIfAbsent(name, k -> new ArrayList<>()); + List currentTransactions = map.get(name); + for (String currentTransaction : currentTransactions) { + String currentCity = currentTransaction.split(",")[3]; + int currentTime = Integer.parseInt(currentTransaction.split(",")[1]); + if (!currentCity.equals(city) && Math.abs(time - currentTime) <= 60) { + invalidTransactionSet.add(currentTransaction); + invalidTransactionSet.add(transactionString); } } - map.computeIfAbsent(name, k -> new ArrayList<>()).add( - new Transaction(name, time, amount, city, i) - ); + currentTransactions.add(transactionString); + map.put(name, currentTransactions); } - return new ArrayList<>(invalidTransactions); - } -} - - -class Transaction { - String name; - int time; - int amount; - String city; - int idx; - - public Transaction(String name, int time, int amount, String city, int idx) { - this.name = name; - this.time = time; - this.amount = amount; - this.city = city; - this.idx = idx; + List result = new ArrayList<>(); + for (String trs : invalidTransactionSet) { + int count = transactionOccurenceCount.get(trs); + while (count-- > 0) { + result.add(trs); + } + } + return result; } } From 4b9b2546cb8cabba13e40d01742b51118ee84f79 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 10 Jun 2022 14:00:18 -0700 Subject: [PATCH 0522/1640] Update Number of Provinces.java --- Medium/Number of Provinces.java | 66 ++++++++++----------------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/Medium/Number of Provinces.java b/Medium/Number of Provinces.java index 436059e3..4f485f0d 100644 --- a/Medium/Number of Provinces.java +++ b/Medium/Number of Provinces.java @@ -1,60 +1,34 @@ class Solution { public int findCircleNum(int[][] isConnected) { int n = isConnected.length; - DisjointSet disjointSet = new DisjointSet(n); + Map> map = new HashMap<>(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { - if (isConnected[i][j] == 1) { - disjointSet.union(i, j); + if (i != j && isConnected[i][j] == 1) { + map.computeIfAbsent(i, k -> new HashSet<>()).add(j); + map.computeIfAbsent(j, k -> new HashSet<>()).add(i); } } } - Set set = new HashSet<>(); + Set visited = new HashSet<>(); + int provinceCount = 0; for (int i = 0; i < n; i++) { - set.add(disjointSet.find(i)); - } - return set.size(); - } - - private static class DisjointSet { - - private final int[] root; - private final int[] rank; - - public DisjointSet(int size) { - this.root = new int[size]; - this.rank = new int[size]; - for (int i = 0; i < size; i++) { - this.root[i] = i; - this.rank[i] = 1; - } - } - - public void union(int nodeOne, int nodeTwo) { - int rootOne = find(nodeOne); - int rootTwo = find(nodeTwo); - if (rootOne != rootTwo) { - if (this.rank[rootOne] > this.rank[rootTwo]) { - this.root[rootTwo] = rootOne; - } else if (this.rank[rootOne] < this.rank[rootTwo]) { - this.root[rootOne] = rootTwo; - } else { - this.root[rootTwo] = rootOne; - this.rank[rootOne]++; + if (!visited.contains(i)) { + Queue queue = new LinkedList<>(); + queue.add(i); + visited.add(i); + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (Integer connection : map.getOrDefault(removed, new HashSet<>())) { + if (!visited.contains(connection)) { + queue.add(connection); + visited.add(connection); + } + } } + provinceCount++; } } - - - public int find(int node) { - if (node == root[node]) { - return node; - } - return root[node] = find(root[node]); - } - - public boolean connected(int nodeOne, int nodeTwo) { - return find(nodeOne) == find(nodeTwo); - } + return provinceCount; } } From ead55b4b53b49331b586c3b4611f12e51189a7c2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 10 Jun 2022 16:34:04 -0700 Subject: [PATCH 0523/1640] Update Count Servers That Communicate.java --- Medium/Count Servers That Communicate.java | 46 ++++++++++------------ 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/Medium/Count Servers That Communicate.java b/Medium/Count Servers That Communicate.java index 81a2c8ff..34de8d30 100644 --- a/Medium/Count Servers That Communicate.java +++ b/Medium/Count Servers That Communicate.java @@ -1,31 +1,25 @@ class Solution { - public int countServers(int[][] grid) { - if (grid.length == 0 || grid[0].length == 0) { - return 0; + public int countServers(int[][] grid) { + int m = grid.length; + int n = grid[0].length; + int[] rowCount = new int[m]; + int[] colCount = new int[n]; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + if (grid[i][j] == 1) { + rowCount[i]++; + colCount[j]++; } - int numRows = grid.length; - int numCols = grid[0].length; - int[] rowCount = new int[numRows]; - int[] colCount = new int[numCols]; - int numOfServers = 0; - for (int i = 0; i < numRows; i++) { - for (int j = 0; j < numCols; j++) { - if (grid[i][j] == 1) { - numOfServers++; - rowCount[i]++; - colCount[j]++; - } - } - } - for (int i = 0; i < numRows; i++) { - for (int j = 0; j < numCols; j++) { - if (grid[i][j] == 1) { - if (rowCount[i] == 1 && colCount[j] == 1) { - numOfServers--; - } - } - } + } + } + int connectedServerCount = 0; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + if (grid[i][j] == 1 && (rowCount[i] > 1 || colCount[j] > 1)) { + connectedServerCount++; } - return numOfServers; + } } + return connectedServerCount; + } } From ca359c3435bfefb3f4e8fc50594a708e18fca15e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 11 Jun 2022 07:02:33 -0700 Subject: [PATCH 0524/1640] Update Minimum Operations to Reduce X to Zero.java --- ...inimum Operations to Reduce X to Zero.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/Medium/Minimum Operations to Reduce X to Zero.java b/Medium/Minimum Operations to Reduce X to Zero.java index ebd3de44..3e202cb6 100644 --- a/Medium/Minimum Operations to Reduce X to Zero.java +++ b/Medium/Minimum Operations to Reduce X to Zero.java @@ -1,26 +1,21 @@ class Solution { public int minOperations(int[] nums, int x) { - int n = nums.length; - int leftIdx = 0; - int sum = 0; - int ans = -1; - for (; leftIdx < n && sum < x; leftIdx++) { - sum += nums[leftIdx]; + int totalSum = 0; + for (int num : nums) { + totalSum += num; } - if (sum == x) { - ans = leftIdx; - } - leftIdx--; - int rightIdx = n - 1; - for (; leftIdx >= 0; leftIdx--) { - sum -= nums[leftIdx]; - while (rightIdx > leftIdx && sum < x) { - sum += nums[rightIdx--]; + int max = -1; + int left = 0; + int current = 0; + for (int right = 0; right < nums.length; right++) { + current += nums[right]; + while (current > totalSum - x && left <= right) { + current -= nums[left++]; } - if (sum == x) { - ans = ans == -1 ? (leftIdx + n - rightIdx - 1) : Math.min(ans, (leftIdx + n - rightIdx - 1)); + if (current == totalSum - x) { + max = Math.max(max, right - left + 1); } } - return ans; + return max != -1 ? nums.length - max : -1; } } From f2a4599df09673a9aa3d152c2cc7f53693dd5cd9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 11 Jun 2022 07:23:49 -0700 Subject: [PATCH 0525/1640] Update Convert Sorted Array To Binary Search Tree.java --- ...rt Sorted Array To Binary Search Tree.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Easy/Convert Sorted Array To Binary Search Tree.java b/Easy/Convert Sorted Array To Binary Search Tree.java index 55cbd37e..19d14059 100644 --- a/Easy/Convert Sorted Array To Binary Search Tree.java +++ b/Easy/Convert Sorted Array To Binary Search Tree.java @@ -4,24 +4,28 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public TreeNode sortedArrayToBST(int[] nums) { - int left = 0; - int right = nums.length - 1; - return helper(nums, left, right); + return helper(nums, 0, nums.length - 1); } - private TreeNode helper(int[] nums, int left, int right) { - if (left > right) { + private TreeNode helper(int[] nums, int start, int end) { + if (start > end) { return null; } - int mid = (left + right) / 2; + int mid = (start + end) / 2; TreeNode root = new TreeNode(nums[mid]); - root.left = helper(nums, left, mid - 1); - root.right = helper(nums, mid + 1, right); + root.left = helper(nums, start, mid - 1); + root.right = helper(nums, mid + 1, end); return root; } } From d1992181dfde6fb3c5fa251326260a9da20e7f4e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 11 Jun 2022 08:04:11 -0700 Subject: [PATCH 0526/1640] Update and rename Leaf Similar Tree.java to Leaf-Similar Trees.java --- Easy/Leaf Similar Tree.java | 39 --------------------------------- Easy/Leaf-Similar Trees.java | 42 ++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 39 deletions(-) delete mode 100644 Easy/Leaf Similar Tree.java create mode 100644 Easy/Leaf-Similar Trees.java diff --git a/Easy/Leaf Similar Tree.java b/Easy/Leaf Similar Tree.java deleted file mode 100644 index 5b79aa91..00000000 --- a/Easy/Leaf Similar Tree.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Definition for a binary tree node. - * 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; - * } - * } - */ -class Solution { - public boolean leafSimilar(TreeNode root1, TreeNode root2) { - return getLeafSequence(root1).equals(getLeafSequence(root2)); - } - - private String getLeafSequence(TreeNode root) { - List list = new ArrayList<>(); - helper(root, list); - return list.toString(); - } - - private void helper(TreeNode root, List list) { - if (root == null) { - return; - } - if (root.left == null && root.right == null) { - list.add(root.val); - } - else { - helper(root.left, list); - helper(root.right, list); - } - } -} diff --git a/Easy/Leaf-Similar Trees.java b/Easy/Leaf-Similar Trees.java new file mode 100644 index 00000000..38bb0ab9 --- /dev/null +++ b/Easy/Leaf-Similar Trees.java @@ -0,0 +1,42 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public boolean leafSimilar(TreeNode root1, TreeNode root2) { + return getLeaves(root1).equals(getLeaves(root2)); + } + + private List getLeaves(TreeNode root) { + Stack stack = new Stack<>(); + List leaves = new ArrayList<>(); + while (root != null) { + stack.push(root); + root = root.left; + } + while (!stack.isEmpty()) { + TreeNode removed = stack.pop(); + if (removed.left == null && removed.right == null) { + leaves.add(removed.val); + } else { + TreeNode rightNode = removed.right; + while (rightNode != null) { + stack.push(rightNode); + rightNode = rightNode.left; + } + } + } + return leaves; + } +} From a4c165e4b45abba700fc11ed2821249c3f4719d7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 11 Jun 2022 09:26:37 -0700 Subject: [PATCH 0527/1640] Create Strong Password Checker II.java --- Easy/Strong Password Checker II.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Easy/Strong Password Checker II.java diff --git a/Easy/Strong Password Checker II.java b/Easy/Strong Password Checker II.java new file mode 100644 index 00000000..56e82a98 --- /dev/null +++ b/Easy/Strong Password Checker II.java @@ -0,0 +1,25 @@ +class Solution { + public boolean strongPasswordCheckerII(String password) { + boolean lowerCaseFound = false; + boolean upperCaseFound = false; + boolean digitFound = false; + boolean specialCharFound = false; + String specialChars = "!@#$%^&*()-+"; + for (int i = 0; i < password.length(); i++) { + char c = password.charAt(i); + if (specialChars.indexOf(c) != -1) { + specialCharFound = true; + } else if (Character.isDigit(c)) { + digitFound = true; + } else if (Character.isUpperCase(c)) { + upperCaseFound = true; + } else if (Character.isLowerCase(c)) { + lowerCaseFound = true; + } + if (i > 0 && password.charAt(i - 1) == c) { + return false; + } + } + return password.length() >= 8 && lowerCaseFound && upperCaseFound && digitFound && specialCharFound; + } +} From c89cc12095cda4131a024765f514208611bc3e65 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Jun 2022 18:14:10 -0700 Subject: [PATCH 0528/1640] Create Minimum Falling Path Sum.java --- Medium/Minimum Falling Path Sum.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Minimum Falling Path Sum.java diff --git a/Medium/Minimum Falling Path Sum.java b/Medium/Minimum Falling Path Sum.java new file mode 100644 index 00000000..040759bf --- /dev/null +++ b/Medium/Minimum Falling Path Sum.java @@ -0,0 +1,27 @@ +class Solution { + public int minFallingPathSum(int[][] matrix) { + int minFallingSum = Integer.MAX_VALUE; + Integer[][] dp = new Integer[matrix.length][matrix[0].length]; + for (int i = 0; i < matrix.length; i++) { + minFallingSum = Math.min(minFallingSum, findMinFallingPathSumHelper(matrix, 0, i, dp)); + } + return minFallingSum; + } + + private int findMinFallingPathSumHelper(int[][] matrix, int row, int col, Integer[][] dp) { + if (col < 0 || col == matrix.length) { + return Integer.MAX_VALUE; + } + if (row == matrix.length - 1) { + return matrix[row][col]; + } + if (dp[row][col] != null) { + return dp[row][col]; + } + int leftSum = findMinFallingPathSumHelper(matrix, row + 1, col, dp); + int middleSum = findMinFallingPathSumHelper(matrix, row + 1, col + 1, dp); + int rightSum = findMinFallingPathSumHelper(matrix, row + 1, col - 1, dp); + dp[row][col] = Math.min(leftSum, Math.min(middleSum, rightSum)) + matrix[row][col]; + return dp[row][col]; + } +} From ca8e4f1d632d877e8732bb1fd834fa66095c1e9e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Jun 2022 18:20:04 -0700 Subject: [PATCH 0529/1640] Create Triangle.java --- Medium/Triangle.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Triangle.java diff --git a/Medium/Triangle.java b/Medium/Triangle.java new file mode 100644 index 00000000..0d4a8b54 --- /dev/null +++ b/Medium/Triangle.java @@ -0,0 +1,19 @@ +class Solution { + public int minimumTotal(List> triangle) { + Map dp = new HashMap<>(); + return minimumTotalHelper(triangle, dp, 0, 0); + } + + private int minimumTotalHelper(List> triangle, Map dp, int row, int col) { + String key = row + "|" + col; + if (dp.containsKey(key)) { + return dp.get(key); + } + int path = triangle.get(row).get(col); + if (row < triangle.size() - 1) { + path += Math.min(minimumTotalHelper(triangle, dp, row + 1, col), minimumTotalHelper(triangle, dp, row + 1, col + 1)); + } + dp.put(key, path); + return dp.get(key); + } +} From aaafe41a57201b0f3219ee0d2caf0687e0ca4e72 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Jun 2022 20:44:56 -0700 Subject: [PATCH 0530/1640] Create Calculate Amount Paid in Taxes.java --- Easy/Calculate Amount Paid in Taxes.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Calculate Amount Paid in Taxes.java diff --git a/Easy/Calculate Amount Paid in Taxes.java b/Easy/Calculate Amount Paid in Taxes.java new file mode 100644 index 00000000..77ae27e2 --- /dev/null +++ b/Easy/Calculate Amount Paid in Taxes.java @@ -0,0 +1,20 @@ +class Solution { + public double calculateTax(int[][] brackets, int income) { + if (income == 0) { + return 0.0; + } + double tax = 0.0; + int idx = 0; + while (idx < brackets.length) { + int[] currentBracket = brackets[idx]; + int amount = idx > 0 ? (Math.min(currentBracket[0], income)) - brackets[idx - 1][0] : Math.min(currentBracket[0], income); + double taxPercentage = ((double) currentBracket[1]) / 100; + tax += taxPercentage * amount; + if (income < currentBracket[0]) { + break; + } + idx++; + } + return tax; + } +} From 8f418979035d0c56d664510a4df2e34c3843f6c4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Jun 2022 07:35:52 -0700 Subject: [PATCH 0531/1640] Update Pancake Sorting.java --- Medium/Pancake Sorting.java | 63 +++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 35 deletions(-) diff --git a/Medium/Pancake Sorting.java b/Medium/Pancake Sorting.java index a390ceb2..b8606b27 100644 --- a/Medium/Pancake Sorting.java +++ b/Medium/Pancake Sorting.java @@ -1,41 +1,34 @@ class Solution { - public List pancakeSort(int[] A) { - List ans = new ArrayList<>(); - int[] copy = Arrays.copyOf(A, A.length); - int n = A.length - 1; - Arrays.sort(A); - int greatest = A.length - 1; - for (int i = 0; i < A.length; i++) { - int idx = findIdx(copy, A[greatest]); - flip(copy, idx); - ans.add(idx + 1); - flip(copy, greatest); - ans.add(greatest + 1); - greatest--; + public List pancakeSort(int[] arr) { + List result = new ArrayList<>(); + for (int i = arr.length; i > 0; i--) { + int idx = findIdx(arr, i); + if (idx != i - 1) { + if (idx != 0) { + result.add(idx + 1); + flip(arr, idx + 1); } - - return ans; + result.add(i); + flip(arr, i); + } } - - private void flip (int[] copy, int idx) { - int start = 0; - int end = idx; - while (start < end) { - int temp = copy[start]; - copy[start] = copy[end]; - copy[end] = temp; - start++; - end--; - } + return result; + } + + private void flip(int[] arr, int k) { + for (int i = 0; i < k / 2; i++) { + int temp = arr[i]; + arr[i] = arr[k - i - 1]; + arr[k - i - 1] = temp; } - - private int findIdx (int[] arr, int target) { - for (int i = 0; i < arr.length; i++) { - if (arr[i] == target) { - return i; - } - } - - return -1; + } + + private int findIdx(int[] arr, int target) { + for (int i = 0; i < arr.length; i++) { + if (arr[i] == target) { + return i; + } } + return -1; + } } From ff0fd38ddcc0793388121048d6d3c0c6180519d3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Jun 2022 08:02:15 -0700 Subject: [PATCH 0532/1640] Create Successful Pairs of Spells and Potions.java --- ...uccessful Pairs of Spells and Potions.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Successful Pairs of Spells and Potions.java diff --git a/Medium/Successful Pairs of Spells and Potions.java b/Medium/Successful Pairs of Spells and Potions.java new file mode 100644 index 00000000..40c459c7 --- /dev/null +++ b/Medium/Successful Pairs of Spells and Potions.java @@ -0,0 +1,26 @@ +class Solution { + public int[] successfulPairs(int[] spells, int[] potions, long success) { + int[] result = new int[spells.length]; + Arrays.sort(potions); + for (int i = 0; i < spells.length; i++) { + int idx = getSuccessIdx(potions, spells[i], success); + result[i] = potions.length - idx; + } + return result; + } + + private int getSuccessIdx(int[] potions, int spell, long success) { + int left = 0; + int right = potions.length; + while (left < right) { + int mid = (left + right) / 2; + long currSuccess = ((long) potions[mid]) * spell; + if (currSuccess >= success) { + right = mid; + } else { + left = mid + 1; + } + } + return left; + } +} From a02d4b7d30cf40d2d7e745c4c4e32beff32e427d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Jun 2022 09:57:50 -0700 Subject: [PATCH 0533/1640] Update Height Checker.java --- Easy/Height Checker.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Easy/Height Checker.java b/Easy/Height Checker.java index 56949329..97bc01d0 100644 --- a/Easy/Height Checker.java +++ b/Easy/Height Checker.java @@ -1,13 +1,20 @@ class Solution { public int heightChecker(int[] heights) { - int[] copy = Arrays.copyOf(heights, heights.length); - Arrays.sort(copy); - int count = 0; - for (int i = 0; i < heights.length; i++) { - if (heights[i] != copy[i]) { - count++; + int[] frequencies = new int[101]; + for (int height : heights) { + frequencies[height]++; + } + int currHeight = 1; + int mismatchCount = 0; + for (int height : heights) { + while (frequencies[currHeight] == 0) { + currHeight++; + } + if (currHeight != height) { + mismatchCount++; } + frequencies[currHeight]--; } - return count; + return mismatchCount; } } From 7b4790aaf0049dc4191426ff34a115664ab2b42e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Jun 2022 09:59:46 -0700 Subject: [PATCH 0534/1640] Update Long Pressed Name.java --- Easy/Long Pressed Name.java | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/Easy/Long Pressed Name.java b/Easy/Long Pressed Name.java index 48f9e787..3e134aa3 100644 --- a/Easy/Long Pressed Name.java +++ b/Easy/Long Pressed Name.java @@ -1,22 +1,27 @@ class Solution { public boolean isLongPressedName(String name, String typed) { - int nameIdx = 0; - int typeIdx = 0; - int nameLen = name.length(); - int typeLen = typed.length(); - while (nameIdx < nameLen && typeIdx < typeLen) { - if (name.charAt(nameIdx) != typed.charAt(typeIdx)) { + int idxName = 0; + int idxTyped = 0; + while (idxName < name.length() && idxTyped < typed.length()) { + if (name.charAt(idxName) != typed.charAt(idxTyped)) { return false; } - while (nameIdx < nameLen && typeIdx < typeLen && name.charAt(nameIdx) == typed.charAt(typeIdx)) { - nameIdx++; - typeIdx++; + char c = name.charAt(idxName); + int nameFreq = 0; + while (idxName < name.length() && name.charAt(idxName) == c) { + idxName++; + nameFreq++; } - char prev = name.charAt(nameIdx - 1); - while (typeIdx < typeLen && typed.charAt(typeIdx) == prev) { - typeIdx++; + c = typed.charAt(idxTyped); + int typedFreq = 0; + while (idxTyped < typed.length() && typed.charAt(idxTyped) == c) { + idxTyped++; + typedFreq++; + } + if (nameFreq > typedFreq) { + return false; } } - return nameIdx == nameLen && typeIdx == typeLen; + return idxName == name.length() && idxTyped == typed.length(); } } From 5845b8f188f3657e090386bdaa10f0cf0f0a98d3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Jun 2022 13:32:07 -0700 Subject: [PATCH 0535/1640] Update Student Attendance Record I.java --- Easy/Student Attendance Record I.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Easy/Student Attendance Record I.java b/Easy/Student Attendance Record I.java index 0278cb49..75021837 100644 --- a/Easy/Student Attendance Record I.java +++ b/Easy/Student Attendance Record I.java @@ -1,16 +1,16 @@ class Solution { public boolean checkRecord(String s) { int absentCount = 0; - for (int i = 0; i< s.length(); i++) { - if (s.charAt(i) == 'A') { + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (c == 'A') { absentCount++; - } - else if (s.charAt(i) == 'L') { - if (i + 1 < s.length() && i + 2 < s.length() && s.charAt(i + 1) == 'L' && s.charAt(i + 2) == 'L') { + } else if (c == 'L') { + if (i > 1 && s.charAt(i - 1) == 'L' && s.charAt(i - 2) == 'L') { return false; } } } - return absentCount <= 1; + return absentCount < 2; } } From b17cdbcc45c0d7f96b4aea84b21a4a181363b390 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Jun 2022 13:33:38 -0700 Subject: [PATCH 0536/1640] Update Network Delay Time.java --- Medium/Network Delay Time.java | 47 ++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/Medium/Network Delay Time.java b/Medium/Network Delay Time.java index 90ddb22c..2ee2990a 100644 --- a/Medium/Network Delay Time.java +++ b/Medium/Network Delay Time.java @@ -1,32 +1,35 @@ class Solution { public int networkDelayTime(int[][] times, int n, int k) { - // Mapping from node to all outgoing edges alongside weight of each edge - Map> map = new HashMap<>(); + Map> map = new HashMap<>(); for (int[] time : times) { - map.computeIfAbsent(time[0], j -> new ArrayList<>()).add(new int[] {time[1], time[2]}); + map.computeIfAbsent(time[0], j -> new ArrayList<>()).add(new TimeNode(time[1], time[2])); } - // Min heap in order of edge weight - PriorityQueue priorityQueue = new PriorityQueue<>(Comparator.comparingInt(o -> o[0])); - priorityQueue.add(new int[] {0, k}); + PriorityQueue pq = new PriorityQueue<>(Comparator.comparingInt(o -> o.time)); + pq.add(new TimeNode(k, 0)); + int maxTime = 0; Set visited = new HashSet<>(); - int totalTime = 0; - while (!priorityQueue.isEmpty()) { - int[] removed = priorityQueue.poll(); - int currNode = removed[1]; - int edgeWeight = removed[0]; - if (visited.contains(currNode)) { - continue; - } - visited.add(currNode); - totalTime = Math.max(totalTime, edgeWeight); - for (int[] neighbor : map.getOrDefault(removed[1], new ArrayList<>())) { - int neighborNode = neighbor[0]; - int neighborEdgeWeight = neighbor[1]; - if (!visited.contains(neighborNode)) { - priorityQueue.add(new int[] {neighborEdgeWeight + edgeWeight, neighborNode}); + visited.add(k); + while (!pq.isEmpty() && visited.size() < n) { + TimeNode removed = pq.remove(); + visited.add(removed.node); + maxTime = Math.max(maxTime, removed.time); + for (TimeNode conn : map.getOrDefault(removed.node, new ArrayList<>())) { + if (visited.contains(conn.node)) { + continue; } + pq.add(new TimeNode(conn.node, removed.time + conn.time)); } } - return visited.size() == n ? totalTime : -1; + return visited.size() == n ? maxTime : -1; + } + + class TimeNode { + int node; + int time; + + public TimeNode(int node, int time) { + this.node = node; + this.time = time; + } } } From cd4bc6c1b12b257c6aee3880d46d26429871d541 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Jun 2022 20:09:39 -0700 Subject: [PATCH 0537/1640] Update Delete Operation for Two Strings.java --- Medium/Delete Operation for Two Strings.java | 40 +++++++++----------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/Medium/Delete Operation for Two Strings.java b/Medium/Delete Operation for Two Strings.java index 8e8f1ea5..f5e48340 100644 --- a/Medium/Delete Operation for Two Strings.java +++ b/Medium/Delete Operation for Two Strings.java @@ -1,25 +1,21 @@ class Solution { - public int minDistance(String word1, String word2) { - int[][] memo = new int[word1.length() + 1][word2.length() + 1]; - for (int i = 0; i <= word1.length(); i++) { - for (int j = 0; j <= word2.length(); j++) { - if (i == 0) { - memo[i][j] = j; - } - else if (j == 0) { - memo[i][j] = i; - } - else if (word1.charAt(i - 1) == word2.charAt(j - 1)) { - memo[i][j] = memo[i - 1][j - 1]; - } - else { - memo[i][j] = Math.min(Math.min(memo[i - 1][j - 1] + 2, memo[i - 1][j] + 1), - memo[i][j - 1] + 1); - } - } - } - - return memo[word1.length()][word2.length()]; + public int minDistance(String word1, String word2) { + int[][] dp = new int[word1.length() + 1][word2.length() + 1]; + return word1.length() + word2.length() - 2 * longestCommonSubsequence(word1, word2, word1.length(), word2.length(), dp); + } + + private int longestCommonSubsequence(String word1, String word2, int m, int n, int[][] dp) { + if (m == 0 || n == 0) { + return 0; } + if (dp[m][n] > 0) { + return dp[m][n]; + } + if (word1.charAt(m - 1) == word2.charAt(n - 1)) { + dp[m][n] = 1 + longestCommonSubsequence(word1, word2, m - 1, n - 1, dp); + } else { + dp[m][n] = Math.max(longestCommonSubsequence(word1, word2, m - 1, n, dp), longestCommonSubsequence(word1, word2, m, n - 1, dp)); + } + return dp[m][n]; + } } - From 80e3f0cf8a0867461a0fb633ae37751055f8291b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 14 Jun 2022 15:25:09 -0700 Subject: [PATCH 0538/1640] Update Flower Planting With No Adjacent.java --- Easy/Flower Planting With No Adjacent.java | 31 ++++++++++------------ 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/Easy/Flower Planting With No Adjacent.java b/Easy/Flower Planting With No Adjacent.java index 70ea74de..88bf6a8b 100644 --- a/Easy/Flower Planting With No Adjacent.java +++ b/Easy/Flower Planting With No Adjacent.java @@ -1,25 +1,22 @@ class Solution { - public int[] gardenNoAdj(int N, int[][] paths) { - Map> map = new HashMap<>(); + public int[] gardenNoAdj(int n, int[][] paths) { + Map> map = new HashMap<>(); for (int[] path : paths) { - map.computeIfAbsent(path[0], k -> new ArrayList<>()).add(path[1]); - map.computeIfAbsent(path[1], k -> new ArrayList<>()).add(path[0]); + map.computeIfAbsent(path[0], k -> new HashSet<>()).add(path[1]); + map.computeIfAbsent(path[1], k -> new HashSet<>()).add(path[0]); } - int[] ans = new int[N]; - for (int i = 0; i < N; i++) { - Set neighbourPlant = new HashSet<>(); - for (Integer neighbour : map.getOrDefault(i + 1, new ArrayList<>())) { - if (ans[neighbour - 1] != 0) { - neighbourPlant.add(ans[neighbour - 1]); - } - } - for (int j = 1; j <= 4; j++) { - if (!neighbourPlant.contains(j)) { - ans[i] = j; - break; + int[] result = new int[n]; + for (int i = 1; i <= n; i++) { + int[] colors = new int[5]; + for (int neighbor : map.getOrDefault(i, new HashSet<>())) { + colors[result[neighbor - 1]] = 1; + } + for (int c = 4; c > 0; c--) { + if (colors[c] != 1) { + result[i - 1] = c; } } } - return ans; + return result; } } From 0c750753c6e5a0309fe56b83e6f368778dd00609 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 15 Jun 2022 07:16:49 -0700 Subject: [PATCH 0539/1640] Update Longest Continuous Increasing Subsequence.java --- ...est Continuous Increasing Subsequence.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Easy/Longest Continuous Increasing Subsequence.java b/Easy/Longest Continuous Increasing Subsequence.java index 77d31e56..f0a73d6a 100644 --- a/Easy/Longest Continuous Increasing Subsequence.java +++ b/Easy/Longest Continuous Increasing Subsequence.java @@ -1,20 +1,16 @@ class Solution { public int findLengthOfLCIS(int[] nums) { - if (nums.length == 0) { - return 0; - } int maxLength = 1; - int currCount = 1; - int n = nums.length; - for (int i = 1; i < n; i++) { - if (nums[i] > nums[i - 1]) { - currCount++; - } - else { - maxLength = Math.max(maxLength, currCount); - currCount = 1; + int idx = 0; + while (idx < nums.length) { + int count = 1; + while (idx < nums.length && idx + 1 < nums.length && nums[idx] < nums[idx + 1]) { + idx++; + count++; } + maxLength = Math.max(maxLength, count); + idx++; } - return Math.max(maxLength, currCount); + return maxLength; } } From 71611f06830b1b0d3bcba4a0d733160f7f2fdca4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 15 Jun 2022 07:36:59 -0700 Subject: [PATCH 0540/1640] Update Longest Increasing Subsequence.java --- Medium/Longest Increasing Subsequence.java | 32 ++++++++++------------ 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/Medium/Longest Increasing Subsequence.java b/Medium/Longest Increasing Subsequence.java index fd5f299e..a4607634 100644 --- a/Medium/Longest Increasing Subsequence.java +++ b/Medium/Longest Increasing Subsequence.java @@ -1,21 +1,19 @@ class Solution { - public int lengthOfLIS(int[] nums) { - int[] dp = new int[nums.length]; - Arrays.fill(dp, 1); - - for (int i = 1; i < nums.length; i ++) { - for (int j = 0; j < i; j++) { - if (nums[j] < nums[i]) { - dp[i] = Math.max(dp[i], dp[j] + 1); - } - } + public int lengthOfLIS(int[] nums) { + List subsequence = new ArrayList<>(); + subsequence.add(nums[0]); + for (int i = 1; i < nums.length; i++) { + int currNum = nums[i]; + if (currNum > subsequence.get(subsequence.size() - 1)) { + subsequence.add(currNum); + } else { + int idx = 0; + while (currNum > subsequence.get(idx)) { + idx++; } - - int max = Integer.MIN_VALUE; - for (int num : dp) { - max = Math.max(num, max); - } - - return max == Integer.MIN_VALUE ? 0 : max; + subsequence.set(idx, currNum); + } } + return subsequence.size(); + } } From feb690603ffac01ff8d5c53a972dab59e9131bee Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 15 Jun 2022 08:20:41 -0700 Subject: [PATCH 0541/1640] Create Longest String Chain.java --- Medium/Longest String Chain.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Longest String Chain.java diff --git a/Medium/Longest String Chain.java b/Medium/Longest String Chain.java new file mode 100644 index 00000000..17d14f0c --- /dev/null +++ b/Medium/Longest String Chain.java @@ -0,0 +1,29 @@ +class Solution { + public int longestStrChain(String[] words) { + Map dp = new HashMap<>(); + Set wordSet = Arrays.stream(words).collect(Collectors.toSet()); + int maxLength = 0; + for (String word : words) { + maxLength = Math.max(maxLength, dfs(wordSet, dp, word)); + } + return maxLength; + } + + private int dfs(Set wordSet, Map dp, String currWord) { + if (dp.containsKey(currWord)) { + return dp.get(currWord); + } + int maxLength = 1; + StringBuilder sb = new StringBuilder(currWord); + for (int i = 0; i < currWord.length(); i++) { + sb.deleteCharAt(i); + String newWord = sb.toString(); + if (wordSet.contains(newWord)) { + maxLength = Math.max(maxLength, 1 + dfs(wordSet, dp, newWord)); + } + sb.insert(i, currWord.charAt(i)); + } + dp.put(currWord, maxLength); + return dp.get(currWord); + } +} From e1bdbc475b365a025956b46fde2032ebe244134f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 15 Jun 2022 16:07:17 -0700 Subject: [PATCH 0542/1640] Update Two Sum Less Than K.java --- Easy/Two Sum Less Than K.java | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Easy/Two Sum Less Than K.java b/Easy/Two Sum Less Than K.java index 7a74f60d..5acfd8dc 100644 --- a/Easy/Two Sum Less Than K.java +++ b/Easy/Two Sum Less Than K.java @@ -1,17 +1,22 @@ class Solution { - public int twoSumLessThanK(int[] A, int K) { - int maxSum = -1; - TreeSet set = new TreeSet<>(); - for (int i = 0; i < A.length; i++) { - int diff = K - A[i]; - if (diff > 0) { - Integer half = set.lower(diff); - if (half != null) { - maxSum = Math.max(maxSum, A[i] + half); + public int twoSumLessThanK(int[] nums, int k) { + int[] counter = new int[1001]; + for (int num : nums) { + counter[num]++; + } + int result = -1; + int left = 1; + int right = 1000; + while (left <= right) { + if (left + right >= k || counter[right] == 0) { + right--; + } else { + if (counter[left] > (left == right ? 1 : 0)) { + result = Math.max(result, left + right); } + left++; } - set.add(A[i]); } - return maxSum; + return result; } } From e2ad64ec26587976060a5265f2a99a5a5a11d177 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 16 Jun 2022 10:54:44 -0700 Subject: [PATCH 0543/1640] Create Fair Distribution of Cookies.java --- Medium/Fair Distribution of Cookies.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Fair Distribution of Cookies.java diff --git a/Medium/Fair Distribution of Cookies.java b/Medium/Fair Distribution of Cookies.java new file mode 100644 index 00000000..ad4b0f94 --- /dev/null +++ b/Medium/Fair Distribution of Cookies.java @@ -0,0 +1,23 @@ +class Solution { + public int distributeCookies(int[] cookies, int k) { + int[] share = new int[k]; + return helper(cookies, share, 0); + } + + private int helper(int[] cookies, int[] share, int idx) { + if (idx == cookies.length) { + int maxShare = share[0]; + for (int s : share) { + maxShare = Math.max(s, maxShare); + } + return maxShare; + } + int result = Integer.MAX_VALUE; + for(int i = 0; i < share.length; i++){ + share[i] += cookies[idx]; + result = Math.min(result, helper(cookies, share, idx + 1)); + share[i] -= cookies[idx]; + } + return result; + } +} From 23ea9793ce0da1005d6a181d1e7bf1f6cee34d6c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 17 Jun 2022 08:12:16 -0700 Subject: [PATCH 0544/1640] Create Binary Tree Cameras.java --- Hard/Binary Tree Cameras.java | 45 +++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Hard/Binary Tree Cameras.java diff --git a/Hard/Binary Tree Cameras.java b/Hard/Binary Tree Cameras.java new file mode 100644 index 00000000..f87825e6 --- /dev/null +++ b/Hard/Binary Tree Cameras.java @@ -0,0 +1,45 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + private final int NOT_MONITORED = 0; + private final int MONITORED_NOCAM = 1; + private final int MONITORED_WITHCAM = 2; + + public int minCameraCover(TreeNode root) { + if (root == null) { + return 0; + } + int[] cameras = {0}; + int top = dfs(root, cameras); + return cameras[0] + (top == NOT_MONITORED ? 1 : 0); + } + + private int dfs(TreeNode root, int[] cameras) { + if (root == null) { + return MONITORED_NOCAM; + } + int left = dfs(root.left, cameras); + int right = dfs(root.right, cameras); + if (left == MONITORED_NOCAM && right == MONITORED_NOCAM) { + return NOT_MONITORED; + } else if (left == NOT_MONITORED || right == NOT_MONITORED) { + cameras[0]++; + return MONITORED_WITHCAM; + } else { + return MONITORED_NOCAM; + } + } +} From 8e44e4ee8ae8ef3d8035bbe2d2363443cd8ca33c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 17 Jun 2022 12:21:49 -0700 Subject: [PATCH 0545/1640] Update Design Circular Deque.java --- Medium/Design Circular Deque.java | 123 +++++++++--------------------- 1 file changed, 34 insertions(+), 89 deletions(-) diff --git a/Medium/Design Circular Deque.java b/Medium/Design Circular Deque.java index 38b8650c..56c261e5 100644 --- a/Medium/Design Circular Deque.java +++ b/Medium/Design Circular Deque.java @@ -1,117 +1,62 @@ -class MyCircularDeque { - DequeNode head; - DequeNode tail; - int k; - int currCapacity; +class MyCircularQueue { + private int[] queue; + private int valueCursor; + private int emptyCursor; - /** Initialize your data structure here. Set the size of the deque to be k. */ - public MyCircularDeque(int k) { - currCapacity = 0; - this.k = k; - head = new DequeNode(-1); - tail = new DequeNode(-1); - head.front = tail; - tail.back = head; + public MyCircularQueue(int k) { + this.queue = new int[k]; + Arrays.fill(queue, -1); + this.emptyCursor = 0; + this.valueCursor = 0; } - /** Adds an item at the front of Deque. Return true if the operation is successful. */ - public boolean insertFront(int value) { - if (isFull()) { + public boolean enQueue(int value) { + if (this.queue[this.emptyCursor] != -1) { return false; } - DequeNode node = new DequeNode(value); - node.front = head.front; - head.front.back = node; - node.back = head; - head.front = node; - currCapacity++; - return true; - } - - /** Adds an item at the rear of Deque. Return true if the operation is successful. */ - public boolean insertLast(int value) { - if (isFull()) { - return false; + this.queue[this.emptyCursor++] = value; + if (this.emptyCursor == this.queue.length) { + this.emptyCursor = 0; } - DequeNode node = new DequeNode(value); - node.front = tail; - node.back = tail.back; - tail.back.front = node; - tail.back = node; - currCapacity++; return true; } - /** Deletes an item from the front of Deque. Return true if the operation is successful. */ - public boolean deleteFront() { - if (isEmpty()) { + public boolean deQueue() { + if (this.queue[this.valueCursor] == -1) { return false; } - DequeNode next = head.front.front; - head.front = next; - next.back = head; - currCapacity--; - return true; - } - - /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ - public boolean deleteLast() { - if (isEmpty()) { - return false; + this.queue[this.valueCursor++] = -1; + if (this.valueCursor == this.queue.length) { + this.valueCursor = 0; } - DequeNode prev = tail.back.back; - tail.back = prev; - prev.front = tail; - currCapacity--; return true; } - /** Get the front item from the deque. */ - public int getFront() { - if (isEmpty()) { - return -1; - } - return head.front.val; + public int Front() { + return this.queue[this.valueCursor]; } - /** Get the last item from the deque. */ - public int getRear() { - if (isEmpty()) { - return -1; - } - return tail.back.val; + public int Rear() { + int idx = this.emptyCursor == 0 ? this.queue.length - 1 : this.emptyCursor - 1; + return this.queue[idx]; } - /** Checks whether the circular deque is empty or not. */ public boolean isEmpty() { - return currCapacity == 0; + return this.queue[this.valueCursor] == -1; } - /** Checks whether the circular deque is full or not. */ public boolean isFull() { - return currCapacity == k; - } -} - -class DequeNode { - int val; - DequeNode front; - DequeNode back; - - public DequeNode(int val) { - this.val = val; + return this.queue[this.emptyCursor] != -1; } } /** - * Your MyCircularDeque object will be instantiated and called as such: - * MyCircularDeque obj = new MyCircularDeque(k); - * boolean param_1 = obj.insertFront(value); - * boolean param_2 = obj.insertLast(value); - * boolean param_3 = obj.deleteFront(); - * boolean param_4 = obj.deleteLast(); - * int param_5 = obj.getFront(); - * int param_6 = obj.getRear(); - * boolean param_7 = obj.isEmpty(); - * boolean param_8 = obj.isFull(); + * Your MyCircularQueue object will be instantiated and called as such: + * MyCircularQueue obj = new MyCircularQueue(k); + * boolean param_1 = obj.enQueue(value); + * boolean param_2 = obj.deQueue(); + * int param_3 = obj.Front(); + * int param_4 = obj.Rear(); + * boolean param_5 = obj.isEmpty(); + * boolean param_6 = obj.isFull(); */ From 4a5ebc891d07a8a959f93a71bd11855b75483bf6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 17 Jun 2022 13:24:16 -0700 Subject: [PATCH 0546/1640] Update Web Crawler.java --- Medium/Web Crawler.java | 42 +++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/Medium/Web Crawler.java b/Medium/Web Crawler.java index 2eafccb7..57737330 100644 --- a/Medium/Web Crawler.java +++ b/Medium/Web Crawler.java @@ -5,27 +5,29 @@ * public List getUrls(String url) {} * } */ + class Solution { - public List crawl(String startUrl, HtmlParser htmlParser) { - Set visited = new HashSet<>(); - Stack stack = new Stack<>(); - stack.push(startUrl); - String hostname = getHostname(startUrl); - while(!stack.isEmpty()) { - String popped = stack.pop(); - visited.add(popped); - List connectedUrls = htmlParser.getUrls(popped); - for (String url : connectedUrls) { - if (!visited.contains(url) && url.contains(hostname)) { - stack.push(url); - } - } + public List crawl(String startUrl, HtmlParser htmlParser) { + int startIdx = startUrl.indexOf("//") + 2; + int endIdx = startUrl.indexOf("/", startIdx) == -1 ? startUrl.length() : startUrl.indexOf("/", startIdx); + String domain = startUrl.substring(0, endIdx); + Set visitedUrls = new HashSet<>(); + Queue queue = new LinkedList<>(); + queue.add(startUrl); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + String removed = queue.remove(); + visitedUrls.add(removed); + List urls = htmlParser.getUrls(removed); + for (String url : urls) { + if (url.startsWith(domain) && !visitedUrls.contains(url)) { + visitedUrls.add(url); + queue.add(url); + } } - return new ArrayList<>(visited); - } - - private String getHostname(String url) { - String[] splits = url.split("/"); - return splits[2]; + } } + return new ArrayList<>(visitedUrls); + } } From 069f1dce059f9a382b57a0da69ddafd79f26a4db Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 17 Jun 2022 15:41:49 -0700 Subject: [PATCH 0547/1640] Update Graph Valid Tree.java --- Medium/Graph Valid Tree.java | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/Medium/Graph Valid Tree.java b/Medium/Graph Valid Tree.java index 1c4aaa48..658608a4 100644 --- a/Medium/Graph Valid Tree.java +++ b/Medium/Graph Valid Tree.java @@ -1,19 +1,27 @@ class Solution { public boolean validTree(int n, int[][] edges) { - int[] nums = new int[n]; - Arrays.fill(nums, -1); + Map> map = new HashMap<>(); for (int[] edge : edges) { - int rootOne = find(nums, edge[0]); - int rootTwo = find(nums, edge[1]); - if (rootOne == rootTwo) { - return false; + map.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); + map.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); + } + Map parent = new HashMap<>(); + parent.put(0, -1); + Stack stack = new Stack<>(); + stack.push(0); + while (!stack.isEmpty()) { + int node = stack.pop(); + for (int neighbor : map.getOrDefault(node, new HashSet<>())) { + if (parent.get(node) == neighbor) { + continue; + } + if (parent.containsKey(neighbor)) { + return false; + } + stack.push(neighbor); + parent.put(neighbor, node); } - nums[rootOne] = rootTwo; } - return edges.length == n - 1; - } - - private int find(int[] nums, int n) { - return nums[n] == -1 ? n : find(nums, nums[n]); + return parent.size() == n; } } From 350df3288cabeec3ed602f8b0b5d140f79ae4691 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Jun 2022 08:29:19 -0700 Subject: [PATCH 0548/1640] Update Prefix and Suffix Search.java --- Hard/Prefix and Suffix Search.java | 75 ++++++++++++------------------ 1 file changed, 31 insertions(+), 44 deletions(-) diff --git a/Hard/Prefix and Suffix Search.java b/Hard/Prefix and Suffix Search.java index 4a791c66..e7778aff 100644 --- a/Hard/Prefix and Suffix Search.java +++ b/Hard/Prefix and Suffix Search.java @@ -1,61 +1,48 @@ class WordFilter { - Node root; - Map weightMap; + private TrieNode root; + public WordFilter(String[] words) { - root = new Node('-'); - weightMap = new HashMap<>(); + this.root = new TrieNode(); for (int i = 0; i < words.length; i++) { - root.words.add(words[i]); - addWord(words[i], 0, root); - weightMap.put(words[i], i); - } - } - - private void addWord(String word, int idx, Node curr) { - if (idx == word.length()) { - return; + indexWord(words[i], i); } - char c = word.charAt(idx); - if (!curr.children.containsKey(c)) { - curr.children.put(c, new Node(c)); - } - curr = curr.children.get(c); - curr.words.add(word); - addWord(word, idx + 1, curr); } public int f(String prefix, String suffix) { - Node curr = root; - if (prefix.length() != 0) { - for (char c : prefix.toCharArray()) { - if (!curr.children.containsKey(c)) { - return -1; - } - curr = curr.children.get(c); + TrieNode curr = root; + for (char c : (suffix + "{" + prefix).toCharArray()) { + if (curr.children[c - 'a'] == null) { + return -1; } + curr = curr.children[c - 'a']; } - int ans = -1; - for (String word : curr.words) { - if (suffix.length() == 0 || word.endsWith(suffix)) { - ans = Math.max(ans, weightMap.get(word)); + return curr.maxIdx; + } + + private void indexWord(String word, int idx) { + for (int i = word.length() - 1; i >= 0; i--) { + String suffixAndPrefix = word.substring(i, word.length()) + "{" + word; + TrieNode curr = root; + for (char c : suffixAndPrefix.toCharArray()) { + if (curr.children[c - 'a'] == null) { + curr.children[c - 'a'] = new TrieNode(); + } + curr = curr.children[c - 'a']; + curr.maxIdx = idx; } } - return ans; } -} - - -class Node { - char c; - Map children; - Set words; - public Node(char c) { - this.c = c; - children = new HashMap<>(); - words = new HashSet<>(); - } + + private class TrieNode { + TrieNode[] children; + int maxIdx; + public TrieNode() { + this.children = new TrieNode[27]; + this.maxIdx = 0; + } + } } /** From eb856abb2efd3419d527e7cf9d4971658e311527 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Jun 2022 16:50:40 -0700 Subject: [PATCH 0549/1640] Update Isomorphic Strings.java --- Easy/Isomorphic Strings.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Easy/Isomorphic Strings.java b/Easy/Isomorphic Strings.java index 365f4ce6..6b870650 100644 --- a/Easy/Isomorphic Strings.java +++ b/Easy/Isomorphic Strings.java @@ -1,10 +1,12 @@ class Solution { - public boolean isIsomorphic(String s1, String s2) { - int[] m = new int[512]; - for (int i = 0; i < s1.length(); i++) { - if (m[s1.charAt(i)] != m[s2.charAt(i)+256]) return false; - m[s1.charAt(i)] = m[s2.charAt(i)+256] = i+1; - } - return true; + public boolean isIsomorphic(String s, String t) { + int[] position = new int[512]; + for (int i = 0; i < s.length(); i++) { + if (position[s.charAt(i)] != position[t.charAt(i) + 256]) { + return false; + } + position[s.charAt(i)] = position[t.charAt(i) + 256] = i + 1; } + return true; + } } From c198cb91f5fe6bd60306de3c8023031de4c7d280 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Jun 2022 17:02:00 -0700 Subject: [PATCH 0550/1640] Update Maximum Average Subarray I.java --- Easy/Maximum Average Subarray I.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Easy/Maximum Average Subarray I.java b/Easy/Maximum Average Subarray I.java index 7ac37a5c..bdd6206e 100644 --- a/Easy/Maximum Average Subarray I.java +++ b/Easy/Maximum Average Subarray I.java @@ -1,17 +1,15 @@ class Solution { public double findMaxAverage(int[] nums, int k) { - Double max = null; double sum = 0; - for (int i = 0; i < k - 1; i++) { + for (int i = 0; i < k; i++) { sum += nums[i]; } - int start = 0; - for (int i = k - 1; i < nums.length; i++) { + double maxAverage = sum / k; + for (int i = k; i < nums.length; i++) { + sum -= nums[i - k]; sum += nums[i]; - double avg = sum / k; - max = max == null ? avg : Math.max(max, avg); - sum -= nums[start++]; + maxAverage = Math.max(maxAverage, sum / k); } - return max; + return maxAverage; } } From 9b695de4fbe2996adb94623cd6b934bb28624eb5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Jun 2022 17:06:46 -0700 Subject: [PATCH 0551/1640] Update Contains Duplicate II.java --- Easy/Contains Duplicate II.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Easy/Contains Duplicate II.java b/Easy/Contains Duplicate II.java index 579e6ae4..1200875f 100644 --- a/Easy/Contains Duplicate II.java +++ b/Easy/Contains Duplicate II.java @@ -1,14 +1,12 @@ class Solution { - public boolean containsNearbyDuplicate(int[] nums, int k) { - Map map = new HashMap<>(); - for (int i=0;i map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + if (map.containsKey(nums[i]) && Math.abs(map.get(nums[i]) - i) <= k) { + return true; + } + map.put(nums[i], i); } + return false; + } } From 2ec2fe2c41715a80e114d7ebcb12c37dfed557b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Jun 2022 07:27:24 -0700 Subject: [PATCH 0552/1640] Update Search Suggestions System.java --- Medium/Search Suggestions System.java | 81 +++++++++++---------------- 1 file changed, 34 insertions(+), 47 deletions(-) diff --git a/Medium/Search Suggestions System.java b/Medium/Search Suggestions System.java index 465bde7f..47458964 100644 --- a/Medium/Search Suggestions System.java +++ b/Medium/Search Suggestions System.java @@ -1,59 +1,46 @@ class Solution { public List> suggestedProducts(String[] products, String searchWord) { - Node root = new Node('-'); - for (String product : products) { - addProduct(product, root); + TrieNode root = new TrieNode(); + for (String prod : products) { + TrieNode curr = root; + for (char c : prod.toCharArray()) { + if (curr.children[c - 'a'] == null) { + curr.children[c - 'a'] = new TrieNode(); + } + curr = curr.children[c - 'a']; + curr.matchingProducts.add(prod); + } } - List> list = new ArrayList<>(); - Node curr = root; - boolean notFound = false; + List> result = new ArrayList<>(); + TrieNode curr = root; for (char c : searchWord.toCharArray()) { - if (notFound) { - list.add(new ArrayList<>()); - } - else { - if (!curr.children.containsKey(c)) { - notFound = true; - list.add(new ArrayList<>()); - continue; + if (curr == null) { + result.add(new ArrayList<>()); + } else { + if (curr.children[c - 'a'] == null) { + curr = null; + result.add(new ArrayList<>()); + } else { + curr = curr.children[c - 'a']; + PriorityQueue currMatchingProductsQueue = new PriorityQueue<>(curr.matchingProducts); + List currMatchingProducts = new ArrayList<>(); + while (!currMatchingProductsQueue.isEmpty() && currMatchingProducts.size() < 3) { + currMatchingProducts.add(currMatchingProductsQueue.poll()); + } + result.add(currMatchingProducts); } - curr = curr.children.get(c); - List temp = new ArrayList<>(); - PriorityQueue words = new PriorityQueue<>(curr.possibleWords); - for (int i = 0; i < 3 && !words.isEmpty(); i++) { - temp.add(words.poll()); - } - Collections.reverse(temp); - list.add(temp); } } - return list; + return result; } - private void addProduct(String product, Node root) { - Node curr = root; - for (int i = 0; i < product.length(); i++) { - if (!curr.children.containsKey(product.charAt(i))) { - curr.children.put(product.charAt(i), new Node(product.charAt(i))); - } - curr = curr.children.get(product.charAt(i)); - curr.possibleWords.add(product); - if (curr.possibleWords.size() > 3) { - curr.possibleWords.poll(); - } + private class TrieNode { + TrieNode[] children; + PriorityQueue matchingProducts; + + public TrieNode() { + this.children = new TrieNode[26]; + this.matchingProducts = new PriorityQueue<>(); } } } - - -class Node { - char c; - Map children; - PriorityQueue possibleWords; - - public Node(char c) { - this.c = c; - children = new HashMap<>(); - possibleWords = new PriorityQueue<>(Comparator.reverseOrder()); - } -} From 512ec56b999c035cfb89a11a08655b1fe9b76b13 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Jun 2022 07:57:59 -0700 Subject: [PATCH 0553/1640] Create Greatest English Letter in Upper and Lower Case.java --- ...nglish Letter in Upper and Lower Case.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Greatest English Letter in Upper and Lower Case.java diff --git a/Easy/Greatest English Letter in Upper and Lower Case.java b/Easy/Greatest English Letter in Upper and Lower Case.java new file mode 100644 index 00000000..2b7028ad --- /dev/null +++ b/Easy/Greatest English Letter in Upper and Lower Case.java @@ -0,0 +1,19 @@ +class Solution { + public String greatestLetter(String s) { + boolean[] upperCasePresent = new boolean[26]; + boolean[] lowerCasePresent = new boolean[26]; + for (char c : s.toCharArray()) { + if (Character.isUpperCase(c)) { + upperCasePresent[c - 'A'] = true; + } else { + lowerCasePresent[c - 'a'] = true; + } + } + for (int i = 25; i >= 0; i--) { + if (upperCasePresent[i] && lowerCasePresent[i]) { + return String.valueOf((char) ('A' + i)); + } + } + return ""; + } +} From 3ab4d8f06e9b4c95a504ad76970b929aab7cd8f9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Jun 2022 08:11:00 -0700 Subject: [PATCH 0554/1640] Create Short Encoding of Words.java --- Medium/Short Encoding of Words.java | 34 +++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Medium/Short Encoding of Words.java diff --git a/Medium/Short Encoding of Words.java b/Medium/Short Encoding of Words.java new file mode 100644 index 00000000..6eccb589 --- /dev/null +++ b/Medium/Short Encoding of Words.java @@ -0,0 +1,34 @@ +class Solution { + public int minimumLengthEncoding(String[] words) { + TrieNode root = new TrieNode(); + Map nodes = new HashMap<>(); + for (int i = 0; i < words.length; i++) { + TrieNode curr = root; + for (int j = words[i].length() - 1; j >= 0; j--) { + if (curr.children[words[i].charAt(j) - 'a'] == null) { + curr.children[words[i].charAt(j) - 'a'] = new TrieNode(); + curr.count++; + } + curr = curr.children[words[i].charAt(j) - 'a']; + } + nodes.put(curr, i); + } + int result = 0; + for (TrieNode node : nodes.keySet()) { + if (node.count == 0) { + result += words[nodes.get(node)].length() + 1; + } + } + return result; + } + + private class TrieNode { + TrieNode[] children; + int count; + + public TrieNode() { + this.children = new TrieNode[26]; + this.count = 0; + } + } +} From 721d2db97984a92e4226c21da89588f9c594dee1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Jun 2022 13:54:18 -0700 Subject: [PATCH 0555/1640] Update Multiply Strings.java --- Medium/Multiply Strings.java | 41 +++++++++++++++++------------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/Medium/Multiply Strings.java b/Medium/Multiply Strings.java index fed474ad..7222ae47 100644 --- a/Medium/Multiply Strings.java +++ b/Medium/Multiply Strings.java @@ -1,33 +1,30 @@ class Solution { - public String multiply(String num1, String num2) { - int[] result = new int[num1.length() + num2.length() + 1]; - int idx = result.length - 1; - for (int i = num1.length() - 1; i >= 0; i--) { - int currIdx = idx; + public String multiply(String num1, String num2) { + int m = num1.length(); + int n = num2.length(); + int[] result = new int[m + n]; + int endIdx = m + n - 1; + for (int i = m - 1; i >= 0; i--) { + int resultIdx = endIdx; int carry = 0; - for (int j = num2.length() - 1; j >= 0; j--) { - int currValue = - carry + Character.getNumericValue(num1.charAt(i)) * Character.getNumericValue( - num2.charAt(j)) + result[currIdx]; + for (int j = n - 1; j >= 0; j--) { + int currValue = result[resultIdx] + carry + Character.getNumericValue(num1.charAt(i)) * Character.getNumericValue(num2.charAt(j)); carry = currValue / 10; - currValue = currValue % 10; - result[currIdx--] = currValue; + result[resultIdx--] = currValue % 10; } while (carry > 0) { - int currValue = carry + result[currIdx]; - carry = currValue / 10; - currValue = currValue % 10; - result[currIdx--] = currValue; + result[resultIdx--] = carry % 10; + carry /= 10; } - idx--; + endIdx--; } - StringBuilder sb = new StringBuilder(); - int resultIdx = 0; - while (resultIdx < result.length && result[resultIdx] == 0) { - resultIdx++; + int idx = 0; + while (idx < result.length && result[idx] == 0) { + idx++; } - while (resultIdx < result.length) { - sb.append(result[resultIdx++]); + StringBuilder sb = new StringBuilder(); + for (int i = idx; i < result.length; i++) { + sb.append(result[i]); } return sb.length() == 0 ? "0" : sb.toString(); } From 61c10eaaae1f63440498fb531f568f7400c45046 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Jun 2022 16:39:59 -0700 Subject: [PATCH 0556/1640] Update Word Search.java --- Medium/Word Search.java | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Medium/Word Search.java b/Medium/Word Search.java index 6eb6993c..b5dc90c4 100644 --- a/Medium/Word Search.java +++ b/Medium/Word Search.java @@ -1,34 +1,34 @@ class Solution { - public static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + private final int[][] DIRS = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}}; public boolean exist(char[][] board, String word) { - char[] letters = word.toCharArray(); + int m = board.length; + int n = board[0].length; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { - if (dfs(board, 0, letters, i, j)) { + if (found(board, i, j, word, 0, m, n)) { return true; } } } return false; } - - private boolean dfs(char[][] board, int idx, char[] letters, int i, int j) { - if (idx == letters.length) { + + private boolean found(char[][] board, int x, int y, String word, int idx, int m, int n) { + if (idx == word.length()) { return true; } - if (i < 0 || i >= board.length || j < 0 || j >= board[0].length) { - return false; - } - if (board[i][j] != letters[idx]) { + if (x < 0 || x == m || y < 0 || y == n || board[x][y] != word.charAt(idx)) { return false; } - board[i][j] ^= 256; - boolean exists = false; + board[x][y] = '#'; for (int[] dir : DIRS) { - exists = exists || dfs(board, idx + 1, letters, i + dir[0], j + dir[1]); + if (found(board, x + dir[0], y + dir[1], word, idx + 1, m, n)) { + return true; + } } - board[i][j] ^= 256; - return exists; + board[x][y] = word.charAt(idx); + return false; } } From acfe301c8ad6c582733047481b6ffcba5f8ece6f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Jun 2022 17:27:44 -0700 Subject: [PATCH 0557/1640] Create Furthest Building You Can Reach.java --- Medium/Furthest Building You Can Reach.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Furthest Building You Can Reach.java diff --git a/Medium/Furthest Building You Can Reach.java b/Medium/Furthest Building You Can Reach.java new file mode 100644 index 00000000..2c901072 --- /dev/null +++ b/Medium/Furthest Building You Can Reach.java @@ -0,0 +1,18 @@ +class Solution { + public int furthestBuilding(int[] heights, int bricks, int ladders) { + PriorityQueue pq = new PriorityQueue<>(); + for (int i = 1; i < heights.length; i++) { + int diff = heights[i] - heights[i - 1]; + if (diff > 0) { + pq.add(diff); + if (pq.size() > ladders) { + bricks -= pq.poll(); + } + if (bricks < 0) { + return i - 1; + } + } + } + return heights.length - 1; + } +} From 869604b17775b4c4f3da44652eb948a0ac6a694f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 21 Jun 2022 14:33:24 -0700 Subject: [PATCH 0558/1640] Update Letter Combinations of a Phone Number.java --- ...Letter Combinations of a Phone Number.java | 44 +++++++------------ 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/Medium/Letter Combinations of a Phone Number.java b/Medium/Letter Combinations of a Phone Number.java index 81be5ec2..2c3a8c23 100644 --- a/Medium/Letter Combinations of a Phone Number.java +++ b/Medium/Letter Combinations of a Phone Number.java @@ -1,35 +1,25 @@ class Solution { + + private final List LETTER_MAPPING = Arrays.asList("abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"); + public List letterCombinations(String digits) { - if (digits.length() == 0) { - return new ArrayList<>(); - } - String[] strs = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; - Map map = new HashMap<>(); - for (int i = 2; i <= 9; i++) { - map.put(i, strs[i - 2]); - } - List list = new ArrayList<>(); - helper(digits, 0, digits.length(), new StringBuilder(), map, list); - return list; + List result = new ArrayList<>(); + helper(digits, 0, new StringBuilder(), result); + return result; } - private void helper( - String digits, int idx, int n, StringBuilder sb, Map map, List list - ) { - if (idx == n) { - if (sb.length() == n) { - list.add(sb.toString()); - } - } - else { - for (int i = idx; i < n; i++) { - int digit = Character.getNumericValue(digits.charAt(i)); - for (char c : map.get(digit).toCharArray()) { - sb.append(c); - helper(digits, i + 1, n, sb, map, list); - sb.deleteCharAt(sb.length() - 1); - } + private void helper(String digits, int idx, StringBuilder sb, List result) { + if (idx == digits.length()) { + if (sb.length() > 0) { + result.add(new String(sb.toString())); } + return; + } + int mappingIdx = Character.getNumericValue(digits.charAt(idx)) - 2; + for (char c : LETTER_MAPPING.get(mappingIdx).toCharArray()) { + sb.append(c); + helper(digits, idx + 1, sb, result); + sb.deleteCharAt(sb.length() - 1); } } } From b3308b6871230a329fa18a19a7592614129dbb62 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 21 Jun 2022 16:00:08 -0700 Subject: [PATCH 0559/1640] Update Insert Delete GetRandom O(1).java --- Medium/Insert Delete GetRandom O(1).java | 38 +++++++++++------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/Medium/Insert Delete GetRandom O(1).java b/Medium/Insert Delete GetRandom O(1).java index 1149d866..3b9b44ae 100644 --- a/Medium/Insert Delete GetRandom O(1).java +++ b/Medium/Insert Delete GetRandom O(1).java @@ -1,41 +1,39 @@ class RandomizedSet { - /** Initialize your data structure here. */ - Map map; - List list; + private List randomizedSet; + private Map indexMap; + private int currSize; + public RandomizedSet() { - map = new HashMap<>(); - list = new ArrayList<>(); + this.randomizedSet = new ArrayList<>(); + this.indexMap = new HashMap<>(); + this.currSize = 0; } - /** Inserts a value to the set. Returns true if the set did not already contain the specified element. */ public boolean insert(int val) { - if (map.containsKey(val)) { + if (this.indexMap.containsKey(val)) { return false; } - list.add(val); - map.put(val, list.size() - 1); + this.randomizedSet.add(val); + this.indexMap.put(val, this.currSize++); return true; } - /** Removes a value from the set. Returns true if the set contained the specified element. */ public boolean remove(int val) { - if (!map.containsKey(val)) { + if (!this.indexMap.containsKey(val)) { return false; } - int idx = map.get(val); - int lastIdx = list.size() - 1; - list.set(idx, list.get(lastIdx)); - map.put(list.get(lastIdx), idx); - map.remove(val); - list.remove(lastIdx); + int valIdx = this.indexMap.get(val); + this.indexMap.put(this.randomizedSet.get(this.currSize - 1), valIdx); + this.randomizedSet.set(valIdx, this.randomizedSet.get(this.currSize - 1)); + this.randomizedSet.remove(this.currSize - 1); + this.indexMap.remove(val); + this.currSize--; return true; } - /** Get a random element from the set. */ public int getRandom() { - int idx = new Random().nextInt(list.size()); - return list.get(idx); + return this.randomizedSet.get(new Random().nextInt(this.currSize)); } } From 7d7cdea03e27c99d545682c0959fc4b62cd44482 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 21 Jun 2022 20:35:15 -0700 Subject: [PATCH 0560/1640] Update Kth Largest Element in an Array.java --- Medium/Kth Largest Element in an Array.java | 28 ++++++++------------- 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/Medium/Kth Largest Element in an Array.java b/Medium/Kth Largest Element in an Array.java index cc2f716c..c45d1f68 100644 --- a/Medium/Kth Largest Element in an Array.java +++ b/Medium/Kth Largest Element in an Array.java @@ -1,24 +1,16 @@ class Solution { public int findKthLargest(int[] nums, int k) { - return quickSelect(nums, 0, nums.length - 1, nums.length - k); - } - - private int quickSelect(int[] nums, int leftIdx, int rightIdx, int k) { - int pivot = nums[rightIdx]; - int idx = leftIdx; - for (int i = leftIdx; i < rightIdx; i++) { - if (nums[i] <= pivot) { - swap(nums, i, idx); - idx++; + int[] counter = new int[20001]; + for (int num : nums) { + counter[num + 10000]++; + } + for (int i = counter.length - 1; i >= 0; i--) { + if (counter[i] < k) { + k -= counter[i]; + } else { + return i - 10000; } } - swap(nums, idx, rightIdx); - return idx == k ? nums[idx] : (idx > k ? quickSelect(nums, leftIdx, idx - 1, k) : quickSelect(nums, idx + 1, rightIdx, k)); - } - - private void swap(int[] nums, int idxOne, int idxTwo) { - int temp = nums[idxOne]; - nums[idxOne] = nums[idxTwo]; - nums[idxTwo] = temp; + return -1; } } From f105faf04c7f4c4fdbf00c085f32acaf30936626 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 22 Jun 2022 08:28:29 -0700 Subject: [PATCH 0561/1640] Update Check If Two String Arrays are Equivalent.java --- ...k If Two String Arrays are Equivalent.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/Easy/Check If Two String Arrays are Equivalent.java b/Easy/Check If Two String Arrays are Equivalent.java index bbf06fcf..70a73e1a 100644 --- a/Easy/Check If Two String Arrays are Equivalent.java +++ b/Easy/Check If Two String Arrays are Equivalent.java @@ -1,6 +1,27 @@ class Solution { public boolean arrayStringsAreEqual(String[] word1, String[] word2) { - return Arrays.stream(word1).reduce((a, b) -> a + b) - .equals(Arrays.stream(word2).reduce((a, b) -> a + b)); + int wordIdxOne = 0; + int wordIdxTwo = 0; + int idxOne = 0; + int idxTwo = 0; + while (wordIdxOne < word1.length && wordIdxTwo < word2.length) { + if (idxOne == word1[wordIdxOne].length() || idxTwo == word2[wordIdxTwo].length()) { + if (idxOne == word1[wordIdxOne].length()) { + wordIdxOne++; + idxOne = 0; + } + if (idxTwo == word2[wordIdxTwo].length()) { + wordIdxTwo++; + idxTwo = 0; + } + } else { + if (word1[wordIdxOne].charAt(idxOne) != word2[wordIdxTwo].charAt(idxTwo)) { + return false; + } + idxOne++; + idxTwo++; + } + } + return wordIdxOne == word1.length && wordIdxTwo == word2.length; } } From 2d1bdd632b320ac40665accd3787808c94edcf50 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 Jun 2022 06:01:26 -0700 Subject: [PATCH 0562/1640] Create Course Schedule III.java --- Hard/Course Schedule III.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Hard/Course Schedule III.java diff --git a/Hard/Course Schedule III.java b/Hard/Course Schedule III.java new file mode 100644 index 00000000..ceea807c --- /dev/null +++ b/Hard/Course Schedule III.java @@ -0,0 +1,17 @@ +class Solution { + public int scheduleCourse(int[][] courses) { + Arrays.sort(courses, (a, b) -> a[1] - b[1]); + PriorityQueue queue = new PriorityQueue<>((a, b) -> b - a); + int time = 0; + for (int[] course : courses) { + if (time + course[0] <= course[1]) { + queue.add(course[0]); + time += course[0]; + } else if (!queue.isEmpty() && queue.peek() > course[0]) { + time += course[0] - queue.poll(); + queue.add(course[0]); + } + } + return queue.size(); + } +} From 7ff9c52341fd4cf535f4940ec7bf2cd567d9434d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 Jun 2022 09:28:44 -0700 Subject: [PATCH 0563/1640] Update Move Zeroes.java --- Easy/Move Zeroes.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Easy/Move Zeroes.java b/Easy/Move Zeroes.java index 0406592c..acd2e2cb 100644 --- a/Easy/Move Zeroes.java +++ b/Easy/Move Zeroes.java @@ -1,17 +1,15 @@ class Solution { public void moveZeroes(int[] nums) { - int fast = 0; - int slow = 0; - int n = nums.length; - while (fast < n) { - if (nums[fast] != 0) { - nums[slow] = nums[fast]; - slow++; + int startIdx = 0; + int endIdx = 0; + while (endIdx < nums.length) { + if (nums[endIdx] != 0) { + nums[startIdx++] = nums[endIdx]; } - fast++; + endIdx++; } - while (slow < n) { - nums[slow++] = 0; + while (startIdx < nums.length) { + nums[startIdx++] = 0; } } } From 928f2ec1d3cc0e2ad8ffae681907ee5147f508b8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 24 Jun 2022 08:34:42 -0700 Subject: [PATCH 0564/1640] Create Construct Target Array With Multiple Sums.java --- ...truct Target Array With Multiple Sums.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Hard/Construct Target Array With Multiple Sums.java diff --git a/Hard/Construct Target Array With Multiple Sums.java b/Hard/Construct Target Array With Multiple Sums.java new file mode 100644 index 00000000..a8a71438 --- /dev/null +++ b/Hard/Construct Target Array With Multiple Sums.java @@ -0,0 +1,28 @@ +class Solution { + public boolean isPossible(int[] target) { + if (target.length == 1) { + return target[0] == 1; + } + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + int sum = 0; + for (int num : target) { + sum += num; + pq.add(num); + } + int n = target.length; + while (pq.peek() > 1) { + int largest = pq.poll(); + int remaining = sum - largest; + if (remaining == 1) { + return true; + } + int delta = largest % remaining; + if (delta == 0 || delta == largest) { + return false; + } + pq.add(delta); + sum = sum - largest + delta; + } + return true; + } +} From 4b5cfe4792db4c48655a262999d79e4cc8db3839 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 24 Jun 2022 09:19:06 -0700 Subject: [PATCH 0565/1640] Create Sum of Numbers With Units Digit K.java --- Medium/Sum of Numbers With Units Digit K.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Sum of Numbers With Units Digit K.java diff --git a/Medium/Sum of Numbers With Units Digit K.java b/Medium/Sum of Numbers With Units Digit K.java new file mode 100644 index 00000000..024b9dbf --- /dev/null +++ b/Medium/Sum of Numbers With Units Digit K.java @@ -0,0 +1,13 @@ +class Solution { + public int minimumNumbers(int num, int k) { + if (num == 0) { + return 0; + } + for (int i = 1; i * k <= num && i <= 10; i++) { + if (k * i % 10 == num % 10) { + return i; + } + } + return -1; + } +} From 9310448f007260511fb9681b7c764de4179de4d3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 24 Jun 2022 15:55:43 -0700 Subject: [PATCH 0566/1640] Update Slowest Key.java --- Easy/Slowest Key.java | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Easy/Slowest Key.java b/Easy/Slowest Key.java index 3e583542..e1c7f29f 100644 --- a/Easy/Slowest Key.java +++ b/Easy/Slowest Key.java @@ -1,18 +1,17 @@ class Solution { public char slowestKey(int[] releaseTimes, String keysPressed) { - int startTime = 0; - int maxPressedTime = 0; - char keyWithLongestTime = keysPressed.charAt(0); + int maxReleaseTime = 0; + int maxReleaseTimeIdx = 0; for (int i = 0; i < releaseTimes.length; i++) { - int totalTime = releaseTimes[i] - startTime; - if (maxPressedTime < totalTime) { - keyWithLongestTime = keysPressed.charAt(i); - maxPressedTime = totalTime; - } else if (maxPressedTime == totalTime && keyWithLongestTime < keysPressed.charAt(i)) { - keyWithLongestTime = keysPressed.charAt(i); + int idx = keysPressed.charAt(i) - 'a'; + int currReleaseTime = i == 0 ? releaseTimes[i] : (releaseTimes[i] - releaseTimes[i - 1]); + if (currReleaseTime > maxReleaseTime) { + maxReleaseTimeIdx = idx; + maxReleaseTime = currReleaseTime; + } else if (maxReleaseTime == currReleaseTime && maxReleaseTimeIdx < idx) { + maxReleaseTimeIdx = idx; } - startTime = releaseTimes[i]; } - return keyWithLongestTime; - } + return ((char) ('a' + maxReleaseTimeIdx)); + } } From 0579f408de00d485c2fddc9e03f51d8a361ad09b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 25 Jun 2022 08:10:28 -0700 Subject: [PATCH 0567/1640] Update and rename Easy/Non-decreasing Array.java to Medium/Non-decreasing Array.java --- Easy/Non-decreasing Array.java | 20 -------------------- Medium/Non-decreasing Array.java | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 20 deletions(-) delete mode 100644 Easy/Non-decreasing Array.java create mode 100644 Medium/Non-decreasing Array.java diff --git a/Easy/Non-decreasing Array.java b/Easy/Non-decreasing Array.java deleted file mode 100644 index e6ce5b01..00000000 --- a/Easy/Non-decreasing Array.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public boolean checkPossibility(int[] nums) { - Integer probIdx = null; - for (int i = 0; i < nums.length - 1; i++) { - if (nums[i] > nums[i + 1]) { - if (probIdx != null) { - return false; - } - probIdx = i; - } - } - return ( - probIdx == null || - probIdx == 0 || - probIdx == (nums.length - 2) || - nums[probIdx - 1] <= nums[probIdx + 1] || - nums[probIdx] <= nums[probIdx + 2] - ); - } -} diff --git a/Medium/Non-decreasing Array.java b/Medium/Non-decreasing Array.java new file mode 100644 index 00000000..489db551 --- /dev/null +++ b/Medium/Non-decreasing Array.java @@ -0,0 +1,19 @@ +class Solution { + public boolean checkPossibility(int[] nums) { + boolean mismatch = false; + for (int i = 1; i < nums.length; i++) { + if (nums[i - 1] > nums[i]) { + if (mismatch) { + return false; + } + if (i < 2 || nums[i - 2] <= nums[i]) { + nums[i - 1] = nums[i]; + } else { + nums[i] = nums[i - 1]; + } + mismatch = true; + } + } + return true; + } +} From 7f1f1bdfae78a008b2fd6e9f442b204a8a059fe2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 25 Jun 2022 10:50:37 -0700 Subject: [PATCH 0568/1640] Create Count Asterisks.java --- Easy/Count Asterisks.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Count Asterisks.java diff --git a/Easy/Count Asterisks.java b/Easy/Count Asterisks.java new file mode 100644 index 00000000..14a53656 --- /dev/null +++ b/Easy/Count Asterisks.java @@ -0,0 +1,16 @@ +class Solution { + public int countAsterisks(String s) { + int asteriskCount = 0; + int barCount = 0; + for (char c : s.toCharArray()) { + if (c == '|') { + barCount++; + } else if (c == '*') { + if (barCount % 2 == 0) { + asteriskCount++; + } + } + } + return asteriskCount; + } +} From cbf463368fb880e28db3b2dc1a8b3878a0ec49bb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 25 Jun 2022 13:58:44 -0700 Subject: [PATCH 0569/1640] Create Count Unreachable Pairs of Nodes in an Undirected Graph.java --- ...Pairs of Nodes in an Undirected Graph.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java diff --git a/Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java b/Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java new file mode 100644 index 00000000..b8f9bb09 --- /dev/null +++ b/Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java @@ -0,0 +1,29 @@ +class Solution { + public long countPairs(int n, int[][] edges) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); + graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + } + long unreachableNodes = (((long) n) * (n - 1)) / 2; + boolean[] visited = new boolean[n]; + for (int i = 0; i < n; i++) { + if (!visited[i]) { + long[] reachCount = {0}; + dfs(graph, i, reachCount, visited); + unreachableNodes -= (reachCount[0] * (reachCount[0] - 1)) / 2; + } + } + return unreachableNodes; + } + + private void dfs(Map> graph, int node, long[] reachCount, boolean[] visited) { + visited[node] = true; + reachCount[0]++; + for (Integer conn : graph.getOrDefault(node, new ArrayList<>())) { + if (!visited[conn]) { + dfs(graph, conn, reachCount, visited); + } + } + } +} From fd70090594917916d177d34f611823a823a1e6d6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Jun 2022 14:08:14 -0700 Subject: [PATCH 0570/1640] Create Maximum Points You Can Obtain from Cards.java --- ...aximum Points You Can Obtain from Cards.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Maximum Points You Can Obtain from Cards.java diff --git a/Medium/Maximum Points You Can Obtain from Cards.java b/Medium/Maximum Points You Can Obtain from Cards.java new file mode 100644 index 00000000..b9648446 --- /dev/null +++ b/Medium/Maximum Points You Can Obtain from Cards.java @@ -0,0 +1,17 @@ +class Solution { + public int maxScore(int[] cardPoints, int k) { + int n = cardPoints.length; + int[] prefixSum = new int[k + 1]; + int[] suffixSum = new int[k + 1]; + for (int i = 0; i < k; i++) { + prefixSum[i + 1] = cardPoints[i] + prefixSum[i]; + suffixSum[i + 1] = cardPoints[n - i - 1] + suffixSum[i]; + } + int result = 0; + for (int i = 0; i <= k; i++) { + int currScore = prefixSum[i] + suffixSum[k - i]; + result = Math.max(result, currScore); + } + return result; + } +} From dab0bccbc3bc49bdd002195455f7d5f5fd97bb17 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Jun 2022 14:13:17 -0700 Subject: [PATCH 0571/1640] Create Check if Matrix Is X-Matrix.java --- Easy/Check if Matrix Is X-Matrix.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Check if Matrix Is X-Matrix.java diff --git a/Easy/Check if Matrix Is X-Matrix.java b/Easy/Check if Matrix Is X-Matrix.java new file mode 100644 index 00000000..34bc31af --- /dev/null +++ b/Easy/Check if Matrix Is X-Matrix.java @@ -0,0 +1,19 @@ +class Solution { + public boolean checkXMatrix(int[][] grid) { + int n = grid.length; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (i == j || i + j == n - 1) { + if (grid[i][j] == 0) { + return false; + } + } else { + if (grid[i][j] != 0) { + return false; + } + } + } + } + return true; + } +} From ed39e959d3cefbd0507f36fbe88c3f28f101fb9d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Jun 2022 18:56:20 -0700 Subject: [PATCH 0572/1640] Update Partitioning Into Minimum Number Of Deci-Binary Numbers.java --- ...ing Into Minimum Number Of Deci-Binary Numbers.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Medium/Partitioning Into Minimum Number Of Deci-Binary Numbers.java b/Medium/Partitioning Into Minimum Number Of Deci-Binary Numbers.java index 4ede9af8..4bd5953a 100644 --- a/Medium/Partitioning Into Minimum Number Of Deci-Binary Numbers.java +++ b/Medium/Partitioning Into Minimum Number Of Deci-Binary Numbers.java @@ -1,9 +1,9 @@ class Solution { public int minPartitions(String n) { - return n.chars() - .mapToObj(c -> (char) c) - .mapToInt(Character::getNumericValue) - .reduce(Integer::max) - .orElse(0); + int maxDigit = Character.getNumericValue(n.charAt(0)); + for (char c : n.toCharArray()) { + maxDigit = Math.max(maxDigit, Character.getNumericValue(c)); + } + return maxDigit; } } From b06bce438d3fb731d91ff9855ec555d43fc2a11b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 27 Jun 2022 17:14:40 -0700 Subject: [PATCH 0573/1640] Update Design Parking System.java --- Easy/Design Parking System.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Easy/Design Parking System.java b/Easy/Design Parking System.java index 6aa29a71..331e14fc 100644 --- a/Easy/Design Parking System.java +++ b/Easy/Design Parking System.java @@ -1,15 +1,12 @@ class ParkingSystem { - int[] slots; + + private int[] availableSpaces; public ParkingSystem(int big, int medium, int small) { - slots = new int[]{big, medium, small}; + this.availableSpaces = new int[]{big, medium, small}; } public boolean addCar(int carType) { - if (slots[carType - 1] == 0) { - return false; - } - slots[carType - 1]--; - return true; + return this.availableSpaces[carType - 1]-- > 0; } } From e2fd43957f4260c19c1185251ba55aecac143b41 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Jun 2022 09:59:54 -0700 Subject: [PATCH 0574/1640] Create Design an Expression Tree With Evaluate Function.java --- ...xpression Tree With Evaluate Function.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 Medium/Design an Expression Tree With Evaluate Function.java diff --git a/Medium/Design an Expression Tree With Evaluate Function.java b/Medium/Design an Expression Tree With Evaluate Function.java new file mode 100644 index 00000000..123e21df --- /dev/null +++ b/Medium/Design an Expression Tree With Evaluate Function.java @@ -0,0 +1,79 @@ +/** + * This is the interface for the expression tree Node. + * You should not remove it, and you can define some classes to implement it. + */ + +abstract class Node { + public abstract int evaluate(); + // define your fields here +}; + +class NumericNode extends Node { + + private int val; + + public NumericNode(int val) { + this.val = val; + } + + public int evaluate() { + return this.val; + } +} + +class OperatorNode extends Node { + private char operator; + private Node leftNode; + private Node rightNode; + + public OperatorNode(char operator, Node leftNode, Node rightNode) { + this.operator = operator; + this.leftNode = leftNode; + this.rightNode = rightNode; + } + + public int evaluate() { + int leftValue = this.leftNode == null ? 0 : this.leftNode.evaluate(); + int rightValue = this.rightNode == null ? 0 : this.rightNode.evaluate(); + if (this.operator == '+') { + return leftValue + rightValue; + } else if (this.operator == '-') { + return leftValue - rightValue; + } else if (this.operator == '*') { + return leftValue * rightValue; + } else { + return leftValue / rightValue; + } + } +} + + +/** + * This is the TreeBuilder class. + * You can treat it as the driver code that takes the postinfix input + * and returns the expression tree represnting it as a Node. + */ + +class TreeBuilder { + Node buildTree(String[] postfix) { + Stack stack = new Stack<>(); + for(String token: postfix){ + if (token.equals("*") || token.equals("+") || token.equals("-") || token.equals("/")) { + Node o2 = stack.pop(); + Node o1 = stack.pop(); + stack.push(new OperatorNode(token.charAt(0), o1, o2)); + } else{ + stack.push(new NumericNode(Integer.parseInt(token))); + } + } + return stack.pop(); + } +}; + + +/** + * Your TreeBuilder object will be instantiated and called as such: + * TreeBuilder obj = new TreeBuilder(); + * Node expTree = obj.buildTree(postfix); + * int ans = expTree.evaluate(); + */ From d75843b146d7ba714cb65117de2daddab5682897 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Jun 2022 12:57:03 -0700 Subject: [PATCH 0575/1640] Update Word Search II.java --- Hard/Word Search II.java | 92 ++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/Hard/Word Search II.java b/Hard/Word Search II.java index 729cf044..3e9ce51a 100644 --- a/Hard/Word Search II.java +++ b/Hard/Word Search II.java @@ -1,62 +1,60 @@ class Solution { - public List findWords(char[][] board, String[] words) { - List result = new ArrayList<>(); - TrieNode root = buildTrie(words); - for (int i = 0; i < board.length; i++) { - for (int j = 0; j < board[0].length; j++) { - dfs(board, i, j, result, root); - } - } - return result; - } - private TrieNode buildTrie(String[] words) { + private final int[][] DIRS = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}}; + + public List findWords(char[][] board, String[] words) { TrieNode root = new TrieNode(); for (String word : words) { - TrieNode temp = root; - for (char c : word.toCharArray()) { - if (temp.children[c - 'a'] == null) { - temp.children[c - 'a'] = new TrieNode(); + TrieNode node = root; + for (Character letter : word.toCharArray()) { + if (node.children.containsKey(letter)) { + node = node.children.get(letter); + } else { + TrieNode newNode = new TrieNode(); + node.children.put(letter, newNode); + node = newNode; } - temp = temp.children[c - 'a']; - } - temp.word = word; - } - return root; - } - - private void dfs(char[][] board, int i, int j, List result, TrieNode root) { - char c = board[i][j]; - if (c == '#' || root.children[c - 'a'] == null) { - return; + } + node.word = word; } - root = root.children[c - 'a']; - if (root.word != null) { - result.add(root.word); - root.word = null; + List result = new ArrayList<>(); + for (int row = 0; row < board.length; ++row) { + for (int col = 0; col < board[row].length; ++col) { + if (root.children.containsKey(board[row][col])) { + backtracking(row, col, root, result, board); + } + } } - board[i][j] = '#'; - triggerDfsIfValid(board, i, j, result, root); - board[i][j] = c; + return result; } - private void triggerDfsIfValid(char[][] board, int i, int j, List result, TrieNode root) { - if (i > 0) { - dfs(board, i - 1, j, result, root); - } - if (j > 0) { - dfs(board, i, j - 1, result, root); - } - if (i < board.length - 1) { - dfs(board, i + 1, j, result, root); + private void backtracking(int row, int col, TrieNode parent, List result, char[][] board) { + char letter = board[row][col]; + TrieNode currNode = parent.children.get(letter); + if (currNode.word != null) { + result.add(currNode.word); + currNode.word = null; + } + board[row][col] = '#'; + for (int[] dir : DIRS) { + int newRow = row + dir[0]; + int newCol = col + dir[1]; + if (newRow < 0 || newRow >= board.length || newCol < 0 || newCol >= board[0].length) { + continue; + } + if (currNode.children.containsKey(board[newRow][newCol])) { + backtracking(newRow, newCol, currNode, result, board); + } } - if (j < board[0].length - 1) { - dfs(board, i, j + 1, result, root); + board[row][col] = letter; + if (currNode.children.isEmpty()) { + parent.children.remove(letter); } } - class TrieNode { - TrieNode[] children = new TrieNode[26]; - String word; + private class TrieNode { + Map children = new HashMap(); + String word = null; + public TrieNode() {} } } From f62249b0ed2655e81f69269767d6484a7ee02467 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Jun 2022 14:16:48 -0700 Subject: [PATCH 0576/1640] Create Bomb Enemy.java --- Medium/Bomb Enemy.java | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Medium/Bomb Enemy.java diff --git a/Medium/Bomb Enemy.java b/Medium/Bomb Enemy.java new file mode 100644 index 00000000..c6259b7a --- /dev/null +++ b/Medium/Bomb Enemy.java @@ -0,0 +1,42 @@ +class Solution { + public int maxKilledEnemies(char[][] grid) { + if (grid.length == 0) { + return 0; + } + int rows = grid.length; + int cols = grid[0].length; + int maxCount = 0; + int rowHits = 0; + int[] colHits = new int[cols]; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (j == 0 || grid[i][j - 1] == 'W') { + rowHits = 0; + for (int k = j; k < cols; k++) { + if (grid[i][k] == 'W') { + break; + } + if (grid[i][k] == 'E') { + rowHits++; + } + } + } + if (i == 0 || grid[i - 1][j] == 'W') { + colHits[j] = 0; + for (int k = i; k < rows; k++) { + if (grid[k][j] == 'W') { + break; + } + if (grid[k][j] == 'E') { + colHits[j]++; + } + } + } + if (grid[i][j] == '0') { + maxCount = Math.max(maxCount, rowHits + colHits[j]); + } + } + } + return maxCount; + } +} From 70ca4faabcf03853b7435ac762a2fdb693df9146 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Jun 2022 14:51:09 -0700 Subject: [PATCH 0577/1640] Update Design Twitter.java --- Medium/Design Twitter.java | 126 +++++++++++++------------------------ 1 file changed, 45 insertions(+), 81 deletions(-) diff --git a/Medium/Design Twitter.java b/Medium/Design Twitter.java index cd5361e2..8009a1d6 100644 --- a/Medium/Design Twitter.java +++ b/Medium/Design Twitter.java @@ -1,105 +1,69 @@ -class Twitter { +import java.util.Map.Entry; + - /** Initialize your data structure here. */ - Map userMap; +class Twitter { - int tweetTimeStamp; + private final Map> userFollowing; + private final Map userToTweet; + private int timestamp; public Twitter() { - userMap = new HashMap<>(); - tweetTimeStamp = 0; + this.userFollowing = new HashMap<>(); + this.timestamp = 0; + this.userToTweet = new HashMap<>(); } - /** Compose a new tweet. */ public void postTweet(int userId, int tweetId) { - createUserIfNotExist(userId); - userMap.get(userId).addTweet(tweetId, tweetTimeStamp++); + TweetNode tweetNode = new TweetNode(tweetId, this.timestamp++); + if (this.userToTweet.containsKey(userId)) { + tweetNode.next = this.userToTweet.get(userId); + } + this.userToTweet.put(userId, tweetNode); } - /** - * Retrieve the 10 most recent tweet ids in the user's news feed. Each item in the news feed must - * be posted by users who the user followed or by the user herself. Tweets must be ordered from - * most recent to least recent. - */ public List getNewsFeed(int userId) { - createUserIfNotExist(userId); - List usersFollowed = - userMap.get(userId).following.stream() - .map(e -> userMap.get(e)) - .collect(Collectors.toList()); - return userMap.get(userId).getFeed(usersFollowed); + PriorityQueue priorityQueue = + new PriorityQueue<>((o1, o2) -> o2.timestamp - o1.timestamp); + priorityQueue.addAll( + this.userToTweet.entrySet().stream() + .filter( + entry -> + entry.getKey() == userId + || this.userFollowing + .getOrDefault(userId, new HashSet<>()) + .contains(entry.getKey())) + .map(Entry::getValue) + .collect(Collectors.toList())); + List result = new ArrayList<>(); + while (!priorityQueue.isEmpty() && result.size() < 10) { + TweetNode removed = priorityQueue.remove(); + result.add(removed.tweetId); + if (removed.next != null) { + priorityQueue.add(removed.next); + } + } + return result; } - /** Follower follows a followee. If the operation is invalid, it should be a no-op. */ public void follow(int followerId, int followeeId) { - if (followerId != followeeId) { - createUserIfNotExist(followerId); - createUserIfNotExist(followeeId); - userMap.get(followerId).following.add(followeeId); - } + this.userFollowing.computeIfAbsent(followerId, k -> new HashSet<>()).add(followeeId); } - /** Follower unfollows a followee. If the operation is invalid, it should be a no-op. */ public void unfollow(int followerId, int followeeId) { - if (followerId != followeeId) { - createUserIfNotExist(followerId); - createUserIfNotExist(followeeId); - userMap.get(followerId).following.remove(followeeId); + if (this.userFollowing.getOrDefault(followerId, new HashSet<>()).contains(followeeId)) { + this.userFollowing.get(followerId).remove(followeeId); } } - private void createUserIfNotExist(int userId) { - userMap.computeIfAbsent(userId, k -> new User(userId)); - } -} - -class User { - int id; - Set following; - PriorityQueue tweets; + private static class TweetNode { + int tweetId; + int timestamp; + TweetNode next; - public User(int id) { - this.id = id; - following = new HashSet<>(); - tweets = new PriorityQueue<>((t1, t2) -> t2.timestamp - t1.timestamp); - } - - public void addTweet(int tweetId, int timestamp) { - tweets.add(new Tweet(tweetId, timestamp)); - } - - public List getFeed(List usersFollowed) { - PriorityQueue> allTweets = - new PriorityQueue<>( - (t1, t2) -> { - if (t2.peek() != null) { - return t2.peek().timestamp - (t1.peek() != null ? t1.peek().timestamp : 0); - } - return 0; - }); - usersFollowed.add(this); - usersFollowed.stream() - .filter(user -> !user.tweets.isEmpty()) - .forEach(user -> allTweets.add(new PriorityQueue<>(user.tweets))); - List feed = new ArrayList<>(); - while (feed.size() < 10 && !allTweets.isEmpty()) { - PriorityQueue removed = allTweets.remove(); - feed.add(removed.poll().id); - if (!removed.isEmpty()) { - allTweets.add(removed); - } + public TweetNode(int tweetId, int timestamp) { + this.tweetId = tweetId; + this.timestamp = timestamp; } - return feed; - } -} - -class Tweet { - int id; - int timestamp; - - public Tweet(int id, int timestamp) { - this.id = id; - this.timestamp = timestamp; } } From 6d45f98925805f2440fc937acbc59628fc126327 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 29 Jun 2022 07:41:59 -0700 Subject: [PATCH 0578/1640] Create Put Boxes Into the Warehouse I.java --- Medium/Put Boxes Into the Warehouse I.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Put Boxes Into the Warehouse I.java diff --git a/Medium/Put Boxes Into the Warehouse I.java b/Medium/Put Boxes Into the Warehouse I.java new file mode 100644 index 00000000..3d8b4a59 --- /dev/null +++ b/Medium/Put Boxes Into the Warehouse I.java @@ -0,0 +1,15 @@ +class Solution { + public int maxBoxesInWarehouse(int[] boxes, int[] warehouse) { + Arrays.sort(boxes); + for (int i = 1; i < warehouse.length; i++) { + warehouse[i] = Math.min(warehouse[i - 1], warehouse[i]); + } + int count = 0; + for (int i = warehouse.length - 1; i >= 0; i--) { + if (count < boxes.length && boxes[count] <= warehouse[i]) { + count++; + } + } + return count; + } +} From f92d1d65c3f928f54e71cd8b2a782c42c2d422a6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 29 Jun 2022 08:14:22 -0700 Subject: [PATCH 0579/1640] Update Queue Reconstruction By Height.java --- Medium/Queue Reconstruction By Height.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/Medium/Queue Reconstruction By Height.java b/Medium/Queue Reconstruction By Height.java index 5314da67..4f422303 100644 --- a/Medium/Queue Reconstruction By Height.java +++ b/Medium/Queue Reconstruction By Height.java @@ -1,20 +1,11 @@ class Solution { public int[][] reconstructQueue(int[][] people) { - Arrays.sort(people, new Comparator(){ - public int compare(int[] o1, int[] o2) { - int c = o2[0] - o1[0]; - if (c != 0) { - return c; - } - return o1[1] - o2[1]; - } - }); - System.out.println(); - List list = new ArrayList<>(); + Arrays.sort(people, (o1, o2) -> o1[0] == o2[0] ? o1[1] - o2[1] : o2[0] - o1[0]); + List result = new ArrayList<>(); for (int[] p : people) { - list.add(p[1], p); + result.add(p[1], p); } int n = people.length; - return list.toArray(new int[n][2]); + return result.toArray(new int[n][2]); } } From 46a8666c3cd4655a265906c3c9e64b059d6ac3a9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 30 Jun 2022 07:06:14 -0700 Subject: [PATCH 0580/1640] Create Minimum Moves to Equal Array Elements.java --- Medium/Minimum Moves to Equal Array Elements.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Minimum Moves to Equal Array Elements.java diff --git a/Medium/Minimum Moves to Equal Array Elements.java b/Medium/Minimum Moves to Equal Array Elements.java new file mode 100644 index 00000000..78d30c6f --- /dev/null +++ b/Medium/Minimum Moves to Equal Array Elements.java @@ -0,0 +1,12 @@ +class Solution { + public int minMoves(int[] nums) { + Arrays.sort(nums); + int moves = 0; + for (int i = 1; i < nums.length; i++) { + int diff = (moves + nums[i]) - nums[i - 1]; + nums[i] += moves; + moves += diff; + } + return moves; + } +} From 1b560a3717110e10063de006448f86203e170463 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 30 Jun 2022 07:08:01 -0700 Subject: [PATCH 0581/1640] Update Minimum Moves to Equal Array Elements II.java --- ...imum Moves to Equal Array Elements II.java | 23 ++++++++----------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Medium/Minimum Moves to Equal Array Elements II.java b/Medium/Minimum Moves to Equal Array Elements II.java index 921078ed..1a0ac919 100644 --- a/Medium/Minimum Moves to Equal Array Elements II.java +++ b/Medium/Minimum Moves to Equal Array Elements II.java @@ -1,17 +1,12 @@ class Solution { - public int minMoves2(int[] nums) { - int i = 0; - int j = nums.length-1; - int c = 0; - - Arrays.sort(nums); - - while (i < j) { - c += nums[j] - nums[i]; - i++; - j--; - } - - return c; + public int minMoves2(int[] nums) { + Arrays.sort(nums); + int sum = 0; + int start = 0; + int end = nums.length - 1; + while (start < end) { + sum += nums[end--] - nums[start++]; } + return sum; + } } From 88e9cd40544458a99a26e873e67292ce3392f924 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 30 Jun 2022 07:52:14 -0700 Subject: [PATCH 0582/1640] Update Implement Trie (Prefix Tree).java --- Medium/Implement Trie (Prefix Tree).java | 60 +++++++++++------------- 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/Medium/Implement Trie (Prefix Tree).java b/Medium/Implement Trie (Prefix Tree).java index f5aaa30e..8df3049a 100644 --- a/Medium/Implement Trie (Prefix Tree).java +++ b/Medium/Implement Trie (Prefix Tree).java @@ -1,60 +1,56 @@ class Trie { - - TrieNode root; + + private TrieNode root; + public Trie() { - root = new TrieNode('-'); + this.root = new TrieNode(); } public void insert(String word) { - TrieNode node = root; - for (int i = 0; i < word.length(); i++) { - if (node.children[word.charAt(i) - 'a'] == null) { - node.children[word.charAt(i) - 'a'] = new TrieNode(word.charAt(i)); - } - node = node.children[word.charAt(i) - 'a']; - if (i == word.length() - 1) { - node.isWord = true; + TrieNode curr = root; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + curr.children.put(c, new TrieNode()); } + curr = curr.children.get(c); } + curr.isWord = true; } public boolean search(String word) { - TrieNode node = searchHelper(word); - return node != null && node.isWord; + TrieNode searchNode = searchHelper(word); + return searchNode != null && searchNode.isWord; } public boolean startsWith(String prefix) { return searchHelper(prefix) != null; } - private TrieNode searchHelper(String word) { - TrieNode node = root; - for (int i = 0; i < word.length(); i++) { - if (node.children[word.charAt(i) - 'a'] == null) { + private TrieNode searchHelper(String s) { + TrieNode curr = root; + for (char c : s.toCharArray()) { + if (!curr.children.containsKey(c)) { return null; } - node = node.children[word.charAt(i) - 'a']; + curr = curr.children.get(c); } - return node; + return curr; } - class TrieNode { - TrieNode[] children; + private class TrieNode { + Map children; boolean isWord; - char c; - public TrieNode(char c) { - this.c = c; - children = new TrieNode[26]; - isWord = false; + public TrieNode() { + this.children = new HashMap<>(); } } } /** - * Your Trie object will be instantiated and called as such: - * Trie obj = new Trie(); - * obj.insert(word); - * boolean param_2 = obj.search(word); - * boolean param_3 = obj.startsWith(prefix); - */ +* Your Trie object will be instantiated and called as such: +* Trie obj = new Trie(); +* obj.insert(word); +* boolean param_2 = obj.search(word); +* boolean param_3 = obj.startsWith(prefix); +*/ From ae12464c9a458e95939b1273527a2313a66fbc78 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 30 Jun 2022 07:56:33 -0700 Subject: [PATCH 0583/1640] Update Permutations.java --- Medium/Permutations.java | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/Medium/Permutations.java b/Medium/Permutations.java index f09beb5e..760b7452 100644 --- a/Medium/Permutations.java +++ b/Medium/Permutations.java @@ -1,25 +1,22 @@ class Solution { public List> permute(int[] nums) { - List> ans = new ArrayList <>(); - Set used = new HashSet <>(); - permuteHelper(nums, nums.length, ans, used, new ArrayList<>()); - return ans; + List> result = new ArrayList<>(); + helper(nums, result, new ArrayList<>(), new boolean[nums.length]); + return result; } - - private void permuteHelper(int[] nums, int length, List> ans, - Set used, ArrayList curr) { - if (curr.size() == length) { - ans.add(new ArrayList <>(curr)); - return; - } - - for (int i = 0; i < length; i++) { - if (!used.contains(nums[i])) { - used.add(nums[i]); - curr.add(nums[i]); - permuteHelper(nums, length, ans, used, curr); - used.remove(nums[i]); - curr.remove(curr.size() - 1); + + private void helper(int[] nums, List> result, List curr, boolean[] visited) { + if (curr.size() == nums.length) { + result.add(new ArrayList<>(curr)); + } else { + for (int i = 0; i < nums.length; i++) { + if (!visited[i]) { + visited[i] = true; + curr.add(nums[i]); + helper(nums, result, curr, visited); + visited[i] = false; + curr.remove(curr.size() - 1); + } } } } From 1a2857159c24727a8ac128e8a9cfe1ec42785012 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 30 Jun 2022 14:44:14 -0700 Subject: [PATCH 0584/1640] Update Sort Integers by The Number of 1 Bits.java --- Easy/Sort Integers by The Number of 1 Bits.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Easy/Sort Integers by The Number of 1 Bits.java b/Easy/Sort Integers by The Number of 1 Bits.java index d2fc14c3..4b1e7c2c 100644 --- a/Easy/Sort Integers by The Number of 1 Bits.java +++ b/Easy/Sort Integers by The Number of 1 Bits.java @@ -1,9 +1,8 @@ class Solution { public int[] sortByBits(int[] arr) { - return Arrays.stream(arr).boxed() + return Arrays.stream(arr) + .boxed() .sorted(Comparator.comparingInt(Integer::bitCount).thenComparingInt(o -> o)) - .collect(Collectors.toList()) - .stream() .mapToInt(Integer::intValue) .toArray(); } From e31c6a6ac1e055c1a376ded2218b31b2bd91c18a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Jul 2022 08:00:06 -0700 Subject: [PATCH 0585/1640] Update Length of last word.java --- Easy/Length of last word.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Easy/Length of last word.java b/Easy/Length of last word.java index 8768e506..a351538e 100644 --- a/Easy/Length of last word.java +++ b/Easy/Length of last word.java @@ -1,14 +1,13 @@ class Solution { public int lengthOfLastWord(String s) { - int count = 0; int idx = s.length() - 1; while (idx >= 0 && s.charAt(idx) == ' ') { idx--; } + int currIdx = idx; while (idx >= 0 && s.charAt(idx) != ' ') { idx--; - count++; } - return count; + return currIdx - idx; } } From dd55b2cad1276372f0c3f3d0ca0ca37eba1eab15 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Jul 2022 08:21:00 -0700 Subject: [PATCH 0586/1640] Update Remove Duplicates from Sorted Array.java --- Easy/Remove Duplicates from Sorted Array.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Easy/Remove Duplicates from Sorted Array.java b/Easy/Remove Duplicates from Sorted Array.java index 7349f2f2..7c285a36 100644 --- a/Easy/Remove Duplicates from Sorted Array.java +++ b/Easy/Remove Duplicates from Sorted Array.java @@ -1,15 +1,14 @@ class Solution { public int removeDuplicates(int[] nums) { - int start = 0; - int end = 0; - int n = nums.length; - while (end < n) { - int curr = nums[end]; - while (end < n && nums[end] == curr) { - end++; + int startIdx = 0; + int endIdx = 0; + while (endIdx < nums.length) { + int currValue = nums[endIdx]; + while (endIdx < nums.length && nums[endIdx] == currValue) { + endIdx++; } - nums[start++] = curr; + nums[startIdx++] = currValue; } - return start; + return startIdx; } } From c7d73da2e2b5fc1f430fd4a19d7e966c7ec53ee0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Jul 2022 08:45:05 -0700 Subject: [PATCH 0587/1640] Update N-ary Tree Postorder Traversal.java --- Easy/N-ary Tree Postorder Traversal.java | 47 ++++++++++-------------- 1 file changed, 20 insertions(+), 27 deletions(-) diff --git a/Easy/N-ary Tree Postorder Traversal.java b/Easy/N-ary Tree Postorder Traversal.java index d0ba1138..3807c509 100644 --- a/Easy/N-ary Tree Postorder Traversal.java +++ b/Easy/N-ary Tree Postorder Traversal.java @@ -6,38 +6,31 @@ class Node { public Node() {} - public Node(int _val,List _children) { + public Node(int _val) { + val = _val; + } + + public Node(int _val, List _children) { val = _val; children = _children; } }; */ -class Solution { - public List postorder(Node root) { - List values = new ArrayList<>(); - if (root == null) { - return values; - } - - - Stack stack1 = new Stack<>(); - Stack stack2 = new Stack<>(); - stack1.push(root); - - while (!stack1.empty()) { - Node temp = stack1.pop(); - stack2.push(temp); - List childrens = temp.children; - for(Node children : childrens) { - stack1.push(children); - } - } - - while (!stack2.empty()) { - values.add(stack2.pop().val); - } - - return values; +class Solution { + public List postorder(Node root) { + List result = new ArrayList<>(); + helper(root, result); + return result; + } + + private void helper(Node root, List result) { + if (root == null) { + return; + } + for (Node child : root.children) { + helper(child, result); } + result.add(root.val); + } } From 57f26849e8320d54455620b3190569d59c68deb3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Jul 2022 13:36:48 -0700 Subject: [PATCH 0588/1640] Update 4Sum.java --- Medium/4Sum.java | 55 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 17 deletions(-) diff --git a/Medium/4Sum.java b/Medium/4Sum.java index 41f71e4a..50832c2c 100644 --- a/Medium/4Sum.java +++ b/Medium/4Sum.java @@ -1,25 +1,46 @@ class Solution { public List> fourSum(int[] nums, int target) { Arrays.sort(nums); - Set> set = new HashSet<>(); - for (int i = 0; i < nums.length; i++) { - for (int j = i + 1; j < nums.length; j++) { - int newTarget = target - nums[i] - nums[j]; - int start = j + 1; - int end = nums.length - 1; - while (start < end) { - if ((nums[start] + nums[end]) == newTarget) { - set.add(Arrays.asList(nums[i], nums[j], nums[start++], nums[end--])); - } - else if ((nums[start] + nums[end]) < newTarget) { - start++; - } - else { - end--; - } + return kSum(nums, target, 0, 4); + } + + public List> kSum(int[] nums, long target, int start, int k) { + List> result = new ArrayList<>(); + if (start == nums.length) { + return result; + } + long averageValue = target / k; + if (nums[start] > averageValue || averageValue > nums[nums.length - 1]) { + return result; + } + if (k == 2) { + return twoSum(nums, target, start); + } + for (int i = start; i < nums.length; ++i) { + if (i == start || nums[i - 1] != nums[i]) { + for (List subset : kSum(nums, target - nums[i], i + 1, k - 1)) { + result.add(new ArrayList<>(Arrays.asList(nums[i]))); + result.get(result.size() - 1).addAll(subset); } } } - return new ArrayList<>(set); + return result; + } + + public List> twoSum(int[] nums, long target, int start) { + List> result = new ArrayList<>(); + int low = start; + int high = nums.length - 1; + while (low < high) { + int currSum = nums[low] + nums[high]; + if (currSum < target || (low > start && nums[low] == nums[low - 1])) { + ++low; + } else if (currSum > target || (high < nums.length - 1 && nums[high] == nums[high + 1])) { + --high; + } else { + result.add(Arrays.asList(nums[low++], nums[high--])); + } + } + return result; } } From dab3fd0082e8cccdfe3639851115104291c9a13a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Jul 2022 11:00:26 -0700 Subject: [PATCH 0589/1640] Create Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts.java --- ...Cake After Horizontal and Vertical Cuts.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts.java diff --git a/Medium/Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts.java b/Medium/Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts.java new file mode 100644 index 00000000..e723cd7e --- /dev/null +++ b/Medium/Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts.java @@ -0,0 +1,17 @@ +class Solution { + public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) { + Arrays.sort(horizontalCuts); + Arrays.sort(verticalCuts); + int n = horizontalCuts.length; + int m = verticalCuts.length; + long maxHeight = Math.max(horizontalCuts[0], h - horizontalCuts[n - 1]); + for (int i = 1; i < n; i++) { + maxHeight = Math.max(maxHeight, horizontalCuts[i] - horizontalCuts[i - 1]); + } + long maxWidth = Math.max(verticalCuts[0], w - verticalCuts[m - 1]); + for (int i = 1; i < m; i++) { + maxWidth = Math.max(maxWidth, verticalCuts[i] - verticalCuts[i - 1]); + } + return (int) ((maxWidth * maxHeight) % (1000000007)); + } +} From 1c68634abe5ca2fb64f9cf608efae2a9a0d90e0f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Jul 2022 15:44:03 -0700 Subject: [PATCH 0590/1640] Create Wiggle Subsequence.java --- Medium/Wiggle Subsequence.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Wiggle Subsequence.java diff --git a/Medium/Wiggle Subsequence.java b/Medium/Wiggle Subsequence.java new file mode 100644 index 00000000..4e066527 --- /dev/null +++ b/Medium/Wiggle Subsequence.java @@ -0,0 +1,19 @@ +class Solution { + public int wiggleMaxLength(int[] nums) { + if (nums.length < 2) { + return nums.length; + } + int[] increasing = new int[nums.length]; + int[] decreasing = new int[nums.length]; + for (int i = 0; i < nums.length; i++) { + for (int j = 0; j < i; j++) { + if (nums[i] > nums[j]) { + increasing[i] = Math.max(increasing[i], decreasing[j] + 1); + } else if (nums[i] < nums[j]) { + decreasing[i] = Math.max(decreasing[i], increasing[j] + 1); + } + } + } + return 1 + Math.max(decreasing[nums.length - 1], increasing[nums.length - 1]); + } +} From 45442bb1411d2a9ae0464a2fea2bc2cd0342ff69 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Jul 2022 20:52:55 -0700 Subject: [PATCH 0591/1640] Create Decode the Message.java --- Easy/Decode the Message.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Decode the Message.java diff --git a/Easy/Decode the Message.java b/Easy/Decode the Message.java new file mode 100644 index 00000000..c7396320 --- /dev/null +++ b/Easy/Decode the Message.java @@ -0,0 +1,16 @@ +class Solution { + public String decodeMessage(String key, String message) { + int counter = 0; + Map map = new HashMap<>(); + for (char c : key.toCharArray()) { + if (!map.containsKey(c) && c != ' ') { + map.put(c, (char) ('a' + counter++)); + } + } + StringBuilder sb = new StringBuilder(); + for (char c : message.toCharArray()) { + sb.append(c == ' ' ? ' ' : map.get(c)); + } + return sb.toString(); + } +} From 7412f6fb01df2b0dacb2494452534b865c4a2cad Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Jul 2022 14:06:43 -0700 Subject: [PATCH 0592/1640] Update Candy.java --- Hard/Candy.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Hard/Candy.java b/Hard/Candy.java index ed787668..5bf67db1 100644 --- a/Hard/Candy.java +++ b/Hard/Candy.java @@ -1,23 +1,19 @@ class Solution { public int candy(int[] ratings) { - int[] leftCandy = new int[ratings.length]; - int[] rightCandy = new int[ratings.length]; - Arrays.fill(leftCandy, 1); - Arrays.fill(rightCandy, 1); + int[] candies = new int[ratings.length]; + Arrays.fill(candies, 1); for (int i = 1; i < ratings.length; i++) { if (ratings[i] > ratings[i - 1]) { - leftCandy[i] = leftCandy[i - 1] + 1; + candies[i] = candies[i - 1] + 1; } } + int totalCandies = candies[candies.length - 1]; for (int i = ratings.length - 2; i >= 0; i--) { if (ratings[i] > ratings[i + 1]) { - rightCandy[i] = rightCandy[i + 1] + 1; + candies[i] = Math.max(candies[i], candies[i + 1] + 1); } + totalCandies += candies[i]; } - int numOfCandies = 0; - for (int i = 0; i < ratings.length; i++) { - numOfCandies += Math.max(leftCandy[i], rightCandy[i]); - } - return numOfCandies; + return totalCandies; } } From d27b620e65e96a771b84e88509b321289a37bfba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Jul 2022 18:05:16 -0700 Subject: [PATCH 0593/1640] Update Longest Consecutive Sequence.java --- Medium/Longest Consecutive Sequence.java | 26 +++++++++++++----------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Medium/Longest Consecutive Sequence.java b/Medium/Longest Consecutive Sequence.java index 0549b6e6..e977e86a 100644 --- a/Medium/Longest Consecutive Sequence.java +++ b/Medium/Longest Consecutive Sequence.java @@ -1,19 +1,21 @@ class Solution { public int longestConsecutive(int[] nums) { - Map map = new HashMap<>(); - int maxLength = 0; + Set set = new HashSet<>(); for (int num : nums) { - if (map.containsKey(num)) { - continue; + set.add(num); + } + int maxLength = 0; + for (int num : set) { + if (!set.contains(num - 1)) { + int currNum = num; + int currentLength = 1; + while (set.contains(currNum + 1)) { + currNum++; + currentLength++; + } + maxLength = Math.max(currentLength, maxLength); } - int left = map.containsKey(num - 1) ? map.get(num - 1) : 0; - int right = map.containsKey(num + 1) ? map.get(num + 1) : 0; - int sum = left + right + 1; - maxLength = Math.max(maxLength, sum); - map.put(num, sum); - map.put(num - left, sum); - map.put(num + right, sum); } return maxLength; - } + } } From 872f1f472b532942d361012b703c14f09e2fb8ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Jul 2022 07:51:59 -0700 Subject: [PATCH 0594/1640] Update Validate Binary Search Tree.java --- Medium/Validate Binary Search Tree.java | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Medium/Validate Binary Search Tree.java b/Medium/Validate Binary Search Tree.java index b7d2a9f7..7989ffbf 100644 --- a/Medium/Validate Binary Search Tree.java +++ b/Medium/Validate Binary Search Tree.java @@ -4,23 +4,27 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public boolean isValidBST(TreeNode root) { - long min = (long) Integer.MIN_VALUE; - long max = (long) Integer.MAX_VALUE; - return helper(root, min - 1, max + 1); + return isValidBSTHelper(root, (((long) Integer.MAX_VALUE) + 1), ((long) Integer.MIN_VALUE) - 1); } - private boolean helper(TreeNode root, long min, long max) { - if (root == null) { + private boolean isValidBSTHelper(TreeNode node, long max, long min) { + if (node == null) { return true; } - if (root.val <= min || root.val >= max) { + if (node.val >= max || node.val <= min) { return false; } - return helper(root.left, min, (long) root.val) && helper(root.right, (long) root.val, max); + return isValidBSTHelper(node.left, node.val, min) && isValidBSTHelper(node.right, max, node.val); } } From 81e6e850812cc9677950ff2029a46e453627adb6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Jul 2022 08:59:51 -0700 Subject: [PATCH 0595/1640] Update Compare Version Numbers.java --- Medium/Compare Version Numbers.java | 42 ++++++++++++----------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/Medium/Compare Version Numbers.java b/Medium/Compare Version Numbers.java index 94e1e7ed..b7b13684 100644 --- a/Medium/Compare Version Numbers.java +++ b/Medium/Compare Version Numbers.java @@ -1,33 +1,25 @@ class Solution { public int compareVersion(String version1, String version2) { - String[] versionOneSplit = version1.split("\\."); - String[] versionTwoSplit = version2.split("\\."); - int idxOne = 0; - int idxTwo = 0; - while (idxOne < versionOneSplit.length && idxTwo < versionTwoSplit.length) { - int diff = Integer.parseInt(versionOneSplit[idxOne]) - Integer.parseInt(versionTwoSplit[idxTwo]); - if (diff < 0) { - return -1; - } else if (diff > 0) { - return 1; + String[] splitOne = version1.split("\\."); + String[] splitTwo = version2.split("\\."); + int i = 0; + for (i = 0; i < Math.min(splitOne.length, splitTwo.length); i++) { + int diff = Integer.parseInt(splitOne[i]) - Integer.parseInt(splitTwo[i]); + if (diff == 0) { + continue; } - idxOne++; - idxTwo++; + return diff < 0 ? -1 : 1; } - if (containsNonZeroRevision(versionOneSplit, idxOne)) { - return 1; - } else if (containsNonZeroRevision(versionTwoSplit, idxTwo)) { - return -1; + while (i < splitOne.length) { + if (Integer.parseInt(splitOne[i++]) > 0) { + return 1; + } } - return 0; - } - - private boolean containsNonZeroRevision(String[] versions, int idx) { - for (int i = idx; i < versions.length; i++) { - if (Integer.parseInt(versions[i]) > 0) { - return true; + while (i < splitTwo.length) { + if (Integer.parseInt(splitTwo[i++]) > 0) { + return -1; } } - return false; - } + return 0; + } } From c677a7edbdff3a04a93ff027edf16e3ea628ab6a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Jul 2022 09:43:26 -0700 Subject: [PATCH 0596/1640] Update Happy Number.java --- Easy/Happy Number.java | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/Easy/Happy Number.java b/Easy/Happy Number.java index 13adce96..0884e3a1 100644 --- a/Easy/Happy Number.java +++ b/Easy/Happy Number.java @@ -1,27 +1,21 @@ class Solution { public boolean isHappy(int n) { - Set set = new HashSet<>(); - set.add(n); - while (true) { - int sumOfDigitSquare = getSumOfDigitSquare(n); - if (sumOfDigitSquare == 1) { - return true; - } - if (set.contains(sumOfDigitSquare)) { - break; - } - set.add(sumOfDigitSquare); - n = sumOfDigitSquare; + int slow = n; + int fast = getSquareDigitSum(n); + while (fast != 1 && slow != fast) { + slow = getSquareDigitSum(slow); + fast = getSquareDigitSum(getSquareDigitSum(fast)); } - return false; + return fast == 1; } - private int getSumOfDigitSquare(int n) { - int sum = 0; + private int getSquareDigitSum(int n) { + int squareDigitSum = 0; while (n > 0) { - sum += (int) Math.pow(n % 10, 2); + int digit = n % 10; + squareDigitSum += digit * digit; n /= 10; } - return sum; + return squareDigitSum; } } From f0f604e7b6f076d496e9480ca29545f370cc940c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Jul 2022 09:47:43 -0700 Subject: [PATCH 0597/1640] Update SqrtX.java --- Easy/SqrtX.java | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Easy/SqrtX.java b/Easy/SqrtX.java index 51c13b9c..9c96e058 100644 --- a/Easy/SqrtX.java +++ b/Easy/SqrtX.java @@ -3,21 +3,19 @@ public int mySqrt(int x) { if (x < 2) { return x; } - int start = 2; - int end = x / 2; - while (start <= end) { - int mid = start + (end - start) / 2; - long num = (long) mid * mid; - if (num > x) { - end = mid - 1; - } - else if (num < x) { - start = mid + 1; - } - else { + int left = 2; + int right = x / 2; + while (left <= right) { + int mid = (left + right) / 2; + long square = ((long) mid) * mid; + if (square > x) { + right = mid - 1; + } else if (square < x) { + left = mid + 1; + } else { return mid; } } - return end; + return right; } } From aebc34bf7163981d905898dd7b7d27a4290f7f2c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Jul 2022 08:35:19 -0700 Subject: [PATCH 0598/1640] Rename Easy/Min Stack.java to Medium/Min Stack.java --- {Easy => Medium}/Min Stack.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Easy => Medium}/Min Stack.java (100%) diff --git a/Easy/Min Stack.java b/Medium/Min Stack.java similarity index 100% rename from Easy/Min Stack.java rename to Medium/Min Stack.java From b6210ddd918942c97dc045886cfdf8f096a4fbc4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Jul 2022 09:28:26 -0700 Subject: [PATCH 0599/1640] Update and rename Hard/Interleaving String.java to Medium/Interleaving String.java --- Hard/Interleaving String.java | 33 --------------------------------- Medium/Interleaving String.java | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 33 deletions(-) delete mode 100644 Hard/Interleaving String.java create mode 100644 Medium/Interleaving String.java diff --git a/Hard/Interleaving String.java b/Hard/Interleaving String.java deleted file mode 100644 index 3fd73eb2..00000000 --- a/Hard/Interleaving String.java +++ /dev/null @@ -1,33 +0,0 @@ -class Solution { - public boolean isInterleave(String s1, String s2, String s3) { - if (s1.length()+s2.length() != s3.length()) { - return false; - } - - boolean[][] dp = new boolean[s1.length()+1][s2.length()+1]; - - dp[0][0] = true; - - for (int i = 0; i <= s1.length(); i++){ - for (int j = 0; j <= s2.length(); j++){ - boolean s1Check = false; - boolean s2Check = false; - - if (i > 0) { - s1Check = dp[i-1][j] && s3.charAt(i+j-1) == s1.charAt(i-1); - } - - if (j > 0) { - s2Check = dp[i][j-1] && s3.charAt(i+j-1) == s2.charAt(j-1); - } - - if (i>0 || j>0) { - dp[i][j] = s1Check || s2Check; - } - } - } - - - return dp[s1.length()][s2.length()]; - } -} diff --git a/Medium/Interleaving String.java b/Medium/Interleaving String.java new file mode 100644 index 00000000..6e4408ce --- /dev/null +++ b/Medium/Interleaving String.java @@ -0,0 +1,24 @@ +class Solution { + public boolean isInterleave(String s1, String s2, String s3) { + if (s1.length() + s2.length() != s3.length()) { + return false; + } + Boolean[][] dp = new Boolean[s1.length()][s2.length()]; + return isInterleaveHelper(s1, 0, s2, 0, s3, 0, dp); + } + + private boolean isInterleaveHelper(String s1, int i1, String s2, int i2, String s3, int i3, Boolean[][] dp) { + if (i1 == s1.length()) { + return s2.substring(i2).equals(s3.substring(i3)); + } + if (i2 == s2.length()) { + return s1.substring(i1).equals(s3.substring(i3)); + } + if (dp[i1][i2] != null) { + return dp[i1][i2]; + } + dp[i1][i2] = (s3.charAt(i3) == s1.charAt(i1) && isInterleaveHelper(s1, i1 + 1, s2, i2, s3, i3 + 1, dp)) || + (s3.charAt(i3) == s2.charAt(i2) && isInterleaveHelper(s1, i1, s2, i2 + 1, s3, i3 + 1, dp)); + return dp[i1][i2]; + } +} From dd8dd6550cf77a7968aaca41151a1c29b68736b1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Jul 2022 10:51:25 -0700 Subject: [PATCH 0600/1640] Create Longest Arithmetic Subsequence.java --- Medium/Longest Arithmetic Subsequence.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Longest Arithmetic Subsequence.java diff --git a/Medium/Longest Arithmetic Subsequence.java b/Medium/Longest Arithmetic Subsequence.java new file mode 100644 index 00000000..70544ee4 --- /dev/null +++ b/Medium/Longest Arithmetic Subsequence.java @@ -0,0 +1,15 @@ +class Solution { + public int longestArithSeqLength(int[] nums) { + int result = 2; + Map[] dp = new HashMap[nums.length]; + for (int i = 0; i < nums.length; i++) { + dp[i] = new HashMap<>(); + for (int j = 0; j < i; j++) { + int diff = nums[i] - nums[j]; + dp[i].put(diff, dp[j].getOrDefault(diff, 1) + 1); + result = Math.max(result, dp[i].get(diff)); + } + } + return result; + } +} From d4cd4cf44a9899b80633593e833047971a6a5f7a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Jul 2022 12:36:50 -0700 Subject: [PATCH 0601/1640] Update Binary Search.java --- Easy/Binary Search.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Easy/Binary Search.java b/Easy/Binary Search.java index 8fac5829..0acaa8aa 100644 --- a/Easy/Binary Search.java +++ b/Easy/Binary Search.java @@ -1,17 +1,15 @@ class Solution { public int search(int[] nums, int target) { - int left = 0; - int right = nums.length - 1; - while (left <= right) { - int mid = (left + right) / 2; + int start = 0; + int end = nums.length - 1; + while (start <= end) { + int mid = (start + end) / 2; if (nums[mid] == target) { return mid; - } - else if (nums[mid] > target) { - right = mid - 1; - } - else { - left = mid + 1; + } else if (nums[mid] < target) { + start = mid + 1; + } else { + end = mid - 1; } } return -1; From 36e6dcbb36577f826842eec1c91253411549b533 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 8 Jul 2022 10:40:57 -0700 Subject: [PATCH 0602/1640] Create Paint House III.java --- Hard/Paint House III.java | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Hard/Paint House III.java diff --git a/Hard/Paint House III.java b/Hard/Paint House III.java new file mode 100644 index 00000000..461973f0 --- /dev/null +++ b/Hard/Paint House III.java @@ -0,0 +1,37 @@ +class Solution { + private static final int MAXIMUM_POSSIBLE_COST = 1000001; + + public int minCost(int[] houses, int[][] cost, int m, int n, int target) { + Integer[][][] dp = new Integer[m + 1][target + 1][n + 1]; // [Current House][Neighborhood Count][Previous Color] + int result = helper(houses, cost, target, 0, 0, dp); + return result == MAXIMUM_POSSIBLE_COST ? -1 : result; + } + + public int helper(int[] houses, int[][] cost, int target, int idx, int numOfNeighbourhood, Integer[][][] dp) { + if (idx == houses.length) { + return numOfNeighbourhood != target ? MAXIMUM_POSSIBLE_COST : 0; + } + if (numOfNeighbourhood > target) { + return MAXIMUM_POSSIBLE_COST; + } + int prevHouseColor = idx == 0 ? 0 : houses[idx - 1]; + if (dp[idx][numOfNeighbourhood][prevHouseColor] != null) { + return dp[idx][numOfNeighbourhood][prevHouseColor]; + } + int minimumCost = MAXIMUM_POSSIBLE_COST; + if (houses[idx] != 0) { + int currColor = houses[idx]; + int updatedNumOfNeighbourhood = currColor != prevHouseColor ? numOfNeighbourhood + 1 : numOfNeighbourhood; + minimumCost = helper(houses, cost, target, idx + 1, updatedNumOfNeighbourhood, dp); + } else { + for (int currentColor = 1; currentColor <= cost[idx].length; currentColor++) { + houses[idx] = currentColor; // Color the house with currentColor + int updatedNumOfNeighbourhood = currentColor != prevHouseColor ? numOfNeighbourhood + 1 : numOfNeighbourhood; + int currCost = cost[idx][currentColor - 1] + helper(houses, cost, target, idx + 1, updatedNumOfNeighbourhood, dp); + minimumCost = Math.min(minimumCost, currCost); + houses[idx] = 0; // Remove the currentColor for recursion + } + } + return dp[idx][numOfNeighbourhood][prevHouseColor] = minimumCost; + } +} From 4c797fc2af271797e7366b16bee5fc0549e7c8f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 8 Jul 2022 11:17:56 -0700 Subject: [PATCH 0603/1640] Update Squares of a Sorted Array.java --- Easy/Squares of a Sorted Array.java | 36 ++++++++++++----------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/Easy/Squares of a Sorted Array.java b/Easy/Squares of a Sorted Array.java index 5308f168..046fcf9c 100644 --- a/Easy/Squares of a Sorted Array.java +++ b/Easy/Squares of a Sorted Array.java @@ -1,30 +1,24 @@ class Solution { public int[] sortedSquares(int[] nums) { - int firstNegativeIdx = nums[0] < 0 ? 0 : nums.length; - int lastPositiveIdx = nums[nums.length - 1] >= 0 ? nums.length - 1 : -1; + int negativeIdx = 0; + int positiveIdx = nums.length - 1; int[] result = new int[nums.length]; - int idx = result.length - 1; - while (idx >= 0) { - if (firstNegativeIdx < nums.length && lastPositiveIdx >= 0) { - if (Math.abs(nums[firstNegativeIdx]) > nums[lastPositiveIdx]) { - result[idx--] = nums[firstNegativeIdx] * nums[firstNegativeIdx]; - firstNegativeIdx++; - if (firstNegativeIdx < nums.length && nums[firstNegativeIdx] >= 0) { - firstNegativeIdx = nums.length; - } + int resultIdx = nums.length - 1; + while(resultIdx >= 0) { + if (nums[negativeIdx] < 0 && nums[positiveIdx] >= 0) { + if (Math.abs(nums[negativeIdx]) > nums[positiveIdx]) { + result[resultIdx--] = nums[negativeIdx] * nums[negativeIdx]; + negativeIdx++; } else { - result[idx--] = nums[lastPositiveIdx] * nums[lastPositiveIdx]; - lastPositiveIdx--; - if (lastPositiveIdx >= 0 && nums[lastPositiveIdx] < 0) { - lastPositiveIdx = -1; - } + result[resultIdx--] = nums[positiveIdx] * nums[positiveIdx]; + positiveIdx--; } - } else if (firstNegativeIdx < nums.length && lastPositiveIdx < 0) { - result[idx--] = nums[firstNegativeIdx] * nums[firstNegativeIdx]; - firstNegativeIdx++; + } else if (nums[negativeIdx] < 0 && nums[positiveIdx] < 0) { + result[resultIdx--] = nums[negativeIdx] * nums[negativeIdx]; + negativeIdx++; } else { - result[idx--] = nums[lastPositiveIdx] * nums[lastPositiveIdx]; - lastPositiveIdx--; + result[resultIdx--] = nums[positiveIdx] * nums[positiveIdx]; + positiveIdx--; } } return result; From d5fc12e90c73353a301001749f6ef455b718fa4d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Jul 2022 09:31:12 -0700 Subject: [PATCH 0604/1640] Create Jump Game VI.java --- Medium/Jump Game VI.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Jump Game VI.java diff --git a/Medium/Jump Game VI.java b/Medium/Jump Game VI.java new file mode 100644 index 00000000..76ae982c --- /dev/null +++ b/Medium/Jump Game VI.java @@ -0,0 +1,16 @@ +class Solution { + public int maxResult(int[] nums, int k) { + int[] score = new int[nums.length]; + score[0] = nums[0]; + PriorityQueue queue = new PriorityQueue<>((a, b) -> b[0] - a[0]); + queue.add(new int[]{nums[0], 0}); + for (int i = 1; i < nums.length; i++) { + while (!queue.isEmpty() && queue.peek()[1] < i - k) { + queue.remove(); + } + score[i] = score[queue.peek()[1]] + nums[i]; + queue.add(new int[]{score[i], i}); + } + return score[nums.length - 1]; + } +} From 4bc2eeb74854d4b5c98918e651c7213ea98a78ee Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Jul 2022 09:40:25 -0700 Subject: [PATCH 0605/1640] Create Evaluate Boolean Binary Tree.java --- Easy/Evaluate Boolean Binary Tree.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Easy/Evaluate Boolean Binary Tree.java diff --git a/Easy/Evaluate Boolean Binary Tree.java b/Easy/Evaluate Boolean Binary Tree.java new file mode 100644 index 00000000..39b6edac --- /dev/null +++ b/Easy/Evaluate Boolean Binary Tree.java @@ -0,0 +1,23 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public boolean evaluateTree(TreeNode root) { + if (root.val == 0 || root.val == 1) { + return root.val == 0 ? false : true; + } + return root.val == 2 ? (evaluateTree(root.left) || evaluateTree(root.right)) : (evaluateTree(root.left) && evaluateTree(root.right)); + } +} From 931f2382e192fcac98c57c8dd40f6d1e4d79b57c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Jul 2022 15:59:01 -0700 Subject: [PATCH 0606/1640] Update Valid Perfect Square.java --- Easy/Valid Perfect Square.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Easy/Valid Perfect Square.java b/Easy/Valid Perfect Square.java index ec870dd1..16c1a509 100644 --- a/Easy/Valid Perfect Square.java +++ b/Easy/Valid Perfect Square.java @@ -1,22 +1,22 @@ class Solution { public boolean isPerfectSquare(int num) { - return binarySearchHelper((long)1, (long)num, num) == -1 ? false : true; - } - - private int binarySearchHelper(long start, long end, int num) { + if (num == 1) { + return true; + } + long start = 2; + long end = num / 2; while (start <= end) { - long mid = (start + end) / 2; - long square = (long) Math.pow(mid, 2); - if (square == num) { - return (int) mid; + long mid = start + (end - start) / 2; + long currSquare = mid * mid; + if (currSquare == num) { + return true; } - else if (square > num) { + if (currSquare > num) { end = mid - 1; - } - else { + } else { start = mid + 1; } } - return -1; + return false; } } From 8ade91524a188a7f382f28ca49fefd216cde83d9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Jul 2022 16:19:49 -0700 Subject: [PATCH 0607/1640] Update Find the Distance Value Between Two Arrays.java --- ...the Distance Value Between Two Arrays.java | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Easy/Find the Distance Value Between Two Arrays.java b/Easy/Find the Distance Value Between Two Arrays.java index 69df4f37..0fb09098 100644 --- a/Easy/Find the Distance Value Between Two Arrays.java +++ b/Easy/Find the Distance Value Between Two Arrays.java @@ -1,18 +1,28 @@ class Solution { public int findTheDistanceValue(int[] arr1, int[] arr2, int d) { - TreeSet set = new TreeSet<>(); - for (int num : arr2) { - set.add(num); + Arrays.sort(arr2); + int distance = 0; + for (int i = 0; i < arr1.length; i++) { + if (outsideRange(arr2, arr1[i] - d, arr1[i] + d)) { + distance++; + } } - int count = 0; - for (int num : arr1) { - Integer higher = set.ceiling(num); - Integer lower = set.floor(num); - if ((higher != null && Math.abs(higher - num) <= d) || (lower != null && Math.abs(lower - num) <= d)) { - continue; + return distance; + } + + private static boolean outsideRange(int[] arr, int from, int to) { + int start = 0; + int end = arr.length - 1; + while (start <= end) { + int mid = start + (end - start) / 2; + if (arr[mid] >= from && arr[mid] <= to) { + return false; + } else if (arr[mid] < from) { + start = mid + 1; + } else { + end = mid - 1; } - count++; } - return count; + return true; } } From d49add8e433b3b30987d86c55fd38487d260018d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 10 Jul 2022 08:27:55 -0700 Subject: [PATCH 0608/1640] Create Minimum Amount of Time to Fill Cups.java --- Easy/Minimum Amount of Time to Fill Cups.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Easy/Minimum Amount of Time to Fill Cups.java diff --git a/Easy/Minimum Amount of Time to Fill Cups.java b/Easy/Minimum Amount of Time to Fill Cups.java new file mode 100644 index 00000000..b772c001 --- /dev/null +++ b/Easy/Minimum Amount of Time to Fill Cups.java @@ -0,0 +1,25 @@ +class Solution { + public int fillCups(int[] amount) { + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + for (int count : amount) { + updateQueue(pq, count); + } + int totalTime = 0; + while (!pq.isEmpty()) { + int removedOne = pq.poll(); + int removedTwo = pq.isEmpty() ? 0 : pq.poll(); + removedOne--; + removedTwo--; + updateQueue(pq, removedOne); + updateQueue(pq, removedTwo); + totalTime++; + } + return totalTime; + } + + private void updateQueue(PriorityQueue pq, int count) { + if (count > 0) { + pq.add(count); + } + } +} From 343aa2601654e701bd7e08c590d631e2ccabd4f5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Jul 2022 16:46:27 -0700 Subject: [PATCH 0609/1640] Update Can Place Flowers.java --- Easy/Can Place Flowers.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Easy/Can Place Flowers.java b/Easy/Can Place Flowers.java index df188af0..c5b9df5d 100644 --- a/Easy/Can Place Flowers.java +++ b/Easy/Can Place Flowers.java @@ -2,15 +2,13 @@ class Solution { public boolean canPlaceFlowers(int[] flowerbed, int n) { for (int i = 0; i < flowerbed.length && n > 0; i++) { if (flowerbed[i] == 0) { - if (i == 0 && (i + 1 < flowerbed.length && flowerbed[i + 1] == 0) - || flowerbed.length == 1) { + if (i == 0 && (flowerbed.length == 1 || flowerbed[i + 1] == 0)) { flowerbed[i] = 1; n--; - } else if (i == flowerbed.length - 1 && i - 1 >= 0 && flowerbed[i - 1] == 0) { + } else if (i == flowerbed.length - 1 && flowerbed[i - 1] == 0) { flowerbed[i] = 1; n--; - } else if (i + 1 < flowerbed.length && i - 1 >= 0 && flowerbed[i + 1] == 0 - && flowerbed[i - 1] == 0) { + } else if (i + 1 < flowerbed.length && flowerbed[i + 1] == 0 && i - 1 >= 0 && flowerbed[i - 1] == 0) { flowerbed[i] = 1; n--; } From f6acbee2e28a476c1392f1f8ce402e2fe582d430 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Jul 2022 16:55:04 -0700 Subject: [PATCH 0610/1640] Update Reverse Substrings Between Each Pair of Parentheses.java --- ...ings Between Each Pair of Parentheses.java | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Medium/Reverse Substrings Between Each Pair of Parentheses.java b/Medium/Reverse Substrings Between Each Pair of Parentheses.java index b4bff4b6..b2ecb320 100644 --- a/Medium/Reverse Substrings Between Each Pair of Parentheses.java +++ b/Medium/Reverse Substrings Between Each Pair of Parentheses.java @@ -1,26 +1,29 @@ class Solution { public String reverseParentheses(String s) { - Stack opened = new Stack<>(); - int n = s.length(); - int[] pair = new int[n]; - for (int i = 0; i < n; i++) { + char[] letters = s.toCharArray(); + Stack stack = new Stack<>(); + for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '(') { - opened.push(i); + stack.push(i); } else if (s.charAt(i) == ')') { - int startIdx = opened.pop(); - pair[i] = startIdx; - pair[startIdx] = i; + reverse(letters, stack.pop(), i); } } StringBuilder sb = new StringBuilder(); - for (int i = 0, jump = 1; i < n; i += jump) { - if (s.charAt(i) == '(' || s.charAt(i) == ')') { - i = pair[i]; - jump = -jump; - } else { - sb.append(s.charAt(i)); + for (int i = 0; i < letters.length; i++) { + if (letters[i] == '(' || letters[i] == ')') { + continue; } + sb.append(letters[i]); } return sb.toString(); } + + private void reverse(char[] letters, int start, int end) { + while (start < end) { + char temp = letters[start]; + letters[start++] = letters[end]; + letters[end--] = temp; + } + } } From ecb94124c18bbee2103bd68626f99c946df351dc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 12 Jul 2022 07:07:29 -0700 Subject: [PATCH 0611/1640] Create Matchsticks to Square.java --- Medium/Matchsticks to Square.java | 32 +++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Matchsticks to Square.java diff --git a/Medium/Matchsticks to Square.java b/Medium/Matchsticks to Square.java new file mode 100644 index 00000000..b5de023b --- /dev/null +++ b/Medium/Matchsticks to Square.java @@ -0,0 +1,32 @@ +class Solution { + public boolean makesquare(int[] matchsticks) { + int n = matchsticks.length; + int sum = 0; + for (int stick : matchsticks) { + sum += stick; + } + int possibleSide = sum / 4; + if (possibleSide * 4 != sum) { + return false; + } + Arrays.sort(matchsticks); + return dfs(new int[4], matchsticks, possibleSide, matchsticks.length - 1); + } + + private boolean dfs(int[] sum, int[] sticks, int possibleSide, int idx) { + if (idx == -1) { + return sum[0] == sum[1] && sum[1] == sum[2] && sum[2] == sum[3]; + } + int stick = sticks[idx]; + for (int i = 0; i < 4; i++) { + if (sum[i] + stick <= possibleSide) { + sum[i] += stick; + if (dfs(sum, sticks, possibleSide, idx - 1)) { + return true; + } + sum[i] -= stick; + } + } + return false; + } +} From 21775562b08f0a8cfae8e866e288a36658112e48 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 12 Jul 2022 08:43:55 -0700 Subject: [PATCH 0612/1640] Update High Five.java --- Easy/High Five.java | 54 +++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/Easy/High Five.java b/Easy/High Five.java index 31eb4999..86635d5a 100644 --- a/Easy/High Five.java +++ b/Easy/High Five.java @@ -1,37 +1,23 @@ class Solution { - public int[][] highFive(int[][] items) { - final int COUNT = 5; - Map> map = new HashMap<>(); - Set set = new TreeSet<>(); - - for (int[] item : items) { - int id = item[0]; - int score = item[1]; - - map.computeIfAbsent(id, k -> new PriorityQueue<>(COUNT, Comparator.naturalOrder())).add(score); - - if (map.get(id).size() > COUNT) { - map.get(id).poll(); - } - - set.add(id); - } - - int[][] ans = new int[map.size()][2]; - int idx = 0; - Iterator iterator = set.iterator(); - while (iterator.hasNext()) { - int id = iterator.next(); - PriorityQueue scores = map.get(id); - int sum = 0; - - while (!scores.isEmpty()) { - sum += scores.poll(); - } - - ans[idx++] = new int[]{id, sum / COUNT}; - } - - return ans; + public int[][] highFive(int[][] items) { + Map> map = new HashMap<>(); + for (int[] item : items) { + int id = item[0]; + int score = item[1]; + map.computeIfAbsent(id, k -> new PriorityQueue<>((a, b) -> b - a)).add(score); } + int[][] result = new int[map.size()][2]; + int idx = 0; + for (Integer id : map.keySet()) { + PriorityQueue scoresInOrder = map.get(id); + int totalScore = 0; + int count = Math.min(5, scoresInOrder.size()); + for (int i = 0; i < 5 && !scoresInOrder.isEmpty(); i++) { + totalScore += scoresInOrder.poll(); + } + result[idx++] = new int[]{id, totalScore / count}; + } + Arrays.sort(result, (a, b) -> a[0] - b[0]); + return result; + } } From 2ebf6bbc2deb115d6a2187fe24d50c693a46bc87 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 12 Jul 2022 08:47:19 -0700 Subject: [PATCH 0613/1640] Update Boundary of Binary Tree.java --- Medium/Boundary of Binary Tree.java | 90 +++++++++++++++++------------ 1 file changed, 54 insertions(+), 36 deletions(-) diff --git a/Medium/Boundary of Binary Tree.java b/Medium/Boundary of Binary Tree.java index 565dc467..a6e26f56 100644 --- a/Medium/Boundary of Binary Tree.java +++ b/Medium/Boundary of Binary Tree.java @@ -4,57 +4,75 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - List list; - List rightVal; public List boundaryOfBinaryTree(TreeNode root) { - list = new ArrayList<>(); - rightVal = new ArrayList<>(); - if (root == null) { - return list; + List result = new ArrayList<>(); + if (!isLeaf(root)) { + result.add(root.val); } - if (root.left == null && root.right == null) { - list.add(root.val); - return list; + if (root.left != null) { + addLeft(result, root.left); } - list.add(root.val); - addLeft(root.left); - addLeaves(root); - addRight(root.right); - for (int i = rightVal.size() - 1; i >= 0; i--) { - list.add(rightVal.get(i)); + addLeaves(result, root); + if (root.right != null) { + addRight(result, root.right); } - return list; + return result; } - private void addLeft(TreeNode left) { - if (left == null || (left.left == null && left.right == null)) { - return; + private void addRight(List result, TreeNode node) { + Stack stack = new Stack<>(); + while (node != null) { + if (!isLeaf(node)) { + stack.push(node.val); + } + if (node.right != null) { + node = node.right; + } else { + node = node.left; + } + } + while (!stack.isEmpty()) { + result.add(stack.pop()); } - list.add(left.val); - addLeft(left.left == null ? left.right : left.left); } - private void addLeaves(TreeNode root) { - if (root == null) { - return; - } - if (root.left == null && root.right == null) { - list.add(root.val); - return; + private void addLeft(List result, TreeNode node) { + while (node != null) { + if (!isLeaf(node)) { + result.add(node.val); + } + if (node.left != null) { + node = node.left; + } else { + node = node.right; + } } - addLeaves(root.left); - addLeaves(root.right); } - private void addRight(TreeNode right) { - if (right == null || (right.left == null && right.right == null)) { - return; + private void addLeaves(List result, TreeNode root) { + if (isLeaf(root)) { + result.add(root.val); + } else { + if (root.left != null) { + addLeaves(result, root.left); + } + if (root.right != null) { + addLeaves(result, root.right); + } } - rightVal.add(right.val); - addRight(right.right == null ? right.left : right.right); } + + private boolean isLeaf(TreeNode node) { + return node.left == null && node.right == null; + } } From ecee7d7f5239c6083cf8301994b42833407a297c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 12 Jul 2022 17:26:30 -0700 Subject: [PATCH 0614/1640] Create Binary Tree Level Order Traversal.java --- Medium/Binary Tree Level Order Traversal.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Medium/Binary Tree Level Order Traversal.java diff --git a/Medium/Binary Tree Level Order Traversal.java b/Medium/Binary Tree Level Order Traversal.java new file mode 100644 index 00000000..84664d71 --- /dev/null +++ b/Medium/Binary Tree Level Order Traversal.java @@ -0,0 +1,41 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public List> levelOrder(TreeNode root) { + if (root == null) { + return new ArrayList<>(); + } + Queue queue = new LinkedList<>(); + List> result = new ArrayList<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + List currLevel = new ArrayList<>(); + while (size-- > 0) { + TreeNode removed = queue.remove(); + currLevel.add(removed.val); + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + result.add(currLevel); + } + return result; + } +} From dc3dc4e1fc580e11eefaa8a2852b4b5cffaa65ac Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Jul 2022 07:42:55 -0700 Subject: [PATCH 0615/1640] Update Valid Palindrome.java --- Easy/Valid Palindrome.java | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/Easy/Valid Palindrome.java b/Easy/Valid Palindrome.java index 11b2358a..efc7bd93 100644 --- a/Easy/Valid Palindrome.java +++ b/Easy/Valid Palindrome.java @@ -3,22 +3,32 @@ public boolean isPalindrome(String s) { int startIdx = 0; int endIdx = s.length() - 1; while (startIdx < endIdx) { - if (!Character.isLetterOrDigit(s.charAt(startIdx))) { + if (!isAlphanumeric(s.charAt(startIdx))) { + startIdx++; + } else if (!isAlphanumeric(s.charAt(endIdx))) { + endIdx--; + } else { + if (!areSame(s.charAt(startIdx), s.charAt(endIdx))) { + return false; + } startIdx++; - continue; - } - if (!Character.isLetterOrDigit(s.charAt(endIdx))) { endIdx--; - continue; - } - char startChar = Character.isDigit(s.charAt(startIdx)) ? s.charAt(startIdx) : Character.toLowerCase(s.charAt(startIdx)); - char endChar = Character.isDigit(s.charAt(endIdx)) ? s.charAt(endIdx) : Character.toLowerCase(s.charAt(endIdx)); - if (startChar != endChar) { - return false; } - startIdx++; - endIdx--; } return true; } + + private boolean areSame(char c1, char c2) { + if (Character.isAlphabetic(c1) && Character.isAlphabetic(c2)) { + return Character.toLowerCase(c1) == Character.toLowerCase(c2); + } else if (Character.isDigit(c1) && Character.isDigit(c2)) { + return c1 == c2; + } else { + return false; + } + } + + private boolean isAlphanumeric(char c) { + return Character.isAlphabetic(c) || Character.isDigit(c); + } } From 30ea21bf9a3335c613cfa02d76361abdc41c54c3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Jul 2022 07:43:38 -0700 Subject: [PATCH 0616/1640] Update Valid Palindrome II.java --- Easy/Valid Palindrome II.java | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/Easy/Valid Palindrome II.java b/Easy/Valid Palindrome II.java index a8627315..04a163a0 100644 --- a/Easy/Valid Palindrome II.java +++ b/Easy/Valid Palindrome II.java @@ -1,22 +1,18 @@ class Solution { public boolean validPalindrome(String s) { + return validPalindromeHelper(s, false); + } + + private boolean validPalindromeHelper(String s, boolean deleted) { int startIdx = 0; int endIdx = s.length() - 1; while (startIdx < endIdx) { if (s.charAt(startIdx) != s.charAt(endIdx)) { - return isPalindromeWithDeletion(s, startIdx + 1, endIdx) || - isPalindromeWithDeletion(s, startIdx, endIdx - 1); - } - startIdx++; - endIdx--; - } - return true; - } - - private boolean isPalindromeWithDeletion(String s, int startIdx, int endIdx) { - while (startIdx < endIdx) { - if (s.charAt(startIdx) != s.charAt(endIdx)) { - return false; + if (deleted) { + return false; + } + return validPalindromeHelper(s.substring(0, startIdx) + s.substring(startIdx + 1), true) || + validPalindromeHelper(s.substring(0, endIdx) + s.substring(endIdx + 1), true); } startIdx++; endIdx--; From 83169b90b63fbb458292ef568cc3d9d8bfa09dfc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Jul 2022 07:49:03 -0700 Subject: [PATCH 0617/1640] Create Expression Add Operators.java --- Hard/Expression Add Operators.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Hard/Expression Add Operators.java diff --git a/Hard/Expression Add Operators.java b/Hard/Expression Add Operators.java new file mode 100644 index 00000000..57e56235 --- /dev/null +++ b/Hard/Expression Add Operators.java @@ -0,0 +1,29 @@ +class Solution { + public List addOperators(String num, int target) { + List result = new ArrayList<>(); + helper(num, target, "", result, 0, 0, 0); + return result; + } + + private void helper(String s, long target, String path, List result, int pos, long calculatedResult, long multed) { + if (pos == s.length()) { + if (calculatedResult == target) { + result.add(new String(path)); + } + return; + } + for (int i = pos; i < s.length(); i++) { + if (i != pos && s.charAt(pos) == '0') { + break; + } + long curr = Long.parseLong(s.substring(pos, i + 1)); + if (pos == 0) { + helper(s, target, path + curr, result, i + 1, curr, curr); + } else { + helper(s, target, path + "+" + curr, result, i + 1, calculatedResult + curr, curr); + helper(s, target, path + "-" + curr, result, i + 1, calculatedResult - curr, -curr); + helper(s, target, path + "*" + curr, result, i + 1, calculatedResult - multed + multed * curr, multed * curr); + } + } + } +} From ff07d36f02c78d1c4c8516f1d0b80b2601a6ca68 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Jul 2022 20:06:27 -0700 Subject: [PATCH 0618/1640] Create Construct Binary Tree from Preorder and Inorder Traversal.java --- ...e from Preorder and Inorder Traversal.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Medium/Construct Binary Tree from Preorder and Inorder Traversal.java diff --git a/Medium/Construct Binary Tree from Preorder and Inorder Traversal.java b/Medium/Construct Binary Tree from Preorder and Inorder Traversal.java new file mode 100644 index 00000000..1c2c1083 --- /dev/null +++ b/Medium/Construct Binary Tree from Preorder and Inorder Traversal.java @@ -0,0 +1,36 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public TreeNode buildTree(int[] preorder, int[] inorder) { + Map map = new HashMap<>(); + int[] preorderIndex = {0}; + for (int i = 0; i < inorder.length; i++) { + map.put(inorder[i], i); + } + return buildTree(preorder, 0, preorder.length - 1, map, preorderIndex); + } + + private TreeNode buildTree(int[] preorder, int left, int right, Map map, int[] preorderIndex) { + if (left > right) { + return null; + } + int rootVal = preorder[preorderIndex[0]++]; + TreeNode root = new TreeNode(rootVal); + root.left = buildTree(preorder, left, map.get(rootVal) - 1, map, preorderIndex); + root.right = buildTree(preorder, map.get(rootVal) + 1, right, map, preorderIndex); + return root; + } +} From b81d552f52ebbf43b3b250eadffe4100cabb6071 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Jul 2022 15:23:30 -0700 Subject: [PATCH 0619/1640] Update Swap For Longest Repeated Character Substring.java --- ... Longest Repeated Character Substring.java | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/Medium/Swap For Longest Repeated Character Substring.java b/Medium/Swap For Longest Repeated Character Substring.java index d09edb22..fd71081e 100644 --- a/Medium/Swap For Longest Repeated Character Substring.java +++ b/Medium/Swap For Longest Repeated Character Substring.java @@ -1,29 +1,40 @@ class Solution { public int maxRepOpt1(String text) { - int[] count = new int[26]; + int[] frequency = new int[26]; for (char c : text.toCharArray()) { - count[c - 'a']++; + frequency[c - 'a']++; } - int maxCount = 0; - int i = 0; - while (i < text.length()) { + int maxRepeatingLength = 0; + for (int i = 0; i < text.length(); i++) { char c = text.charAt(i); - int curr = i; - int currCount = 0; + int j = i; + int count = 0; int diff = 0; - // To skip the same characters before we make a swap - int swapPoint = i; - while (curr < text.length() && (text.charAt(curr) == c || diff == 0) && currCount < count[c - 'a']) { - if (text.charAt(curr) != c) { + while (j < text.length() && (c == text.charAt(j) || diff == 0) && count < frequency[c - 'a']) { + if (c != text.charAt(j)) { diff++; - swapPoint = curr - 1; + i = j - 1; } - currCount++; - curr++; + count++; + j++; } - maxCount = Math.max(maxCount, currCount); - i = swapPoint + 1; + maxRepeatingLength = Math.max(maxRepeatingLength, count); } - return maxCount; + for (int i = text.length() - 1; i >= 0; i--) { + char c = text.charAt(i); + int count = 0; + int diff = 0; + int j = i; + while (j >= 0 && (c == text.charAt(j) || diff == 0) && count < frequency[c - 'a']) { + if (c != text.charAt(j)) { + diff++; + i = j + 1; + } + count++; + j--; + } + maxRepeatingLength = Math.max(maxRepeatingLength, count); + } + return maxRepeatingLength; } } From 5c3a130a402bc975de45bd7767e4986ce1f6d58e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Jul 2022 18:08:28 -0700 Subject: [PATCH 0620/1640] Update Max Area of Island.java --- Medium/Max Area of Island.java | 57 ++++++++++++++-------------------- 1 file changed, 23 insertions(+), 34 deletions(-) diff --git a/Medium/Max Area of Island.java b/Medium/Max Area of Island.java index d1b4c461..b7fc94ba 100644 --- a/Medium/Max Area of Island.java +++ b/Medium/Max Area of Island.java @@ -1,45 +1,34 @@ class Solution { - - private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + private final int[][] DIRS = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}}; public int maxAreaOfIsland(int[][] grid) { - int rows = grid.length; + int area = 0; + int rows = grid.length; int cols = grid[0].length; - int maxArea = 0; + boolean[][] visited = new boolean[rows][cols]; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { - if (grid[i][j] != 0) { - grid[i][j] = 0; - int currentArea = getArea(grid, i, j); - maxArea = Math.max(maxArea, currentArea); - } - } - } - return maxArea; - } - - private int getArea(int[][] grid, int i, int j) { - int currentArea = 0; - Queue queue = new LinkedList<>(); - queue.add(new int[]{i, j}); - while (!queue.isEmpty()) { - int[] removed = queue.remove(); - int currX = removed[0]; - int currY = removed[1]; - currentArea++; - for (int[] dir : DIRS) { - int newX = dir[0] + currX; - int newY = dir[1] + currY; - if (isValidCoordinate(grid, newX, newY) && grid[newX][newY] == 1) { - queue.add(new int[]{newX, newY}); - grid[newX][newY] = 0; + if (!visited[i][j] && grid[i][j] == 1) { + Queue queue = new LinkedList<>(); + int currArea = 0; + queue.add(new int[]{i, j}); + visited[i][j] = true; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + currArea++; + for (int[] dir : DIRS) { + int x = removed[0] + dir[0]; + int y = removed[1] + dir[1]; + if (x >= 0 && y >= 0 && x < rows && y < cols && !visited[x][y] && grid[x][y] == 1) { + queue.add(new int[]{x, y}); + visited[x][y] = true; + } + } + } + area = Math.max(area, currArea); } } } - return currentArea; - } - - private boolean isValidCoordinate(int[][] grid, int i, int j) { - return i >= 0 && j >= 0 && i < grid.length && j < grid[0].length; + return area; } } From 3d445a6db7d9a2d9610bdc001390cf8113e96bb5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 16 Jul 2022 14:14:21 -0700 Subject: [PATCH 0621/1640] Create Out of Boundary Paths.java --- Medium/Out of Boundary Paths.java | 34 +++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Medium/Out of Boundary Paths.java diff --git a/Medium/Out of Boundary Paths.java b/Medium/Out of Boundary Paths.java new file mode 100644 index 00000000..7179a63c --- /dev/null +++ b/Medium/Out of Boundary Paths.java @@ -0,0 +1,34 @@ +class Solution { + private final int MODULUS = 1000000000 + 7; + + public int findPaths(int m, int n, int maxMove, int startRow, int startColumn) { + int dp[][] = new int[m][n]; + dp[startRow][startColumn] = 1; + int count = 0; + for (int currMove = 1; currMove <= maxMove; currMove++) { + int[][] temp = new int[m][n]; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + if (i == m - 1) { + count = (count + dp[i][j]) % MODULUS; + } + if (j == n - 1) { + count = (count + dp[i][j]) % MODULUS; + } + if (i == 0) { + count = (count + dp[i][j]) % MODULUS; + } + if (j == 0) { + count = (count + dp[i][j]) % MODULUS; + } + temp[i][j] = ( + ((i > 0 ? dp[i - 1][j] : 0) + (i < m - 1 ? dp[i + 1][j] : 0)) % MODULUS + + ((j > 0 ? dp[i][j - 1] : 0) + (j < n - 1 ? dp[i][j + 1] : 0)) % MODULUS + ) % MODULUS; + } + } + dp = temp; + } + return count; + } +} From d2f9d242644692fbaaebdcdfca36dc69050f11db Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 16 Jul 2022 16:08:30 -0700 Subject: [PATCH 0622/1640] Update Construct Binary Search Tree from Preorder Traversal.java --- ...y Search Tree from Preorder Traversal.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Medium/Construct Binary Search Tree from Preorder Traversal.java b/Medium/Construct Binary Search Tree from Preorder Traversal.java index 36407655..e2e044a8 100644 --- a/Medium/Construct Binary Search Tree from Preorder Traversal.java +++ b/Medium/Construct Binary Search Tree from Preorder Traversal.java @@ -15,18 +15,25 @@ */ class Solution { public TreeNode bstFromPreorder(int[] preorder) { - int[] idx = {0}; - return formBST(preorder, Integer.MIN_VALUE, Integer.MAX_VALUE, idx); - } - - private TreeNode formBST(int[] preorder, int min, int max, int[] idx) { - if (idx[0] == preorder.length || preorder[idx[0]] < min || preorder[idx[0]] > max) { + if (preorder.length == 0) { return null; } - int val = preorder[idx[0]++]; - TreeNode node = new TreeNode(val); - node.left = formBST(preorder, min, val, idx); - node.right = formBST(preorder, val, max, idx); - return node; + TreeNode root = new TreeNode(preorder[0]); + Stack stack = new Stack<>(); + stack.push(root); + for (int i = 1; i < preorder.length; i++) { + TreeNode node = stack.peek(); + TreeNode child = new TreeNode(preorder[i]); + while (!stack.isEmpty() && stack.peek().val < child.val) { + node = stack.pop(); + } + if (node.val < child.val) { + node.right = child; + } else { + node.left = child; + } + stack.push(child); + } + return root; } } From 1b6513f2bc7a86c72f7f7a0040f61aa97f1d4e88 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 16 Jul 2022 16:16:38 -0700 Subject: [PATCH 0623/1640] Update Minimum Moves to Convert String.java --- Easy/Minimum Moves to Convert String.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Easy/Minimum Moves to Convert String.java b/Easy/Minimum Moves to Convert String.java index 61b7a169..cc4cb2b2 100644 --- a/Easy/Minimum Moves to Convert String.java +++ b/Easy/Minimum Moves to Convert String.java @@ -4,10 +4,11 @@ public int minimumMoves(String s) { int idx = 0; while (idx < s.length()) { if (s.charAt(idx) == 'X') { - idx += 2; + idx += 3; numOfMoves++; + } else { + idx++; } - idx++; } return numOfMoves; } From 83b25f12df5d10b36e88fefcb10734133a91d497 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 16 Jul 2022 22:29:04 -0700 Subject: [PATCH 0624/1640] Create Maximum Number of Pairs in Array.java --- Easy/Maximum Number of Pairs in Array.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Maximum Number of Pairs in Array.java diff --git a/Easy/Maximum Number of Pairs in Array.java b/Easy/Maximum Number of Pairs in Array.java new file mode 100644 index 00000000..38db03b0 --- /dev/null +++ b/Easy/Maximum Number of Pairs in Array.java @@ -0,0 +1,14 @@ +class Solution { + public int[] numberOfPairs(int[] nums) { + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + int[] result = new int[2]; + for (Integer key : map.keySet()) { + result[0] += map.get(key) / 2; + result[1] += map.get(key) % 2; + } + return result; + } +} From e3841d689a8ce1d72859158f1db6e4f00badfe7c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Jul 2022 11:16:45 -0700 Subject: [PATCH 0625/1640] Create Max Sum of a Pair With Equal Sum of Digits.java --- ...um of a Pair With Equal Sum of Digits.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Max Sum of a Pair With Equal Sum of Digits.java diff --git a/Medium/Max Sum of a Pair With Equal Sum of Digits.java b/Medium/Max Sum of a Pair With Equal Sum of Digits.java new file mode 100644 index 00000000..597e0658 --- /dev/null +++ b/Medium/Max Sum of a Pair With Equal Sum of Digits.java @@ -0,0 +1,25 @@ +class Solution { + public int maximumSum(int[] nums) { + int maxSum = -1; + Map map = new HashMap<>(); + for (int num : nums) { + int digitSum = getDigitSum(num); + if (map.containsKey(digitSum)) { + maxSum = Math.max(maxSum, map.get(digitSum) + num); + map.put(digitSum, Math.max(map.get(digitSum), num)); + } else { + map.put(digitSum, num); + } + } + return maxSum; + } + + private int getDigitSum(int num) { + int sum = 0; + while (num > 0) { + sum += num % 10; + num /= 10; + } + return sum; + } +} From e21bda4327ecb01347fa022e7158691ed09609c7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Jul 2022 11:18:20 -0700 Subject: [PATCH 0626/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c09eb6d8..ddb9b55e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 1000+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1100+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count From e7800d4f3197e4a3ba8f58f7d36d205325832074 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Jul 2022 16:15:54 -0700 Subject: [PATCH 0627/1640] Create K Inverse Pairs Array.java --- Hard/K Inverse Pairs Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Hard/K Inverse Pairs Array.java diff --git a/Hard/K Inverse Pairs Array.java b/Hard/K Inverse Pairs Array.java new file mode 100644 index 00000000..0b6e0d8f --- /dev/null +++ b/Hard/K Inverse Pairs Array.java @@ -0,0 +1,17 @@ +class Solution { + public int kInversePairs(int n, int k) { + int[][] dp = new int[n + 1][k + 1]; + int mod = 1000000007; + for (int i = 1; i <= n; i++) { + for (int j = 0; j <= k; j++) { + if (j == 0) { + dp[i][j] = 1; + } else { + int curr = (dp[i - 1][j] + mod - ((j - i) >= 0 ? dp[i - 1][j - i] : 0)) % mod; + dp[i][j] = (dp[i][j - 1] + curr) % mod; + } + } + } + return ((dp[n][k] + mod - (k > 0 ? dp[n][k - 1] : 0)) % mod); + } +} From e46df51a30ff95a6c5cb033956ed89be7081536e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 18 Jul 2022 08:59:15 -0700 Subject: [PATCH 0628/1640] Update Number of Submatrices That Sum to Target.java --- ...ber of Submatrices That Sum to Target.java | 47 +++++++++---------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/Hard/Number of Submatrices That Sum to Target.java b/Hard/Number of Submatrices That Sum to Target.java index edd19f0d..d8f9dfc5 100644 --- a/Hard/Number of Submatrices That Sum to Target.java +++ b/Hard/Number of Submatrices That Sum to Target.java @@ -1,29 +1,26 @@ class Solution { - public int numSubmatrixSumTarget(int[][] matrix, int target) { - int rows = matrix.length; - int cols = matrix[0].length; - int res = 0; - - for (int i = 0; i < rows; i++) { - for (int j = 1; j < cols; j++) { - matrix[i][j] += matrix[i][j - 1]; - } - } - - for (int i = 0; i < cols; i++) { - for (int j = i; j < cols; j++) { - Map map = new HashMap<>(); - map.put(0, 1); - int sum = 0; - for (int k = 0; k < rows; k++) { - sum += matrix[k][j] - (i > 0 ? matrix[k][i - 1] : 0); - res += map.getOrDefault(sum - target, 0); - - map.put(sum, map.getOrDefault(sum, 0) + 1); - } - } + public int numSubmatrixSumTarget(int[][] matrix, int target) { + int rows = matrix.length; + int cols = matrix[0].length; + int[][] prefixSum = new int[rows + 1][cols + 1]; + for (int i = 1; i <= rows; i++) { + for (int j = 1; j <= cols; j++) { + prefixSum[i][j] = prefixSum[i - 1][j] + prefixSum[i][j - 1] - prefixSum[i - 1][j - 1] + matrix[i - 1][j - 1]; + } + } + int count = 0; + int currSum = 0; + for (int i = 1; i <= rows; i++) { + for (int j = i; j <= rows; j++) { + Map map = new HashMap<>(); + map.put(0, 1); + for (int k = 1; k <= cols; k++) { + currSum = prefixSum[j][k] - prefixSum[i - 1][k]; + count += map.getOrDefault(currSum - target, 0); + map.put(currSum, map.getOrDefault(currSum, 0) + 1); } - - return res; + } } + return count; + } } From 1c32af05e75e352614a848c68508667220c4851f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 19 Jul 2022 14:04:50 -0700 Subject: [PATCH 0629/1640] Update Find Smallest Letter Greater Than Target.java --- ...ind Smallest Letter Greater Than Target.java | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/Easy/Find Smallest Letter Greater Than Target.java b/Easy/Find Smallest Letter Greater Than Target.java index 161760cb..62e6cf03 100644 --- a/Easy/Find Smallest Letter Greater Than Target.java +++ b/Easy/Find Smallest Letter Greater Than Target.java @@ -2,23 +2,16 @@ class Solution { public char nextGreatestLetter(char[] letters, char target) { int start = 0; int end = letters.length - 1; - // ASCII char greater than 'z' - char smallestChar = '{'; + int minIdx = Integer.MAX_VALUE; while (start <= end) { int mid = (start + end) / 2; - if (letters[mid] - target > 0) { - if (smallestChar - letters[mid] > 0) { - smallestChar = letters[mid]; - } + if (letters[mid] > target) { + minIdx = mid; end = mid - 1; - } - else if (letters[mid] - target == 0) { - start = mid + 1; - } - else { + } else { start = mid + 1; } } - return smallestChar == '{' ? letters[0] : smallestChar; + return minIdx == Integer.MAX_VALUE ? letters[0] : letters[minIdx]; } } From 1a9b07cc5a01348888fb76ad2f2efbab747ccf83 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 19 Jul 2022 18:15:50 -0700 Subject: [PATCH 0630/1640] Update Number of Matching Subsequences.java --- Medium/Number of Matching Subsequences.java | 33 ++++++++------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/Medium/Number of Matching Subsequences.java b/Medium/Number of Matching Subsequences.java index aa974e8f..355527ee 100644 --- a/Medium/Number of Matching Subsequences.java +++ b/Medium/Number of Matching Subsequences.java @@ -1,33 +1,24 @@ class Solution { public int numMatchingSubseq(String s, String[] words) { - Map> map = new HashMap<>(); + Map> map = new HashMap<>(); for (int i = 0; i < words.length; i++) { - map.computeIfAbsent(words[i].charAt(0), k -> new ArrayList<>()).add(new Pair(0, i)); + map.computeIfAbsent(words[i].charAt(0), k -> new ArrayList<>()).add(new int[]{0, i}); } - int counter = 0; + int result = 0; for (char c : s.toCharArray()) { - List existingPairs = map.getOrDefault(c, new ArrayList<>()); + List values = map.getOrDefault(c, new ArrayList<>()); map.put(c, new ArrayList<>()); - for (Pair pair : existingPairs) { - int currIdx = pair.currIdx; - if (currIdx + 1 == words[pair.wordIdx].length()) { - counter++; + for (int[] val : values) { + int stringIdx = val[0]; + int wordIdx = val[1]; + if (stringIdx + 1 == words[wordIdx].length()) { + result++; } else { - map.computeIfAbsent(words[pair.wordIdx].charAt(currIdx + 1), k -> new ArrayList<>()) - .add(new Pair(currIdx + 1, pair.wordIdx)); + char nextChar = words[wordIdx].charAt(stringIdx + 1); + map.computeIfAbsent(nextChar, k -> new ArrayList<>()).add(new int[]{stringIdx + 1, wordIdx}); } } } - return counter; - } - - private static class Pair { - int currIdx; - int wordIdx; - - public Pair(int currIdx, int wordIdx) { - this.currIdx = currIdx; - this.wordIdx = wordIdx; - } + return result; } } From 38ea72c956f207252fdce6ca56b161ebfd1fd0e6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Jul 2022 08:58:49 -0700 Subject: [PATCH 0631/1640] Update Flatten Nested List Iterator.java --- Medium/Flatten Nested List Iterator.java | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Medium/Flatten Nested List Iterator.java b/Medium/Flatten Nested List Iterator.java index 30006429..5081ee2e 100644 --- a/Medium/Flatten Nested List Iterator.java +++ b/Medium/Flatten Nested List Iterator.java @@ -20,30 +20,27 @@ public class NestedIterator implements Iterator { private Stack stack; public NestedIterator(List nestedList) { - stack = new Stack<>(); + this.stack = new Stack<>(); for (int i = nestedList.size() - 1; i >= 0; i--) { - stack.push(nestedList.get(i)); + this.stack.push(nestedList.get(i)); } } @Override public Integer next() { - return stack.pop().getInteger(); + int value = this.stack.pop().getInteger(); + return value; } - + @Override public boolean hasNext() { - while (!stack.isEmpty() && !stack.peek().isInteger()) { - NestedInteger popped = stack.pop(); - if (popped == null) { - continue; - } - List list = popped.getList(); - for (int i = list.size() - 1; i >= 0; i--) { - stack.push(list.get(i)); + while (!this.stack.isEmpty() && !this.stack.peek().isInteger()) { + List ni = this.stack.pop().getList(); + for (int i = ni.size() - 1; i >= 0; i--) { + this.stack.push(ni.get(i)); } } - return !stack.isEmpty(); + return !this.stack.isEmpty(); } } From f35ddf303b3e895deab3c650cae12848c0f8d451 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Jul 2022 10:15:54 -0700 Subject: [PATCH 0632/1640] Update Mini Parser.java --- Medium/Mini Parser.java | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/Medium/Mini Parser.java b/Medium/Mini Parser.java index a900b446..6fba4058 100644 --- a/Medium/Mini Parser.java +++ b/Medium/Mini Parser.java @@ -22,49 +22,45 @@ * public void add(NestedInteger ni); * * // @return the nested list that this NestedInteger holds, if it holds a nested list - * // Return null if this NestedInteger holds a single integer + * // Return empty list if this NestedInteger holds a single integer * public List getList(); * } */ class Solution { public NestedInteger deserialize(String s) { - if (s == null || s.length() == 0) { + if (s.isEmpty()) { return null; } if (s.charAt(0) != '[') { - return new NestedInteger(Integer.valueOf(s)); + return new NestedInteger(Integer.parseInt(s)); } Stack stack = new Stack<>(); NestedInteger curr = null; - int start = 0; - int n = s.length(); - for (int end = 0; end < n; end++) { - char c = s.charAt(end); - if (c == '[') { + int leftIdx = 0; + for (int rightIdx = 0; rightIdx < s.length(); rightIdx++) { + if (s.charAt(rightIdx) == '[') { if (curr != null) { stack.push(curr); } curr = new NestedInteger(); - start = end + 1; - } - else if (c == ']') { - String num = s.substring(start, end); - if (!num.isEmpty()) { - curr.add(new NestedInteger(Integer.valueOf(num))); + leftIdx = rightIdx + 1; + } else if (s.charAt(rightIdx) == ']') { + String number = s.substring(leftIdx, rightIdx); + if (!number.isEmpty()) { + curr.add(new NestedInteger(Integer.parseInt(number))); } if (!stack.isEmpty()) { NestedInteger popped = stack.pop(); popped.add(curr); curr = popped; } - start = end + 1; - } - else if (c == ',') { - if (s.charAt(end - 1) != ']') { - String num = s.substring(start, end); - curr.add(new NestedInteger(Integer.valueOf(num))); + leftIdx = rightIdx + 1; + } else if (s.charAt(rightIdx) == ',') { + if (s.charAt(rightIdx - 1) != ']') { + String number = s.substring(leftIdx, rightIdx); + curr.add(new NestedInteger(Integer.parseInt(number))); } - start = end + 1; + leftIdx = rightIdx + 1; } } return curr; From f805e1b0a189b78cb1dd87e8072ffc08e4d753b2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Jul 2022 12:26:17 -0700 Subject: [PATCH 0633/1640] Update Find All the Lonely Nodes.java --- Easy/Find All the Lonely Nodes.java | 33 +++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/Easy/Find All the Lonely Nodes.java b/Easy/Find All the Lonely Nodes.java index 369cf65f..1cae56ab 100644 --- a/Easy/Find All the Lonely Nodes.java +++ b/Easy/Find All the Lonely Nodes.java @@ -15,19 +15,26 @@ */ class Solution { public List getLonelyNodes(TreeNode root) { - List list = new ArrayList<>(); - helper(root, null, list); - return list; - } - - private void helper(TreeNode node, TreeNode parent, List list) { - if (node == null) { - return; - } - if (parent != null && ((parent.left != null && parent.right == null) || (parent.right != null && parent.left == null))) { - list.add(node.val); + List lonelyNodes = new ArrayList<>(); + Queue queue = new LinkedList<>(); + queue.add(new TreeNode[]{root, null}); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + TreeNode[] removed = queue.remove(); + TreeNode node = removed[0]; + TreeNode parent = removed[1]; + if (parent != null && ((parent.left == node && parent.right == null) || (parent.right == node && parent.left == null))) { + lonelyNodes.add(node.val); + } + if (node.left != null) { + queue.add(new TreeNode[]{node.left, node}); + } + if (node.right != null) { + queue.add(new TreeNode[]{node.right, node}); + } + } } - helper(node.left, node, list); - helper(node.right, node, list); + return lonelyNodes; } } From a0b309dae7b5c577754efb5da835e13e7e2d3d20 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Jul 2022 12:26:55 -0700 Subject: [PATCH 0634/1640] Update Design a Stack With Increment Operation.java --- ...sign a Stack With Increment Operation.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Medium/Design a Stack With Increment Operation.java b/Medium/Design a Stack With Increment Operation.java index 34f80a99..9164401b 100644 --- a/Medium/Design a Stack With Increment Operation.java +++ b/Medium/Design a Stack With Increment Operation.java @@ -1,36 +1,38 @@ class CustomStack { - Stack stack; - int maxSize; - int[] increment; + + private Stack stack; + private int[] incrementArray; + private int maxSize; + public CustomStack(int maxSize) { + this.stack = new Stack<>(); + this.incrementArray = new int[maxSize]; this.maxSize = maxSize; - stack = new Stack<>(); - increment = new int[maxSize]; } public void push(int x) { - if (stack.size() < maxSize) { - stack.push(x); + if (this.stack.size() < this.maxSize) { + this.stack.push(x); } } public int pop() { - int idx = stack.size() - 1; + int idx = this.stack.size() - 1; if (idx < 0) { return -1; } if (idx > 0) { - increment[idx - 1] += increment[idx]; + this.incrementArray[idx - 1] += this.incrementArray[idx]; } - int ans = stack.pop() + increment[idx]; - increment[idx] = 0; - return ans; + int result = this.stack.pop() + this.incrementArray[idx]; + this.incrementArray[idx] = 0; + return result; } public void increment(int k, int val) { - int idx = Math.min(k, stack.size()) - 1; + int idx = Math.min(k, this.stack.size()) - 1; if (idx >= 0) { - increment[idx] += val; + this.incrementArray[idx] += val; } } } From 799da785c07e5f89cbdb568e21628f6ed960d8b5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Jul 2022 13:54:24 -0700 Subject: [PATCH 0635/1640] Update Majority Element.java --- Easy/Majority Element.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Easy/Majority Element.java b/Easy/Majority Element.java index 3c2b580c..0fc7be1d 100644 --- a/Easy/Majority Element.java +++ b/Easy/Majority Element.java @@ -1,13 +1,13 @@ class Solution { public int majorityElement(int[] nums) { + int majorityElement = nums[0]; int count = 0; - Integer candidate = null; for (int num : nums) { if (count == 0) { - candidate = num; + majorityElement = num; } - count += num == candidate ? 1 : -1; + count += num == majorityElement ? 1 : -1; } - return candidate; - } + return majorityElement; + } } From de2ca0b4f926a64501943c6647ac58f7b806a4d6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Jul 2022 13:54:42 -0700 Subject: [PATCH 0636/1640] Update Find First and Last Position of Element in Sorted Array.java --- ...t Position of Element in Sorted Array.java | 42 +++++++------------ 1 file changed, 14 insertions(+), 28 deletions(-) diff --git a/Medium/Find First and Last Position of Element in Sorted Array.java b/Medium/Find First and Last Position of Element in Sorted Array.java index 89775bdf..a61bd0dc 100644 --- a/Medium/Find First and Last Position of Element in Sorted Array.java +++ b/Medium/Find First and Last Position of Element in Sorted Array.java @@ -1,39 +1,25 @@ class Solution { public int[] searchRange(int[] nums, int target) { - return new int[]{binarySearchForMinIdx(nums, target), binarySearchForMaxIdx(nums, target)}; + return new int[]{binarySearchHelper(nums, target, -1), binarySearchHelper(nums, target, 1)}; } - private int binarySearchForMinIdx(int[] nums, int target) { - int leftIdx = 0; - int rightIdx = nums.length - 1; + private int binarySearchHelper(int[] nums, int target, int direction) { int idx = -1; - while (leftIdx <= rightIdx) { - int mid = (leftIdx + rightIdx) / 2; + int start = 0; + int end = nums.length - 1; + while (start <= end) { + int mid = (start + end) / 2; if (nums[mid] == target) { - idx = mid; - rightIdx = mid - 1; + idx = idx == -1 ? mid : (direction == -1 ? Math.min(mid, idx) : Math.max(mid, idx)); + if (direction == -1) { + end = mid - 1; + } else { + start = mid + 1; + } } else if (nums[mid] > target) { - rightIdx = mid - 1; + end = mid - 1; } else { - leftIdx = mid + 1; - } - } - return idx; - } - - private int binarySearchForMaxIdx(int[] nums, int target) { - int leftIdx = 0; - int rightIdx = nums.length - 1; - int idx = -1; - while (leftIdx <= rightIdx) { - int mid = (leftIdx + rightIdx) / 2; - if (nums[mid] == target) { - idx = mid; - leftIdx = mid + 1; - } else if (nums[mid] > target) { - rightIdx = mid - 1; - } else { - leftIdx = mid + 1; + start = mid + 1; } } return idx; From 7c77a36700e85a524187698ccba6fafb486a4981 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Jul 2022 17:35:33 -0700 Subject: [PATCH 0637/1640] Update Reverse Linked List II.java --- Medium/Reverse Linked List II.java | 68 +++++++++++++++++------------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/Medium/Reverse Linked List II.java b/Medium/Reverse Linked List II.java index ca17dc02..53edc4e4 100644 --- a/Medium/Reverse Linked List II.java +++ b/Medium/Reverse Linked List II.java @@ -3,37 +3,47 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { - public ListNode reverseBetween(ListNode head, int m, int n) { - if (head == null || m == n || m > n) { - return head; - } - - ListNode dummy = new ListNode(0); - dummy.next = head; - ListNode pre = dummy; - ListNode curr = dummy.next; - - for (int i = 1; i < m; i++) { - pre = curr; - curr = curr.next; - } - - ListNode node = pre; - - for (int i = m; i <= n; i++) { - ListNode tmp = curr.next; - curr.next = pre; - pre = curr; - curr = tmp; - } - - node.next.next = curr; - node.next = pre; - - return dummy.next; + public ListNode reverseBetween(ListNode head, int left, int right) { + ListNode prev = null; + ListNode start = head; + for (int i = 1; i < left; i++) { + prev = start; + start = start.next; } + ListNode end = start; + for (int i = left; i < right; i++) { + end = end.next; + } + ListNode nextToEnd = end.next; + end.next = null; + ListNode reverseStart = reverse(start); + if (prev != null) { + prev.next = reverseStart; + } + ListNode curr = reverseStart; + while (curr.next != null) { + curr = curr.next; + } + curr.next = nextToEnd; + return prev == null ? reverseStart : head; + } + + private ListNode reverse(ListNode node) { + ListNode prev = null; + ListNode next = null; + ListNode curr = node; + while (curr != null) { + next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; + } } From 4509f047ab7c4fdf2d60a0560179a2a2e306f330 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 21 Jul 2022 18:56:42 -0700 Subject: [PATCH 0638/1640] Update Partition List.java --- Medium/Partition List.java | 59 ++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/Medium/Partition List.java b/Medium/Partition List.java index 400a58f4..bb1f9dcf 100644 --- a/Medium/Partition List.java +++ b/Medium/Partition List.java @@ -3,35 +3,44 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { - public ListNode partition(ListNode head, int x) { - Queue small = new LinkedList<>(); - Queue bigOrEqual = new LinkedList<>(); - ListNode curr = head; - while (curr != null){ - if (curr.val < x) { - small.add(curr.val); - } - else { - bigOrEqual.add(curr.val); - } - curr = curr.next; + public ListNode partition(ListNode head, int x) { + ListNode lessThanHead = null; + ListNode lessThan = null; + ListNode greaterThan = null; + ListNode greaterThanHead = null; + while (head != null) { + ListNode nextNode = head.next; + if (head.val < x) { + if (lessThan == null) { + lessThan = head; + lessThanHead = lessThan; + } else { + lessThan.next = head; + lessThan = lessThan.next; } - - curr = head; - while (curr != null) { - if (!small.isEmpty()) { - curr.val = small.remove(); - } - else { - curr.val = bigOrEqual.remove(); - } - curr = curr.next; + lessThan.next = null; + } else { + if (greaterThan == null) { + greaterThan = head; + greaterThanHead = greaterThan; + } else { + greaterThan.next = head; + greaterThan = greaterThan.next; } - - return head; + greaterThan.next = null; + } + head = nextNode; } + if (lessThanHead == null || greaterThanHead == null) { + return lessThan == null ? greaterThanHead : lessThanHead; + } + lessThan.next = greaterThanHead; + return lessThanHead; + } } From c66c9575817a786aa7082fab0afb1ec6f05fd5f4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Jul 2022 09:48:08 -0700 Subject: [PATCH 0639/1640] Create Remove All Ones With Row and Column Flips II.java --- ...All Ones With Row and Column Flips II.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Remove All Ones With Row and Column Flips II.java diff --git a/Medium/Remove All Ones With Row and Column Flips II.java b/Medium/Remove All Ones With Row and Column Flips II.java new file mode 100644 index 00000000..aeeeab2f --- /dev/null +++ b/Medium/Remove All Ones With Row and Column Flips II.java @@ -0,0 +1,23 @@ +class Solution { + public int removeOnes(int[][] grid) { + return removeOnesHelper(grid, 0, 0); + } + + private int removeOnesHelper(int[][] grid, int x, int y) { + int rows = grid.length; + int cols = grid[0].length; + int result = Integer.MAX_VALUE; + int ones = 0; + for (int i = 0; i < rows; i++) { + if ((x & (1 << i)) == 0) { + for (int j = 0; j < cols; j++) { + if ((y & (1 << j)) == 0 && grid[i][j] == 1) { + ones++; + result = Math.min(result, 1 + removeOnesHelper(grid, x + (1 << i), y + (1 << j))); + } + } + } + } + return ones == 0 ? 0 : result; + } +} From 66408f0a279172e4d33768c1df8d0b14dffbc3d6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Jul 2022 10:01:06 -0700 Subject: [PATCH 0640/1640] Update Encode and Decode Strings.java --- Medium/Encode and Decode Strings.java | 32 ++++++++++++++++++--------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/Medium/Encode and Decode Strings.java b/Medium/Encode and Decode Strings.java index ec923b8f..c39d5b6a 100644 --- a/Medium/Encode and Decode Strings.java +++ b/Medium/Encode and Decode Strings.java @@ -3,8 +3,8 @@ public class Codec { // Encodes a list of strings to a single string. public String encode(List strs) { StringBuilder sb = new StringBuilder(); - for (String str : strs) { - sb.append(lengthEncode(str)).append(str); + for (String s : strs) { + sb.append(lengthEncoding(s)).append(s); } return sb.toString(); } @@ -12,24 +12,34 @@ public String encode(List strs) { // Decodes a single string to a list of strings. public List decode(String s) { int idx = 0; + List result = new ArrayList<>(); int n = s.length(); - List list = new ArrayList<>(); while (idx < n) { - int length = Integer.parseInt(s.substring(idx, idx + 10)); - idx += 10; - list.add(s.substring(idx, idx + length)); - idx += length; + int currStringLength = lengthDecoding(s.substring(idx, idx + 4)); + idx += 4; + result.add(s.substring(idx, idx + currStringLength)); + idx += currStringLength; } - return list; + return result; } - private String lengthEncode(String s) { + private String lengthEncoding(String s) { int n = s.length(); - return String.join("", Collections.nCopies(10 - String.valueOf(n).length(), "0")) + String.valueOf(n); + char[] bytes = new char[4]; + for(int i = 3; i >= 0; i--) { + bytes[3 - i] = (char) (n >> (i * 8) & 0xff); + } + return new String(bytes); + } + + private int lengthDecoding(String bytesStr) { + int result = 0; + for(char b : bytesStr.toCharArray()) + result = (result << 8) + (int)b; + return result; } } // Your Codec object will be instantiated and called as such: // Codec codec = new Codec(); // codec.decode(codec.encode(strs)); - From d85b3d385a597d2b7fb107ba6202dd0dc2bc54b1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Jul 2022 12:04:52 -0700 Subject: [PATCH 0641/1640] Update Integer To Roman.java --- Medium/Integer To Roman.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Medium/Integer To Roman.java b/Medium/Integer To Roman.java index cbc5aead..33de2ba3 100644 --- a/Medium/Integer To Roman.java +++ b/Medium/Integer To Roman.java @@ -1,14 +1,19 @@ class Solution { + + private static final int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; + private static final String[] symbols = { + "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; + public String intToRoman(int num) { - int[] divisor = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; - String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; StringBuilder sb = new StringBuilder(); - for (int i = 0; i < divisor.length; i++) { - int fact = num / divisor[i]; - while (fact-- > 0) { - sb.append(numerals[i]); + for (int i = 0; i < values.length && num > 0; i++) { + int factor = num / values[i]; + num %= values[i]; + if (factor > 0) { + for (int j = 1; j <= factor; j++) { + sb.append(symbols[i]); + } } - num = num % divisor[i]; } return sb.toString(); } From 8ed4e07a2cfd9df150bbbbd1a1c76c9e3930ba18 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Jul 2022 13:00:20 -0700 Subject: [PATCH 0642/1640] Update and rename Hard/Insert Interval.java to Medium/Insert Interval.java --- Hard/Insert Interval.java | 49 ------------------------------------- Medium/Insert Interval.java | 32 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 49 deletions(-) delete mode 100644 Hard/Insert Interval.java create mode 100644 Medium/Insert Interval.java diff --git a/Hard/Insert Interval.java b/Hard/Insert Interval.java deleted file mode 100644 index a4b6f9cc..00000000 --- a/Hard/Insert Interval.java +++ /dev/null @@ -1,49 +0,0 @@ -class Solution { - public int[][] insert(int[][] intervals, int[] newInterval) { - List list = new ArrayList<>(); - boolean merged = false; - int idx = 0; - int n = intervals.length; - while (idx < n) { - if (merged) { - list.add(intervals[idx++]); - continue; - } - if (isOverlap(intervals[idx], newInterval)) { - int start = Math.min(intervals[idx][0], newInterval[0]); - int currEnd = Math.max(intervals[idx][1], newInterval[1]); - idx++; - while (idx < n && intervals[idx][0] <= currEnd) { - currEnd = Math.max(currEnd, intervals[idx][1]); - idx++; - } - list.add(new int[]{start, currEnd}); - merged = true; - } - else if (intervals[idx][0] > newInterval[1]) { - list.add(newInterval); - list.add(intervals[idx++]); - merged = true; - } - else { - list.add(intervals[idx++]); - } - } - if (!merged) { - list.add(newInterval); - } - int[][] ans = new int[list.size()][2]; - for (int i = 0; i < list.size(); i++) { - ans[i] = list.get(i); - } - return ans; - } - - private boolean isOverlap(int[] i1, int[] i2) { - return ( - (i2[0] <= i1[1] && i2[0] >= i1[0]) || - (i2[1] >= i1[0] && i2[0] <= i1[0]) || - (i2[0] >= i1[0] && i2[1] <= i1[1]) - ); - } -} diff --git a/Medium/Insert Interval.java b/Medium/Insert Interval.java new file mode 100644 index 00000000..a263b710 --- /dev/null +++ b/Medium/Insert Interval.java @@ -0,0 +1,32 @@ +class Solution { + public int[][] insert(int[][] intervals, int[] newInterval) { + List result = new ArrayList<>(); + int idx = 0; + int newStart = newInterval[0]; + int newEnd = newInterval[1]; + while (idx < intervals.length && newStart > intervals[idx][0]) { + result.add(intervals[idx++]); + } + int[] currInterval = new int[2]; + if (result.isEmpty() || result.get(result.size() - 1)[1] < newStart) { + result.add(newInterval); + } else { + currInterval = result.remove(result.size() - 1); + currInterval[1] = Math.max(currInterval[1], newEnd); + result.add(currInterval); + } + while (idx < intervals.length) { + currInterval = intervals[idx++]; + int start = currInterval[0]; + int end = currInterval[1]; + if (result.get(result.size() - 1)[1] < start) { + result.add(currInterval); + } else { + currInterval = result.remove(result.size() - 1); + currInterval[1] = Math.max(currInterval[1], end); + result.add(currInterval); + } + } + return result.toArray(new int[result.size()][2]); + } +} From 51d5694f8a84ff70896576253af3645756d756eb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Jul 2022 07:55:23 -0700 Subject: [PATCH 0643/1640] Create Count of Smaller Numbers After Self.java --- Hard/Count of Smaller Numbers After Self.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Hard/Count of Smaller Numbers After Self.java diff --git a/Hard/Count of Smaller Numbers After Self.java b/Hard/Count of Smaller Numbers After Self.java new file mode 100644 index 00000000..30f10d48 --- /dev/null +++ b/Hard/Count of Smaller Numbers After Self.java @@ -0,0 +1,50 @@ +class Solution { + public List countSmaller(int[] nums) { + int n = nums.length; + int[] result = new int[n]; + int[] indices = new int[n]; + for (int i = 0; i < n; i++) { + indices[i] = i; + } + mergesort(indices, 0, n, result, nums); + return Arrays.stream(result).boxed().collect(Collectors.toList()); + } + + private void mergesort(int[] indices, int left, int right, int[] result, int[] nums) { + if (right - left <= 1) { + return; + } + int mid = (left + right) / 2; + mergesort(indices, left, mid, result, nums); + mergesort(indices, mid, right, result, nums); + merge(indices, left, right, mid, result, nums); + } + + private void merge(int[] indices, int left, int right, int mid, int[] result, int[] nums) { + int i = left; + int j = mid; + List temp = new ArrayList<>(); + while (i < mid && j < right) { + if (nums[indices[i]] <= nums[indices[j]]) { + result[indices[i]] += j - mid; + temp.add(indices[i]); + i++; + } else { + temp.add(indices[j]); + j++; + } + } + while (i < mid) { + result[indices[i]] += j - mid; + temp.add(indices[i]); + i++; + } + while (j < right) { + temp.add(indices[j]); + j++; + } + for (int k = left; k < right; k++) { + indices[k] = temp.get(k - left); + } + } +} From ae4c776ddd7c31ef1060f41a6a792b5dfbcad9fa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Jul 2022 14:07:26 -0700 Subject: [PATCH 0644/1640] Create Best Poker Hand.java --- Easy/Best Poker Hand.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Easy/Best Poker Hand.java diff --git a/Easy/Best Poker Hand.java b/Easy/Best Poker Hand.java new file mode 100644 index 00000000..3a648cc1 --- /dev/null +++ b/Easy/Best Poker Hand.java @@ -0,0 +1,28 @@ +class Solution { + public String bestHand(int[] ranks, char[] suits) { + char suitCard = '-'; + for (int i = 0; i < suits.length; i++) { + if (suitCard != '-' && suitCard != suits[i]) { + break; + } + if (suitCard == '-') { + suitCard = suits[i]; + } + if (i == suits.length - 1) { + return "Flush"; + } + } + Map frequencyMap = new HashMap<>(); + boolean pairFound = false; + for (int rank : ranks) { + frequencyMap.put(rank, frequencyMap.getOrDefault(rank, 0) + 1); + if (frequencyMap.get(rank) == 3) { + return "Three of a Kind"; + } + if (frequencyMap.get(rank) == 2) { + pairFound = true; + } + } + return pairFound ? "Pair" : "High Card"; + } +} From daa0f1a1f37481dd234d251ffa7378f7d5aa12a2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Jul 2022 14:17:16 -0700 Subject: [PATCH 0645/1640] Create Number of Zero-Filled Subarrays.java --- Medium/Number of Zero-Filled Subarrays.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Number of Zero-Filled Subarrays.java diff --git a/Medium/Number of Zero-Filled Subarrays.java b/Medium/Number of Zero-Filled Subarrays.java new file mode 100644 index 00000000..af77e188 --- /dev/null +++ b/Medium/Number of Zero-Filled Subarrays.java @@ -0,0 +1,14 @@ +class Solution { + public long zeroFilledSubarray(int[] nums) { + long count = 0; + long subarrayLength = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] == 0) { + count += ++subarrayLength; + } else { + subarrayLength = 0; + } + } + return count; + } +} From 61b4d226083b7771c36175ff848ab9013f2d6ab9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Jul 2022 14:44:12 -0700 Subject: [PATCH 0646/1640] Update Time Based Key-Value Store.java --- Medium/Time Based Key-Value Store.java | 42 +++++++++++++++++--------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/Medium/Time Based Key-Value Store.java b/Medium/Time Based Key-Value Store.java index d89b9c65..7433689e 100644 --- a/Medium/Time Based Key-Value Store.java +++ b/Medium/Time Based Key-Value Store.java @@ -1,29 +1,43 @@ class TimeMap { - /** Initialize your data structure here. */ - Map> map; + private Map> map; + public TimeMap() { - map = new HashMap<>(); + this.map = new HashMap<>(); } public void set(String key, String value, int timestamp) { - if (!map.containsKey(key)) { - TreeMap tMap = new TreeMap<>(); - map.put(key, tMap); - } - map.get(key).put(timestamp, value); + this.map.computeIfAbsent(key, k -> new ArrayList<>()).add(new TimeStampValuePair(timestamp, value)); } public String get(String key, int timestamp) { - if (!map.containsKey(key)) { + if (!this.map.containsKey(key)) { return ""; } - TreeMap tMap = map.get(key); - Integer lower = tMap.floorKey(timestamp); - if (lower == null) { - return ""; + List pairs = this.map.get(key); + int left = 0; + int right = pairs.size() - 1; + int maxIdx = -1; + while (left <= right) { + int mid = (left + right) / 2; + if (pairs.get(mid).timestamp <= timestamp) { + maxIdx = mid; + left = mid + 1; + } else { + right = mid - 1; + } + } + return maxIdx == -1 ? "" : pairs.get(maxIdx).value; + } + + private class TimeStampValuePair { + int timestamp; + String value; + + public TimeStampValuePair(int timestamp, String value) { + this.timestamp = timestamp; + this.value = value; } - return tMap.get(lower); } } From 107ad9f3d1b0658886e3e058fc320193dd42089f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Jul 2022 18:19:12 -0700 Subject: [PATCH 0647/1640] Create Search a 2D Matrix II.java --- Medium/Search a 2D Matrix II.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Search a 2D Matrix II.java diff --git a/Medium/Search a 2D Matrix II.java b/Medium/Search a 2D Matrix II.java new file mode 100644 index 00000000..c409ef25 --- /dev/null +++ b/Medium/Search a 2D Matrix II.java @@ -0,0 +1,18 @@ +class Solution { + public boolean searchMatrix(int[][] matrix, int target) { + int rows = matrix.length; + int cols = matrix[0].length; + int rowIdx = rows - 1; + int colIdx = 0; + while (rowIdx >= 0 && colIdx < cols) { + if (matrix[rowIdx][colIdx] > target) { + rowIdx--; + } else if (matrix[rowIdx][colIdx] < target) { + colIdx++; + } else { + return true; + } + } + return false; + } +} From 421e34498ec9744b73eff4837b5446f533feff87 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 24 Jul 2022 07:42:45 -0700 Subject: [PATCH 0648/1640] Create First Letter to Appear Twice.java --- Easy/First Letter to Appear Twice.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/First Letter to Appear Twice.java diff --git a/Easy/First Letter to Appear Twice.java b/Easy/First Letter to Appear Twice.java new file mode 100644 index 00000000..23a3f653 --- /dev/null +++ b/Easy/First Letter to Appear Twice.java @@ -0,0 +1,12 @@ +class Solution { + public char repeatedCharacter(String s) { + boolean[] seen = new boolean[26]; + for (char c : s.toCharArray()) { + if (seen[c - 'a']) { + return c; + } + seen[c - 'a'] = true; + } + return ' '; + } +} From 7627e9f03c356bcc395cc52e44366b1ae4fbc687 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 25 Jul 2022 08:01:36 -0700 Subject: [PATCH 0649/1640] Create Equal Row and Column Pairs.java --- Medium/Equal Row and Column Pairs.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Equal Row and Column Pairs.java diff --git a/Medium/Equal Row and Column Pairs.java b/Medium/Equal Row and Column Pairs.java new file mode 100644 index 00000000..7c31eb66 --- /dev/null +++ b/Medium/Equal Row and Column Pairs.java @@ -0,0 +1,25 @@ +class Solution { + public int equalPairs(int[][] grid) { + Map map = new HashMap<>(); + int rows = grid.length; + int cols = grid[0].length; + for (int i = 0; i < rows; i++) { + StringBuilder sb = new StringBuilder(); + for (int j = 0; j < cols; j++) { + sb.append(grid[i][j]).append("|"); + } + String key = sb.toString(); + map.put(key, map.getOrDefault(key, 0) + 1); + } + int count = 0; + for (int i = 0; i < cols; i++) { + StringBuilder sb = new StringBuilder(); + for (int j = 0; j < rows; j++) { + sb.append(grid[j][i]).append("|"); + } + String key = sb.toString(); + count += map.getOrDefault(key, 0); + } + return count; + } +} From 96662585aacead1eebd25919e070c034dd9951d8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 27 Jul 2022 10:05:44 -0700 Subject: [PATCH 0650/1640] Create Maximum Number of Events That Can Be Attended.java --- ...Number of Events That Can Be Attended.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Medium/Maximum Number of Events That Can Be Attended.java diff --git a/Medium/Maximum Number of Events That Can Be Attended.java b/Medium/Maximum Number of Events That Can Be Attended.java new file mode 100644 index 00000000..a69653b5 --- /dev/null +++ b/Medium/Maximum Number of Events That Can Be Attended.java @@ -0,0 +1,22 @@ +class Solution { + public int maxEvents(int[][] events) { + Arrays.sort(events, (a, b) -> a[0] - b[0]); + PriorityQueue pq = new PriorityQueue<>(); + int idx = 0; + int numOfEventsAttended = 0; + int n = events.length; + for (int currDay = 1; currDay <= 100000; currDay++) { + while (!pq.isEmpty() && pq.peek() < currDay) { + pq.poll(); + } + while (idx < n && events[idx][0] == currDay) { + pq.add(events[idx++][1]); + } + if (!pq.isEmpty()) { + pq.poll(); + numOfEventsAttended++; + } + } + return numOfEventsAttended; + } +} From 84007547f91b508bdfea227c5ab4a4cd3644557e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 27 Jul 2022 20:05:43 -0700 Subject: [PATCH 0651/1640] Rename Medium/Binary Tree Inorder Traversal.java to Easy/Binary Tree Inorder Traversal.java --- {Medium => Easy}/Binary Tree Inorder Traversal.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Medium => Easy}/Binary Tree Inorder Traversal.java (100%) diff --git a/Medium/Binary Tree Inorder Traversal.java b/Easy/Binary Tree Inorder Traversal.java similarity index 100% rename from Medium/Binary Tree Inorder Traversal.java rename to Easy/Binary Tree Inorder Traversal.java From 611e7513b6590f30e78a941cb844f96f97cc0595 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Jul 2022 10:56:51 -0700 Subject: [PATCH 0652/1640] Update Flatten 2D Vector.java --- Medium/Flatten 2D Vector.java | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/Medium/Flatten 2D Vector.java b/Medium/Flatten 2D Vector.java index d6b9b9d7..83fd6e2e 100644 --- a/Medium/Flatten 2D Vector.java +++ b/Medium/Flatten 2D Vector.java @@ -1,34 +1,25 @@ +import java.util.PrimitiveIterator.OfInt; + class Vector2D { - private int[][] vec; - private int vecIdx; - private int idx; + private Iterator iterators; + private Iterator currIterator; public Vector2D(int[][] vec) { - this.vec = vec; - this.idx = 0; - this.vecIdx = 0; - updateIdx(); - } - - private void updateIdx() { - if (this.vecIdx < this.vec.length && this.idx == this.vec[this.vecIdx].length) { - this.idx = 0; - this.vecIdx++; - } - while (this.vecIdx < this.vec.length && this.vec[this.vecIdx].length == 0) { - this.vecIdx++; - } + this.iterators = Arrays.stream(vec).map(v -> Arrays.stream(v).iterator()).iterator(); + this.currIterator = Collections.emptyIterator();; } public int next() { - int result = this.vec[this.vecIdx][this.idx++]; - updateIdx(); - return result; + hasNext(); + return (int) this.currIterator.next(); } public boolean hasNext() { - return this.vecIdx < this.vec.length; + while (!this.currIterator.hasNext() && this.iterators.hasNext()) { + this.currIterator = this.iterators.next(); + } + return this.currIterator.hasNext(); } } From 52ac9e3cb49dd022fe0fe656545ef166d10c4ecf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Jul 2022 19:52:49 -0700 Subject: [PATCH 0653/1640] Create Word Subsets.java --- Medium/Word Subsets.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Word Subsets.java diff --git a/Medium/Word Subsets.java b/Medium/Word Subsets.java new file mode 100644 index 00000000..9c93be7d --- /dev/null +++ b/Medium/Word Subsets.java @@ -0,0 +1,32 @@ +class Solution { + public List wordSubsets(String[] words1, String[] words2) { + int[] word2MaxCount = new int[26]; + for (String word : words2) { + int[] count = getFrequencyArray(word); + for (int i = 0; i < 26; i++) { + word2MaxCount[i] = Math.max(word2MaxCount[i], count[i]); + } + } + List result = new ArrayList<>(); + for (String word : words1) { + int[] count = getFrequencyArray(word); + for (int i = 0; i < 26; i++) { + if (count[i] < word2MaxCount[i]) { + break; + } + if (i == 25) { + result.add(word); + } + } + } + return result; + } + + private static int[] getFrequencyArray(String s) { + int[] count = new int[26]; + for (char c : s.toCharArray()) { + count[c - 'a']++; + } + return count; + } +} From 617557c732c039a695c468d42649cd2c138dd75d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Jul 2022 15:22:08 -0700 Subject: [PATCH 0654/1640] Update Sum of Nodes with Even-Valued Grandparent.java --- ...of Nodes with Even-Valued Grandparent.java | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/Medium/Sum of Nodes with Even-Valued Grandparent.java b/Medium/Sum of Nodes with Even-Valued Grandparent.java index d2519a60..7e113144 100644 --- a/Medium/Sum of Nodes with Even-Valued Grandparent.java +++ b/Medium/Sum of Nodes with Even-Valued Grandparent.java @@ -4,25 +4,38 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - int sum; public int sumEvenGrandparent(TreeNode root) { - sum = 0; - helper(root, null, null); - return sum; - } - - private void helper(TreeNode root, TreeNode parent, TreeNode grandparent) { - if (root == null) { - return; + int sum = 0; + Queue queue = new LinkedList<>(); + queue.add(new TreeNode[]{root, null, null}); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + TreeNode[] removed = queue.remove(); + TreeNode node = removed[0]; + TreeNode parent = removed[1]; + TreeNode grandParent = removed[2]; + if (grandParent != null && grandParent.val % 2 == 0) { + sum += node.val; + } + if (node.left != null) { + queue.add(new TreeNode[]{node.left, node, parent}); + } + if (node.right != null) { + queue.add(new TreeNode[]{node.right, node, parent}); + } + } } - if (grandparent != null && grandparent.val % 2 == 0) { - sum += root.val; - } - helper(root.left, root, parent); - helper(root.right, root, parent); + return sum; } } From 34ffbccdaed47f9432fad0ff24b9d091c49e9d26 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Jul 2022 15:22:45 -0700 Subject: [PATCH 0655/1640] Update and rename Easy/Reorder Data in Log Files.java to Medium/Reorder Data in Log Files.java --- {Easy => Medium}/Reorder Data in Log Files.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) rename {Easy => Medium}/Reorder Data in Log Files.java (66%) diff --git a/Easy/Reorder Data in Log Files.java b/Medium/Reorder Data in Log Files.java similarity index 66% rename from Easy/Reorder Data in Log Files.java rename to Medium/Reorder Data in Log Files.java index e924d7ab..cc14332b 100644 --- a/Easy/Reorder Data in Log Files.java +++ b/Medium/Reorder Data in Log Files.java @@ -3,16 +3,15 @@ public String[] reorderLogFiles(String[] logs) { List letterLogs = new ArrayList<>(); List digitLogs = new ArrayList<>(); for (String log : logs) { - String[] split = log.split("\\s+"); - if (Character.isDigit(split[1].charAt(0))) { + if (Character.isDigit(log.split("\\s+")[1].charAt(0))) { digitLogs.add(log); } else { letterLogs.add(log); } } letterLogs.sort(Comparator.comparing((String o) -> o.substring(o.indexOf(' ') + 1)) - .thenComparing(o -> o.substring(0, o.indexOf(' ')))); + .thenComparing(o -> o.split("\\s+")[0])); letterLogs.addAll(digitLogs); - return letterLogs.toArray(new String[]{}); - } + return letterLogs.toArray(new String[0]); + } } From 70bead34461690567182db34b1a2a3110afde5d5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Jul 2022 16:39:32 -0700 Subject: [PATCH 0656/1640] Update Number of Students Unable to Eat Lunch.java --- ...umber of Students Unable to Eat Lunch.java | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/Easy/Number of Students Unable to Eat Lunch.java b/Easy/Number of Students Unable to Eat Lunch.java index 8a20c5c6..3902c4c1 100644 --- a/Easy/Number of Students Unable to Eat Lunch.java +++ b/Easy/Number of Students Unable to Eat Lunch.java @@ -1,21 +1,13 @@ class Solution { public int countStudents(int[] students, int[] sandwiches) { - int studentIdx = 0; - int sandwichIdx = 0; - Map studentState = new HashMap<>(); - while (sandwichIdx < sandwiches.length) { - if (sandwiches[sandwichIdx] == students[studentIdx]) { - sandwichIdx++; - students[studentIdx] = -1; - } else if (students[studentIdx] != -1) { - // Check to see if we have finished one complete iteration without consuming any sandwich - if (studentState.containsKey(studentIdx) && studentState.get(studentIdx) == sandwichIdx) { - break; - } - studentState.put(studentIdx, sandwichIdx); - } - studentIdx = studentIdx == students.length - 1 ? 0 : studentIdx + 1; + int[] preferenceCount = new int[2]; + for (int preference : students) { + preferenceCount[preference]++; } - return sandwichIdx == sandwiches.length ? 0 : sandwiches.length - sandwichIdx; + int i = 0; + for (i = 0; i < sandwiches.length && preferenceCount[sandwiches[i]] > 0; i++) { + preferenceCount[sandwiches[i]]--; + } + return sandwiches.length - i; } } From 25de70cc455d2f14d595c5276cde5dcc64ceb12f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Jul 2022 16:40:01 -0700 Subject: [PATCH 0657/1640] Update Insert into a Binary Search Tree.java --- Medium/Insert into a Binary Search Tree.java | 27 ++++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Medium/Insert into a Binary Search Tree.java b/Medium/Insert into a Binary Search Tree.java index 7131fd50..c7d1015b 100644 --- a/Medium/Insert into a Binary Search Tree.java +++ b/Medium/Insert into a Binary Search Tree.java @@ -12,16 +12,27 @@ * this.right = right; * } * } -*/ + */ class Solution { public TreeNode insertIntoBST(TreeNode root, int val) { - if (root == null) { - return new TreeNode(val); - } else if (root.val < val) { - root.right = insertIntoBST(root.right, val); - } else { - root.left = insertIntoBST(root.left, val); + TreeNode node = root; + while (node != null) { + if (val > node.val) { + if (node.right == null) { + node.right = new TreeNode(val); + return root; + } else { + node = node.right; + } + } else { + if (node.left == null) { + node.left = new TreeNode(val); + return root; + } else { + node = node.left; + } + } } - return root; + return new TreeNode(val); } } From eb7a9a24fa5d3c91d94f61cd98ba06b66b26b832 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Jul 2022 07:13:13 -0700 Subject: [PATCH 0658/1640] Create Make Array Zero by Subtracting Equal Amounts.java --- Easy/Make Array Zero by Subtracting Equal Amounts.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Make Array Zero by Subtracting Equal Amounts.java diff --git a/Easy/Make Array Zero by Subtracting Equal Amounts.java b/Easy/Make Array Zero by Subtracting Equal Amounts.java new file mode 100644 index 00000000..304e3e92 --- /dev/null +++ b/Easy/Make Array Zero by Subtracting Equal Amounts.java @@ -0,0 +1,5 @@ +class Solution { + public int minimumOperations(int[] nums) { + return Arrays.stream(nums).boxed().filter(n -> n > 0).collect(Collectors.toSet()).size(); + } +} From 6a8443fcb6f617dde928d2ee7ef708700f6f1071 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Jul 2022 07:34:27 -0700 Subject: [PATCH 0659/1640] Update Range Sum Query - Mutable.java --- Medium/Range Sum Query - Mutable.java | 107 +++++++++++--------------- 1 file changed, 43 insertions(+), 64 deletions(-) diff --git a/Medium/Range Sum Query - Mutable.java b/Medium/Range Sum Query - Mutable.java index 0ff8bbbb..5faab61f 100644 --- a/Medium/Range Sum Query - Mutable.java +++ b/Medium/Range Sum Query - Mutable.java @@ -1,71 +1,50 @@ class NumArray { - int[] fen; - int[] nums; - int n; - public NumArray(int[] nums) { - this.nums = nums; - n = nums.length; - fen = new int[n + 1]; - init(); - } - - private void init () { - if (n == 0) { - return; - } - - // Compute the pre-sum - fen[1] = nums[0]; - for (int i = 1; i < n; i++) { - fen[i + 1] = fen[i] + nums[i]; - } - - for (int i = n; i > 0; i--) { - // Removing the value of parent for each node - int parent = i - (i & -i); - if (parent >= 0) { - fen[i] -= fen[parent]; - } - } - } - - public void update(int i, int val) { - // Find the difference between previous and current value - int extra = val - nums[i]; - - // Update the actual array with the new val - nums[i] = val; - - // Update the tree with the extra value to all the parents - increment(i, extra); - } - - private void increment (int i, int extra) { - i++; - while (i <= n) { - fen[i] += extra; - i = i + (i & -i); - } - } - - public int sumRange(int i, int j) { - // Similar to pre sum from 0 to j - pre sum from 0 to i - return getSum(j + 1) - getSum(i); - } - - private int getSum (int i) { - int res = 0; - while (i > 0) { - res += fen[i]; - i = i - (i & -i); - } - - return res; + + private int[] nums; + private int[] indexTree; + private int n; + + public NumArray(int[] nums) { + this.nums = nums; + this.n = nums.length; + this.indexTree = new int[n + 1]; + for (int i = 0; i < n; i++) { + initialize(i, nums[i]); } + } + + public void update(int index, int val) { + int diff = val - this.nums[index]; + this.nums[index] = val; + initialize(index, diff); + } + + public int sumRange(int left, int right) { + return getSum(right) - getSum(left - 1); + } + + private void initialize(int idx, int value) { + idx++; + while (idx <= this.n) { + this.indexTree[idx] += value; + idx += (idx & -idx); + } + } + + private int getSum(int i) { + int sum = 0; + i++; + while (i > 0) { + sum += this.indexTree[i]; + i -= (i & -i); + } + return sum; + } } + /** * Your NumArray object will be instantiated and called as such: * NumArray obj = new NumArray(nums); - * obj.update(i,val); - * int param_2 = obj.sumRange(i,j); + * obj.update(index,val); + * int param_2 = obj.sumRange(left,right); */ From b9182ea9715a7ef6327d40e1d2601dfb0846a846 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Jul 2022 14:14:20 -0700 Subject: [PATCH 0660/1640] Create Maximum Number of Groups Entering a Competition.java --- ...mum Number of Groups Entering a Competition.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Maximum Number of Groups Entering a Competition.java diff --git a/Medium/Maximum Number of Groups Entering a Competition.java b/Medium/Maximum Number of Groups Entering a Competition.java new file mode 100644 index 00000000..a1794f7a --- /dev/null +++ b/Medium/Maximum Number of Groups Entering a Competition.java @@ -0,0 +1,13 @@ +class Solution { + public int maximumGroups(int[] grades) { + int numOfGroups = 0; + int n = grades.length; + int groupSize = 1; + int totalGrades = 0; + while (totalGrades < n) { + totalGrades += ++groupSize; + numOfGroups++; + } + return numOfGroups; + } +} From 167f3df745c8c151e780a774cb019b84c9ebb32a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 1 Aug 2022 07:52:49 -0700 Subject: [PATCH 0661/1640] Update Find Permutation.java --- Medium/Find Permutation.java | 38 ++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/Medium/Find Permutation.java b/Medium/Find Permutation.java index 2103c84f..0a081e7c 100644 --- a/Medium/Find Permutation.java +++ b/Medium/Find Permutation.java @@ -1,23 +1,27 @@ class Solution { public int[] findPermutation(String s) { - int[] ans = new int[s.length() + 1]; - Stack stack = new Stack<>(); - int idx = 0; - for (int i = 1; i <= s.length(); i++) { - if (s.charAt(i - 1) == 'I') { - stack.push(i); - while (!stack.isEmpty()) { - ans[idx++] = stack.pop(); - } - } - else { - stack.push(i); + int n = s.length(); + int[] result = new int[n + 1]; + for (int i = 0; i < result.length; i++) { + result[i] = i + 1; + } + int idx = 1; + while (idx <= n) { + int k = idx; + while (idx <= n && s.charAt(idx - 1) == 'D') { + idx++; } + reverse(result, k - 1, idx); + idx++; } - stack.push(s.length() + 1); - while (!stack.isEmpty()) { - ans[idx++] = stack.pop(); + return result; + } + + private void reverse(int[] result, int start, int end) { + for (int i = 0; i < (end - start) / 2; i++) { + int temp = result[i + start]; + result[i + start] = result[end - i - 1]; + result[end - i - 1] = temp; } - return ans; - } + } } From 822e5a2ab524938dc2c94becb195d75d9087511b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 1 Aug 2022 10:24:43 -0700 Subject: [PATCH 0662/1640] Update Monotonic Array.java --- Easy/Monotonic Array.java | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Easy/Monotonic Array.java b/Easy/Monotonic Array.java index c523cef1..4a348d71 100644 --- a/Easy/Monotonic Array.java +++ b/Easy/Monotonic Array.java @@ -1,17 +1,20 @@ class Solution { public boolean isMonotonic(int[] nums) { - if (nums.length < 2) { - return true; - } - Boolean increasing = null; - for (int i = 1; i < nums.length; i++) { - if (nums[i] == nums[i - 1] && increasing == null) { - continue; + int idx = 0; + int sign = 0; + while (idx < nums.length - 1 && sign == 0) { + if (nums[idx] < nums[idx + 1]) { + sign = 1; + } else if (nums[idx] > nums[idx + 1]) { + sign = -1; } - increasing = increasing == null ? nums[i] > nums[i - 1] : increasing; - if ((nums[i] > nums[i - 1] && !increasing) || (nums[i] < nums[i - 1] && increasing)) { + idx++; + } + while (idx < nums.length - 1) { + if ((sign == 1 && nums[idx] > nums[idx + 1]) || (sign == -1 && nums[idx] < nums[idx + 1])) { return false; } + idx++; } return true; } From 69b93f9a36248173bf152b5dbf4cadd45209b667 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 1 Aug 2022 12:11:25 -0700 Subject: [PATCH 0663/1640] Update 3Sum.java --- Medium/3Sum.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Medium/3Sum.java b/Medium/3Sum.java index d054e15a..fc4f25fa 100644 --- a/Medium/3Sum.java +++ b/Medium/3Sum.java @@ -1,22 +1,21 @@ class Solution { public List> threeSum(int[] nums) { - Arrays.sort(nums); - List> result = new ArrayList<>(); - for (int i = 0; i < nums.length && nums[i] <= 0; i++) { - if (i == 0 || nums[i - 1] != nums[i]) { - Set set = new HashSet<>(); + Set> result = new HashSet<>(); + Set duplicates = new HashSet<>(); + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + if (duplicates.add(nums[i])) { for (int j = i + 1; j < nums.length; j++) { - int target = -1 * (nums[i] + nums[j]); - if (set.contains(target)) { - result.add(Arrays.asList(nums[i], nums[j], target)); - while (j + 1 < nums.length && nums[j] == nums[j + 1]) { - j++; - } + int target = -nums[i] - nums[j]; + if (map.containsKey(target) && map.get(target) == i) { + List temp = Arrays.asList(nums[i], nums[j], target); + Collections.sort(temp); + result.add(temp); } - set.add(nums[j]); + map.put(nums[j], i); } } } - return result; + return new ArrayList<>(result); } } From 759fd3a55b7da740915eb668941c58168ce00c73 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 1 Aug 2022 13:49:00 -0700 Subject: [PATCH 0664/1640] Update Fruit Into Baskets.java --- Medium/Fruit Into Baskets.java | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Medium/Fruit Into Baskets.java b/Medium/Fruit Into Baskets.java index ad4dba0b..79889371 100644 --- a/Medium/Fruit Into Baskets.java +++ b/Medium/Fruit Into Baskets.java @@ -1,22 +1,21 @@ class Solution { - public int totalFruit(int[] tree) { + public int totalFruit(int[] fruits) { Map map = new HashMap<>(); - int maxCount = 0; - int start = 0; - int end = 0; - int n = tree.length; - while (end < n) { - map.put(tree[end], map.getOrDefault(tree[end], 0) + 1); - while (map.size() > 2) { - map.put(tree[start], map.get(tree[start]) - 1); - if (map.get(tree[start]) == 0) { - map.remove(tree[start]); + int startIdx = 0; + int endIdx = 0; + int n = fruits.length; + int maxPickedCount = 0; + while (endIdx < n) { + map.put(fruits[endIdx], map.getOrDefault(fruits[endIdx++], 0) + 1); + while (startIdx < endIdx && map.size() > 2) { + map.put(fruits[startIdx], map.get(fruits[startIdx]) - 1); + if (map.get(fruits[startIdx]) == 0) { + map.remove(fruits[startIdx]); } - start++; + startIdx++; } - end++; - maxCount = Math.max(maxCount, end - start); + maxPickedCount = Math.max(maxPickedCount, endIdx - startIdx); } - return maxCount; - } + return maxPickedCount; + } } From c84515c81a4f6c43625bd93b6cc24f108ecd2b1e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 2 Aug 2022 08:37:31 -0700 Subject: [PATCH 0665/1640] Update Kth Smallest Element in a Sorted Matrix.java --- Medium/Kth Smallest Element in a Sorted Matrix.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Medium/Kth Smallest Element in a Sorted Matrix.java b/Medium/Kth Smallest Element in a Sorted Matrix.java index 1eaf99e7..37054ddf 100644 --- a/Medium/Kth Smallest Element in a Sorted Matrix.java +++ b/Medium/Kth Smallest Element in a Sorted Matrix.java @@ -1,11 +1,7 @@ class Solution { public int kthSmallest(int[][] matrix, int k) { int numOfRows = matrix.length; - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(int[] o1, int[] o2) { - return o1[2] - o2[2]; - } - }); + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o1[2] - o2[2]); for (int j = 0; j < numOfRows; j++) { pq.add(new int[]{0, j, matrix[0][j]}); } From 13cdaa8f05cca51504c46ebe0a9b469d1623451b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 2 Aug 2022 15:59:47 -0700 Subject: [PATCH 0666/1640] Update Average of Levels in Binary Tree.java --- Easy/Average of Levels in Binary Tree.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Easy/Average of Levels in Binary Tree.java b/Easy/Average of Levels in Binary Tree.java index dad5fc3e..28bd78a2 100644 --- a/Easy/Average of Levels in Binary Tree.java +++ b/Easy/Average of Levels in Binary Tree.java @@ -15,18 +15,15 @@ */ class Solution { public List averageOfLevels(TreeNode root) { - List averages = new ArrayList<>(); - if (root == null) { - return averages; - } + List result = new ArrayList<>(); Queue queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { - long sum = 0; int size = queue.size(); + double total = 0.0; for (int i = 0; i < size; i++) { TreeNode removed = queue.remove(); - sum += removed.val; + total += removed.val; if (removed.left != null) { queue.add(removed.left); } @@ -34,8 +31,8 @@ public List averageOfLevels(TreeNode root) { queue.add(removed.right); } } - averages.add(((double) sum) / size); + result.add(total / size); } - return averages; + return result; } } From 3a95bfa764a12361f428fc55043eb8594e64e76b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 3 Aug 2022 15:58:08 -0700 Subject: [PATCH 0667/1640] Update Pascal's Triangle II.java --- Easy/Pascal's Triangle II.java | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Easy/Pascal's Triangle II.java b/Easy/Pascal's Triangle II.java index 219b923a..9890275c 100644 --- a/Easy/Pascal's Triangle II.java +++ b/Easy/Pascal's Triangle II.java @@ -1,21 +1,17 @@ class Solution { public List getRow(int rowIndex) { - int count = 0; - List list = new ArrayList<>(); - List prev = new ArrayList<>(); + List lastRow = new ArrayList<>(); for (int i = 0; i <= rowIndex; i++) { - prev = list; - List temp = new ArrayList<>(); + List copy = new ArrayList<>(lastRow); + lastRow.clear(); for (int j = 0; j <= i; j++) { if (j == 0 || j == i) { - temp.add(1); - } - else { - temp.add(prev.get(j - 1) + prev.get(j)); + lastRow.add(1); + } else { + lastRow.add(copy.get(j - 1) + copy.get(j)); } } - list = temp; } - return list; + return lastRow; } } From 152c7a270d5a260e3f3dfe624eb0b4ed71c649cb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Aug 2022 07:56:05 -0700 Subject: [PATCH 0668/1640] Create Mirror Reflection.java --- Medium/Mirror Reflection.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Mirror Reflection.java diff --git a/Medium/Mirror Reflection.java b/Medium/Mirror Reflection.java new file mode 100644 index 00000000..c5577abc --- /dev/null +++ b/Medium/Mirror Reflection.java @@ -0,0 +1,17 @@ +class Solution { + public int mirrorReflection(int p, int q) { + int extention = q; + int reflection = p; + while (extention % 2 == 0 && reflection % 2 == 0) { + extention /= 2; + reflection /= 2; + } + if (extention % 2 == 0 && reflection % 2 != 0) { + return 0; + } else if (extention % 2 != 0 && reflection % 2 == 0) { + return 2; + } else { + return 1; + } + } +} From aef8f1a2b17e19337f263acf55d840cfa2dbe6be Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Aug 2022 08:08:49 -0700 Subject: [PATCH 0669/1640] Update Base 7.java --- Easy/Base 7.java | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Easy/Base 7.java b/Easy/Base 7.java index 88c05c8a..210d6c39 100644 --- a/Easy/Base 7.java +++ b/Easy/Base 7.java @@ -1,12 +1,16 @@ class Solution { - public String convertToBase7(int num) { - if (num == 0) return "0"; - int temp = Math.abs(num); - StringBuilder sb = new StringBuilder(""); - while (temp > 0) { - sb.append(String.valueOf(temp%7)); - temp /= 7; - } - return num < 0 ? "-" + sb.reverse().toString() : sb.reverse().toString(); + public String convertToBase7(int num) { + StringBuilder sb = new StringBuilder(); + char sign = num < 0 ? '-' : ' '; + num = Math.abs(num); + while (num > 0) { + sb.append(num % 7); + num /= 7; } + String representation = sb.length() == 0 ? "0" : sb.reverse().toString(); + if (sign == '-') { + return sign + representation; + } + return representation; + } } From cd66f4149f7d0795b875f4ce78ae6d325d5b2d13 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Aug 2022 08:09:44 -0700 Subject: [PATCH 0670/1640] Update Binary Search Tree to Greater Sum Tree.java --- ...inary Search Tree to Greater Sum Tree.java | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/Medium/Binary Search Tree to Greater Sum Tree.java b/Medium/Binary Search Tree to Greater Sum Tree.java index 91c63aa7..912e0699 100644 --- a/Medium/Binary Search Tree to Greater Sum Tree.java +++ b/Medium/Binary Search Tree to Greater Sum Tree.java @@ -4,32 +4,30 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public TreeNode bstToGst(TreeNode root) { - if (root == null) { - return null; - } - TreeNode curr = root; - Stack stack = new Stack<>(); int sum = 0; - pushRight(stack, curr); - while (!stack.isEmpty()) { - TreeNode removed = stack.pop(); - sum += removed.val; - removed.val = sum; - TreeNode leftNode = removed.left; - pushRight(stack, leftNode); + TreeNode node = root; + Stack stack = new Stack<>(); + while (!stack.isEmpty() || node != null) { + while (node != null) { + stack.add(node); + node = node.right; + } + node = stack.pop(); + sum += node.val; + node.val = sum; + node = node.left; } return root; } - - private void pushRight(Stack stack, TreeNode curr) { - while (curr != null) { - stack.push(curr); - curr = curr.right; - } - } } From ffee8b820eeda381fdbbdb4adc93c76ff1478e25 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Aug 2022 08:22:06 -0700 Subject: [PATCH 0671/1640] Update Linked List in Binary Tree.java --- Medium/Linked List in Binary Tree.java | 32 +++++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/Medium/Linked List in Binary Tree.java b/Medium/Linked List in Binary Tree.java index 065a25c3..9ba90a87 100644 --- a/Medium/Linked List in Binary Tree.java +++ b/Medium/Linked List in Binary Tree.java @@ -3,7 +3,9 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ /** @@ -12,31 +14,33 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public boolean isSubPath(ListNode head, TreeNode root) { + if (head == null) { + return true; + } if (root == null) { return false; } - return ( - helper(head, root) || - isSubPath(head, root.left) || - isSubPath(head, root.right) - ); - } + return dfs(head, root) || isSubPath(head, root.left) || isSubPath(head, root.right); + } - private boolean helper(ListNode head, TreeNode root) { + private boolean dfs(ListNode head, TreeNode root) { if (head == null) { return true; } - if (head != null && root == null) { - return false; - } - if (head.val != root.val) { + if (root == null) { return false; } - return helper(head.next, root.left) || helper(head.next, root.right); + return head.val == root.val && (dfs(head.next, root.left) || dfs(head.next, root.right)); } } From 5154e4d401fc0f95abaea6eda46a166a9f18023a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Aug 2022 17:32:25 -0700 Subject: [PATCH 0672/1640] Create Traffic Light Controlled Intersection.java --- ...Traffic Light Controlled Intersection.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Concurrency/Traffic Light Controlled Intersection.java diff --git a/Concurrency/Traffic Light Controlled Intersection.java b/Concurrency/Traffic Light Controlled Intersection.java new file mode 100644 index 00000000..3328a2e8 --- /dev/null +++ b/Concurrency/Traffic Light Controlled Intersection.java @@ -0,0 +1,26 @@ +class TrafficLight { + + private boolean greenOnRoadA; + private ReentrantLock lock; + + public TrafficLight() { + this.greenOnRoadA = true; + this.lock = new ReentrantLock(); + } + + public void carArrived( + int carId, // ID of the car + int roadId, // ID of the road the car travels on. Can be 1 (road A) or 2 (road B) + int direction, // Direction of the car + Runnable turnGreen, // Use turnGreen.run() to turn light to green on current road + Runnable crossCar // Use crossCar.run() to make car cross the intersection + ) { + this.lock.lock(); + if(greenOnRoadA && roadId==2 || !greenOnRoadA && roadId==1){ + greenOnRoadA = !greenOnRoadA; + turnGreen.run(); + } + crossCar.run(); + this.lock.unlock(); + } +} From 2f8fc2271bf1b5200234b835c459f92d07e09c77 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 5 Aug 2022 07:54:38 -0700 Subject: [PATCH 0673/1640] Create Combination Sum IV.java --- Medium/Combination Sum IV.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Combination Sum IV.java diff --git a/Medium/Combination Sum IV.java b/Medium/Combination Sum IV.java new file mode 100644 index 00000000..bc8c1924 --- /dev/null +++ b/Medium/Combination Sum IV.java @@ -0,0 +1,25 @@ +class Solution { + public int combinationSum4(int[] nums, int target) { + Integer[] dp = new Integer[target + 1]; + return getCount(target, nums, dp); + } + + public int getCount(int target, int[] nums, Integer[] dp) { + if (dp[target] != null) { + return dp[target]; + } + if (target == 0) { + return 1; + } + if (target < 0) { + return 0; + } + int total = 0; + for (int num : nums) { + if (target >= num) { + total += getCount(target - num, nums, dp); + } + } + return dp[target] = total; + } +} From 7fa03479dd410655e14e613f51c71e698ee02090 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 5 Aug 2022 08:02:06 -0700 Subject: [PATCH 0674/1640] Update Remove Linked List Elements.java --- Easy/Remove Linked List Elements.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Easy/Remove Linked List Elements.java b/Easy/Remove Linked List Elements.java index 9bc15504..41684468 100644 --- a/Easy/Remove Linked List Elements.java +++ b/Easy/Remove Linked List Elements.java @@ -10,16 +10,16 @@ */ class Solution { public ListNode removeElements(ListNode head, int val) { - while (head != null && head.val == val) { - head = head.next; + ListNode newHead = null; + ListNode curr = head; + while (curr != null && curr.val == val) { + curr = curr.next; } - ListNode newHead = head; - ListNode curr = newHead; + newHead = curr; while (curr != null && curr.next != null) { if (curr.next.val == val) { curr.next = curr.next.next; - } - else { + } else { curr = curr.next; } } From 8ca5525f53b1d3e7ee5419c35cd5d45e8c63fd12 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 5 Aug 2022 08:08:36 -0700 Subject: [PATCH 0675/1640] Update Check if Array Is Sorted and Rotated.java --- Easy/Check if Array Is Sorted and Rotated.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/Easy/Check if Array Is Sorted and Rotated.java b/Easy/Check if Array Is Sorted and Rotated.java index 4016c5b1..6ecc109d 100644 --- a/Easy/Check if Array Is Sorted and Rotated.java +++ b/Easy/Check if Array Is Sorted and Rotated.java @@ -1,17 +1,14 @@ class Solution { public boolean check(int[] nums) { - boolean rotationFound = false; + boolean rotated = false; for (int i = 0; i < nums.length - 1; i++) { if (nums[i] > nums[i + 1]) { - if (rotationFound) { + if (rotated) { return false; } - rotationFound = true; + rotated = true; } } - if (rotationFound && nums[nums.length - 1] > nums[0]) { - return false; - } - return true; + return !rotated || nums[nums.length - 1] <= nums[0]; } } From 9689c9cdbf9a1e4466376b7cf5924c9f5de2f3e2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 6 Aug 2022 08:04:50 -0700 Subject: [PATCH 0676/1640] Create Poor Pigs.java --- Hard/Poor Pigs.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Hard/Poor Pigs.java diff --git a/Hard/Poor Pigs.java b/Hard/Poor Pigs.java new file mode 100644 index 00000000..275fb45a --- /dev/null +++ b/Hard/Poor Pigs.java @@ -0,0 +1,6 @@ +class Solution { + public int poorPigs(int buckets, int minutesToDie, int minutesToTest) { + int states = minutesToTest / minutesToDie + 1; + return (int) Math.ceil(Math.log(buckets) / Math.log(states)); + } +} From e686534a2ec71215a98b45098a7138676b3cbc75 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 7 Aug 2022 07:24:24 -0700 Subject: [PATCH 0677/1640] Create Count Vowels Permutation.java --- Hard/Count Vowels Permutation.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Hard/Count Vowels Permutation.java diff --git a/Hard/Count Vowels Permutation.java b/Hard/Count Vowels Permutation.java new file mode 100644 index 00000000..a0a2c36c --- /dev/null +++ b/Hard/Count Vowels Permutation.java @@ -0,0 +1,24 @@ +class Solution { + public int countVowelPermutation(int n) { + long aCount = 1; + long eCount = 1; + long iCount = 1; + long oCount = 1; + long uCount = 1; + final int MOD = 1000000007; + for (int i = 1; i < n; i++) { + long aCountNew = (eCount + iCount + uCount) % MOD; + long eCountNew = (aCount + iCount) % MOD; + long iCountNew = (eCount + oCount) % MOD; + long oCountNew = (iCount) % MOD; + long uCountNew = (iCount + oCount) % MOD; + aCount = aCountNew; + eCount = eCountNew; + iCount = iCountNew; + oCount = oCountNew; + uCount = uCountNew; + } + long result = (aCount + eCount + iCount + oCount + uCount) % MOD; + return (int) result; + } +} From f68218e6f086be2b9126ad6e64ae9180b5607429 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 7 Aug 2022 08:03:48 -0700 Subject: [PATCH 0678/1640] Create Merge Similar Items.java --- Easy/Merge Similar Items.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Merge Similar Items.java diff --git a/Easy/Merge Similar Items.java b/Easy/Merge Similar Items.java new file mode 100644 index 00000000..d9f95996 --- /dev/null +++ b/Easy/Merge Similar Items.java @@ -0,0 +1,17 @@ +class Solution { + public List> mergeSimilarItems(int[][] items1, int[][] items2) { + Map map = new HashMap<>(); + for (int[] item : items1) { + map.put(item[0], map.getOrDefault(item[0], 0) + item[1]); + } + for (int[] item : items2) { + map.put(item[0], map.getOrDefault(item[0], 0) + item[1]); + } + List> result = new ArrayList<>(); + for (Integer key : map.keySet()) { + result.add(Arrays.asList(key, map.get(key))); + } + Collections.sort(result, Comparator.comparing(o -> o.get(0))); + return result; + } +} From 2c654bd46ae6285f15517f09aae683ffd0d09f69 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 7 Aug 2022 08:09:12 -0700 Subject: [PATCH 0679/1640] Create Number of Arithmetic Triplets.java --- Easy/Number of Arithmetic Triplets.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Number of Arithmetic Triplets.java diff --git a/Easy/Number of Arithmetic Triplets.java b/Easy/Number of Arithmetic Triplets.java new file mode 100644 index 00000000..8094d932 --- /dev/null +++ b/Easy/Number of Arithmetic Triplets.java @@ -0,0 +1,13 @@ +class Solution { + public int arithmeticTriplets(int[] nums, int diff) { + int count = 0; + Set set = new HashSet<>(); + for (int num : nums) { + if (set.contains(num - diff) && set.contains(num - 2 * diff)) { + count++; + } + set.add(num); + } + return count; + } +} From 4d9c7783fdf35961c0a5696727ff58c691887135 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 8 Aug 2022 09:24:02 -0700 Subject: [PATCH 0680/1640] Create Count Number of Bad Pairs.java --- Medium/Count Number of Bad Pairs.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Count Number of Bad Pairs.java diff --git a/Medium/Count Number of Bad Pairs.java b/Medium/Count Number of Bad Pairs.java new file mode 100644 index 00000000..e1002897 --- /dev/null +++ b/Medium/Count Number of Bad Pairs.java @@ -0,0 +1,12 @@ +class Solution { + public long countBadPairs(int[] nums) { + long result = 0; + Map map = new HashMap<>(); + for (int i = 0; i < nums.length; i++) { + int prevCount = map.getOrDefault(i - nums[i], 0); + result += i - prevCount; + map.put(i - nums[i], prevCount + 1); + } + return result; + } +} From a19ff6cc3b70f2459251fb8ee41c3fc1b1719f89 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 8 Aug 2022 09:34:03 -0700 Subject: [PATCH 0681/1640] Create Reachable Nodes With Restrictions.java --- Medium/Reachable Nodes With Restrictions.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/Reachable Nodes With Restrictions.java diff --git a/Medium/Reachable Nodes With Restrictions.java b/Medium/Reachable Nodes With Restrictions.java new file mode 100644 index 00000000..2a9b6f85 --- /dev/null +++ b/Medium/Reachable Nodes With Restrictions.java @@ -0,0 +1,28 @@ +class Solution { + public int reachableNodes(int n, int[][] edges, int[] restricted) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); + graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + } + Set restrictedSet = Arrays.stream(restricted).boxed().collect(Collectors.toSet()); + Set visited = new HashSet<>(); + Queue queue = new LinkedList<>(); + queue.add(0); + visited.add(0); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int node = queue.remove(); + for (Integer neighbor : graph.getOrDefault(node, new ArrayList<>())) { + if (restrictedSet.contains(neighbor) || visited.contains(neighbor)) { + continue; + } + queue.add(neighbor); + visited.add(neighbor); + } + } + } + return visited.size(); + } +} From d250b89e49334aa94a008b2029333af6507f8a15 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 8 Aug 2022 14:33:52 -0700 Subject: [PATCH 0682/1640] Update Add to Array-Form of Integer.java --- Easy/Add to Array-Form of Integer.java | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/Easy/Add to Array-Form of Integer.java b/Easy/Add to Array-Form of Integer.java index c1ab95b2..1ef362dd 100644 --- a/Easy/Add to Array-Form of Integer.java +++ b/Easy/Add to Array-Form of Integer.java @@ -1,20 +1,15 @@ class Solution { - public List addToArrayForm(int[] A, int K) { - List list = new ArrayList<>(); - int idx = A.length - 1; + public List addToArrayForm(int[] num, int k) { int carry = 0; - while (K > 0 || idx >= 0 || carry > 0) { - int temp = ( - (K > 0 ? K % 10 : 0) + - (idx >= 0 ? A[idx--] : 0) + - carry - ); - K /= 10; - carry = temp > 9 ? temp / 10 : 0; - temp = temp > 9 ? temp % 10 : temp; - list.add(temp); + int idx = num.length - 1; + List result = new ArrayList<>(); + while (idx >= 0 || carry > 0 || k > 0) { + int temp = k % 10 + carry + (idx >= 0 ? num[idx--] : 0); + result.add(temp % 10); + carry = temp / 10; + k /= 10; } - Collections.reverse(list); - return list; + Collections.reverse(result); + return result; } } From c3cff3623ff8c2226b7634786d61a02e5fed8b4b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Aug 2022 07:52:40 -0700 Subject: [PATCH 0683/1640] Create Binary Trees With Factors.java --- Medium/Binary Trees With Factors.java | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Binary Trees With Factors.java diff --git a/Medium/Binary Trees With Factors.java b/Medium/Binary Trees With Factors.java new file mode 100644 index 00000000..be7e38be --- /dev/null +++ b/Medium/Binary Trees With Factors.java @@ -0,0 +1,29 @@ +class Solution { + private final int MOD = 1_000_000_007; + + public int numFactoredBinaryTrees(int[] arr) { + int n = arr.length; + Arrays.sort(arr); + long[] dp = new long[n]; + Arrays.fill(dp, 1); + Map indexMap = new HashMap<>(); + for (int i = 0; i < n; i++) { + indexMap.put(arr[i], i); + } + for (int i = 0; i < n; i++) { + for (int j = 0; j < i; j++) { + if (arr[i] % arr[j] == 0) { + int right = arr[i] / arr[j]; + if (indexMap.containsKey(right)) { + dp[i] = (dp[i] + dp[j] * dp[indexMap.get(right)]) % MOD; + } + } + } + } + long result = 0; + for (long count : dp) { + result += count; + } + return (int) (result % MOD); + } +} From 7956534e059b43572a979fad599b932481b6e454 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Aug 2022 14:14:55 -0700 Subject: [PATCH 0684/1640] Update Add Binary.java --- Easy/Add Binary.java | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/Easy/Add Binary.java b/Easy/Add Binary.java index b51d82be..d35b471f 100644 --- a/Easy/Add Binary.java +++ b/Easy/Add Binary.java @@ -1,18 +1,19 @@ class Solution { public String addBinary(String a, String b) { - int carry = 0; StringBuilder sb = new StringBuilder(); - int idxA = a.length() - 1; - int idxB = b.length() - 1; - while (idxA >= 0 || idxB >= 0 || carry > 0) { - int temp = ( - (idxA >= 0 ? Character.getNumericValue(a.charAt(idxA--)) : 0) + - (idxB >= 0 ? Character.getNumericValue(b.charAt(idxB--)) : 0) + - carry - ); - carry = temp > 1 ? 1 : 0; - temp = temp > 1 ? (temp == 2 ? 0 : 1) : temp; - sb.append(temp); + int endIdxA = a.length() - 1; + int endIdxB = b.length() - 1; + int carry = 0; + while (endIdxA >= 0 || endIdxB >= 0 || carry > 0) { + int value = carry; + if (endIdxA >= 0) { + value += Character.getNumericValue(a.charAt(endIdxA--)); + } + if (endIdxB >= 0) { + value += Character.getNumericValue(b.charAt(endIdxB--)); + } + sb.append(value % 2); + carry = value / 2; } return sb.reverse().toString(); } From 9d4b55bc1e61451d0374d4b69f3fe05c09a2a705 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Aug 2022 16:23:09 -0700 Subject: [PATCH 0685/1640] Update Next Permutation.java --- Medium/Next Permutation.java | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Medium/Next Permutation.java b/Medium/Next Permutation.java index 9b554900..7b808969 100644 --- a/Medium/Next Permutation.java +++ b/Medium/Next Permutation.java @@ -1,10 +1,7 @@ class Solution { public void nextPermutation(int[] nums) { - if (nums.length <= 1) { - return; - } int idx = nums.length - 2; - while (idx >= 0 && nums[idx] >= nums[idx + 1]) { + while (idx >= 0 && nums[idx + 1] <= nums[idx]) { idx--; } if (idx >= 0) { @@ -14,16 +11,21 @@ public void nextPermutation(int[] nums) { } swap(nums, idx, endIdx); } - int startIdx = idx + 1; + reverse(nums, idx + 1); + } + + private void reverse(int[] nums, int startIdx) { int endIdx = nums.length - 1; while (startIdx < endIdx) { - swap(nums, startIdx++, endIdx--); + swap(nums, startIdx, endIdx); + startIdx++; + endIdx--; } } - private void swap(int[] nums, int idxOne, int idxTwo) { - int temp = nums[idxOne]; - nums[idxOne] = nums[idxTwo]; - nums[idxTwo] = temp; + private void swap(int[] nums, int i, int j) { + int temp = nums[i]; + nums[i] = nums[j]; + nums[j] = temp; } } From e9b785c13e1a8a4ee1cfb33811eb10d0d5a87db7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 12 Aug 2022 08:31:19 -0700 Subject: [PATCH 0686/1640] Update Lowest Common Ancestor of a Binary Search Tree.java --- ...t Common Ancestor of a Binary Search Tree.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Easy/Lowest Common Ancestor of a Binary Search Tree.java b/Easy/Lowest Common Ancestor of a Binary Search Tree.java index c4092475..d2a407b3 100644 --- a/Easy/Lowest Common Ancestor of a Binary Search Tree.java +++ b/Easy/Lowest Common Ancestor of a Binary Search Tree.java @@ -10,13 +10,16 @@ class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { - if (root == p || root == q || - (p.val > root.val && q.val < root.val) || - (p.val < root.val && q.val > root.val)) { + if (root == null) { return root; } - return ((root.val > p.val && root.val > q.val) ? - lowestCommonAncestor(root.left, p, q) : - lowestCommonAncestor(root.right, p, q)); + if (root == p || root == q) { + return root; + } + if ((root.val > p.val && root.val < q.val) || (root.val < p.val && root.val > q.val)) { + return root; + } + TreeNode left = lowestCommonAncestor(root.left, p, q); + return left == null ? lowestCommonAncestor(root.right, p, q) : left; } } From eac3cc7656b9fab4181583d444583c015b05003a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 12 Aug 2022 16:15:53 -0700 Subject: [PATCH 0687/1640] Update Design Linked List.java --- Easy/Design Linked List.java | 164 ++++++++++++++++------------------- 1 file changed, 73 insertions(+), 91 deletions(-) diff --git a/Easy/Design Linked List.java b/Easy/Design Linked List.java index 50533d0a..1f59ba54 100644 --- a/Easy/Design Linked List.java +++ b/Easy/Design Linked List.java @@ -1,106 +1,88 @@ class MyLinkedList { + + private Node head; + private Node tail; + private int count; + + public MyLinkedList() { + this.head = new Node(-1); + this.tail = new Node(-1); + head.next = tail; + tail.prev = head; + this.count = 0; + } - /** Initialize your data structure here. */ - Node head; - Node tail; - int count; - public MyLinkedList() { - head = new Node(-1); - tail = new Node(-1); - head.next = tail; - tail.prev = head; - count = 0; - } - - /** Get the value of the index-th node in the linked list. If the index is invalid, return -1. */ - public int get(int index) { - if (index < 0 || index >= count) { - return -1; - } - Node curr = head.next; - int idx = 0; - while (idx < index) { - idx++; - curr = curr.next; - } - return curr.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. */ - public void addAtHead(int val) { - Node newNode = new Node(val); - newNode.next = head.next; - newNode.prev = head; - head.next.prev = newNode; - head.next = newNode; - count++; + public int get(int index) { + Node node = getNode(index); + return node == null ? -1 : node.val; + } + + public void addAtHead(int val) { + Node node = new Node(val); + Node nextNode = head.next; + node.next = nextNode; + node.prev = head; + nextNode.prev = node; + head.next = node; + count++; + } + + public void addAtTail(int val) { + Node node = new Node(val); + Node prevNode = tail.prev; + node.next = tail; + tail.prev = node; + prevNode.next = node; + node.prev = prevNode; + count++; + } + + public void addAtIndex(int index, int val) { + if (index == count) { + addAtTail(val); + } else if (index < count) { + Node nodeAtIndex = getNode(index); + Node prevNode = nodeAtIndex.prev; + Node node = new Node(val); + node.prev = prevNode; + prevNode.next = node; + node.next = nodeAtIndex; + nodeAtIndex.prev = node; + count++; } - - /** Append a node of value val to the last element of the linked list. */ - public void addAtTail(int val) { - Node newNode = new Node(val); - newNode.prev = tail.prev; - newNode.next = tail; - tail.prev.next = newNode; - tail.prev = newNode; - count++; + } + + public void deleteAtIndex(int index) { + Node node = getNode(index); + if (node != null) { + Node prevNode = node.prev; + Node nextNode = node.next; + prevNode.next = nextNode; + nextNode.prev = prevNode; + count--; } - - /** 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. */ - public void addAtIndex(int index, int val) { - if (index < 0 || index > count) { - return; - } - if (index == 0) { - addAtHead(val); - } - else if (index == count) { - addAtTail(val); - } - else { - int idx = 0; - Node curr = head; - while (idx < index) { - idx++; - curr = curr.next; - } - Node newNode = new Node(val); - newNode.prev = curr; - newNode.next = curr.next; - curr.next.prev = newNode; - curr.next = newNode; - count++; - } + } + + private Node getNode(int index) { + if (index >= count) { + return null; } - - /** Delete the index-th node in the linked list, if the index is valid. */ - public void deleteAtIndex(int index) { - if (index < 0 || index >= count) { - return; - } - int idx = 0; - Node curr = head; - while (idx < index) { - idx++; - curr = curr.next; - } - Node next = curr.next.next; - next.prev = curr; - curr.next = next; - count--; + Node curr = head.next; + for (int i = 0; i < index; i++) { + curr = curr.next; } -} - -class Node { + return curr; + } + + private static class Node { int val; Node next; Node prev; public Node(int val) { - this.val = val; - next = null; - prev = null; + this.val = val; } + } } /** From fd23e4cce68179b89083dbed113f3e1fb3d0c688 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 12 Aug 2022 17:53:30 -0700 Subject: [PATCH 0688/1640] Create Design Skiplist.java --- Hard/Design Skiplist.java | 86 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Hard/Design Skiplist.java diff --git a/Hard/Design Skiplist.java b/Hard/Design Skiplist.java new file mode 100644 index 00000000..8554fcb7 --- /dev/null +++ b/Hard/Design Skiplist.java @@ -0,0 +1,86 @@ +class Skiplist { + + private Node head; + private Random random; + + public Skiplist() { + this.head = new Node(-1); + this.random = new Random(); + } + + public boolean search(int target) { + Node curr = head; + while (curr != null) { + while (curr.next != null && curr.next.val < target) { + curr = curr.next; + } + if (curr.next != null && curr.next.val == target) { + return true; + } + curr = curr.down; + } + return false; + } + + public void add(int num) { + Stack stack = new Stack<>(); + Node curr = head; + while (curr != null) { + while (curr.next != null && curr.next.val < num) { + curr = curr.next; + } + stack.push(curr); + curr = curr.down; + } + boolean newLevel = true; + Node downNode = null; + while (newLevel && !stack.isEmpty()) { + curr = stack.pop(); + Node newNode = new Node(num); + newNode.next = curr.next; + newNode.down = downNode; + curr.next = newNode; + downNode = curr.next; + newLevel = random.nextDouble() < 0.5; + } + if (newLevel) { + Node prevHead = head; + head = new Node(-1); + head.down = prevHead; + } + } + + public boolean erase(int num) { + Node curr = head; + boolean found = false; + while (curr != null) { + while (curr.next != null && curr.next.val < num) { + curr = curr.next; + } + if (curr.next != null && curr.next.val == num) { + found = true; + curr.next = curr.next.next; + } + curr = curr.down; + } + return found; + } + + private static class Node { + int val; + Node next; + Node down; + + public Node(int val) { + this.val = val; + } + } +} + +/** + * Your Skiplist object will be instantiated and called as such: + * Skiplist obj = new Skiplist(); + * boolean param_1 = obj.search(target); + * obj.add(num); + * boolean param_3 = obj.erase(num); + */ From e7b016adbd32e9d71fbe0a8162d6096f6a161aa6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 13 Aug 2022 08:20:36 -0700 Subject: [PATCH 0689/1640] Update Substring with Concatenation of All Words.java --- ...tring with Concatenation of All Words.java | 72 +++++++++++-------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/Hard/Substring with Concatenation of All Words.java b/Hard/Substring with Concatenation of All Words.java index 1af85664..5dcfd8bc 100644 --- a/Hard/Substring with Concatenation of All Words.java +++ b/Hard/Substring with Concatenation of All Words.java @@ -1,39 +1,53 @@ class Solution { public List findSubstring(String s, String[] words) { - if (s.length() == 0 || words.length == 0) { - return new ArrayList<>(); - } - Map wordFreqMap = new HashMap<>(); + int numberOfWords = words.length; + int singleWordLength = words[0].length(); + int totalSubstringLength = singleWordLength * numberOfWords; + Map wordCount = new HashMap<>(); for (String word : words) { - wordFreqMap.put(word, wordFreqMap.getOrDefault(word, 0) + 1); + wordCount.put(word, wordCount.getOrDefault(word, 0) + 1); } - int stringLength = s.length(); - int wordCount = words.length; - int singleWordLength = words[0].length(); - List indices = new ArrayList<>(); - for (int i = 0; i + singleWordLength * wordCount <= stringLength; i++) { - if (match(s, i, singleWordLength, wordFreqMap, wordCount)) { - indices.add(i); - } + List result = new ArrayList<>(); + for (int i = 0; i < singleWordLength; i++) { + slidingWindow(i, s, result, singleWordLength, totalSubstringLength, wordCount, numberOfWords); } - return indices; + return result; } - - private boolean match(String s, int start, int singleWordLength, Map wordFreqMap, int wordCount) { - Map currFreqMap = new HashMap<>(); - for (int i = 0; i < wordCount; i++) { - String currWord = s.substring(start + i * singleWordLength, start + (i + 1) * singleWordLength); - Integer freq = wordFreqMap.get(currWord); - // Word not in required words - if (freq == null) { - return false; - } - currFreqMap.put(currWord, currFreqMap.getOrDefault(currWord, 0) + 1); - // Word occurs more than the required count - if (currFreqMap.get(currWord) > freq) { - return false; + + private void slidingWindow(int left, String s, List answer, int singleWordLength, + int totalSubstringLength, Map wordCount, int numberOfWords) { + Map wordsFound = new HashMap<>(); + int wordsUsed = 0; + boolean excessWord = false; + int n = s.length(); + for (int right = left; right <= n - singleWordLength; right += singleWordLength) { + String currSubstring = s.substring(right, right + singleWordLength); + if (!wordCount.containsKey(currSubstring)) { + wordsFound.clear(); + wordsUsed = 0; + excessWord = false; + left = right + singleWordLength; + } else { + while (right - left == totalSubstringLength || excessWord) { + String leftmostWord = s.substring(left, left + singleWordLength); + left += singleWordLength; + wordsFound.put(leftmostWord, wordsFound.get(leftmostWord) - 1); + if (wordsFound.get(leftmostWord) >= wordCount.get(leftmostWord)) { + excessWord = false; + } else { + wordsUsed--; + } + } + wordsFound.put(currSubstring, wordsFound.getOrDefault(currSubstring, 0) + 1); + if (wordsFound.get(currSubstring) <= wordCount.get(currSubstring)) { + wordsUsed++; + } else { + excessWord = true; + } + if (wordsUsed == numberOfWords && !excessWord) { + answer.add(left); + } } } - return true; } } From 8c099b0b128dec14a2f209ddbf6e0b5331834897 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 14 Aug 2022 16:33:50 -0700 Subject: [PATCH 0690/1640] Create Node With Highest Edge Score.java --- Medium/Node With Highest Edge Score.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Node With Highest Edge Score.java diff --git a/Medium/Node With Highest Edge Score.java b/Medium/Node With Highest Edge Score.java new file mode 100644 index 00000000..9154bb2f --- /dev/null +++ b/Medium/Node With Highest Edge Score.java @@ -0,0 +1,19 @@ +class Solution { + public int edgeScore(int[] edges) { + Map map = new HashMap<>(); + int highestScore = 0; + int highestScoreCandidate = Integer.MAX_VALUE; + for (int i = 0; i < edges.length; i++) { + map.put(edges[i], map.getOrDefault(edges[i], 0) + i); + if (highestScore <= map.get(edges[i])) { + if (highestScore < map.get(edges[i])) { + highestScore = map.get(edges[i]); + highestScoreCandidate = edges[i]; + } else if (highestScore == map.get(edges[i]) && highestScoreCandidate > edges[i]) { + highestScoreCandidate = edges[i]; + } + } + } + return highestScoreCandidate; + } +} From 93d7ac2a3780e2ab9e4c23b6e2523cb94b00c06f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 Aug 2022 08:16:44 -0700 Subject: [PATCH 0691/1640] Update Roman to Integer.java --- Easy/Roman to Integer.java | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/Easy/Roman to Integer.java b/Easy/Roman to Integer.java index 7b269b0b..c0c047ee 100644 --- a/Easy/Roman to Integer.java +++ b/Easy/Roman to Integer.java @@ -1,25 +1,23 @@ class Solution { + public int romanToInt(String s) { - String[] keys = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"}; - int[] values = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000}; + String[] strings = {"I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"}; + int[] value = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000}; Map map = new HashMap<>(); - for (int i = 0; i < keys.length; i++) { - map.put(keys[i], values[i]); - } - int val = 0; + for (int i = 0; i < strings.length; i++) { + map.put(strings[i], value[i]); + } int idx = 0; - int n = s.length(); - while (idx < n) { - char c = s.charAt(idx); - if (idx + 1 < n && map.containsKey(s.substring(idx, idx + 2))) { - val += map.get(s.substring(idx, idx + 2)); + int num = 0; + while (idx < s.length()) { + if (idx + 1 < s.length() && map.containsKey(s.substring(idx, idx + 2))) { + num += map.get(s.substring(idx, idx + 2)); idx += 2; - } - else { - val += map.get(String.valueOf(c)); + } else { + num += map.get(s.substring(idx, idx + 1)); idx++; } } - return val; + return num; } } From 51334398e7a7692d7e790f5a7885870e9f0e9938 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 Aug 2022 08:29:18 -0700 Subject: [PATCH 0692/1640] Update Dot Product of Two Sparse Vectors.java --- Medium/Dot Product of Two Sparse Vectors.java | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Medium/Dot Product of Two Sparse Vectors.java b/Medium/Dot Product of Two Sparse Vectors.java index 912d250e..824c407f 100644 --- a/Medium/Dot Product of Two Sparse Vectors.java +++ b/Medium/Dot Product of Two Sparse Vectors.java @@ -1,29 +1,36 @@ class SparseVector { - - private Map map; + + private Map nonZeroRowMap; SparseVector(int[] nums) { - this.map = new HashMap<>(); + this.nonZeroRowMap = new HashMap<>(); for (int i = 0; i < nums.length; i++) { if (nums[i] != 0) { - this.map.put(i, nums[i]); + nonZeroRowMap.put(i, nums[i]); } } } - // Return the dotProduct of two sparse vectors +// Return the dotProduct of two sparse vectors public int dotProduct(SparseVector vec) { - return vec.map.size() > this.map.size() ? dotProductHelper(this.map, vec.map) - : dotProductHelper(vec.map, this.map); + Map vecNonZeroRowMap = vec.getNonZeroRowMap(); + return this.nonZeroRowMap.size() < vecNonZeroRowMap.size() ? dotProductHelper(this.nonZeroRowMap, vecNonZeroRowMap) : dotProductHelper(vecNonZeroRowMap, this.nonZeroRowMap); } - + private int dotProductHelper(Map mapOne, Map mapTwo) { int product = 0; for (Integer key : mapOne.keySet()) { - if (mapTwo.containsKey(key)) { - product += mapOne.get(key) * mapTwo.get(key); - } + product += mapOne.get(key) * mapTwo.getOrDefault(key, 0); } return product; } + + public Map getNonZeroRowMap() { + return new HashMap<>(nonZeroRowMap); + } } + +// Your SparseVector object will be instantiated and called as such: +// SparseVector v1 = new SparseVector(nums1); +// SparseVector v2 = new SparseVector(nums2); +// int ans = v1.dotProduct(v2); From b74a7649e064e491f06d0a2fcee1d960afe4b7ab Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 Aug 2022 15:05:29 -0700 Subject: [PATCH 0693/1640] Update Pairs of Songs With Total Durations Divisible by 60.java --- Easy/Pairs of Songs With Total Durations Divisible by 60.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Easy/Pairs of Songs With Total Durations Divisible by 60.java b/Easy/Pairs of Songs With Total Durations Divisible by 60.java index 5bf90390..20ee84c3 100644 --- a/Easy/Pairs of Songs With Total Durations Divisible by 60.java +++ b/Easy/Pairs of Songs With Total Durations Divisible by 60.java @@ -3,9 +3,7 @@ public int numPairsDivisibleBy60(int[] time) { Map map = new HashMap<>(); int count = 0; for (int t : time) { - if (map.containsKey(((60 - t % 60)) % 60)) { - count += map.get((60 - t % 60) % 60); - } + count += map.getOrDefault((60 - t % 60) % 60, 0); map.put(t % 60, map.getOrDefault(t % 60, 0) + 1); } return count; From 3dc6e000c59d36fbac19c749803a101cd030d371 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 Aug 2022 17:49:42 -0700 Subject: [PATCH 0694/1640] Update First Unique Character in a String.java --- Easy/First Unique Character in a String.java | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/Easy/First Unique Character in a String.java b/Easy/First Unique Character in a String.java index 64bacbda..1659cbb5 100644 --- a/Easy/First Unique Character in a String.java +++ b/Easy/First Unique Character in a String.java @@ -1,16 +1,11 @@ class Solution { public int firstUniqChar(String s) { - int[] arr = new int[26]; + int[] count = new int[26]; for (char c : s.toCharArray()) { - if (arr[c - 'a'] != 0) { - arr[c - 'a'] = -1; - } - else { - arr[c - 'a'] = 1; - } + count[c - 'a']++; } for (int i = 0; i < s.length(); i++) { - if (arr[s.charAt(i) - 'a'] == 1) { + if (count[s.charAt(i) - 'a'] == 1) { return i; } } From 918e529b57b53dfe6d5195357f6327e30648f61a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 18 Aug 2022 07:26:12 -0700 Subject: [PATCH 0695/1640] Update Reduce Array Size to The Half.java --- Medium/Reduce Array Size to The Half.java | 33 +++++++++++++++-------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/Medium/Reduce Array Size to The Half.java b/Medium/Reduce Array Size to The Half.java index de698435..82572571 100644 --- a/Medium/Reduce Array Size to The Half.java +++ b/Medium/Reduce Array Size to The Half.java @@ -1,16 +1,27 @@ class Solution { public int minSetSize(int[] arr) { - Map frequencyMap = Arrays.stream(arr).boxed() - .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); - int halfSize = arr.length / 2; - PriorityQueue pq = new PriorityQueue<>( - (o1, o2) -> (int) (frequencyMap.get(o2) - frequencyMap.get(o1))); - pq.addAll(frequencyMap.keySet()); - int counter = 0; - while (!pq.isEmpty() && halfSize > 0) { - halfSize -= frequencyMap.get(pq.poll()); - counter++; + Map map = new HashMap<>(); + int maxCount = 0; + for (int num : arr) { + map.put(num, map.getOrDefault(num, 0) + 1); + maxCount = Math.max(maxCount, map.get(num)); } - return counter; + int[] bucket = new int[maxCount + 1]; + for (int count : map.values()) { + bucket[count]++; + } + int n = arr.length; + int setSize = 0; + int bucketIdx = bucket.length - 1; + while (n > arr.length / 2) { + if (bucket[bucketIdx] > 0) { + setSize++; + n -= bucketIdx; + bucket[bucketIdx]--; + } else { + bucketIdx--; + } + } + return setSize; } } From 2404017ad2f58287de538d3993015afab38cddf4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 18 Aug 2022 14:42:41 -0700 Subject: [PATCH 0696/1640] Create Dice Roll Simulation.java --- Hard/Dice Roll Simulation.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Hard/Dice Roll Simulation.java diff --git a/Hard/Dice Roll Simulation.java b/Hard/Dice Roll Simulation.java new file mode 100644 index 00000000..47ba0ce5 --- /dev/null +++ b/Hard/Dice Roll Simulation.java @@ -0,0 +1,29 @@ +class Solution { + private final long MOD = (long) Math.pow(10, 9) + 7; + + public int dieSimulator(int n, int[] rollMax) { + long[][] dp = new long[n][7]; + for(int i = 0; i < 6; i++) { + dp[0][i] = 1; + } + dp[0][6] = 6; + for(int i = 1; i < n; i++) { + long sum = 0; + for(int j = 0; j < 6; j++) { + dp[i][j] = dp[i - 1][6]; + if (i - rollMax[j] < 0) { + sum = (sum + dp[i][j]) % MOD; + } else { + if (i - rollMax[j] - 1 >= 0) { + dp[i][j] = (dp[i][j] - (dp[i - rollMax[j] - 1][6] - dp[i - rollMax[j] - 1][j])) % MOD + MOD; + } else { + dp[i][j] = (dp[i][j] - 1) % MOD; + } + sum = (sum + dp[i][j]) % MOD; + } + } + dp[i][6] = sum; + } + return (int) (dp[n - 1][6]); + } +} From 7428c07b60063b97c197e62bed570f140b436c3b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 18 Aug 2022 14:44:51 -0700 Subject: [PATCH 0697/1640] Update Matrix Diagonal Sum.java --- Easy/Matrix Diagonal Sum.java | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/Easy/Matrix Diagonal Sum.java b/Easy/Matrix Diagonal Sum.java index 772421b7..32e2a58f 100644 --- a/Easy/Matrix Diagonal Sum.java +++ b/Easy/Matrix Diagonal Sum.java @@ -1,21 +1,10 @@ class Solution { public int diagonalSum(int[][] mat) { + int n = mat.length; int sum = 0; - // Left -> Right Diagonal - for (int i = 0; i < mat.length; i++) { - sum += mat[i][i]; + for (int i = 0; i < n; i++) { + sum += mat[i][i] + mat[i][n - i - 1]; } - // Right -> Left Diagonal - int rowIdx = 0; - int colIdx = mat[0].length - 1; - while (rowIdx < mat.length) { - // Check to remove intersecting element in both diagonals - if (rowIdx != colIdx) { - sum += mat[rowIdx][colIdx]; - } - rowIdx++; - colIdx--; - } - return sum; + return sum - (n % 2 == 0 ? 0 : mat[n / 2][n / 2]); } } From 4e7200421ca8715b00e1475729ec99961e89d50e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 18 Aug 2022 15:13:11 -0700 Subject: [PATCH 0698/1640] Update Count Hills and Valleys in an Array.java --- Easy/Count Hills and Valleys in an Array.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Easy/Count Hills and Valleys in an Array.java b/Easy/Count Hills and Valleys in an Array.java index 750cc964..40372dfd 100644 --- a/Easy/Count Hills and Valleys in an Array.java +++ b/Easy/Count Hills and Valleys in an Array.java @@ -1,19 +1,13 @@ class Solution { public int countHillValley(int[] nums) { - List list = new ArrayList<>(); - list.add(nums[0]); - for (int i = 1; i < nums.length; i++) { - if (nums[i] != nums[i - 1]) { - list.add(nums[i]); + int count = 0; + int left = nums[0]; + for (int i = 1; i < nums.length - 1; i++) { + if ((left < nums[i] && nums[i] > nums[i + 1]) || (left > nums[i] && nums[i] < nums[i + 1])) { + left = nums[i]; + count++; } } - int hillsAndVallies = 0; - for (int i = 1; i < list.size() - 1; i++) { - if ((list.get(i) < list.get(i - 1) && list.get(i) < list.get(i + 1)) || - (list.get(i) > list.get(i - 1) && list.get(i) > list.get(i + 1))) { - hillsAndVallies++; - } - } - return hillsAndVallies; + return count; } } From 7d55e02fa39b3753b0a9043e7d26454381d37835 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 19 Aug 2022 10:27:38 -0700 Subject: [PATCH 0699/1640] Update Split Array into Consecutive Subsequences.java --- ...t Array into Consecutive Subsequences.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/Medium/Split Array into Consecutive Subsequences.java b/Medium/Split Array into Consecutive Subsequences.java index f31de956..17425bd5 100644 --- a/Medium/Split Array into Consecutive Subsequences.java +++ b/Medium/Split Array into Consecutive Subsequences.java @@ -1,28 +1,33 @@ class Solution { public boolean isPossible(int[] nums) { - Map map = new HashMap<>(); - Map appendMap = new HashMap<>(); + PriorityQueue pq = new PriorityQueue<>((int[] o1, int[] o2) -> { + if (o1[1] == o2[1]) { + return (o1[1] - o1[0]) - (o2[1] - o2[0]); + } + return o1[1] - o2[1]; + }); for (int num : nums) { - map.put(num, map.getOrDefault(num, 0) + 1); - } - for (int i : nums) { - if (map.get(i) == 0) { - continue; - } - else if (appendMap.getOrDefault(i, 0) > 0) { - appendMap.put(i, appendMap.get(i) - 1); - appendMap.put(i + 1, appendMap.getOrDefault(i + 1, 0) + 1); + while (!pq.isEmpty() && pq.peek()[1] + 1 < num) { + if (!isValidSubsequence(pq.poll())) { + return false; + } } - else if (map.getOrDefault(i + 1, 0) > 0 && map.getOrDefault(i + 2, 0) > 0) { - map.put(i + 1, map.get(i + 1) - 1); - map.put(i + 2, map.get(i + 2) - 1); - appendMap.put(i + 3, appendMap.getOrDefault(i + 3, 0) + 1); + if (pq.isEmpty() || pq.peek()[1] == num) { + pq.add(new int[]{num, num}); + } else { + int[] subsequence = pq.poll(); + pq.add(new int[]{subsequence[0], num}); } - else { + } + while (!pq.isEmpty()) { + if (!isValidSubsequence(pq.poll())) { return false; } - map.put(i, map.get(i) - 1); } return true; } + + private boolean isValidSubsequence(int[] subsequence) { + return subsequence[1] - subsequence[0] + 1 >= 3; + } } From fec4465ed395b80e38430a013f9a1208e9442b2c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Aug 2022 10:03:26 -0700 Subject: [PATCH 0700/1640] Create Minimum Number of Refueling Stops.java --- Hard/Minimum Number of Refueling Stops.java | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Hard/Minimum Number of Refueling Stops.java diff --git a/Hard/Minimum Number of Refueling Stops.java b/Hard/Minimum Number of Refueling Stops.java new file mode 100644 index 00000000..217cbe08 --- /dev/null +++ b/Hard/Minimum Number of Refueling Stops.java @@ -0,0 +1,27 @@ +class Solution { + public int minRefuelStops(int target, int startFuel, int[][] stations) { + PriorityQueue pq = new PriorityQueue<>(Collections.reverseOrder()); + int result = 0; + int prev = 0; + for (int[] station : stations) { + int location = station[0]; + int capacity = station[1]; + startFuel -= location - prev; + while (!pq.isEmpty() && startFuel < 0) { + startFuel += pq.poll(); + result++; + } + if (startFuel < 0) { + return -1; + } + pq.add(capacity); + prev = location; + } + startFuel -= target - prev; + while (!pq.isEmpty() && startFuel < 0) { + startFuel += pq.poll(); + result++; + } + return startFuel < 0 ? -1 : result; + } +} From 1c719595ca978e9715c2ed9562d018b5a81ab662 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Aug 2022 10:18:44 -0700 Subject: [PATCH 0701/1640] Create Minimum Recolors to Get K Consecutive Black Blocks.java --- ...olors to Get K Consecutive Black Blocks.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Minimum Recolors to Get K Consecutive Black Blocks.java diff --git a/Easy/Minimum Recolors to Get K Consecutive Black Blocks.java b/Easy/Minimum Recolors to Get K Consecutive Black Blocks.java new file mode 100644 index 00000000..596297cd --- /dev/null +++ b/Easy/Minimum Recolors to Get K Consecutive Black Blocks.java @@ -0,0 +1,17 @@ +class Solution { + public int minimumRecolors(String blocks, int k) { + int minRecolors = Integer.MAX_VALUE; + int blackBlockCount = 0; + for (int i = 0; i < k; i++) { + blackBlockCount += blocks.charAt(i) == 'W' ? 0 : 1; + } + int startIdx = 0; + for (int i = k; i < blocks.length(); i++) { + minRecolors = Math.min(minRecolors, k - blackBlockCount); + blackBlockCount += blocks.charAt(startIdx++) == 'W' ? 0 : -1; + blackBlockCount += blocks.charAt(i) == 'W' ? 0 : 1; + } + minRecolors = Math.min(minRecolors, k - blackBlockCount); + return minRecolors; + } +} From 81e2b426446d1f2e9d23ff43ba30805766a2ce8b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Aug 2022 14:21:33 -0700 Subject: [PATCH 0702/1640] Update Sparse Matrix Multiplication.java --- Medium/Sparse Matrix Multiplication.java | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/Medium/Sparse Matrix Multiplication.java b/Medium/Sparse Matrix Multiplication.java index e1e20566..d612b920 100644 --- a/Medium/Sparse Matrix Multiplication.java +++ b/Medium/Sparse Matrix Multiplication.java @@ -1,20 +1,15 @@ class Solution { - public int[][] multiply(int[][] A, int[][] B) { - int m = A.length; - int n = A[0].length; - int nB = B[0].length; - int[][] C = new int[m][nB]; - for(int i = 0; i < m; i++) { - for(int k = 0; k < n; k++) { - if (A[i][k] != 0) { - for (int j = 0; j < nB; j++) { - if (B[k][j] != 0) { - C[i][j] += A[i][k] * B[k][j]; - } + public int[][] multiply(int[][] mat1, int[][] mat2) { + int[][] result = new int[mat1.length][mat2[0].length]; + for (int i = 0; i < mat1.length; i++) { + for (int j = 0; j < mat1[0].length; j++) { + if (mat1[i][j] != 0) { + for (int k = 0; k < mat2[0].length; k++) { + result[i][k] += mat1[i][j] * mat2[j][k]; } } } } - return C; + return result; } } From 364a4aac6dc5fc0ecdd2d4c64f92868797f53869 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Aug 2022 14:34:27 -0700 Subject: [PATCH 0703/1640] Update Design Hit Counter.java --- Medium/Design Hit Counter.java | 51 ++++++++++++++-------------------- 1 file changed, 21 insertions(+), 30 deletions(-) diff --git a/Medium/Design Hit Counter.java b/Medium/Design Hit Counter.java index 374d33c3..c241a419 100644 --- a/Medium/Design Hit Counter.java +++ b/Medium/Design Hit Counter.java @@ -1,37 +1,28 @@ class HitCounter { + + private Deque record; + private int count; + + public HitCounter() { + this.record = new LinkedList<>(); + this.count = 0; + } - /** Initialize your data structure here. */ - int[] times; - int[] hits; - public HitCounter() { - times = new int[300]; - hits = new int[300]; + public void hit(int timestamp) { + if (!record.isEmpty() && record.getLast()[0] == timestamp) { + record.getLast()[1]++; + } else { + record.add(new int[]{timestamp, 1}); } - - /** Record a hit. - @param timestamp - The current timestamp (in seconds granularity). */ - public void hit(int timestamp) { - int idx = timestamp % 300; - if (times[idx] != timestamp) { - times[idx] = timestamp; - hits[idx] = 1; - } - else { - hits[idx]++; - } - } - - /** Return the number of hits in the past 5 minutes. - @param timestamp - The current timestamp (in seconds granularity). */ - public int getHits(int timestamp) { - int totalCount = 0; - for (int i = 0; i < 300; i++) { - if (timestamp - times[i] < 300) { - totalCount += hits[i]; - } - } - return totalCount; + this.count++; + } + + public int getHits(int timestamp) { + while (!record.isEmpty() && timestamp - record.getFirst()[0] >= 300) { + this.count -= record.removeFirst()[1]; } + return this.count; + } } /** From 92004edcae505e4fdee250605ea49bc45a9683c8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Aug 2022 15:53:14 -0700 Subject: [PATCH 0704/1640] Create Time Needed to Rearrange a Binary String.java --- .../Time Needed to Rearrange a Binary String.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Time Needed to Rearrange a Binary String.java diff --git a/Medium/Time Needed to Rearrange a Binary String.java b/Medium/Time Needed to Rearrange a Binary String.java new file mode 100644 index 00000000..f9c4dcf5 --- /dev/null +++ b/Medium/Time Needed to Rearrange a Binary String.java @@ -0,0 +1,13 @@ +class Solution { + public int secondsToRemoveOccurrences(String s) { + int time = 0; + int zeros = 0; + for (int i = 0; i < s.length(); i++) { + zeros += s.charAt(i) == '0' ? 1 : 0; + if (s.charAt(i) == '1' && zeros > 0) { + time = Math.max(time + 1, zeros); + } + } + return time; + } +} From 829b6444d2d89785aaf4d90248c0f309406d18a0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 21 Aug 2022 10:46:56 -0700 Subject: [PATCH 0705/1640] Create Stamping The Sequence.java --- Hard/Stamping The Sequence.java | 50 +++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Hard/Stamping The Sequence.java diff --git a/Hard/Stamping The Sequence.java b/Hard/Stamping The Sequence.java new file mode 100644 index 00000000..1d472157 --- /dev/null +++ b/Hard/Stamping The Sequence.java @@ -0,0 +1,50 @@ +class Solution { + public int[] movesToStamp(String stamp, String target) { + char[] stampLetters = stamp.toCharArray(); + char[] targetLetters = target.toCharArray(); + List result = new ArrayList<>(); + boolean[] visited = new boolean[target.length()]; + int count = 0; + while (count < target.length()) { + boolean replace = false; + for (int i = 0; i <= target.length() - stamp.length(); i++) { + if (!visited[i] && isReplacePossible(stampLetters, targetLetters, i)) { + count = performStamping(targetLetters, i, stamp.length(), count); + replace = true; + visited[i] = true; + result.add(i); + if (count == targetLetters.length) { + break; + } + } + } + if (!replace) { + return new int[0]; + } + } + int[] resArray = new int[result.size()]; + for (int i = 0; i < result.size(); i++) { + resArray[i] = result.get(result.size() - i - 1); + } + return resArray; + } + + private boolean isReplacePossible(char[] stampLetters, char[] targetLetters, int idx) { + for (int i = 0; i < stampLetters.length; i++) { + if (targetLetters[i + idx] != '*' && targetLetters[i + idx] != stampLetters[i]) { + return false; + } + } + return true; + } + + private int performStamping(char[] targetLetters, int idx, int stampLength, int count) { + for (int i = 0; i < stampLength; i++) { + if (targetLetters[i + idx] != '*') { + targetLetters[i + idx] = '*'; + count++; + } + } + return count; + } +} From f50d9caff927433439c07ca1468b4e0a1e54ee65 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 21 Aug 2022 11:18:09 -0700 Subject: [PATCH 0706/1640] Create Minimum Hours of Training to Win a Competition.java --- ...um Hours of Training to Win a Competition.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Minimum Hours of Training to Win a Competition.java diff --git a/Easy/Minimum Hours of Training to Win a Competition.java b/Easy/Minimum Hours of Training to Win a Competition.java new file mode 100644 index 00000000..1e9f0c90 --- /dev/null +++ b/Easy/Minimum Hours of Training to Win a Competition.java @@ -0,0 +1,15 @@ +class Solution { + public int minNumberOfHours(int initialEnergy, int initialExperience, int[] energy, int[] experience) { + int totalEnergy = 0; + int experienceDeficit = 0; + for (int i = 0; i < energy.length; i++) { + totalEnergy += energy[i]; + if (initialExperience <= experience[i]) { + experienceDeficit += experience[i] - initialExperience + 1; + initialExperience = experience[i] + 1; + } + initialExperience += experience[i]; + } + return experienceDeficit + (totalEnergy >= initialEnergy ? totalEnergy - initialEnergy + 1 : 0); + } +} From c0b2d46db1470d56ea6bfc73aebfc5e4742331b9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 21 Aug 2022 18:14:54 -0700 Subject: [PATCH 0707/1640] Update and rename Power of four.java to Power of Four.java --- Easy/Power of Four.java | 19 +++++++++++++++++++ Easy/Power of four.java | 20 -------------------- 2 files changed, 19 insertions(+), 20 deletions(-) create mode 100644 Easy/Power of Four.java delete mode 100644 Easy/Power of four.java diff --git a/Easy/Power of Four.java b/Easy/Power of Four.java new file mode 100644 index 00000000..18dd30c1 --- /dev/null +++ b/Easy/Power of Four.java @@ -0,0 +1,19 @@ +class Solution { + public boolean isPowerOfFour(int n) { + long left = 0; + long right = n / 2 + 1; + while (left <= right) { + long mid = (left + right) / 2; + long pow = (long) (Math.pow(4, mid)); + if (pow == ((long) n)) { + return true; + } + if (pow > ((long) n)) { + right = mid - 1; + } else { + left = mid + 1; + } + } + return false; + } +} diff --git a/Easy/Power of four.java b/Easy/Power of four.java deleted file mode 100644 index 254d5097..00000000 --- a/Easy/Power of four.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public boolean isPowerOfFour(int num) { - long start = 0; - long end = num / 4; - while (start <= end) { - long mid = (start + end) / 2; - long pow = (long) Math.pow(4, mid); - if (pow == (long) num) { - return true; - } - else if (pow > (long) num) { - end = mid - 1; - } - else { - start = mid + 1; - } - } - return false; - } -} From 421d275cb70ad228dcbab21e2a07943cbdc92746 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Aug 2022 11:35:45 -0700 Subject: [PATCH 0708/1640] Update Build Array from Permutation.java --- Easy/Build Array from Permutation.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Easy/Build Array from Permutation.java b/Easy/Build Array from Permutation.java index 88119f3d..6a2a6dec 100644 --- a/Easy/Build Array from Permutation.java +++ b/Easy/Build Array from Permutation.java @@ -1,9 +1,12 @@ class Solution { public int[] buildArray(int[] nums) { - int[] ans = new int[nums.length]; - for (int i = 0; i < nums.length; i++) { - ans[i] = nums[nums[i]]; + int n = nums.length; + for (int i = 0; i < n; i++) { + nums[i] = nums[i] + n * (nums[nums[i]] % n); } - return ans; + for (int i = 0; i < n; i++) { + nums[i] = nums[i] / n; + } + return nums; } } From 08a68b5c1e708f1dcf80d665fa6ec0e1dce5e690 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Aug 2022 12:05:44 -0700 Subject: [PATCH 0709/1640] Update Kids With the Greatest Number of Candies.java --- Easy/Kids With the Greatest Number of Candies.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Easy/Kids With the Greatest Number of Candies.java b/Easy/Kids With the Greatest Number of Candies.java index 69e60fb2..79789d90 100644 --- a/Easy/Kids With the Greatest Number of Candies.java +++ b/Easy/Kids With the Greatest Number of Candies.java @@ -1,13 +1,13 @@ class Solution { public List kidsWithCandies(int[] candies, int extraCandies) { - int max = Integer.MIN_VALUE; + int maxCandyCount = 0; for (int candy : candies) { - max = Math.max(max, candy); + maxCandyCount = Math.max(maxCandyCount, candy); } - List ans = new ArrayList<>(); - for (int i = 0; i < candies.length; i++) { - ans.add((candies[i] + extraCandies) >= max); + List result = new ArrayList<>(); + for (int candy : candies) { + result.add((candy + extraCandies) >= maxCandyCount); } - return ans; + return result; } } From 9a98191ac2ad61e9276f359abebf080d7d3c9c3d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Aug 2022 12:40:12 -0700 Subject: [PATCH 0710/1640] Update Binary Tree Longest Consecutive Sequence II.java --- ... Tree Longest Consecutive Sequence II.java | 73 +++++++++---------- 1 file changed, 36 insertions(+), 37 deletions(-) diff --git a/Medium/Binary Tree Longest Consecutive Sequence II.java b/Medium/Binary Tree Longest Consecutive Sequence II.java index db766780..41e04cba 100644 --- a/Medium/Binary Tree Longest Consecutive Sequence II.java +++ b/Medium/Binary Tree Longest Consecutive Sequence II.java @@ -4,46 +4,45 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public int longestConsecutive(TreeNode root) { - int[] ans = new int[1]; - helper(root, ans); - return ans[0]; + public int longestConsecutive(TreeNode root) { + int[] result = {0}; + helper(root, result); + return result[0]; + } + + private int[] helper(TreeNode root, int[] result) { + if (root == null) { + return new int[]{0, 0}; } - - private int[] helper(TreeNode root, int[] ans) { - if (root == null) { - return new int[]{0,0}; - } - - int increase = 1; - int decrease = 1; - - if (root.left != null) { - int[] left = helper(root.left, ans); - if (root.val == root.left.val - 1) { - increase = left[0] + 1; - } - if (root.val == root.left.val + 1) { - decrease = left[1] + 1; - } - } - - if (root.right != null) { - int[] right = helper(root.right, ans); - if (root.val == root.right.val - 1) { - increase = Math.max(right[0] + 1, increase); - } - if (root.val == root.right.val + 1) { - decrease = Math.max(right[1] + 1, decrease); - } - } - - ans[0] = Math.max(ans[0], increase + decrease - 1); - - return new int[]{increase, decrease}; + int increment = 1; + int decrement = 1; + if (root.left != null) { + int[] left = helper(root.left, result); + if (root.val == root.left.val + 1) { + decrement = left[1] + 1; + } else if (root.val == root.left.val - 1) { + increment = left[0] + 1; + } } + if (root.right != null) { + int[] right = helper(root.right, result); + if (root.val == root.right.val + 1) { + decrement = Math.max(decrement, right[1] + 1); + } else if (root.val == root.right.val - 1) { + increment = Math.max(increment, right[0] + 1); + } + } + result[0] = Math.max(result[0], increment + decrement - 1); + return new int[]{increment, decrement}; + } } From 93dc6a018d6dc02ed056d84eb5af16d33a41d07e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Aug 2022 12:49:30 -0700 Subject: [PATCH 0711/1640] Update Find Target Indices After Sorting Array.java --- .../Find Target Indices After Sorting Array.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/Easy/Find Target Indices After Sorting Array.java b/Easy/Find Target Indices After Sorting Array.java index f0776eba..d000c8ad 100644 --- a/Easy/Find Target Indices After Sorting Array.java +++ b/Easy/Find Target Indices After Sorting Array.java @@ -3,17 +3,13 @@ public List targetIndices(int[] nums, int target) { int count = 0; int lessThanCount = 0; for (int num : nums) { - if (num == target) { - count++; - } - if (num < target) { - lessThanCount++; - } + count += num == target ? 1 : 0; + lessThanCount += num < target ? 1 : 0; } - List indices = new ArrayList<>(); - for (int i = 0; i < count; i++) { - indices.add(lessThanCount + i); + List result = new ArrayList<>(); + while (count-- > 0) { + result.add(lessThanCount++); } - return indices; + return result; } } From d34c42b0630d49bcb2af3cbecc82f696ba6cb27d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Aug 2022 16:41:47 -0700 Subject: [PATCH 0712/1640] Update Unique Number of Occurrences.java --- Easy/Unique Number of Occurrences.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Easy/Unique Number of Occurrences.java b/Easy/Unique Number of Occurrences.java index fb61d166..b442d51c 100644 --- a/Easy/Unique Number of Occurrences.java +++ b/Easy/Unique Number of Occurrences.java @@ -1,10 +1,9 @@ class Solution { - public boolean uniqueOccurrences(int[] arr) { - Map map = new HashMap<>(); - for (int num : arr) { - map.put(num, map.getOrDefault(num, 0) + 1); - } - Set set = new HashSet<>(map.values()); - return map.size() == set.size(); + public boolean uniqueOccurrences(int[] arr) { + Map map = new HashMap<>(); + for (int num : arr) { + map.put(num, map.getOrDefault(num, 0) + 1); } + return map.size() == new HashSet<>(map.values()).size(); + } } From 915647c552f62e5f473e592aed3c5b53509ed10b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Aug 2022 19:41:25 -0700 Subject: [PATCH 0713/1640] Update Palindrome Linked List.java --- Easy/Palindrome Linked List.java | 61 +++++++++++++++++++------------- 1 file changed, 37 insertions(+), 24 deletions(-) diff --git a/Easy/Palindrome Linked List.java b/Easy/Palindrome Linked List.java index 33fcc9f4..946427e6 100644 --- a/Easy/Palindrome Linked List.java +++ b/Easy/Palindrome Linked List.java @@ -3,32 +3,45 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { - public boolean isPalindrome(ListNode head) { - ArrayList arr = new ArrayList(); - while (head != null) { - arr.add(head.val); - head = head.next; - } - - if (arr.size() < 2) return true; - - int i=0; - int j = arr.size()-1; - - while (true) { - - if (arr.get(i).equals(arr.get(j)) == false) return false; - - if (arr.size()%2 == 0 && j - i == 1) break; - if (arr.size()%2 != 0 && j - i == 2) break; - - i++; - j--; - } - return true; + public boolean isPalindrome(ListNode head) { + if (head.next == null) { + return true; } + ListNode slow = head; + ListNode fast = head; + ListNode prev = null; + while (fast != null && fast.next != null) { + prev = slow; + fast = fast.next.next; + slow = slow.next; + } + ListNode revNode = reverse(slow); + while (revNode != null) { + if (revNode.val != head.val) { + return false; + } + revNode = revNode.next; + head = head.next; + } + return true; + } + + private ListNode reverse(ListNode node) { + ListNode prev = null; + ListNode curr = node; + ListNode next = node; + while (curr != null) { + next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; + } } From 2d8310804862cb043865f456318a8cb774916a61 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Aug 2022 19:55:47 -0700 Subject: [PATCH 0714/1640] Update Fizz Buzz.java --- Easy/Fizz Buzz.java | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Easy/Fizz Buzz.java b/Easy/Fizz Buzz.java index 73fa230f..c28fabc9 100644 --- a/Easy/Fizz Buzz.java +++ b/Easy/Fizz Buzz.java @@ -1,11 +1,17 @@ class Solution { public List fizzBuzz(int n) { - return IntStream.range(1, n + 1) - .boxed() - .map(e -> ( - e % 3 == 0 && e % 5 == 0 ? "FizzBuzz" - : (e % 3 == 0 ? "Fizz" : (e % 5 == 0 ? "Buzz" : String.valueOf(e))) - ) - ).collect(Collectors.toList()); - } + List result = new ArrayList<>(); + for (int i = 1; i <= n; i++) { + if (i % 15 == 0) { + result.add("FizzBuzz"); + } else if (i % 3 == 0) { + result.add("Fizz"); + } else if (i % 5 == 0) { + result.add("Buzz"); + } else { + result.add(String.valueOf(i)); + } + } + return result; + } } From 66ac2aedef0979cbfe65da22947987cfd034f5c9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 23 Aug 2022 14:30:06 -0700 Subject: [PATCH 0715/1640] Update Count Odd Numbers in an Interval Range.java --- Easy/Count Odd Numbers in an Interval Range.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Easy/Count Odd Numbers in an Interval Range.java b/Easy/Count Odd Numbers in an Interval Range.java index 68fe1652..7155bbc8 100644 --- a/Easy/Count Odd Numbers in an Interval Range.java +++ b/Easy/Count Odd Numbers in an Interval Range.java @@ -1,5 +1,5 @@ class Solution { public int countOdds(int low, int high) { - return (high + 1) / 2 - low / 2; + return (high - low) / 2 + (low % 2 != 0 || high % 2 != 0 ? 1 : 0); } } From ad20e48c8022cd31c6f30974c520e8221472e8c7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 23 Aug 2022 14:34:27 -0700 Subject: [PATCH 0716/1640] Update Assign Cookies.java --- Easy/Assign Cookies.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Easy/Assign Cookies.java b/Easy/Assign Cookies.java index f6a91ecd..6ff366ad 100644 --- a/Easy/Assign Cookies.java +++ b/Easy/Assign Cookies.java @@ -2,13 +2,14 @@ class Solution { public int findContentChildren(int[] g, int[] s) { Arrays.sort(g); Arrays.sort(s); - int contentChildrenCount = 0; - for (int i = 0, j = 0; i < s.length && j < g.length; i++) { - if (s[i] >= g[j]) { - contentChildrenCount++; - j++; + int gIdx = 0; + int sIdx = 0; + while (sIdx < s.length && gIdx < g.length) { + if (s[sIdx] >= g[gIdx]) { + gIdx++; } + sIdx++; } - return contentChildrenCount; + return gIdx; } } From 89781e1ef1b6a7dd91ede9316568ec1fe8828bfa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 23 Aug 2022 14:52:03 -0700 Subject: [PATCH 0717/1640] Update Reformat Date.java --- Easy/Reformat Date.java | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Easy/Reformat Date.java b/Easy/Reformat Date.java index fdde8bc3..2230d7a6 100644 --- a/Easy/Reformat Date.java +++ b/Easy/Reformat Date.java @@ -1,16 +1,22 @@ class Solution { + private static final String[] MONTHS = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; + public String reformatDate(String date) { - String[] months = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; - Map monthMap = new HashMap<>(); - for (int i = 1; i <= 12; i++) { - monthMap.put(months[i - 1], (i > 9 ? "" : "0") + i); - } - String[] strs = date.split("\\s+"); - int dayEndIdx = 0; - while (dayEndIdx < strs[0].length() && Character.isDigit(strs[0].charAt(dayEndIdx))) { - dayEndIdx++; + String[] split = date.split("\\s+"); + StringBuilder sb = new StringBuilder(); + sb.append(split[2]).append("-"); + int monthIdx = getMonthIdx(split[1]); + sb.append(monthIdx > 9 ? "" : "0").append(monthIdx).append("-"); + sb.append(Character.isDigit(split[0].charAt(1)) ? split[0].substring(0, 2) : ("0" + split[0].charAt(0))); + return sb.toString(); + } + + private int getMonthIdx(String month) { + for (int i = 0; i < MONTHS.length; i++) { + if (month.equals(MONTHS[i])) { + return i + 1; + } } - String dayStr = strs[0].substring(0, dayEndIdx); - return strs[2] + "-" + monthMap.get(strs[1]) + "-" + (dayStr.length() == 2 ? dayStr : "0" + dayStr); + return -1; } } From c7a8b7596475cea3017968e18129474d5a2ec531 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 23 Aug 2022 15:56:28 -0700 Subject: [PATCH 0718/1640] Update Degree of an array.java --- Easy/Degree of an array.java | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Easy/Degree of an array.java b/Easy/Degree of an array.java index f4c3f2f3..85c1622e 100644 --- a/Easy/Degree of an array.java +++ b/Easy/Degree of an array.java @@ -1,24 +1,24 @@ class Solution { public int findShortestSubArray(int[] nums) { - Map count = new HashMap<>(); - Map left = new HashMap<>(); - Map right = new HashMap<>(); - int degree = 0; - for (int i = 0; i < nums.length; i++) { - int num = nums[i]; - if (!left.containsKey(num)) { - left.put(num, i); - } - right.put(num, i); - count.put(num, count.getOrDefault(num, 0) + 1); - degree = Math.max(degree, count.get(num)); + Map map = new HashMap<>(); + int maxCount = 0; + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + maxCount = Math.max(maxCount, map.get(num)); } - int ans = nums.length; - for (int key : count.keySet()) { - if (count.get(key) == degree) { - ans = Math.min(ans, right.get(key) - left.get(key) + 1); + int start = 0; + int end = 0; + map.clear(); + int minLength = Integer.MAX_VALUE; + while (end < nums.length) { + map.put(nums[end], map.getOrDefault(nums[end], 0) + 1); + while (start <= end && map.get(nums[end]) == maxCount) { + minLength = Math.min(minLength, end - start + 1); + map.put(nums[start], map.get(nums[start]) - 1); + start++; } + end++; } - return ans; + return minLength; } } From 9ef560aa860ebbfd32fb2909525aaec926b29698 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 23 Aug 2022 16:10:10 -0700 Subject: [PATCH 0719/1640] Update N-th Tribonacci Number.java --- Easy/N-th Tribonacci Number.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Easy/N-th Tribonacci Number.java b/Easy/N-th Tribonacci Number.java index af3ee26d..23a53a62 100644 --- a/Easy/N-th Tribonacci Number.java +++ b/Easy/N-th Tribonacci Number.java @@ -1,10 +1,13 @@ class Solution { public int tribonacci(int n) { - int[] arr = new int[38]; - arr[1] = arr[2] = 1; - for (int i = 3; i < 38; i++) { - arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3]; + if (n <= 2) { + return n == 0 ? 0 : 1; } - return arr[n]; + int[] dp = new int[n + 1]; + dp[1] = dp[2] = 1; + for (int i = 3; i <= n; i++) { + dp[i] = dp[i - 2] + dp[i - 1] + dp[i - 3]; + } + return dp[n]; } } From b60dcad9cc0eb548ec10bbc9469e6788031a7f63 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 23 Aug 2022 17:01:34 -0700 Subject: [PATCH 0720/1640] Update Reverse Bits.java --- Easy/Reverse Bits.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Easy/Reverse Bits.java b/Easy/Reverse Bits.java index e2406b6c..53055d27 100644 --- a/Easy/Reverse Bits.java +++ b/Easy/Reverse Bits.java @@ -1,11 +1,17 @@ public class Solution { + // you need treat n as an unsigned value public int reverseBits(int n) { - int res = 0; + if (n == 0) { + return 0; + } + int result = 0; for (int i = 0; i < 32; i++) { - res <<= 1; - res = res | (n & 1); + result <<= 1; + if ((n & 1) == 1) { + result++; + } n >>= 1; } - return res; + return result; } } From 0ca17f7ce588e59fdc51f12f7580e9612cccb970 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 23 Aug 2022 18:07:22 -0700 Subject: [PATCH 0721/1640] Update Power of Three.java --- Easy/Power of Three.java | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Easy/Power of Three.java b/Easy/Power of Three.java index b93756c6..2fbe03e5 100644 --- a/Easy/Power of Three.java +++ b/Easy/Power of Three.java @@ -1,14 +1,19 @@ class Solution { public boolean isPowerOfThree(int n) { - if (n <= 0) { - return false; - } - while (n > 1) { - if (n % 3 != 0) { - return false; + int left = 0; + int right = n / 3; + while (left <= right) { + int mid = (left + right) / 2; + double powValue = Math.pow(3, mid); + if (powValue == n) { + return true; + } + if (powValue > n) { + right = mid - 1; + } else { + left = mid + 1; } - n /= 3; } - return true; + return false; } } From 31bdd7e8f33358c68baa5c08d53a10ffe1668a25 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Aug 2022 07:51:18 -0700 Subject: [PATCH 0722/1640] Update Subtract the Product and Sum of Digits of an Integer.java --- ...Product and Sum of Digits of an Integer.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Easy/Subtract the Product and Sum of Digits of an Integer.java b/Easy/Subtract the Product and Sum of Digits of an Integer.java index 462d8f60..d08e41f7 100644 --- a/Easy/Subtract the Product and Sum of Digits of an Integer.java +++ b/Easy/Subtract the Product and Sum of Digits of an Integer.java @@ -1,17 +1,12 @@ class Solution { public int subtractProductAndSum(int n) { int sum = 0; - int copy = n; - while (copy > 0) { - sum += copy % 10; - copy /= 10; + int product = 1; + while (n > 0) { + sum += n % 10; + product *= n % 10; + n /= 10; } - int prod = 1; - copy = n; - while (copy > 0) { - prod *= copy % 10; - copy /= 10; - } - return prod - sum; + return product - sum; } } From 55b3262851612298279f5ca18a335795e88a955f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Aug 2022 10:49:37 -0700 Subject: [PATCH 0723/1640] Update Sorting the Sentence.java --- Easy/Sorting the Sentence.java | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Easy/Sorting the Sentence.java b/Easy/Sorting the Sentence.java index 94b78e3e..6909055c 100644 --- a/Easy/Sorting the Sentence.java +++ b/Easy/Sorting the Sentence.java @@ -1,20 +1,17 @@ class Solution { public String sortSentence(String s) { - String[] arr = new String[s.split(" ").length]; - int idx = 0; - int n = s.length(); - while (idx < n) { - int currIdx = idx; - while (currIdx < n && Character.isLetter(s.charAt(currIdx))) { - currIdx++; - } - int wordIdx = Character.getNumericValue(s.charAt(currIdx++)); - arr[wordIdx - 1] = s.substring(idx, currIdx - 1); - idx = currIdx + 1; + String[] positions = new String[9]; + String[] strs = s.split("\\s+"); + for (String str : strs) { + int digit = Character.getNumericValue(str.charAt(str.length() - 1)); + positions[digit - 1] = str.substring(0, str.length() - 1); } StringBuilder sb = new StringBuilder(); - for (String word : arr) { - sb.append(word).append(" "); + for (int i = 0; i < positions.length; i++) { + if (positions[i] == null) { + break; + } + sb.append(positions[i]).append(" "); } return sb.toString().trim(); } From 4e75613375432fe32be606c0c28da6f370c32814 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Aug 2022 11:32:41 -0700 Subject: [PATCH 0724/1640] Update Merge two binary trees.java --- Easy/Merge two binary trees.java | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Easy/Merge two binary trees.java b/Easy/Merge two binary trees.java index d91c7643..1a487c2c 100644 --- a/Easy/Merge two binary trees.java +++ b/Easy/Merge two binary trees.java @@ -4,24 +4,24 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { - if (t1 == null && t2 == null) { + public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { + if (root1 == null && root2 == null) { return null; } - int val = (t1 == null ? 0 : t1.val) + (t2 == null ? 0 : t2.val); - TreeNode root = new TreeNode(val); - root.left = mergeTrees( - t1 == null ? null : t1.left, - t2 == null ? null : t2.left - ); - root.right = mergeTrees( - t1 == null ? null : t1.right, - t2 == null ? null : t2.right - ); + int value = (root1 == null ? 0 : root1.val) + (root2 == null ? 0 : root2.val); + TreeNode root = new TreeNode(value); + root.left = mergeTrees((root1 == null ? null : root1.left), (root2 == null ? null : root2.left)); + root.right = mergeTrees((root1 == null ? null : root1.right), (root2 == null ? null : root2.right)); return root; } } From e778d07a19b922b1e2eef69fc2843df95001f866 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Aug 2022 11:44:06 -0700 Subject: [PATCH 0725/1640] Update Find the Middle Index in Array.java --- Easy/Find the Middle Index in Array.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Easy/Find the Middle Index in Array.java b/Easy/Find the Middle Index in Array.java index 9f95a996..4ad9ddbf 100644 --- a/Easy/Find the Middle Index in Array.java +++ b/Easy/Find the Middle Index in Array.java @@ -1,21 +1,19 @@ class Solution { public int findMiddleIndex(int[] nums) { - int[] leftSum = new int[nums.length]; - int[] rightSum = new int[nums.length]; + int n = nums.length; + int[] rightSum = new int[n]; int currSum = 0; - for (int i = 0; i < nums.length; i++) { - leftSum[i] = currSum; + for (int i = n - 1; i >= 0; i--) { currSum += nums[i]; - } - currSum = 0; - for (int i = nums.length - 1; i >= 0; i--) { rightSum[i] = currSum; - currSum += nums[i]; } - for (int i = 0; i < nums.length; i++) { - if (leftSum[i] == rightSum[i]) { + currSum = 0; + for (int i = 0; i < n; i++) { + int rightCurrSum = i != n - 1 ? rightSum[i + 1] : 0; + if (currSum == rightCurrSum) { return i; } + currSum += nums[i]; } return -1; } From b39622201c105f3e39c3cf8f9554b7f831762869 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Aug 2022 12:56:37 -0700 Subject: [PATCH 0726/1640] Update Path Sum.java --- Easy/Path Sum.java | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/Easy/Path Sum.java b/Easy/Path Sum.java index 537ec4bb..dc77aafe 100644 --- a/Easy/Path Sum.java +++ b/Easy/Path Sum.java @@ -4,17 +4,39 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public boolean hasPathSum(TreeNode root, int sum) { - - if (root == null) return false; - if (root.left == null && root.right == null) { - return sum - root.val == 0; - } - - return (root.left != null ? hasPathSum(root.left, sum-root.val) : false) | (root.right != null ? hasPathSum(root.right, sum-root.val) : false); + public boolean hasPathSum(TreeNode root, int targetSum) { + if (root == null) { + return false; } + Queue sumQueue = new LinkedList<>(); + Queue nodeQueue = new LinkedList<>(); + sumQueue.add(targetSum - root.val); + nodeQueue.add(root); + while (!nodeQueue.isEmpty()) { + TreeNode removedNode = nodeQueue.remove(); + int removedSum = sumQueue.remove(); + if (removedNode.left == null && removedNode.right == null && removedSum == 0) { + return true; + } + if (removedNode.left != null) { + nodeQueue.add(removedNode.left); + sumQueue.add(removedSum - removedNode.left.val); + } + if (removedNode.right != null) { + nodeQueue.add(removedNode.right); + sumQueue.add(removedSum - removedNode.right.val); + } + } + return false; + } } From bd82edb8caa63b73037e3a875eea89d25e047997 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Aug 2022 13:14:12 -0700 Subject: [PATCH 0727/1640] Update Ugly Number.java --- Easy/Ugly Number.java | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/Easy/Ugly Number.java b/Easy/Ugly Number.java index e8d27ea0..345df6c7 100644 --- a/Easy/Ugly Number.java +++ b/Easy/Ugly Number.java @@ -1,23 +1,11 @@ class Solution { - public boolean isUgly(int num) { - if (num <= 0) { - return false; - } - long lNum = (long) num; - while (lNum > 1) { - if (lNum % 2 == 0) { - lNum /= 2; - } - else if (lNum % 3 == 0) { - lNum /= 3; - } - else if (lNum % 5 == 0) { - lNum /= 5; - } - else { - return false; + public boolean isUgly(int n) { + int[] primes = {2, 3, 5}; + for (int i = 0; i < primes.length; i++) { + while (n > 1 && n % primes[i] == 0) { + n /= primes[i]; } } - return true; + return n == 1; } } From e2b3adb2bf51a487438a0d3a9a31e331c7f89cf5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Aug 2022 14:50:49 -0700 Subject: [PATCH 0728/1640] Update Kth Missing Positive Number.java --- Easy/Kth Missing Positive Number.java | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Easy/Kth Missing Positive Number.java b/Easy/Kth Missing Positive Number.java index b953be98..6f662c97 100644 --- a/Easy/Kth Missing Positive Number.java +++ b/Easy/Kth Missing Positive Number.java @@ -1,20 +1,15 @@ class Solution { public int findKthPositive(int[] arr, int k) { - for (int i = 0; i < arr.length; i++) { - int curr = arr[i] - 1; - int prev = i == 0 ? 0 : arr[i - 1]; - while (prev < curr) { - k--; - prev++; - if (k == 0) { - return prev; - } + int left = 0; + int right = arr.length - 1; + while (left <= right) { + int mid = left + (right - left) / 2; + if (arr[mid] - mid - 1 < k) { + left = mid + 1; + } else { + right = mid - 1; } } - int curr = arr[arr.length - 1]; - while (k-- > 0) { - curr++; - } - return curr; + return left + k; } } From f965c45cab4ef662be975604a3f263299d6fed56 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 25 Aug 2022 14:24:48 -0700 Subject: [PATCH 0729/1640] Update Maximum Nesting Depth of Two Valid Parentheses Strings.java --- ... Depth of Two Valid Parentheses Strings.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java b/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java index 444efeb0..df70bcb7 100644 --- a/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java +++ b/Medium/Maximum Nesting Depth of Two Valid Parentheses Strings.java @@ -1,16 +1,11 @@ class Solution { public int[] maxDepthAfterSplit(String seq) { - int[] maxDepth = new int[seq.length()]; - int currDepth = 0; - for (int i = 0; i < seq.length(); i++) { - if (seq.charAt(i) == '(') { - currDepth++; - } - maxDepth[i] = currDepth % 2; - if (seq.charAt(i) != '(') { - currDepth--; - } + int[] result = new int[seq.length()]; + int idx = 0; + int depth = 0; + for (char c : seq.toCharArray()) { + result[idx++] = c == '(' ? (depth++ % 2) : (--depth % 2); } - return maxDepth; + return result; } } From 3c9894dc702f68f613728022865d099157e0d738 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 25 Aug 2022 14:38:55 -0700 Subject: [PATCH 0730/1640] Update Group the People Given the Group Size They Belong To.java --- ...e Given the Group Size They Belong To.java | 39 ++++++++----------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/Medium/Group the People Given the Group Size They Belong To.java b/Medium/Group the People Given the Group Size They Belong To.java index 003f6099..475cf0c6 100644 --- a/Medium/Group the People Given the Group Size They Belong To.java +++ b/Medium/Group the People Given the Group Size They Belong To.java @@ -1,27 +1,20 @@ class Solution { - public List> groupThePeople(int[] groupSizes) { - Map>> map = new HashMap<>(); - int n = groupSizes.length; - for (int i = 0; i < n; i++) { - int size = groupSizes[i]; - if (!map.containsKey(size)) { - map.put(size, new ArrayList<>()); - map.get(size).add(new ArrayList<>()); - } - int arraySize = map.get(size).size(); - if (map.get(size).get(arraySize - 1).size() == size) { - map.get(size).add(new ArrayList<>()); - arraySize++; - } - map.get(size).get(arraySize - 1).add(i); - } - List> ans = new ArrayList<>(); - for (Integer key : map.keySet()) { - List> lists = map.get(key); - for (List list : lists) { - ans.add(list); - } + public List> groupThePeople(int[] groupSizes) { + Map> groupSizeToId = new HashMap<>(); + for (int i = 0; i < groupSizes.length; i++) { + groupSizeToId.computeIfAbsent(groupSizes[i], k -> new LinkedList<>()).add(i); + } + List> result = new ArrayList<>(); + for (Integer groupSize : groupSizeToId.keySet()) { + Queue ids = groupSizeToId.get(groupSize); + while (!ids.isEmpty()) { + List group = new ArrayList<>(groupSize); + for (int i = 0; i< groupSize; i++) { + group.add(ids.remove()); } - return ans; + result.add(group); + } } + return result; + } } From 3a9070b05adccac356c47f8232f19cee6d22bb26 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 26 Aug 2022 09:08:33 -0700 Subject: [PATCH 0731/1640] Create Reordered Power of 2.java --- Medium/Reordered Power of 2.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Reordered Power of 2.java diff --git a/Medium/Reordered Power of 2.java b/Medium/Reordered Power of 2.java new file mode 100644 index 00000000..09c9fe1b --- /dev/null +++ b/Medium/Reordered Power of 2.java @@ -0,0 +1,20 @@ +class Solution { + public boolean reorderedPowerOf2(int n) { + int[] digitCount = count(n); + for (int i = 0; i < 31; i++) { + if (Arrays.equals(digitCount, count(1 << i))) { + return true; + } + } + return false; + } + + private int[] count(int n) { + int[] result = new int[10]; + while (n > 0) { + result[n % 10]++; + n /= 10; + } + return result; + } +} From 0c439139e5c1d5e2bbe5f032bb43bc36deb2ce2f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 26 Aug 2022 12:29:15 -0700 Subject: [PATCH 0732/1640] Update Design Add and Search Words Data Structure.java --- ...n Add and Search Words Data Structure.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Medium/Design Add and Search Words Data Structure.java b/Medium/Design Add and Search Words Data Structure.java index 0f87fece..45fc78fd 100644 --- a/Medium/Design Add and Search Words Data Structure.java +++ b/Medium/Design Add and Search Words Data Structure.java @@ -1,51 +1,51 @@ class WordDictionary { - - private final TrieNode root; - + + private Node root; + public WordDictionary() { - this.root = new TrieNode(); + this.root = new Node(); } public void addWord(String word) { - TrieNode curr = root; + Node curr = root; for (char c : word.toCharArray()) { - if (!curr.children.containsKey(c)) { - curr.children.put(c, new TrieNode()); + if (curr.children[c - 'a'] == null) { + curr.children[c - 'a'] = new Node(); } - curr = curr.children.get(c); + curr = curr.children[c - 'a']; } curr.isWord = true; } public boolean search(String word) { - return searchHelper(word, 0, root); + Node curr = root; + return searchHelper(word, 0, curr); } - - private boolean searchHelper(String word, int idx, TrieNode curr) { + + private boolean searchHelper(String word, int idx, Node curr) { if (idx == word.length()) { return curr.isWord; } - if (curr.children.containsKey(word.charAt(idx))) { - return searchHelper(word, idx + 1, curr.children.get(word.charAt(idx))); + if (word.charAt(idx) != '.' && curr.children[word.charAt(idx) - 'a'] == null) { + return false; } if (word.charAt(idx) == '.') { - for (char c : curr.children.keySet()) { - if (searchHelper(word, idx + 1, curr.children.get(c))) { + for (Node child : curr.children) { + if (child != null && searchHelper(word, idx + 1, child)) { return true; } } + return false; } - return false; + return searchHelper(word, idx + 1, curr.children[word.charAt(idx) - 'a']); } - - - private static class TrieNode { - - private final Map children; - private boolean isWord; - - public TrieNode() { - this.children = new HashMap<>(); + + private static class Node { + Node[] children; + boolean isWord; + + public Node() { + this.children = new Node[26]; this.isWord = false; } } From a65bf0843a55d0b846dc1584582cef2260e0dfaf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 27 Aug 2022 17:20:50 -0700 Subject: [PATCH 0733/1640] Create Remove Duplicates From an Unsorted Linked List.java --- ...plicates From an Unsorted Linked List.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Medium/Remove Duplicates From an Unsorted Linked List.java diff --git a/Medium/Remove Duplicates From an Unsorted Linked List.java b/Medium/Remove Duplicates From an Unsorted Linked List.java new file mode 100644 index 00000000..e62d60c7 --- /dev/null +++ b/Medium/Remove Duplicates From an Unsorted Linked List.java @@ -0,0 +1,39 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode deleteDuplicatesUnsorted(ListNode head) { + Map map = new HashMap<>(); + ListNode curr = head; + while (curr != null) { + map.put(curr.val, map.getOrDefault(curr.val, 0) + 1); + curr = curr.next; + } + curr = head; + ListNode newHead = null; + ListNode prev = null; + while (curr != null) { + if (map.get(curr.val) > 1) { + ListNode nextNode = curr.next; + if (prev != null) { + prev.next = nextNode; + } + curr = nextNode; + } else { + if (newHead == null) { + newHead = curr; + } + prev = curr; + curr = curr.next; + } + } + return newHead; + } +} From 4aec52c84608272fa5680680f6cc6fe3bcc6c18a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 27 Aug 2022 18:32:44 -0700 Subject: [PATCH 0734/1640] Update Number of Recent Calls.java --- Easy/Number of Recent Calls.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Easy/Number of Recent Calls.java b/Easy/Number of Recent Calls.java index 230dc7be..4b039208 100644 --- a/Easy/Number of Recent Calls.java +++ b/Easy/Number of Recent Calls.java @@ -1,16 +1,16 @@ class RecentCounter { - Queue queue; - int limit; + + private Queue queue; + public RecentCounter() { queue = new LinkedList<>(); - limit = 3000; } public int ping(int t) { - queue.add(t); - while (!queue.isEmpty() && ((t - queue.peek()) > limit)) { + while (!queue.isEmpty() && t - queue.peek() > 3000) { queue.remove(); } + queue.add(t); return queue.size(); } } From 11a5531d804b93b94a8229947d2cad2be3651622 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 07:48:00 -0700 Subject: [PATCH 0735/1640] Create Removing Stars From a String.java --- Medium/Removing Stars From a String.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Removing Stars From a String.java diff --git a/Medium/Removing Stars From a String.java b/Medium/Removing Stars From a String.java new file mode 100644 index 00000000..0cb79bea --- /dev/null +++ b/Medium/Removing Stars From a String.java @@ -0,0 +1,17 @@ +class Solution { + public String removeStars(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (c == '*') { + stack.pop(); + } else { + stack.push(c); + } + } + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.reverse().toString(); + } +} From 72d3339d8e8fd4632f9dfc3a8a18b6155bfd37fa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 07:55:30 -0700 Subject: [PATCH 0736/1640] Create Longest Subsequence With Limited Sum.java --- Easy/Longest Subsequence With Limited Sum.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Longest Subsequence With Limited Sum.java diff --git a/Easy/Longest Subsequence With Limited Sum.java b/Easy/Longest Subsequence With Limited Sum.java new file mode 100644 index 00000000..5dd527a5 --- /dev/null +++ b/Easy/Longest Subsequence With Limited Sum.java @@ -0,0 +1,11 @@ +class Solution { + public int[] answerQueries(int[] nums, int[] queries) { + Arrays.sort(nums); + Arrays.parallelPrefix(nums, Integer::sum); + for (int i = 0; i < queries.length; i++) { + int idx = Arrays.binarySearch(nums, queries[i]); + queries[i] = Math.abs(idx + 1); + } + return queries; + } +} From 9d82d58b7e3e48acffc6ed8db77a6072218d16bf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 08:26:06 -0700 Subject: [PATCH 0737/1640] Create Minimum Amount of Time to Collect Garbage.java --- ...mum Amount of Time to Collect Garbage.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Medium/Minimum Amount of Time to Collect Garbage.java diff --git a/Medium/Minimum Amount of Time to Collect Garbage.java b/Medium/Minimum Amount of Time to Collect Garbage.java new file mode 100644 index 00000000..b0ac91ff --- /dev/null +++ b/Medium/Minimum Amount of Time to Collect Garbage.java @@ -0,0 +1,34 @@ +class Solution { + public int garbageCollection(String[] garbage, int[] travel) { + int[] lastIdx = {-1, -1, -1}; + Map garbageCount = new HashMap<>(); + for (int i = 0; i < garbage.length; i++) { + garbageCount.put(i, new int[3]); + for (char c : garbage[i].toCharArray()) { + if (c == 'M') { + lastIdx[0] = i; + garbageCount.get(i)[0]++; + } + if (c == 'P') { + lastIdx[1] = i; + garbageCount.get(i)[1]++; + } + if (c == 'G') { + lastIdx[2] = i; + garbageCount.get(i)[2]++; + } + } + } + int time = 0; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < garbage.length; j++) { + if (lastIdx[i] < j) { + break; + } + time += j == 0 ? 0 : travel[j - 1]; + time += garbageCount.get(j)[i]; + } + } + return time; + } +} From 30f3b2985a2bcab41e408519e6c97d38348f82c7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 12:55:36 -0700 Subject: [PATCH 0738/1640] Update and rename Hard/Binary Tree PostOrder Traversal.java to Easy/Binary Tree PostOrder Traversal.java --- Easy/Binary Tree PostOrder Traversal.java | 34 +++++++++++++++++++ Hard/Binary Tree PostOrder Traversal.java | 41 ----------------------- 2 files changed, 34 insertions(+), 41 deletions(-) create mode 100644 Easy/Binary Tree PostOrder Traversal.java delete mode 100644 Hard/Binary Tree PostOrder Traversal.java diff --git a/Easy/Binary Tree PostOrder Traversal.java b/Easy/Binary Tree PostOrder Traversal.java new file mode 100644 index 00000000..4e839ba8 --- /dev/null +++ b/Easy/Binary Tree PostOrder Traversal.java @@ -0,0 +1,34 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public List postorderTraversal(TreeNode root) { + List result = new ArrayList<>(); + Stack stack = new Stack<>(); + TreeNode node = root; + while (!stack.isEmpty() || node != null) { + if (node != null) { + stack.push(node); + result.add(node.val); + node = node.right; + } else { + TreeNode removed = stack.pop(); + node = removed.left; + } + } + Collections.reverse(result); + return result; + } +} diff --git a/Hard/Binary Tree PostOrder Traversal.java b/Hard/Binary Tree PostOrder Traversal.java deleted file mode 100644 index 53983b32..00000000 --- a/Hard/Binary Tree PostOrder Traversal.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public List postorderTraversal(TreeNode root) { - List values = new ArrayList<>(); - if (root == null) { - return values; - } - - Stack stack1 = new Stack<>(); - Stack stack2 = new Stack<>(); - - stack1.push(root); - - while (!stack1.empty()) { - TreeNode temp = stack1.pop(); - stack2.push(temp); - - if (temp.left != null) { - stack1.push(temp.left); - } - - if (temp.right != null) { - stack1.push(temp.right); - } - } - - while (!stack2.empty()) { - values.add(stack2.pop().val); - } - - return values; - } -} From 2bca553a5ba52cf4ea043b0ded19d4796e68508c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 12:55:46 -0700 Subject: [PATCH 0739/1640] Rename Binary Tree PostOrder Traversal.java to Binary Tree Postorder Traversal.java --- ...tOrder Traversal.java => Binary Tree Postorder Traversal.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Easy/{Binary Tree PostOrder Traversal.java => Binary Tree Postorder Traversal.java} (100%) diff --git a/Easy/Binary Tree PostOrder Traversal.java b/Easy/Binary Tree Postorder Traversal.java similarity index 100% rename from Easy/Binary Tree PostOrder Traversal.java rename to Easy/Binary Tree Postorder Traversal.java From 893686cd9bec10fc159add1ad14fba76edf262f7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 14:18:08 -0700 Subject: [PATCH 0740/1640] Update Binary Tree Paths.java --- Easy/Binary Tree Paths.java | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/Easy/Binary Tree Paths.java b/Easy/Binary Tree Paths.java index 08dfef94..72739836 100644 --- a/Easy/Binary Tree Paths.java +++ b/Easy/Binary Tree Paths.java @@ -4,32 +4,33 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - List list; public List binaryTreePaths(TreeNode root) { - list = new ArrayList<>(); - if (root == null) { - return list; - } - helper(root, new StringBuilder()); - return list; + List result = new ArrayList<>(); + helper(root, result, new StringBuilder()); + return result; } - private void helper(TreeNode root, StringBuilder sb) { + private void helper(TreeNode root, List result, StringBuilder path) { if (root == null) { return; } + path.append(root.val); if (root.left == null && root.right == null) { - sb.append(root.val); - list.add(sb.toString()); - } - else { - sb.append(root.val).append("->"); - helper(root.left, new StringBuilder(sb.toString())); - helper(root.right, new StringBuilder(sb.toString())); + result.add(path.toString()); + } else { + path.append("->"); + helper(root.left, result, new StringBuilder(path)); + helper(root.right, result, new StringBuilder(path)); } } } From f47b20d24b55e6b35aa7e9d7bb6de8dee8ef6086 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 14:23:57 -0700 Subject: [PATCH 0741/1640] Update Summary Ranges.java --- Easy/Summary Ranges.java | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Easy/Summary Ranges.java b/Easy/Summary Ranges.java index 97b5e753..cf67a700 100644 --- a/Easy/Summary Ranges.java +++ b/Easy/Summary Ranges.java @@ -1,19 +1,18 @@ class Solution { public List summaryRanges(int[] nums) { - List ranges = new ArrayList<>(); + List result = new ArrayList<>(); int idx = 0; - while (idx < nums.length) { - int start = nums[idx++]; + int n = nums.length; + while (idx < n) { + int start = nums[idx]; int end = start; - while (idx < nums.length && (nums[idx] - end) == 1) { - end = nums[idx++]; - } - if (start == end) { - ranges.add(String.valueOf(start)); - } else { - ranges.add(String.format("%d->%d", start, end)); + idx++; + while (idx < n && nums[idx] == end + 1) { + end = nums[idx]; + idx++; } + result.add(start == end ? String.valueOf(start) : (start + "->" + end)); } - return ranges; + return result; } } From 13756629008c32e23f039f274d103a46576378c2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 15:32:09 -0700 Subject: [PATCH 0742/1640] Create Valid Word Square.java --- Easy/Valid Word Square.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Valid Word Square.java diff --git a/Easy/Valid Word Square.java b/Easy/Valid Word Square.java new file mode 100644 index 00000000..69e1925d --- /dev/null +++ b/Easy/Valid Word Square.java @@ -0,0 +1,16 @@ +class Solution { + public boolean validWordSquare(List words) { + return IntStream.range(0, words.size()) + .allMatch(i -> words.get(i).equals(verticalRepresentation(words, i))); + } + + private String verticalRepresentation(List words, int col){ + StringBuilder sb = new StringBuilder(); + for (String word : words) { + if (col < word.length()) { + sb.append(word.charAt(col)); + } + } + return sb.toString(); + } +} From 2e836748ab344651fab506eee1fe41dfd16b719e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Aug 2022 17:59:17 -0700 Subject: [PATCH 0743/1640] Update Number of Islands.java --- Medium/Number of Islands.java | 41 +++++++++++++++-------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/Medium/Number of Islands.java b/Medium/Number of Islands.java index cebe59c1..ecf3afb7 100644 --- a/Medium/Number of Islands.java +++ b/Medium/Number of Islands.java @@ -1,38 +1,33 @@ class Solution { - private static final int[][] DIRS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; public int numIslands(char[][] grid) { - int countOfIslands = 0; - int numOfRows = grid.length; - int numOfCols = grid[0].length; - boolean[][] visited = new boolean[numOfRows][numOfCols]; - for (int i = 0; i < numOfRows; i++) { - for (int j = 0; j < numOfCols; j++) { - if (!visited[i][j] && grid[i][j] == '1') { + int rows = grid.length; + int cols = grid[0].length; + boolean[][] visited = new boolean[rows][cols]; + int islandCount = 0; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (grid[i][j] == '1' && !visited[i][j]) { Queue queue = new LinkedList<>(); queue.add(new int[]{i, j}); + visited[i][j] = true; while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int[] removed = queue.remove(); - int currX = removed[0]; - int currY = removed[1]; - visited[currX][currY] = true; - for (int[] dir : DIRS) { - int newX = currX + dir[0]; - int newY = currY + dir[1]; - if (newX >= 0 && newY >= 0 && newX < numOfRows && newY < numOfCols && !visited[newX][newY] && grid[newX][newY] == '1') { - queue.add(new int[]{newX, newY}); - visited[newX][newY] = true; - } + int[] removed = queue.remove(); + for (int[] dir : DIRS) { + int newX = removed[0] + dir[0]; + int newY = removed[1] + dir[1]; + if (newX >= 0 && newY >= 0 && newX < rows && newY < cols && !visited[newX][newY] && grid[newX][newY] == '1') { + visited[newX][newY] = true; + queue.add(new int[]{newX, newY}); } } } - countOfIslands++; + islandCount++; } } } - return countOfIslands; + return islandCount; } } From 7150410a962c125b9f4236645e05b501c76b8e70 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 29 Aug 2022 15:48:14 -0700 Subject: [PATCH 0744/1640] Update Find Elements in a Contaminated Binary Tree.java --- ...lements in a Contaminated Binary Tree.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/Medium/Find Elements in a Contaminated Binary Tree.java b/Medium/Find Elements in a Contaminated Binary Tree.java index 2015bd92..9048fbd2 100644 --- a/Medium/Find Elements in a Contaminated Binary Tree.java +++ b/Medium/Find Elements in a Contaminated Binary Tree.java @@ -4,30 +4,36 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class FindElements { - TreeNode root; - Set set; - public FindElements(TreeNode root) { - set = new HashSet<>(); - buildTree(root, 0); - } - - private void buildTree(TreeNode root, int val) { - if (root == null) { - return; - } - root.val = val; - set.add(val); - buildTree(root.left, 2 * val + 1); - buildTree(root.right, 2 * val + 2); - } - - public boolean find(int target) { - return set.contains(target); + + private Set set; + + public FindElements(TreeNode root) { + set = new HashSet<>(); + recover(root, 0); + } + + private void recover(TreeNode root, int value) { + if (root == null) { + return; } + set.add(value); + recover(root.left, 2 * value + 1); + recover(root.right, 2 * value + 2); + } + + public boolean find(int target) { + return set.contains(target); + } } /** From 6559fab89e51287181e368a22071f6667217b3dd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 30 Aug 2022 14:24:48 -0700 Subject: [PATCH 0745/1640] Update Detect Capital.java --- Easy/Detect Capital.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Easy/Detect Capital.java b/Easy/Detect Capital.java index b27943e7..863fe0f5 100644 --- a/Easy/Detect Capital.java +++ b/Easy/Detect Capital.java @@ -1,21 +1,25 @@ class Solution { public boolean detectCapitalUse(String word) { - boolean firstCapital = Character.isUpperCase(word.charAt(0)); + boolean firstUpperCase = Character.isUpperCase(word.charAt(0)); + boolean allUpperCase = false; for (int i = 1; i < word.length(); i++) { if (Character.isUpperCase(word.charAt(i))) { - if (!firstCapital || !firstTwoCharactersCapital(word)) { + if (!firstUpperCase) { return false; } + if (i == 1) { + allUpperCase = true; + } else { + if (!allUpperCase) { + return false; + } + } } else { - if (i > 1 && firstTwoCharactersCapital(word)) { + if (allUpperCase) { return false; } } } return true; } - - private boolean firstTwoCharactersCapital(String word) { - return Character.isUpperCase(word.charAt(0)) && Character.isUpperCase(word.charAt(1)); - } } From 9c8d6097f68c37ccca0363dbd6f40c76177b145a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 31 Aug 2022 13:35:07 -0700 Subject: [PATCH 0746/1640] Update and rename Easy/Max Stack.java to Hard/Max Stack.java --- Easy/Max Stack.java | 91 --------------------------------------------- Hard/Max Stack.java | 85 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 91 deletions(-) delete mode 100644 Easy/Max Stack.java create mode 100644 Hard/Max Stack.java diff --git a/Easy/Max Stack.java b/Easy/Max Stack.java deleted file mode 100644 index e320e096..00000000 --- a/Easy/Max Stack.java +++ /dev/null @@ -1,91 +0,0 @@ -class MaxStack { - - private Node stackHead; - private Node stackTail; - private PriorityQueue maxValues; - private Map> valToNodeMapping; - - public MaxStack() { - this.stackHead = new Node(Integer.MIN_VALUE); - this.stackTail = new Node(Integer.MAX_VALUE); - this.stackTail.prev = this.stackHead; - this.stackHead.next = this.stackTail; - this.maxValues = new PriorityQueue<>((o1, o2) -> o2 - o1); - this.valToNodeMapping = new HashMap<>(); - } - - public void push(int x) { - Node node = new Node(x); - if (!this.valToNodeMapping.containsKey(x)) { - this.maxValues.add(x); - } - addNodeToStack(node); - this.valToNodeMapping.computeIfAbsent(x, k -> new Stack<>()).push(node); - } - - public int pop() { - Node toRemove = this.stackHead.next; - this.valToNodeMapping.get(toRemove.val).pop(); - removeNodeFromStack(toRemove); - return toRemove.val; - } - - public int top() { - return this.stackHead.next.val; - } - - public int peekMax() { - moveToMaxValue(); - int maxVal = this.maxValues.peek(); - return this.valToNodeMapping.get(maxVal).peek().val; - } - - public int popMax() { - moveToMaxValue(); - int maxVal = this.maxValues.peek(); - Node toRemove = this.valToNodeMapping.get(maxVal).pop(); - removeNodeFromStack(toRemove); - return toRemove.val; - } - - private void moveToMaxValue() { - while (this.valToNodeMapping.get(this.maxValues.peek()).isEmpty()) { - this.valToNodeMapping.remove(this.maxValues.poll()); - } - } - - private void addNodeToStack(Node node) { - Node nextToHead = this.stackHead.next; - nextToHead.prev = node; - node.next = nextToHead; - this.stackHead.next = node; - node.prev = this.stackHead; - } - - private void removeNodeFromStack(Node node) { - Node nextNode = node.next; - Node prevNode = node.prev; - prevNode.next = nextNode; - nextNode.prev = prevNode; - } - - private static class Node { - int val; - Node next; - Node prev; - - public Node(int val) { - this.val = val; - } - } -} - -/** - * Your MaxStack object will be instantiated and called as such: - * MaxStack obj = new MaxStack(); - * obj.push(x); - * int param_2 = obj.pop(); - * int param_3 = obj.top(); - * int param_4 = obj.peekMax(); - * int param_5 = obj.popMax(); - */ diff --git a/Hard/Max Stack.java b/Hard/Max Stack.java new file mode 100644 index 00000000..918b74b5 --- /dev/null +++ b/Hard/Max Stack.java @@ -0,0 +1,85 @@ +class MaxStack { + + private TreeMap> map; + private Node head; + private Node tail; + + public MaxStack() { + this.map = new TreeMap<>(); + this.head = new Node(-1); + this.tail = new Node(-1); + this.head.next = this.tail; + this.tail.prev = this.head; + } + + public void push(int x) { + Node node = createNode(x); + map.computeIfAbsent(x, k -> new Stack<>()).push(node); + } + + private Node createNode(int x) { + Node node = new Node(x); + Node prevToTail = tail.prev; + node.next = tail; + tail.prev = node; + prevToTail.next = node; + node.prev = prevToTail; + return node; + } + + public int pop() { + Node toRemove = tail.prev; + int val = toRemove.val; + map.get(val).pop(); + if (map.get(val).isEmpty()) { + map.remove(val); + } + removeNode(toRemove); + return toRemove.val; + } + + public int top() { + return tail.prev.val; + } + + public int peekMax() { + return map.lastKey(); + } + + public int popMax() { + int val = map.lastKey(); + Node node = map.get(val).pop(); + if (map.get(val).isEmpty()) { + map.remove(val); + } + removeNode(node); + return val; + } + + private void removeNode(Node node) { + Node prevNode = node.prev; + Node nextNode = node.next; + prevNode.next = nextNode; + nextNode.prev = prevNode; + } + + private static class Node { + Node next; + Node prev; + int val; + + public Node(int val) { + this.val = val; + } + } +} + +/** + * Your MaxStack object will be instantiated and called as such: + * MaxStack obj = new MaxStack(); + * obj.push(x); + * int param_2 = obj.pop(); + * int param_3 = obj.top(); + * int param_4 = obj.peekMax(); + * int param_5 = obj.popMax(); + */ From 6ef2d3fc60bf9bfa27005955fe05cdcad0a298cd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 1 Sep 2022 08:37:28 -0700 Subject: [PATCH 0747/1640] Update Car Pooling.java --- Medium/Car Pooling.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Medium/Car Pooling.java b/Medium/Car Pooling.java index 1199d3b5..9d09b2c4 100644 --- a/Medium/Car Pooling.java +++ b/Medium/Car Pooling.java @@ -1,17 +1,16 @@ class Solution { public boolean carPooling(int[][] trips, int capacity) { - Arrays.sort(trips, Comparator.comparingInt((int[] o) -> o[1]).thenComparingInt(o -> o[2])); - PriorityQueue priorityQueue = new PriorityQueue<>(Comparator.comparingInt(o -> o[2])); - int idx = 0; - while (idx < trips.length) { - while (!priorityQueue.isEmpty() && priorityQueue.peek()[2] <= trips[idx][1]) { - capacity += priorityQueue.poll()[0]; + Arrays.sort(trips, Comparator.comparingInt(o -> o[1])); + PriorityQueue pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[2])); + for (int[] trip : trips) { + while (!pq.isEmpty() && pq.peek()[2] <= trip[1]) { + capacity += pq.poll()[0]; } - if (capacity < trips[idx][0]) { + if (capacity < trip[0]) { return false; } - priorityQueue.add(trips[idx]); - capacity -= trips[idx++][0]; + pq.add(trip); + capacity -= trip[0]; } return true; } From 9c98ee491321d34134196d13c46d547739867401 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 1 Sep 2022 08:43:47 -0700 Subject: [PATCH 0748/1640] Update Online Election.java --- Medium/Online Election.java | 54 +++++++++---------------------------- 1 file changed, 12 insertions(+), 42 deletions(-) diff --git a/Medium/Online Election.java b/Medium/Online Election.java index 34bc11ad..50dfc559 100644 --- a/Medium/Online Election.java +++ b/Medium/Online Election.java @@ -1,44 +1,24 @@ class TopVotedCandidate { - List winners; + private TreeMap currWinner; + public TopVotedCandidate(int[] persons, int[] times) { - winners = new ArrayList<>(); - Map countMap = new HashMap<>(); - Map timeMap = new HashMap<>(); - int maxVotes = 0; + this.currWinner = new TreeMap<>(); + Map candidateToVotecount = new HashMap<>(); + int currWinningCandidate = -1; for (int i = 0; i < persons.length; i++) { - countMap.put(persons[i], countMap.getOrDefault(persons[i], 0) + 1); - timeMap.put(persons[i], times[i]); - if (countMap.get(persons[i]) >= maxVotes) { - winners.add(new Winner(times[i], persons[i])); - maxVotes = Math.max(maxVotes, countMap.get(persons[i])); + int person = persons[i]; + int newVoteCount = candidateToVotecount.getOrDefault(person, 0) + 1; + candidateToVotecount.put(person, newVoteCount); + if (currWinningCandidate == -1 || newVoteCount >= candidateToVotecount.get(currWinningCandidate)) { + currWinningCandidate = person; } + currWinner.put(times[i], currWinningCandidate); } } public int q(int t) { - return winners.get(binarySearchHelper(t)).val; - } - - private int binarySearchHelper(int target) { - int start = 0; - int end = winners.size() - 1; - int idx = 0; - while (start <= end) { - int mid = (start + end) / 2; - if (winners.get(mid).time == target) { - idx = mid; - break; - } - else if (winners.get(mid).time < target) { - idx = mid; - start = mid + 1; - } - else { - end = mid - 1; - } - } - return idx == winners.size() ? 0 : idx; + return this.currWinner.floorEntry(t).getValue(); } } @@ -47,13 +27,3 @@ else if (winners.get(mid).time < target) { * TopVotedCandidate obj = new TopVotedCandidate(persons, times); * int param_1 = obj.q(t); */ - -class Winner { - int time; - int val; - - public Winner(int time, int val) { - this.time = time; - this.val = val; - } -} From 64a9ecee670ae225f3b16cc6985dc50b31a48e00 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 1 Sep 2022 14:43:28 -0700 Subject: [PATCH 0749/1640] Update and rename Easy/Path Sum III.java to Medium/Path Sum III.java --- Easy/Path Sum III.java | 24 ------------------------ Medium/Path Sum III.java | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 24 deletions(-) delete mode 100644 Easy/Path Sum III.java create mode 100644 Medium/Path Sum III.java diff --git a/Easy/Path Sum III.java b/Easy/Path Sum III.java deleted file mode 100644 index 08c0fd85..00000000 --- a/Easy/Path Sum III.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode(int x) { val = x; } - * } - */ -class Solution { - public int pathSum(TreeNode root, int sum) { - if (root == null) { - return 0; - } - return helper(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum); - } - - private int helper(TreeNode root, int sum) { - if (root == null) { - return 0; - } - return (root.val == sum ? 1 : 0) + helper(root.left, sum - root.val) + helper(root.right, sum - root.val); - } -} diff --git a/Medium/Path Sum III.java b/Medium/Path Sum III.java new file mode 100644 index 00000000..69badada --- /dev/null +++ b/Medium/Path Sum III.java @@ -0,0 +1,36 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int pathSum(TreeNode root, int targetSum) { + Map map = new HashMap<>(); + map.put(0L, 1); + int[] count = {0}; + preorder(root, 0L, map, count, targetSum); + return count[0]; + } + + private void preorder(TreeNode root, long currSum, Map map, int[] count, int targetSum) { + if (root == null) { + return; + } + currSum += root.val; + count[0] += map.getOrDefault(currSum - targetSum, 0); + map.put(currSum, map.getOrDefault(currSum, 0) + 1); + preorder(root.left, currSum, map, count, targetSum); + preorder(root.right, currSum, map, count, targetSum); + map.put(currSum, map.get(currSum) - 1); + } +} From 000bad160a4be38b78764dcece56b2811ba01ff2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 2 Sep 2022 11:21:59 -0700 Subject: [PATCH 0750/1640] Update Cousins in Binary Tree.java --- Easy/Cousins in Binary Tree.java | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Easy/Cousins in Binary Tree.java b/Easy/Cousins in Binary Tree.java index 6d76a140..f2325e25 100644 --- a/Easy/Cousins in Binary Tree.java +++ b/Easy/Cousins in Binary Tree.java @@ -15,30 +15,30 @@ */ class Solution { public boolean isCousins(TreeNode root, int x, int y) { - NodeDetail nodeDetailX = getNodeDetail(root, x, null, 0); - NodeDetail nodeDetailY = getNodeDetail(root, y, null, 0); - return nodeDetailX.depth == nodeDetailY.depth && nodeDetailX.parent != nodeDetailY.parent; + ParentDepthPair xPair = getParentDepthPair(root, x, 0); + ParentDepthPair yPair = getParentDepthPair(root, y, 0); + return xPair.parent != yPair.parent && xPair.depth == yPair.depth; } - private NodeDetail getNodeDetail(TreeNode root, int n, TreeNode parent, int depth) { + private ParentDepthPair getParentDepthPair(TreeNode root, int val, int currDepth) { if (root == null) { return null; } - if (root.val == n) { - return new NodeDetail(parent, depth); + if (root.val == val) { + return new ParentDepthPair(root, currDepth); } - NodeDetail left = getNodeDetail(root.left, n, root, depth + 1); - if (left != null) { - return left; + if ((root.left != null && root.left.val == val) || (root.right != null && root.right.val == val)) { + return new ParentDepthPair(root, currDepth); } - return getNodeDetail(root.right, n, root, depth + 1); + ParentDepthPair leftPair = getParentDepthPair(root.left, val, currDepth + 1); + return leftPair != null ? leftPair : getParentDepthPair(root.right, val, currDepth + 1); } - private class NodeDetail { + private static class ParentDepthPair { TreeNode parent; int depth; - - public NodeDetail(TreeNode parent, int depth) { + + public ParentDepthPair(TreeNode parent, int depth) { this.parent = parent; this.depth = depth; } From c3e1068ddcfd392586a1362e3f8552dbf21b132c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 2 Sep 2022 14:05:42 -0700 Subject: [PATCH 0751/1640] Update Unique Email Addresses.java --- Easy/Unique Email Addresses.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Easy/Unique Email Addresses.java b/Easy/Unique Email Addresses.java index ca28017e..eb3da5d5 100644 --- a/Easy/Unique Email Addresses.java +++ b/Easy/Unique Email Addresses.java @@ -1,15 +1,13 @@ class Solution { public int numUniqueEmails(String[] emails) { - return Arrays.stream(emails).map(Solution::formatEmail).collect(Collectors.toSet()).size(); + return Arrays.stream(emails).map(Solution::getFormattedEmail).collect(Collectors.toSet()).size(); } - private static String formatEmail(String email) { - String localName = email.split("@")[0]; - return (localName.indexOf('+') != -1 - ? localName.substring(0, localName.indexOf('+')) - : localName) - .replaceAll("\\.", "") - + "@" - + email.split("@")[1]; + private static String getFormattedEmail(String email) { + String[] strs = email.split("@"); + int plusIdx = strs[0].indexOf('+'); + String formattedLocalName = strs[0].substring(0, (plusIdx == -1 ? strs[0].length() : plusIdx)) + .replaceAll("\\.", ""); + return formattedLocalName + "@" + strs[1]; } } From 6464d9d7cd451fa98fa56aec6efc5e1a04fba28b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 2 Sep 2022 14:12:22 -0700 Subject: [PATCH 0752/1640] Update Boats to Save People.java --- Medium/Boats to Save People.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Medium/Boats to Save People.java b/Medium/Boats to Save People.java index 365bafc0..725f18c7 100644 --- a/Medium/Boats to Save People.java +++ b/Medium/Boats to Save People.java @@ -1,16 +1,16 @@ class Solution { public int numRescueBoats(int[] people, int limit) { Arrays.sort(people); + int startIdx = 0; + int endIdx = people.length - 1; int count = 0; - int start = 0; - int end = people.length - 1; - while (end >= start) { - if (people[start] + people[end] <= limit) { - start++; + while (startIdx <= endIdx) { + int currWeight = people[endIdx--]; + if (startIdx <= endIdx && currWeight + people[startIdx] <= limit) { + currWeight += people[startIdx++]; } - end--; count++; - } + } return count; - } + } } From 2052f493c6e0548cd76ec5d2af3e4a4e2f40ffc5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 2 Sep 2022 16:25:20 -0700 Subject: [PATCH 0753/1640] Update Count Univalue Subtrees.java --- Medium/Count Univalue Subtrees.java | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Medium/Count Univalue Subtrees.java b/Medium/Count Univalue Subtrees.java index 2eae480a..73ac6599 100644 --- a/Medium/Count Univalue Subtrees.java +++ b/Medium/Count Univalue Subtrees.java @@ -15,27 +15,22 @@ */ class Solution { public int countUnivalSubtrees(TreeNode root) { + if (root == null) { + return 0; + } int[] count = {0}; - helper(root, count); + helper(root, count, root.val); return count[0]; } - private boolean helper(TreeNode root, int[] count) { + private boolean helper(TreeNode root, int[] count, int val) { if (root == null) { return true; } - boolean leftVal = helper(root.left, count); - boolean rightVal = helper(root.right, count); - if (leftVal && rightVal) { - if ( - (root.left != null && root.left.val != root.val) || - (root.right != null && root.right.val != root.val) - ) { - return false; - } - count[0]++; - return true; + if (!helper(root.left, count, root.val) | !helper(root.right, count, root.val)) { + return false; } - return false; + count[0]++; + return root.val == val; } } From 9da58f43d7b6d1a2e122660de29dbcabb5c4347f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Sep 2022 13:00:34 -0700 Subject: [PATCH 0754/1640] Update Numbers With Same Consecutive Differences.java --- ...ers With Same Consecutive Differences.java | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/Medium/Numbers With Same Consecutive Differences.java b/Medium/Numbers With Same Consecutive Differences.java index 24c35555..9c93c383 100644 --- a/Medium/Numbers With Same Consecutive Differences.java +++ b/Medium/Numbers With Same Consecutive Differences.java @@ -1,31 +1,25 @@ class Solution { - public int[] numsSameConsecDiff(int N, int K) { - if (N == 1) { - return new int[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; - } - Set set = new HashSet<>(); - for (int i = 1; i <= 9; i++) { - helper(i, new StringBuilder(), K, set, N); - } - int[] ans = new int[set.size()]; - Iterator iterator = set.iterator(); - for (int i = 0; i < ans.length; i++) { - ans[i] = iterator.next(); - } - return ans; + public int[] numsSameConsecDiff(int n, int k) { + List result = new ArrayList<>(); + helper(n, k, result, new StringBuilder()); + return result.stream().mapToInt(Integer::intValue).toArray(); } - private void helper(int curr, StringBuilder sb, int k, Set set, int n) { + private void helper(int n, int k, List result, StringBuilder sb) { if (sb.length() == n) { - set.add(Integer.parseInt(sb.toString())); - } - if (sb.length() > n || curr > 9 || curr < 0) { + result.add(Integer.parseInt(sb.toString())); return; } - else { - sb.append(curr); - helper(curr + k, sb, k, set, n); - helper(curr - k, sb, k, set, n); + for (int i = 0; i <= 9; i++) { + if (sb.isEmpty() && i == 0) { + continue; + } + if (!sb.isEmpty() + && Math.abs(Character.getNumericValue(sb.charAt(sb.length() - 1)) - i) != k) { + continue; + } + sb.append(i); + helper(n, k, result, new StringBuilder(sb)); sb.deleteCharAt(sb.length() - 1); } } From 089078d4557837b4a99f837b03070d76f33e1700 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Sep 2022 21:53:50 -0700 Subject: [PATCH 0755/1640] Update Vertical Order Traversal Of a Binary Tree.java --- ...ical Order Traversal Of a Binary Tree.java | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Hard/Vertical Order Traversal Of a Binary Tree.java b/Hard/Vertical Order Traversal Of a Binary Tree.java index 8d00094a..2c82d9f6 100644 --- a/Hard/Vertical Order Traversal Of a Binary Tree.java +++ b/Hard/Vertical Order Traversal Of a Binary Tree.java @@ -15,42 +15,46 @@ */ class Solution { public List> verticalTraversal(TreeNode root) { - Map> map = new TreeMap<>(); - Queue queue = new LinkedList<>(); - queue.add(new TreeCoordinate(root, 0, 0)); + Map> map = new HashMap<>(); + Queue queue = new LinkedList<>(); + queue.add(new NodePair(0, 0, root)); + int minColumn = 0; + int maxColumn = 0; while (!queue.isEmpty()) { int size = queue.size(); while (size-- > 0) { - TreeCoordinate removed = queue.remove(); + NodePair removed = queue.remove(); + minColumn = Math.min(minColumn, removed.y); + maxColumn = Math.max(maxColumn, removed.y); map.computeIfAbsent(removed.y, k -> new ArrayList<>()).add(removed); if (removed.node.left != null) { - queue.add(new TreeCoordinate(removed.node.left, removed.x + 1, removed.y - 1)); + queue.add(new NodePair(removed.x + 1, removed.y - 1, removed.node.left)); } if (removed.node.right != null) { - queue.add(new TreeCoordinate(removed.node.right, removed.x + 1, removed.y + 1)); + queue.add(new NodePair(removed.x + 1, removed.y + 1, removed.node.right)); } } } List> result = new ArrayList<>(); - for (Integer key : map.keySet()) { - List temp = map.get(key); - Collections.sort(temp, - Comparator.comparingInt((TreeCoordinate o) -> o.x).thenComparingInt(o -> o.node.val)); - result.add(temp.stream().map(a -> a.node.val).collect(Collectors.toList())); + for (int key = minColumn; key <= maxColumn; key++) { + List list = map.get(key); + result.add(list.stream() + .sorted(Comparator.comparingInt((NodePair o) -> o.x).thenComparingInt(o -> o.node.val)) + .map(np -> np.node.val) + .collect(Collectors.toList())); } return result; } - private static class TreeCoordinate { + class NodePair { + int x; + int y; + TreeNode node; - public TreeNode node; - public int x; - public int y; - - public TreeCoordinate(TreeNode node, int x, int y) { - this.node = node; + public NodePair(int x, int y, TreeNode node) { this.x = x; this.y = y; + this.node = node; } } } From 25457f092966035d64bae8a308029698e48ad8c2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Sep 2022 21:58:30 -0700 Subject: [PATCH 0756/1640] Create Check Distances Between Same Letters.java --- Easy/Check Distances Between Same Letters.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Check Distances Between Same Letters.java diff --git a/Easy/Check Distances Between Same Letters.java b/Easy/Check Distances Between Same Letters.java new file mode 100644 index 00000000..ed5367f6 --- /dev/null +++ b/Easy/Check Distances Between Same Letters.java @@ -0,0 +1,16 @@ +class Solution { + public boolean checkDistances(String s, int[] distance) { + Map charToIdx = new HashMap<>(); + for (int i = 0; i < s.length(); i++) { + if (charToIdx.containsKey(s.charAt(i))) { + int diff = i - charToIdx.get(s.charAt(i)) - 1; + if (diff != distance[s.charAt(i) - 'a']) { + return false; + } + } else { + charToIdx.put(s.charAt(i), i); + } + } + return true; + } +} From 354581b7b804c85c3097d1a8361b84001883568d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 4 Sep 2022 16:59:16 -0700 Subject: [PATCH 0757/1640] Create Find Subarrays With Equal Sum.java --- Easy/Find Subarrays With Equal Sum.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Find Subarrays With Equal Sum.java diff --git a/Easy/Find Subarrays With Equal Sum.java b/Easy/Find Subarrays With Equal Sum.java new file mode 100644 index 00000000..834989a0 --- /dev/null +++ b/Easy/Find Subarrays With Equal Sum.java @@ -0,0 +1,13 @@ +class Solution { + public boolean findSubarrays(int[] nums) { + Set set = new HashSet<>(); + for (int i = 0; i < nums.length - 1; i++) { + int sum = nums[i] + nums[i + 1]; + if (set.contains(sum)) { + return true; + } + set.add(sum); + } + return false; + } +} From b6bed02c8d4ff81a0ac8399c8b765c54af595ae3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 4 Sep 2022 17:03:30 -0700 Subject: [PATCH 0758/1640] Update N-ary Tree Level Order Traversal.java --- Medium/N-ary Tree Level Order Traversal.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Medium/N-ary Tree Level Order Traversal.java b/Medium/N-ary Tree Level Order Traversal.java index 29373207..7f3df2b3 100644 --- a/Medium/N-ary Tree Level Order Traversal.java +++ b/Medium/N-ary Tree Level Order Traversal.java @@ -22,21 +22,19 @@ public List> levelOrder(Node root) { if (root == null) { return new ArrayList<>(); } - List> result = new ArrayList<>(); + List> levels = new ArrayList<>(); Queue queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { int size = queue.size(); - List level = new ArrayList<>(); + List currLevel = new ArrayList<>(); while (size-- > 0) { Node removed = queue.remove(); - level.add(removed.val); - for (Node child : removed.children) { - queue.add(child); - } + currLevel.add(removed.val); + queue.addAll(removed.children); } - result.add(level); + levels.add(currLevel); } - return result; - } + return levels; + } } From 89bf3963cffcaffa359d4f8494b35f0dd4205252 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 5 Sep 2022 07:29:02 -0700 Subject: [PATCH 0759/1640] Create Strictly Palindromic Number.java --- Medium/Strictly Palindromic Number.java | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Strictly Palindromic Number.java diff --git a/Medium/Strictly Palindromic Number.java b/Medium/Strictly Palindromic Number.java new file mode 100644 index 00000000..b2e27e3a --- /dev/null +++ b/Medium/Strictly Palindromic Number.java @@ -0,0 +1,32 @@ +class Solution { + public boolean isStrictlyPalindromic(int n) { + for (int i = 2; i <= n - 2; i++) { + if (!isPalindrome(convertToBase(n, i))) { + return false; + } + } + return true; + } + + private String convertToBase(int n, int base) { + StringBuilder sb = new StringBuilder(); + while (n > 0) { + sb.append(n % base); + n /= base; + } + return sb.reverse().toString(); + } + + private boolean isPalindrome(String s) { + int start = 0; + int end = s.length() - 1; + while (start < end) { + if (s.charAt(start) != s.charAt(end)) { + return false; + } + start++; + end--; + } + return true; + } +} From a925b55250fbccf8070db1e3deccbccb14a8b7ad Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 5 Sep 2022 14:45:28 -0700 Subject: [PATCH 0760/1640] Update Maximum Product of three numbers.java --- Easy/Maximum Product of three numbers.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Easy/Maximum Product of three numbers.java b/Easy/Maximum Product of three numbers.java index ebc6f79b..981fbf96 100644 --- a/Easy/Maximum Product of three numbers.java +++ b/Easy/Maximum Product of three numbers.java @@ -2,9 +2,8 @@ class Solution { public int maximumProduct(int[] nums) { Arrays.sort(nums); int n = nums.length; - int rightSideProd = nums[n - 1] * nums[n - 2] * nums[n - 3]; - int leftSideProd = nums[0] * nums[1] * nums[2]; - int mixedSideProd = nums[0] * nums[1] * nums[n - 1]; - return Math.max(rightSideProd, Math.max(leftSideProd, mixedSideProd)); + int lastThree = nums[n - 1] * nums[n - 2] * nums[n - 3]; + int firstTwoAndLast = nums[0] * nums[1] * nums[n - 1]; + return Math.max(lastThree, firstTwoAndLast); } } From 295a89272b0d954ad1145dea4f0074b8b86f7dc0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 5 Sep 2022 14:45:44 -0700 Subject: [PATCH 0761/1640] Rename Maximum Product of three numbers.java to Maximum Product of Three Numbers.java --- ...f three numbers.java => Maximum Product of Three Numbers.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Easy/{Maximum Product of three numbers.java => Maximum Product of Three Numbers.java} (100%) diff --git a/Easy/Maximum Product of three numbers.java b/Easy/Maximum Product of Three Numbers.java similarity index 100% rename from Easy/Maximum Product of three numbers.java rename to Easy/Maximum Product of Three Numbers.java From 560256d22b9ff47693370f0a6c53217065e78ab0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 5 Sep 2022 19:21:23 -0700 Subject: [PATCH 0762/1640] Update Binary Tree Pruning.java --- Medium/Binary Tree Pruning.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Medium/Binary Tree Pruning.java b/Medium/Binary Tree Pruning.java index a03af5a7..9269db06 100644 --- a/Medium/Binary Tree Pruning.java +++ b/Medium/Binary Tree Pruning.java @@ -15,23 +15,21 @@ */ class Solution { public TreeNode pruneTree(TreeNode root) { - boolean isRootOne = helper(root); - return isRootOne ? root : null; + return subtreeContainsOne(root) ? root : null; } - private boolean helper(TreeNode root) { + private boolean subtreeContainsOne(TreeNode root) { if (root == null) { return false; } - boolean selfOne = root.val == 1; - boolean leftContainsOne = helper(root.left); - boolean rightContainsOne = helper(root.right); - if (!leftContainsOne) { + boolean leftContains = subtreeContainsOne(root.left); + boolean rightContains = subtreeContainsOne(root.right); + if (!leftContains) { root.left = null; } - if (!rightContainsOne) { + if (!rightContains) { root.right = null; } - return selfOne || leftContainsOne || rightContainsOne; + return leftContains || rightContains || root.val == 1; } } From fc59cb84f7af6ea975c66da7dc638ad22a8cb9ce Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 6 Sep 2022 07:43:06 -0700 Subject: [PATCH 0763/1640] Update Reorganize String.java --- Medium/Reorganize String.java | 69 ++++++++++++++++------------------- 1 file changed, 31 insertions(+), 38 deletions(-) diff --git a/Medium/Reorganize String.java b/Medium/Reorganize String.java index 824bc88b..f3c2dfc1 100644 --- a/Medium/Reorganize String.java +++ b/Medium/Reorganize String.java @@ -1,44 +1,37 @@ class Solution { - public String reorganizeString(String S) { - int buffer = S.length()%2 == 0 ? S.length()/2 : S.length()/2 + 1; - Map map = new HashMap<>(); - char[] chars = S.toCharArray(); - - for (char c : chars) { - map.put(c, map.getOrDefault(c, 0) + 1); - if (map.get(c) > buffer) { - return ""; - } - } - - return createString(map); + public String reorganizeString(String s) { + Map map = new HashMap<>(); + for (char c : s.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); } - - private String createString(Map map) { - PriorityQueue pq = new PriorityQueue<>((a, b) -> b[1] - a[1]); - for (char c : map.keySet()) { - pq.add(new int[] {c, map.get(c)}); - } - - StringBuilder sb = new StringBuilder(); - while (!pq.isEmpty()) { - int[] first = pq.poll(); - if (sb.length() == 0 || first[0] != sb.charAt(sb.length() - 1)) { - sb.append((char) first[0]); - if (--first[1] > 0) { - pq.add(first); - } - } - else { - int[] second = pq.poll(); - sb.append((char) second[0]); - if (--second[1] > 0) { - pq.add(second); - } - pq.add(first); - } + PriorityQueue pq = new PriorityQueue<>( + (o1, o2) -> map.get(o2).compareTo(map.get(o1))); + pq.addAll(map.keySet()); + StringBuilder sb = new StringBuilder(); + while (!pq.isEmpty()) { + char removed = pq.poll(); + if (!sb.isEmpty() && sb.charAt(sb.length() - 1) == removed) { + if (pq.isEmpty()) { + return ""; } + char secondRemoved = pq.poll(); + pq.add(removed); + sb.append(secondRemoved); + updateStructure(map, pq, secondRemoved); + } else { + sb.append(removed); + updateStructure(map, pq, removed); + } + } + return sb.toString(); + } - return sb.toString(); + private void updateStructure(Map map, PriorityQueue pq, char c) { + map.put(c, map.get(c) - 1); + if (map.get(c) > 0) { + pq.add(c); + } else { + map.remove(c); } + } } From 9e2e25843b5a2d4800136229318b660e2363f7ac Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 6 Sep 2022 08:33:20 -0700 Subject: [PATCH 0764/1640] Create Maximum Length of Repeated Subarray.java --- Medium/Maximum Length of Repeated Subarray.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Maximum Length of Repeated Subarray.java diff --git a/Medium/Maximum Length of Repeated Subarray.java b/Medium/Maximum Length of Repeated Subarray.java new file mode 100644 index 00000000..af6696fb --- /dev/null +++ b/Medium/Maximum Length of Repeated Subarray.java @@ -0,0 +1,15 @@ +class Solution { + public int findLength(int[] nums1, int[] nums2) { + int result = 0; + int[][] dp = new int[nums1.length + 1][nums2.length + 1]; + for (int i = nums1.length - 1; i >= 0; i--) { + for (int j = nums2.length - 1; j >= 0; j--) { + if (nums1[i] == nums2[j]) { + dp[i][j] = dp[i + 1][j + 1] + 1; + result = Math.max(result, dp[i][j]); + } + } + } + return result; + } +} From 70600a3f2a119317846b10820f9541b42eb3b83f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 6 Sep 2022 10:53:15 -0700 Subject: [PATCH 0765/1640] Update Longest Harmonious Subsequence.java --- Easy/Longest Harmonious Subsequence.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Easy/Longest Harmonious Subsequence.java b/Easy/Longest Harmonious Subsequence.java index 97d0ec4a..73f54d43 100644 --- a/Easy/Longest Harmonious Subsequence.java +++ b/Easy/Longest Harmonious Subsequence.java @@ -1,13 +1,16 @@ class Solution { public int findLHS(int[] nums) { - Map map = Arrays.stream(nums).boxed() - .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); - int result = 0; - for (Integer key : map.keySet()) { - if (map.containsKey(key + 1)) { - result = Math.max(result, (int) (map.get(key) + map.get(key + 1))); + int maxSubarraySize = 0; + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + if (map.containsKey(num + 1)) { + maxSubarraySize = Math.max(maxSubarraySize, map.get(num) + map.get(num + 1)); + } + if (map.containsKey(num - 1)) { + maxSubarraySize = Math.max(maxSubarraySize, map.get(num) + map.get(num - 1)); } } - return result; + return maxSubarraySize; } } From 41ffff1f70b7d7e8856b41e08ff6ae02b527793b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 6 Sep 2022 18:34:02 -0700 Subject: [PATCH 0766/1640] Update Construct String from Binary Tree.java --- Easy/Construct String from Binary Tree.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Easy/Construct String from Binary Tree.java b/Easy/Construct String from Binary Tree.java index be38ff5e..a6b1a205 100644 --- a/Easy/Construct String from Binary Tree.java +++ b/Easy/Construct String from Binary Tree.java @@ -14,26 +14,26 @@ * } */ class Solution { - public String tree2str(TreeNode t) { + public String tree2str(TreeNode root) { StringBuilder sb = new StringBuilder(); - helper(t, sb); + helper(root, sb); return sb.toString(); } - private void helper(TreeNode node, StringBuilder sb) { - if (node == null) { + private void helper(TreeNode root, StringBuilder sb) { + if (root == null) { return; } - sb.append(node.val); - if (node.left == null && node.right == null) { + sb.append(root.val); + if (root.left == null && root.right == null) { return; } sb.append("("); - helper(node.left, sb); + helper(root.left, sb); sb.append(")"); - if (node.right != null) { + if (root.right != null) { sb.append("("); - helper(node.right, sb); + helper(root.right, sb); sb.append(")"); } } From 58878fda3aedabe514bd1c6239c545d393a590b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Sep 2022 06:52:14 -0700 Subject: [PATCH 0767/1640] Update Koko Eating Bananas.java --- Medium/Koko Eating Bananas.java | 37 +++++++++++++-------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/Medium/Koko Eating Bananas.java b/Medium/Koko Eating Bananas.java index e4bab284..821a21ca 100644 --- a/Medium/Koko Eating Bananas.java +++ b/Medium/Koko Eating Bananas.java @@ -1,33 +1,26 @@ class Solution { public int minEatingSpeed(int[] piles, int h) { - int minBananaCount = 1; - int maxBananaCount = maxFromPile(piles); - while (minBananaCount < maxBananaCount) { - int mid = (minBananaCount + maxBananaCount) / 2; - if (canFinishPile(piles, mid, h)) { - maxBananaCount = mid; + int start = 1; + int end = 0; + for (int pile : piles) { + end = Math.max(end, pile); + } + while (start <= end) { + int mid = start + (end - start) / 2; + if (isPossible(piles, mid, h)) { + end = mid - 1; } else { - minBananaCount = mid + 1; + start = mid + 1; } } - return minBananaCount; + return start; } - private boolean canFinishPile(int[] piles, int bananaPerHour, int totalHours) { - int totalTime = 0; + private boolean isPossible(int[] piles, int k, int h) { + int numOfHours = 0; for (int pile : piles) { - int numOfHours = pile / bananaPerHour; - totalTime += numOfHours == 0 ? 1 : numOfHours; - totalTime += numOfHours > 0 && pile % bananaPerHour != 0 ? 1 : 0; - } - return totalTime <= totalHours; - } - - private int maxFromPile(int[] piles) { - int maxCount = piles[0]; - for (int i = 1; i < piles.length; i++) { - maxCount = Math.max(maxCount, piles[i]); + numOfHours += Math.ceil((double) pile / k); } - return maxCount; + return numOfHours <= h; } } From 6a4ed92bae9bb89eff2b2d05129d01d9d929f0c0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Sep 2022 07:33:11 -0700 Subject: [PATCH 0768/1640] Update Product of the Last K Numbers.java --- Medium/Product of the Last K Numbers.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Medium/Product of the Last K Numbers.java b/Medium/Product of the Last K Numbers.java index 9eda5d06..acfc5bae 100644 --- a/Medium/Product of the Last K Numbers.java +++ b/Medium/Product of the Last K Numbers.java @@ -1,21 +1,24 @@ class ProductOfNumbers { - List list; + + private List list; + public ProductOfNumbers() { + this.list = new ArrayList<>(); add(0); } public void add(int num) { if (num > 0) { list.add(list.get(list.size() - 1) * num); - } - else { + } else { list = new ArrayList<>(); list.add(1); } } public int getProduct(int k) { - return k < list.size() ? list.get(list.size() - 1) / list.get(list.size() - k - 1) : 0; + int n = list.size(); + return k < n ? list.get(n - 1) / list.get(n - k - 1) : 0; } } From b1c3edd9496a7cc3c750a6d1a6045666de37dc3c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Sep 2022 11:05:08 -0700 Subject: [PATCH 0769/1640] Update Decode String.java --- Medium/Decode String.java | 46 +++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/Medium/Decode String.java b/Medium/Decode String.java index f88449d7..fb2f81de 100644 --- a/Medium/Decode String.java +++ b/Medium/Decode String.java @@ -1,34 +1,32 @@ class Solution { public String decodeString(String s) { - Stack countStack = new Stack<>(); - Stack wordStack = new Stack<>(); - StringBuilder sb = new StringBuilder(); - int idx = 0; - while (idx < s.length()) { - if (Character.isDigit(s.charAt(idx))) { - int count = 0; - while (idx < s.length() && Character.isDigit(s.charAt(idx))) { - count = count * 10 + Character.getNumericValue(s.charAt(idx++)); + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (c == ']') { + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty() && stack.peek() != '[') { + sb.append(stack.pop()); } - countStack.push(count); - } else if (Character.isLetter(s.charAt(idx))) { - sb.append(s.charAt(idx++)); - } else if (s.charAt(idx) == '[') { - wordStack.push(sb.toString()); - sb.setLength(0); - idx++; - } else { - StringBuilder temp = new StringBuilder(wordStack.pop()); - String currentString = sb.toString(); + stack.pop(); + String temp = sb.toString(); sb.setLength(0); - int count = countStack.pop(); + while (!stack.isEmpty() && Character.isDigit(stack.peek())) { + sb.append(stack.pop()); + } + int count = Integer.parseInt(sb.reverse().toString()); while (count-- > 0) { - temp.append(currentString); + for (int i = temp.length() - 1; i >= 0; i--) { + stack.push(temp.charAt(i)); + } } - sb.append(temp); - idx++; + } else { + stack.push(c); } } - return sb.toString(); + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.reverse().toString(); } } From 73a4840d7e722a1dba15ab434e71c3db77810796 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Sep 2022 14:31:47 -0700 Subject: [PATCH 0770/1640] Update Valid Sudoku.java --- Medium/Valid Sudoku.java | 47 +++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/Medium/Valid Sudoku.java b/Medium/Valid Sudoku.java index e35dd7c3..88538727 100644 --- a/Medium/Valid Sudoku.java +++ b/Medium/Valid Sudoku.java @@ -1,27 +1,30 @@ class Solution { - public boolean isValidSudoku(char[][] board) { - HashSet[] rowSet = new HashSet[9]; - HashSet[] colSet = new HashSet[9]; - HashSet[] boxSet = new HashSet[9]; - for (int i = 0; i < 9; i++) { - rowSet[i] = new HashSet<>(); - colSet[i] = new HashSet<>(); - boxSet[i] = new HashSet<>(); + public boolean isValidSudoku(char[][] board) { + int N = 9; + int[][] rows = new int[N][N]; + int[][] cols = new int[N][N]; + int[][] boxes = new int[N][N]; + for (int r = 0; r < N; r++) { + for (int c = 0; c < N; c++) { + if (board[r][c] == '.') { + continue; } - for (int i = 0; i < 9; i++) { - for (int j = 0; j < 9; j++) { - if (board[i][j] != '.') { - char val = board[i][j]; - int boxIdx = (i / 3) * 3 + j / 3; - if (rowSet[i].contains(val) || colSet[j].contains(val) || boxSet[boxIdx].contains(val)) { - return false; - } - rowSet[i].add(val); - colSet[j].add(val); - boxSet[boxIdx].add(val); - } - } + int pos = board[r][c] - '1'; + if (rows[r][pos] == 1) { + return false; } - return true; + rows[r][pos] = 1; + if (cols[c][pos] == 1) { + return false; + } + cols[c][pos] = 1; + int idx = (r / 3) * 3 + c / 3; + if (boxes[idx][pos] == 1) { + return false; + } + boxes[idx][pos] = 1; + } } + return true; + } } From 31db170a118a3ed3be72157e6ace70dc332d99c9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Sep 2022 15:21:59 -0700 Subject: [PATCH 0771/1640] Update Find Median From Data Stream.java --- Hard/Find Median From Data Stream.java | 27 ++++++++++++-------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Hard/Find Median From Data Stream.java b/Hard/Find Median From Data Stream.java index a62a5e96..7d0de21f 100644 --- a/Hard/Find Median From Data Stream.java +++ b/Hard/Find Median From Data Stream.java @@ -1,29 +1,26 @@ class MedianFinder { - /** initialize your data structure here. */ - PriorityQueue smaller; - PriorityQueue bigger; + private PriorityQueue small; + private PriorityQueue large; + public MedianFinder() { - smaller = new PriorityQueue<>((a, b) -> b - a); - bigger = new PriorityQueue<>(); + this.small = new PriorityQueue<>((a, b) -> b - a); + this.large = new PriorityQueue<>(); } public void addNum(int num) { - smaller.add(num); - bigger.add(smaller.poll()); - if (smaller.size() < bigger.size()) { - smaller.add(bigger.poll()); + small.add(num); + large.add(small.remove()); + if (large.size() > small.size()) { + small.add(large.remove()); } } public double findMedian() { - if (smaller.size() == 0 && bigger.size() == 0) { - return 0.0; + if (small.size() > large.size()) { + return small.peek(); } - if (smaller.size() > bigger.size()) { - return (double) smaller.peek(); - } - return ((double) smaller.peek() + bigger.peek()) / 2; + return (small.peek() + large.peek()) / 2.0; } } From 601f7f4225f451ccf53d1199ae2afe9be3c41121 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Sep 2022 15:22:20 -0700 Subject: [PATCH 0772/1640] Rename Find Median From Data Stream.java to Find Median from Data Stream.java --- ...an From Data Stream.java => Find Median from Data Stream.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Hard/{Find Median From Data Stream.java => Find Median from Data Stream.java} (100%) diff --git a/Hard/Find Median From Data Stream.java b/Hard/Find Median from Data Stream.java similarity index 100% rename from Hard/Find Median From Data Stream.java rename to Hard/Find Median from Data Stream.java From 02ac83819a89fee90e309aac22e345cedcc187c1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Sep 2022 19:02:14 -0700 Subject: [PATCH 0773/1640] Update Binary Tree Inorder Traversal.java --- Easy/Binary Tree Inorder Traversal.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Easy/Binary Tree Inorder Traversal.java b/Easy/Binary Tree Inorder Traversal.java index aad98c4b..d17cf649 100644 --- a/Easy/Binary Tree Inorder Traversal.java +++ b/Easy/Binary Tree Inorder Traversal.java @@ -15,26 +15,24 @@ */ class Solution { public List inorderTraversal(TreeNode root) { - List list = new ArrayList<>(); if (root == null) { - return list; + return List.of(); } Stack stack = new Stack<>(); - stack.push(root); - root = root.left; while (root != null) { stack.push(root); root = root.left; } + List result = new ArrayList<>(); while (!stack.isEmpty()) { TreeNode removed = stack.pop(); - list.add(removed.val); - removed = removed.right; - while (removed != null) { - stack.push(removed); - removed = removed.left; + result.add(removed.val); + TreeNode rightNode = removed.right; + while (rightNode != null) { + stack.push(rightNode); + rightNode = rightNode.left; } } - return list; + return result; } } From 0a4d2c6ddfbef697b602fae32b17c2f6f3005a34 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Sep 2022 07:01:09 -0700 Subject: [PATCH 0774/1640] Update Reverse Nodes in k-Group.java --- Hard/Reverse Nodes in k-Group.java | 55 +++++++++++++----------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/Hard/Reverse Nodes in k-Group.java b/Hard/Reverse Nodes in k-Group.java index 66ab4ec1..f28071ac 100644 --- a/Hard/Reverse Nodes in k-Group.java +++ b/Hard/Reverse Nodes in k-Group.java @@ -10,47 +10,40 @@ */ class Solution { public ListNode reverseKGroup(ListNode head, int k) { - if (head == null) { - return null; - } - ListNode start = head; - ListNode curr = head; + ListNode newHead = null; ListNode prev = null; - ListNode revHead = null; + ListNode curr = head; while (curr != null) { - int count = 1; - while (curr.next != null && count < k) { + ListNode start = curr; + int idx = 1; + for (idx = 1; idx < k && curr.next != null; idx++) { curr = curr.next; - count++; } - if (count == k) { - ListNode next = curr.next; - curr.next = null; - if (revHead == null) { - revHead = curr; - } - ListNode reverse = reverse(start); - if (prev != null) { - prev.next = reverse; - } - start.next = next; - prev = start; - start = next; - curr = next; + if (idx != k) { + curr = null; + continue; } - else { - curr = curr.next; + ListNode next = curr.next; + curr.next = null; + ListNode reversedNode = reverse(start); + if (newHead == null) { + newHead = reversedNode; } + if (prev != null) { + prev.next = reversedNode; + } + prev = start; + start.next = next; + curr = next; } - return revHead == null ? head : revHead; - } + return newHead; + } - private ListNode reverse(ListNode root) { - ListNode curr = root; - ListNode next = null; + private ListNode reverse(ListNode node) { + ListNode curr = node; ListNode prev = null; while (curr != null) { - next = curr.next; + ListNode next = curr.next; curr.next = prev; prev = curr; curr = next; From ef5b3258830d62de77277059531caf9bd53d87ff Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Sep 2022 07:34:45 -0700 Subject: [PATCH 0775/1640] Update Basic Calculator.java --- Hard/Basic Calculator.java | 42 ++++++++++++++------------------------ 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/Hard/Basic Calculator.java b/Hard/Basic Calculator.java index a3d9b119..1a1813d0 100644 --- a/Hard/Basic Calculator.java +++ b/Hard/Basic Calculator.java @@ -1,41 +1,29 @@ class Solution { - public static int calculate(String s) { + public int calculate(String s) { Stack stack = new Stack<>(); - int res = 0; - int num = 0; + int result = 0; + int number = 0; int sign = 1; - boolean hasNumberStarted = false; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (Character.isDigit(c)) { - hasNumberStarted = true; - num = num * 10 + (int) (c - '0'); - } else if (c == '+' && hasNumberStarted) { - hasNumberStarted = false; - res += sign * num; - num = 0; - sign = 1; - } else if (c == '-') { - if(!hasNumberStarted) { - sign *= -1; - continue; - } - hasNumberStarted = false; - res += sign * num; - num = 0; - sign = -1; + number = number * 10 + Character.getNumericValue(c); + } else if (c == '+' || c == '-') { + result += sign * number; + sign = c == '+' ? 1 : -1; + number = 0; } else if (c == '(') { - stack.push(res); + stack.push(result); stack.push(sign); sign = 1; - res = 0; + result = 0; } else if (c == ')') { - res += sign * num; - num = 0; - res *= stack.pop(); // For sign - res += stack.pop(); // Adding the num in stack + result += sign * number; + result *= stack.pop(); + result += stack.pop(); + number = 0; } } - return res + (num != 0 ? sign * num : 0); + return result + (sign * number); } } From d8655be27c206f4ef78a011a813e647fd538f536 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Sep 2022 15:53:28 -0700 Subject: [PATCH 0776/1640] Update Basic Calculator III.java --- Hard/Basic Calculator III.java | 94 +++++++++------------------------- 1 file changed, 24 insertions(+), 70 deletions(-) diff --git a/Hard/Basic Calculator III.java b/Hard/Basic Calculator III.java index ab8af16e..dd97e966 100644 --- a/Hard/Basic Calculator III.java +++ b/Hard/Basic Calculator III.java @@ -1,74 +1,28 @@ class Solution { - public int calculate(String s) { - if (s.length() == 0) { - return 0; + public int calculate(String s) { + int currNum = 0; + int prevNum = 0; + int result = 0; + char operation = '+'; + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (Character.isDigit(c)) { + currNum = currNum * 10 + Character.getNumericValue(c); + } + if ((!Character.isDigit(c) && !Character.isWhitespace(c)) || i == s.length() - 1) { + if (operation == '-' || operation == '+') { + result += prevNum; + prevNum = operation == '+' ? currNum : -currNum; + } else if (operation == '*') { + prevNum = prevNum * currNum; + } else { + prevNum = prevNum / currNum; } - - Stack nums = new Stack<>(); - Stack ops = new Stack<>(); - int num = 0; - - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (c == ' ') { - continue; - } - - if (Character.isDigit(c)) { - num = c - '0'; - while (i < s.length() - 1 && Character.isDigit(s.charAt(i + 1))) { - num = num * 10 + (s.charAt(i + 1) - '0'); - i++; - } - - nums.push(num); - num = 0; - } - else if (c == '(') { - ops.push(c); - } - else if (c == ')') { - while (ops.peek() != '(') { - nums.push(performOperation(ops.pop(), nums.pop(), nums.pop())); - } - ops.pop(); - } - else if (c == '+' || c == '-' || c == '*' || c == '/') { - while (!ops.isEmpty() && precedence(c, ops.peek())) { - nums.push(performOperation(ops.pop(), nums.pop(), nums.pop())); - } - - ops.push(c); - } - } - - while (!ops.isEmpty()) { - nums.push(performOperation(ops.pop(), nums.pop(), nums.pop())); - } - - return nums.pop(); - } - - private int performOperation(char op, int b, int a) { - switch (op) { - case '+': return a + b; - case '-': return a - b; - case '*': return a * b; - case '/': return a / b; - } - - return 0; - } - - private boolean precedence(char op1, char op2) { - if (op2 == '(' || op2 == ')') { - return false; - } - - if ((op1 == '*' || op1 == '/') && (op2 == '+' || op2 == '-')) { - return false; - } - - return true; + operation = c; + currNum = 0; + } } + result += prevNum; + return result; + } } From ab71ab7fc99b4b63d8759b4b05216209e86372b2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Sep 2022 15:54:06 -0700 Subject: [PATCH 0777/1640] Update Basic Calculator II.java --- Medium/Basic Calculator II.java | 47 ++++++++++++--------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/Medium/Basic Calculator II.java b/Medium/Basic Calculator II.java index 402e394c..dd97e966 100644 --- a/Medium/Basic Calculator II.java +++ b/Medium/Basic Calculator II.java @@ -1,41 +1,28 @@ class Solution { public int calculate(String s) { - char sign = '+'; int currNum = 0; - Stack stack = new Stack<>(); + int prevNum = 0; + int result = 0; + char operation = '+'; for (int i = 0; i < s.length(); i++) { - if (Character.isDigit(s.charAt(i))) { - currNum = currNum * 10 + Character.getNumericValue(s.charAt(i)); + char c = s.charAt(i); + if (Character.isDigit(c)) { + currNum = currNum * 10 + Character.getNumericValue(c); } - if ((!Character.isDigit(s.charAt(i)) && s.charAt(i) != ' ') || i == s.length() - 1) { - updateStackForPreviousSign(sign, stack, currNum); + if ((!Character.isDigit(c) && !Character.isWhitespace(c)) || i == s.length() - 1) { + if (operation == '-' || operation == '+') { + result += prevNum; + prevNum = operation == '+' ? currNum : -currNum; + } else if (operation == '*') { + prevNum = prevNum * currNum; + } else { + prevNum = prevNum / currNum; + } + operation = c; currNum = 0; - sign = s.charAt(i); } } - int result = 0; - while (!stack.isEmpty()) { - result += stack.pop(); - } + result += prevNum; return result; } - - private void updateStackForPreviousSign(char sign, Stack stack, int currNum) { - switch (sign) { - case '+': - stack.push(currNum); - break; - case '-': - stack.push(-1 * currNum); - break; - case '/': - stack.push(stack.pop() / currNum); - break; - case '*': - stack.push(stack.pop() * currNum); - break; - default: - break; - } - } } From 5c50a3202197304d9e4390774f33af2d03c058e2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 9 Sep 2022 07:16:23 -0700 Subject: [PATCH 0778/1640] Create The Number of Weak Characters in the Game.java --- ...Number of Weak Characters in the Game.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/The Number of Weak Characters in the Game.java diff --git a/Medium/The Number of Weak Characters in the Game.java b/Medium/The Number of Weak Characters in the Game.java new file mode 100644 index 00000000..18607097 --- /dev/null +++ b/Medium/The Number of Weak Characters in the Game.java @@ -0,0 +1,26 @@ +class Solution { + public int numberOfWeakCharacters(int[][] properties) { + int maxAttackValue = 0; + for (int[] property : properties) { + maxAttackValue = Math.max(maxAttackValue, property[0]); + } + int maxDefense[] = new int[maxAttackValue + 2]; + for (int[] property : properties) { + int attack = property[0]; + int defense = property[1]; + maxDefense[attack] = Math.max(maxDefense[attack], defense); + } + for (int i = maxAttackValue - 1; i >= 0; i--) { + maxDefense[i] = Math.max(maxDefense[i], maxDefense[i + 1]); + } + int count = 0; + for (int[] property : properties) { + int attack = property[0]; + int defense = property[1]; + if (defense < maxDefense[attack + 1]) { + count++; + } + } + return count; + } +} From bd9598f7ed8a6b85cb01322c9bcf0e0fe344f060 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 9 Sep 2022 10:25:09 -0700 Subject: [PATCH 0779/1640] Update Goat Latin.java --- Easy/Goat Latin.java | 38 ++++++++++++++------------------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/Easy/Goat Latin.java b/Easy/Goat Latin.java index 56c98048..83417b2f 100644 --- a/Easy/Goat Latin.java +++ b/Easy/Goat Latin.java @@ -1,29 +1,19 @@ class Solution { - public String toGoatLatin(String S) { - StringBuilder sb = new StringBuilder(); - StringBuilder endAppend = new StringBuilder("a"); - final String CONSTANT_APPEND = "ma"; - int start = 0; - int end = 0; - int n = S.length(); - while (end < n) { - while (end < n && S.charAt(end) != ' ') { - end++; - } - char c = Character.toLowerCase(S.charAt(start)); - if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') { - sb.append(S.substring(start, end)).append(CONSTANT_APPEND).append(endAppend.toString()); - } - else { - sb.append(S.substring(start + 1, end)).append(S.charAt(start)).append(CONSTANT_APPEND).append(endAppend.toString()); - } - endAppend.append('a'); - end++; - start = end; - if (end < n) { - sb.append(' '); + public String toGoatLatin(String sentence) { + String[] words = sentence.split("\\s+"); + StringBuilder result = new StringBuilder(); + StringBuilder aWord = new StringBuilder(); + Set vowels = Set.of('a', 'e', 'i', 'o', 'u'); + for (String word : words) { + aWord.append('a'); + char firstChar = word.charAt(0); + if (vowels.contains(Character.toLowerCase(firstChar))) { + result.append(word).append("ma"); + } else { + result.append(word.substring(1)).append(firstChar).append("ma"); } + result.append(aWord.toString()).append(" "); } - return sb.toString(); + return result.toString().trim(); } } From b89443509ab0b984a78458bc659cfd26b8e9bff6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 9 Sep 2022 10:25:48 -0700 Subject: [PATCH 0780/1640] Update Fraction to Recurring Decimal.java --- Medium/Fraction to Recurring Decimal.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Medium/Fraction to Recurring Decimal.java b/Medium/Fraction to Recurring Decimal.java index 8e0385ba..dda64d6b 100644 --- a/Medium/Fraction to Recurring Decimal.java +++ b/Medium/Fraction to Recurring Decimal.java @@ -4,22 +4,22 @@ public String fractionToDecimal(int numerator, int denominator) { return "0"; } StringBuilder fraction = new StringBuilder(); - if (numerator < 0 ^ denominator < 0) { - fraction.append("-"); + if ((numerator < 0 && denominator > 0) || (numerator > 0 && denominator < 0)) { + fraction.append('-'); } - long dividend = Math.abs((long) numerator); - long divisor = Math.abs((long) denominator); + long dividend = Math.abs(Long.valueOf(numerator)); + long divisor = Math.abs(Long.valueOf(denominator)); fraction.append(String.valueOf(dividend / divisor)); long remainder = dividend % divisor; if (remainder == 0) { return fraction.toString(); } - fraction.append("."); + fraction.append('.'); Map map = new HashMap<>(); while (remainder != 0) { if (map.containsKey(remainder)) { fraction.insert(map.get(remainder), "("); - fraction.append(")"); + fraction.append(')'); break; } map.put(remainder, fraction.length()); From ca9ae14899dadf42039436179aab62e1eaa20807 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 9 Sep 2022 11:47:38 -0700 Subject: [PATCH 0781/1640] Update Sort Array by Increasing Frequency.java --- Easy/Sort Array by Increasing Frequency.java | 31 +++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Easy/Sort Array by Increasing Frequency.java b/Easy/Sort Array by Increasing Frequency.java index 70512785..0fa7b374 100644 --- a/Easy/Sort Array by Increasing Frequency.java +++ b/Easy/Sort Array by Increasing Frequency.java @@ -1,21 +1,24 @@ class Solution { public int[] frequencySort(int[] nums) { - Map counter = Arrays.stream(nums).boxed() - .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()) - ); - PriorityQueue frequencyMinHeap = new PriorityQueue<>((o1, o2) -> { - int c = (int) (counter.get(o1) - counter.get(o2)); - return c != 0 ? c : o2 - o1; + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> { + int c = map.get(o1).compareTo(map.get(o2)); + if (c != 0) { + return c; + } + return o2.compareTo(o1); }); - frequencyMinHeap.addAll(counter.keySet()); - int[] sortedByFrequency = new int[nums.length]; - for (int idx = 0; idx < sortedByFrequency.length;) { - int value = frequencyMinHeap.poll(); - long count = counter.get(value); - while (count-- > 0) { - sortedByFrequency[idx++] = value; + pq.addAll(map.keySet()); + int idx = 0; + while (!pq.isEmpty()) { + int removed = pq.remove(); + for (int i = 0; i < map.get(removed); i++) { + nums[idx++] = removed; } } - return sortedByFrequency; + return nums; } } From a2667fe843613ac66d401f0cd80222d08c81a85c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 9 Sep 2022 12:06:53 -0700 Subject: [PATCH 0782/1640] Update and rename Easy/Sum of Even Numbers After Queries.java to Medium/Sum of Even Numbers After Queries.java --- Easy/Sum of Even Numbers After Queries.java | 21 ------------------- Medium/Sum of Even Numbers After Queries.java | 21 +++++++++++++++++++ 2 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 Easy/Sum of Even Numbers After Queries.java create mode 100644 Medium/Sum of Even Numbers After Queries.java diff --git a/Easy/Sum of Even Numbers After Queries.java b/Easy/Sum of Even Numbers After Queries.java deleted file mode 100644 index 8b7d1d27..00000000 --- a/Easy/Sum of Even Numbers After Queries.java +++ /dev/null @@ -1,21 +0,0 @@ -class Solution { - public int[] sumEvenAfterQueries(int[] A, int[][] queries) { - int sum = 0; - for (int num : A) { - sum += num % 2 == 0 ? num : 0; - } - int[] ans = new int[queries.length]; - for (int i = 0; i < queries.length; i++) { - int newVal = A[queries[i][1]] + queries[i][0]; - if (A[queries[i][1]] % 2 == 0) { - sum -= A[queries[i][1]]; - } - A[queries[i][1]] = newVal; - if (A[queries[i][1]] % 2 == 0) { - sum += newVal; - } - ans[i] = sum; - } - return ans; - } -} diff --git a/Medium/Sum of Even Numbers After Queries.java b/Medium/Sum of Even Numbers After Queries.java new file mode 100644 index 00000000..f8a3b043 --- /dev/null +++ b/Medium/Sum of Even Numbers After Queries.java @@ -0,0 +1,21 @@ +class Solution { + public int[] sumEvenAfterQueries(int[] nums, int[][] queries) { + int evenSum = 0; + for (int num : nums) { + evenSum += num % 2 == 0 ? num : 0; + } + int[] result = new int[nums.length]; + for (int i = 0; i < queries.length; i++) { + int idx = queries[i][1]; + if (nums[idx] % 2 == 0) { + evenSum -= nums[idx]; + } + nums[idx] += queries[i][0]; + if (nums[idx] % 2 == 0) { + evenSum += nums[idx]; + } + result[i] = evenSum; + } + return result; + } +} From 5b0b5fb9e09242222733f4bfda4591f2cac047ad Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 10 Sep 2022 07:48:02 -0700 Subject: [PATCH 0783/1640] Create Best Time to Buy and Sell Stock IV.java --- Hard/Best Time to Buy and Sell Stock IV.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Hard/Best Time to Buy and Sell Stock IV.java diff --git a/Hard/Best Time to Buy and Sell Stock IV.java b/Hard/Best Time to Buy and Sell Stock IV.java new file mode 100644 index 00000000..8aecbd84 --- /dev/null +++ b/Hard/Best Time to Buy and Sell Stock IV.java @@ -0,0 +1,18 @@ +class Solution { + public int maxProfit(int k, int[] prices) { + if (k == 0) { + return 0; + } + int[][] dp = new int[k + 1][2]; + for (int i = 0; i <= k; i++) { + dp[i][0] = 1000; + } + for (int i = 0; i < prices.length; i++) { + for (int j = 1; j <= k; j++) { + dp[j][0] = Math.min(dp[j][0], prices[i] - dp[j - 1][1]); + dp[j][1] = Math.max(dp[j][1], prices[i] - dp[j][0]); + } + } + return dp[k][1]; + } +} From 2b894cb201d461c81a259a2e0ab3c74eca9421bf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Sep 2022 11:06:51 -0700 Subject: [PATCH 0784/1640] Create Maximum Performance of a Team.java --- Hard/Maximum Performance of a Team.java | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/Maximum Performance of a Team.java diff --git a/Hard/Maximum Performance of a Team.java b/Hard/Maximum Performance of a Team.java new file mode 100644 index 00000000..11a444da --- /dev/null +++ b/Hard/Maximum Performance of a Team.java @@ -0,0 +1,26 @@ +class Solution { + + private final static int MOD = (int) Math.pow(10, 9) + 7; + + public int maxPerformance(int n, int[] speed, int[] efficiency, int k) { + List pairs = new ArrayList<>(); + for (int i = 0; i < n; ++i) { + pairs.add(new int[]{efficiency[i], speed[i]}); + } + Collections.sort(pairs, (o1, o2) -> o2[0] - o1[0]); + PriorityQueue speedMinHeap = new PriorityQueue<>(); + long speedSum = 0; + long performance = 0; + for (int[] pair : pairs) { + Integer currEfficiency = pair[0]; + Integer currSpeed = pair[1]; + if (speedMinHeap.size() > k - 1) { + speedSum -= speedMinHeap.remove(); + } + speedMinHeap.add(currSpeed); + speedSum += currSpeed; + performance = Math.max(performance, speedSum * currEfficiency); + } + return (int) (performance % MOD); + } +} From 452ceafa9a1023886613d32b1b61466f9658a068 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Sep 2022 11:55:41 -0700 Subject: [PATCH 0785/1640] Create Most Frequent Even Element.java --- Easy/Most Frequent Even Element.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Easy/Most Frequent Even Element.java diff --git a/Easy/Most Frequent Even Element.java b/Easy/Most Frequent Even Element.java new file mode 100644 index 00000000..75879d03 --- /dev/null +++ b/Easy/Most Frequent Even Element.java @@ -0,0 +1,23 @@ +class Solution { + public int mostFrequentEven(int[] nums) { + Map map = new HashMap<>(); + for (int num : nums) { + if (num % 2 == 0) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + } + int maxValue = 0; + int maxKey = -1; + for (Integer key : map.keySet()) { + if (map.get(key) >= maxValue) { + if (map.get(key) > maxValue) { + maxKey = key; + } else { + maxKey = Math.min(maxKey, key); + } + maxValue = map.get(key); + } + } + return maxKey; + } +} From ae3948e25c4c87e6c0b93101efbebc7e7087346f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Sep 2022 11:59:10 -0700 Subject: [PATCH 0786/1640] Create Optimal Partition of String.java --- Medium/Optimal Partition of String.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Optimal Partition of String.java diff --git a/Medium/Optimal Partition of String.java b/Medium/Optimal Partition of String.java new file mode 100644 index 00000000..2c42afa6 --- /dev/null +++ b/Medium/Optimal Partition of String.java @@ -0,0 +1,14 @@ +class Solution { + public int partitionString(String s) { + int idx = 0; + int count = 0; + while (idx < s.length()) { + Set set = new HashSet<>(); + while (idx < s.length() && set.add(s.charAt(idx))) { + idx++; + } + count++; + } + return count; + } +} From 4a2f1d4376a7f6477d65cdaae887622c223a3cb1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Sep 2022 14:01:03 -0700 Subject: [PATCH 0787/1640] Update Remove Nth Node From End of List.java --- Medium/Remove Nth Node From End of List.java | 23 ++++++++------------ 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Medium/Remove Nth Node From End of List.java b/Medium/Remove Nth Node From End of List.java index 44b990bd..f6f741f8 100644 --- a/Medium/Remove Nth Node From End of List.java +++ b/Medium/Remove Nth Node From End of List.java @@ -10,24 +10,19 @@ */ class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { - if (head == null || n == 0) { - return head; + ListNode curr = head; + while (n-- > 0) { + curr = curr.next; } - ListNode slow = head; - int count = 0; - while (count < n) { - slow = slow.next; - count++; - } - if (slow == null) { + if (curr == null) { return head.next; } - ListNode fast = head; - while (slow.next != null) { - slow = slow.next; - fast = fast.next; + ListNode slowNode = head; + while (curr.next != null) { + slowNode = slowNode.next; + curr = curr.next; } - fast.next = fast.next.next; + slowNode.next = slowNode.next.next; return head; } } From 5038df57b37ae6f4ba9f3c9b8c637c322f8162de Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Sep 2022 19:48:02 -0700 Subject: [PATCH 0788/1640] Create Bag of Tokens.java --- Medium/Bag of Tokens.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Bag of Tokens.java diff --git a/Medium/Bag of Tokens.java b/Medium/Bag of Tokens.java new file mode 100644 index 00000000..d86085c3 --- /dev/null +++ b/Medium/Bag of Tokens.java @@ -0,0 +1,23 @@ +class Solution { + public int bagOfTokensScore(int[] tokens, int power) { + int score = 0; + Arrays.sort(tokens); + int leftIdx = 0; + int rightIdx = tokens.length - 1; + int currScore = 0; + while (leftIdx <= rightIdx) { + if (power >= tokens[leftIdx]) { + currScore++; + power -= tokens[leftIdx++]; + } else { + if (currScore == 0) { + break; + } + currScore--; + power += tokens[rightIdx--]; + } + score = Math.max(score, currScore); + } + return score; + } +} From 3e693f3abded64a38adb6f65c29da97fa621bf44 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 12 Sep 2022 07:30:32 -0700 Subject: [PATCH 0789/1640] Update ZigZag Conversion.java --- Medium/ZigZag Conversion.java | 45 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/Medium/ZigZag Conversion.java b/Medium/ZigZag Conversion.java index d3c2cc5c..62539da4 100644 --- a/Medium/ZigZag Conversion.java +++ b/Medium/ZigZag Conversion.java @@ -1,26 +1,25 @@ class Solution { - public String convert(String s, int numRows) { - List list = new ArrayList<>(); - for (int i = 0; i < numRows; i++) { - list.add(new StringBuilder()); - } - - int idx = 0; - while (idx < s.length()) { - for (int i = 0; i < numRows && idx < s.length(); i++) { - list.get(i).append(s.charAt(idx++)); - } - - for (int i = numRows - 2; i > 0 && idx < s.length(); i--) { - list.get(i).append(s.charAt(idx++)); - } - } - - StringBuilder ans = new StringBuilder(); - for (StringBuilder sb : list) { - ans.append(sb.toString()); - } - - return ans.toString(); + public String convert(String s, int numRows) { + if (numRows == 1) { + return s; } + List list = new ArrayList<>(); + for (int i = 0; i < numRows; i++) { + list.add(new StringBuilder()); + } + int idx = 0; + boolean downDirection = false; + for (char c : s.toCharArray()) { + list.get(idx).append(c); + if (idx == 0 || idx == numRows - 1) { + downDirection = !downDirection; + } + idx += downDirection ? 1 : -1; + } + StringBuilder result = new StringBuilder(); + for (StringBuilder sb : list) { + result.append(sb.toString()); + } + return result.toString(); + } } From 457dda28824acbc92edd197eed8231f82754ecd0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 12 Sep 2022 07:50:17 -0700 Subject: [PATCH 0790/1640] Update and rename String to Integer(atoi).java to String to Integer (atoi).java --- Medium/String to Integer (atoi).java | 30 ++++++++++++++++++++++++++++ Medium/String to Integer(atoi).java | 23 --------------------- 2 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 Medium/String to Integer (atoi).java delete mode 100644 Medium/String to Integer(atoi).java diff --git a/Medium/String to Integer (atoi).java b/Medium/String to Integer (atoi).java new file mode 100644 index 00000000..e91cbec0 --- /dev/null +++ b/Medium/String to Integer (atoi).java @@ -0,0 +1,30 @@ +class Solution { + public int myAtoi(String s) { + int idx = 0; + int n = s.length(); + while (idx < n && s.charAt(idx) == ' ') { + idx++; + } + int sign = 1; + if (idx < n && (s.charAt(idx) == '-' || s.charAt(idx) == '+')) { + sign = s.charAt(idx) == '-' ? -1 : 1; + idx++; + } + if (idx == n || !Character.isDigit(s.charAt(idx))) { + return 0; + } + while (idx < n && s.charAt(idx) == '0') { + idx++; + } + int number = 0; + while (idx < n && Character.isDigit(s.charAt(idx))) { + int digit = Character.getNumericValue(s.charAt(idx)); + if ((number > Integer.MAX_VALUE / 10) || (number == Integer.MAX_VALUE / 10 && digit > Integer.MAX_VALUE % 10)) { + return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; + } + number = number * 10 + digit; + idx++; + } + return number * sign; + } +} diff --git a/Medium/String to Integer(atoi).java b/Medium/String to Integer(atoi).java deleted file mode 100644 index 54fc622d..00000000 --- a/Medium/String to Integer(atoi).java +++ /dev/null @@ -1,23 +0,0 @@ -class Solution { - public int myAtoi(String s) { - int idx = 0; - int n = s.length(); - while (idx < n && s.charAt(idx) == ' ') { - idx++; - } - int sign = 1; - if (idx < n && (s.charAt(idx) == '+' || s.charAt(idx) == '-')) { - sign = s.charAt(idx++) == '-' ? -1 : 1; - } - long num = 0; - while (idx < n && Character.isDigit(s.charAt(idx))) { - num = num * 10 + Character.getNumericValue(s.charAt(idx++)); - if (sign == 1 && num > Integer.MAX_VALUE) { - return Integer.MAX_VALUE; - } else if (sign == -1 && num * sign < Integer.MIN_VALUE) { - return Integer.MIN_VALUE; - } - } - return (int) (num * sign); - } -} From c6f4a2a1ede125f9db16e34cf2de614cca1765c9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 12 Sep 2022 14:50:29 -0700 Subject: [PATCH 0791/1640] Update 3Sum Closest.java --- Medium/3Sum Closest.java | 41 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/Medium/3Sum Closest.java b/Medium/3Sum Closest.java index ed469e0e..7520f9ea 100644 --- a/Medium/3Sum Closest.java +++ b/Medium/3Sum Closest.java @@ -1,27 +1,22 @@ class Solution { - public int threeSumClosest(int[] nums, int target) { - int sum = Integer.MAX_VALUE; - Arrays.sort(nums); - - for (int i=0; i Math.abs(target - tempSum)) { - sum = tempSum; - } - - if (tempSum > target) { - k--; - } - else { - j++; - } - } + public int threeSumClosest(int[] nums, int target) { + Arrays.sort(nums); + int closestDiff = Integer.MAX_VALUE; + for (int i = 0; i < nums.length; i++) { + int start = i + 1; + int end = nums.length - 1; + while (start < end) { + int currSum = nums[i] + nums[start] + nums[end]; + if (Math.abs(target - currSum) < Math.abs(closestDiff)) { + closestDiff = target - currSum; } - - return sum; + if (currSum < target) { + start++; + } else { + end--; + } + } } + return target - closestDiff; + } } From d1c76836d08f9ba35581e4167b1e6c0e7660efa1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 12 Sep 2022 15:33:25 -0700 Subject: [PATCH 0792/1640] Update Combination Sum II.java --- Medium/Combination Sum II.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Medium/Combination Sum II.java b/Medium/Combination Sum II.java index 5b525f70..954373f5 100644 --- a/Medium/Combination Sum II.java +++ b/Medium/Combination Sum II.java @@ -1,26 +1,25 @@ class Solution { public List> combinationSum2(int[] candidates, int target) { - List> list = new ArrayList<>(); + List> result = new ArrayList<>(); Arrays.sort(candidates); - helper(candidates, 0, target, new ArrayList<>(), list); - return list; + helper(candidates, target, result, new ArrayList<>(), 0); + return result; } - private void helper(int[] candidates, int idx, int target, List temp, List> list) { - if (target == 0) { - list.add(new ArrayList<>(temp)); - return; - } - if (target < 0) { + private void helper(int[] candidates, int target, List> result, List currCombination, int idx) { + if (target <= 0) { + if (target == 0) { + result.add(new ArrayList<>(currCombination)); + } return; } for (int i = idx; i < candidates.length; i++) { - if (i > idx && candidates[i] == candidates[i - 1]) { + if (i > idx && candidates[i] == candidates[i - 1]) { continue; } - temp.add(candidates[i]); - helper(candidates, i + 1, target - candidates[i], temp, list); - temp.remove(temp.size() - 1); + currCombination.add(candidates[i]); + helper(candidates, target - candidates[i], result, currCombination, i + 1); + currCombination.remove(currCombination.size() - 1); } } } From b7aa3d64d13bf9be8fbb9944a7afcf091521406a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 12 Sep 2022 20:41:18 -0700 Subject: [PATCH 0793/1640] Create UTF-8 Validation.java --- Medium/UTF-8 Validation.java | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/UTF-8 Validation.java diff --git a/Medium/UTF-8 Validation.java b/Medium/UTF-8 Validation.java new file mode 100644 index 00000000..bf7140f0 --- /dev/null +++ b/Medium/UTF-8 Validation.java @@ -0,0 +1,31 @@ +class Solution { + public boolean validUtf8(int[] data) { + int numberOfBytes = 0; + for (int i = 0; i < data.length; i++) { + String binaryRep = Integer.toBinaryString(data[i]); + binaryRep = binaryRep.length() >= 8 ? + binaryRep.substring(binaryRep.length() - 8) : + "00000000".substring(binaryRep.length() % 8) + binaryRep; + if (numberOfBytes == 0) { + for (int j = 0; j < binaryRep.length(); j++) { + if (binaryRep.charAt(j) == '0') { + break; + } + numberOfBytes++; + } + if (numberOfBytes == 0) { + continue; + } + if (numberOfBytes > 4 || numberOfBytes == 1) { + return false; + } + } else { + if (!(binaryRep.charAt(0) == '1' && binaryRep.charAt(1) == '0')) { + return false; + } + } + numberOfBytes--; + } + return numberOfBytes == 0; + } +} From 722af37143ca4e3b7edefea0ee8b020631b48262 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 13 Sep 2022 16:00:56 -0700 Subject: [PATCH 0794/1640] Update Next Greater Element II.java --- Medium/Next Greater Element II.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Medium/Next Greater Element II.java b/Medium/Next Greater Element II.java index 367351ae..c392b087 100644 --- a/Medium/Next Greater Element II.java +++ b/Medium/Next Greater Element II.java @@ -1,23 +1,23 @@ class Solution { public int[] nextGreaterElements(int[] nums) { - int[] ans = new int[nums.length]; + int[] result = new int[nums.length]; Stack stack = new Stack<>(); for (int i = nums.length - 1; i >= 0; i--) { while (!stack.isEmpty() && nums[stack.peek()] <= nums[i]) { stack.pop(); } - ans[i] = stack.isEmpty() ? -1 : nums[stack.peek()]; + result[i] = stack.isEmpty() ? -1 : nums[stack.peek()]; stack.push(i); } for (int i = nums.length - 1; i >= 0; i--) { - if (ans[i] == -1) { + if (result[i] == -1) { while (!stack.isEmpty() && nums[stack.peek()] <= nums[i]) { stack.pop(); } - ans[i] = stack.isEmpty() ? -1 : nums[stack.peek()]; + result[i] = stack.isEmpty() ? -1 : nums[stack.peek()]; } stack.push(i); } - return ans; + return result; } } From a4413078aa84ba7037b75ee2c9fed98f4f5516ea Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 13 Sep 2022 16:57:10 -0700 Subject: [PATCH 0795/1640] Update Complex Number Multiplication.java --- Medium/Complex Number Multiplication.java | 64 +++++++++++++++++++++-- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/Medium/Complex Number Multiplication.java b/Medium/Complex Number Multiplication.java index 0eb7dd43..f6d2500b 100644 --- a/Medium/Complex Number Multiplication.java +++ b/Medium/Complex Number Multiplication.java @@ -1,9 +1,63 @@ class Solution { public String complexNumberMultiply(String num1, String num2) { - int realPartOne = Integer.parseInt(num1.split("\\+")[0]); - int imaginaryPartOne = Integer.parseInt(num1.split("\\+")[1].substring(0, num1.split("\\+")[1].length() - 1)); - int realPartTwo = Integer.parseInt(num2.split("\\+")[0]); - int imaginaryPartTwo = Integer.parseInt(num2.split("\\+")[1].substring(0, num2.split("\\+")[1].length() - 1)); - return (realPartOne * realPartTwo - imaginaryPartOne * imaginaryPartTwo) + "+" + (realPartOne * imaginaryPartTwo + realPartTwo * imaginaryPartOne) + "i"; + ComplexNumber result = ComplexNumber.buildComplexNumber(num1).multiply(ComplexNumber.buildComplexNumber(num2)); + return result.toString(); + } + + + private static class ComplexNumber { + + private final int real; + private final int imaginary; + + private ComplexNumber(int real, int imaginary) { + this.real = real; + this.imaginary = imaginary; + } + + public static ComplexNumber buildComplexNumber(String s) { + int[] idx = {0}; + int realPart = parseRealPart(s, idx); + int imaginaryPart = parseImaginaryPart(s, idx); + return new ComplexNumber(realPart, imaginaryPart); + } + + public ComplexNumber multiply(ComplexNumber anotherNumber) { + int realPart = this.real * anotherNumber.real + (this.imaginary * anotherNumber.imaginary * -1); + int imaginaryPart = this.real * anotherNumber.imaginary + this.imaginary * anotherNumber.real; + return new ComplexNumber(realPart, imaginaryPart); + } + + public String toString() { + return this.real + "+" + this.imaginary + "i"; + } + + private static int parseRealPart(String s, int[] idx) { + int realSign = 1; + if (s.charAt(idx[0]) == '+' || s.charAt(idx[0]) == '-') { + realSign = s.charAt(idx[0]) == '-' ? -1 : 1; + idx[0]++; + } + int realNum = 0; + while (idx[0] < s.length() && Character.isDigit(s.charAt(idx[0]))) { + realNum = realNum * 10 + Character.getNumericValue(s.charAt(idx[0]++)); + } + realNum *= realSign; + idx[0]++; + return realNum; + } + + private static int parseImaginaryPart(String s, int[] idx) { + int imaginarySign = 1; + if (idx[0] < s.length() && (s.charAt(idx[0]) == '+' || s.charAt(idx[0]) == '-')) { + imaginarySign = s.charAt(idx[0]) == '-' ? -1 : 1; + idx[0]++; + } + int imaginaryNum = 0; + while (idx[0] < s.length() && s.charAt(idx[0]) != 'i') { + imaginaryNum = imaginaryNum * 10 + Character.getNumericValue(s.charAt(idx[0]++)); + } + return imaginarySign * imaginaryNum; + } } } From 1953be190ff2da866a9f2ed4e5877e75978a99c3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 14 Sep 2022 07:36:53 -0700 Subject: [PATCH 0796/1640] Update Pseudo-Palindromic Paths in a Binary Tree.java --- ...do-Palindromic Paths in a Binary Tree.java | 57 ++++++++++--------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/Medium/Pseudo-Palindromic Paths in a Binary Tree.java b/Medium/Pseudo-Palindromic Paths in a Binary Tree.java index f6b9498f..04cbe822 100644 --- a/Medium/Pseudo-Palindromic Paths in a Binary Tree.java +++ b/Medium/Pseudo-Palindromic Paths in a Binary Tree.java @@ -15,37 +15,42 @@ */ class Solution { public int pseudoPalindromicPaths (TreeNode root) { - int[] map = new int[10]; - int[] count = {0}; - pseudoPalindromicPathsUtil(root, map, count); - return count[0]; - } - - private boolean isPalindrome(int[] map) { - boolean oddFound = false; - for(int i = 1; i <= 9; i++) { - if (map[i] % 2 != 0) { - if (oddFound) { - return false; + Queue queue = new LinkedList<>(); + NodePathPair nodePathPair = new NodePathPair(root, 0); + queue.add(nodePathPair); + int count = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + NodePathPair removed = queue.remove(); + TreeNode node = removed.node; + int path = removed.path; + // XOR operation ensures that the bit corresponding to the number only appears in the + // path if it has occurred odd number of times. + // 1 << node.val decides the bit of the value + path = path ^ (1 << node.val); + if (node.left == null && node.right == null) { + // Subtracting 1 means setting rightmost 1 bit to 0 and setting all lower bits to 1 + count += (path & (path - 1)) == 0 ? 1 : 0; + } + if (node.left != null) { + queue.add(new NodePathPair(node.left, path)); + } + if (node.right != null) { + queue.add(new NodePathPair(node.right, path)); } - oddFound = true; } } - return true; + return count; } - private void pseudoPalindromicPathsUtil(TreeNode root, int[] map, int[] count) { - if (root == null) { - return; - } - map[root.val] = map[root.val] + 1; - if (root.left == null && root.right == null) { - if (isPalindrome(map)) { - count[0]++; - } + private static class NodePathPair { + TreeNode node; + Integer path; + + public NodePathPair(TreeNode node, int path) { + this.node = node; + this.path = path; } - pseudoPalindromicPathsUtil(root.left, map, count); - pseudoPalindromicPathsUtil(root.right, map, count); - map[root.val] = map[root.val] - 1; } } From 22b12be01a0659a3c439ec883e0357241a262df7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 14 Sep 2022 10:15:55 -0700 Subject: [PATCH 0797/1640] Update Find Common Characters.java --- Easy/Find Common Characters.java | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/Easy/Find Common Characters.java b/Easy/Find Common Characters.java index e813b42e..e9fa97e4 100644 --- a/Easy/Find Common Characters.java +++ b/Easy/Find Common Characters.java @@ -1,21 +1,23 @@ class Solution { - public List commonChars(String[] A) { - int[][] counter = new int[A.length][26]; - for (int i = 0; i < A.length; i++) { - for (char c : A[i].toCharArray()) { - counter[i][c - 'a']++; + public List commonChars(String[] words) { + int[] commonFrequency = new int[26]; + Arrays.fill(commonFrequency, Integer.MAX_VALUE); + for (String word : words) { + int[] wordFreq = new int[26]; + for (char c : word.toCharArray()) { + wordFreq[c - 'a']++; + } + for (int i = 0; i < 26; i++) { + commonFrequency[i] = Math.min(commonFrequency[i], wordFreq[i]); } } - List list = new ArrayList<>(); + List result = new ArrayList<>(); for (int i = 0; i < 26; i++) { - int minCount = Integer.MAX_VALUE; - for (int j = 0; j < counter.length; j++) { - minCount = Math.min(minCount, counter[j][i]); - } - while (minCount-- > 0) { - list.add(String.valueOf((char) (97 + i))); + int count = commonFrequency[i]; + while (count-- > 0) { + result.add(String.valueOf((char) (97 + i))); } } - return list; + return result; } } From 9d1ac1c000f22d8e829c74d18e8577b670021a81 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 14 Sep 2022 14:07:17 -0700 Subject: [PATCH 0798/1640] Update N-Repeated Element in Size 2N Array.java --- Easy/N-Repeated Element in Size 2N Array.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Easy/N-Repeated Element in Size 2N Array.java b/Easy/N-Repeated Element in Size 2N Array.java index 07a2ddcc..f5ede891 100644 --- a/Easy/N-Repeated Element in Size 2N Array.java +++ b/Easy/N-Repeated Element in Size 2N Array.java @@ -1,11 +1,11 @@ class Solution { - public int repeatedNTimes(int[] A) { - int[] arr = new int[10001]; - for (int num : A) { - if (arr[num] == 1) { - return num; + public int repeatedNTimes(int[] nums) { + for (int i = 1; i <= 3; i++) { + for (int j = 0; j < nums.length - i; j++) { + if (nums[j] == nums[j + i]) { + return nums[j]; + } } - arr[num]++; } return -1; } From e80d7a038a078d53fea9a0467095ae01db4a0e15 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 14 Sep 2022 14:08:44 -0700 Subject: [PATCH 0799/1640] Update and rename Easy/Subdomain Visit Count.java to Medium/Subdomain Visit Count.java --- Easy/Subdomain Visit Count.java | 21 --------------------- Medium/Subdomain Visit Count.java | 22 ++++++++++++++++++++++ 2 files changed, 22 insertions(+), 21 deletions(-) delete mode 100644 Easy/Subdomain Visit Count.java create mode 100644 Medium/Subdomain Visit Count.java diff --git a/Easy/Subdomain Visit Count.java b/Easy/Subdomain Visit Count.java deleted file mode 100644 index 5c99417d..00000000 --- a/Easy/Subdomain Visit Count.java +++ /dev/null @@ -1,21 +0,0 @@ -class Solution { - public List subdomainVisits(String[] cpdomains) { - Map map = new HashMap<>(); - for (String domain : cpdomains) { - String[] strs = domain.split("\\s+"); - int count = Integer.parseInt(strs[0]); - String[] lowerDomains = strs[1].split("\\."); - StringBuilder sb = new StringBuilder(); - for (int i = lowerDomains.length - 1; i >= 0; i--) { - sb.insert(0, lowerDomains[i]); - map.put(sb.toString(), map.getOrDefault(sb.toString(), 0) + count); - sb.insert(0, '.'); - } - } - List list = new ArrayList<>(); - for (String key : map.keySet()) { - list.add(map.get(key) + " " + key); - } - return list; - } -} diff --git a/Medium/Subdomain Visit Count.java b/Medium/Subdomain Visit Count.java new file mode 100644 index 00000000..f7900ef6 --- /dev/null +++ b/Medium/Subdomain Visit Count.java @@ -0,0 +1,22 @@ +class Solution { + public List subdomainVisits(String[] cpdomains) { + Map map = new HashMap<>(); + for (String cpdomain : cpdomains) { + int spaceIdx = cpdomain.indexOf(' '); + int count = Integer.parseInt(cpdomain.substring(0, spaceIdx)); + String[] subdomains = cpdomain.substring(spaceIdx + 1).split("\\."); + StringBuilder sb = new StringBuilder(); + for (int i = subdomains.length - 1; i >= 0; i--) { + sb.insert(0, subdomains[i]); + String currDomain = sb.toString(); + map.put(currDomain, map.getOrDefault(currDomain, 0L) + count); + sb.insert(0, "."); + } + } + List result = new ArrayList<>(); + for (String key : map.keySet()) { + result.add(map.get(key) + " " + key); + } + return result; + } +} From 396d202e43f1b53078b8bce1098bfe8134bb5f34 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 14 Sep 2022 19:59:50 -0700 Subject: [PATCH 0800/1640] Update Find Original Array From Doubled Array.java --- ...ind Original Array From Doubled Array.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Medium/Find Original Array From Doubled Array.java b/Medium/Find Original Array From Doubled Array.java index 3c4c7dc6..55554c81 100644 --- a/Medium/Find Original Array From Doubled Array.java +++ b/Medium/Find Original Array From Doubled Array.java @@ -3,19 +3,25 @@ public int[] findOriginalArray(int[] changed) { if (changed.length % 2 != 0) { return new int[]{}; } - int[] answer = new int[changed.length / 2]; - int idx = 0; - Map map = Arrays.stream(changed).boxed() - .collect(Collectors.groupingBy(Function.identity(), TreeMap::new, Collectors.counting())); - for (Integer key : map.keySet()) { - if (map.get(key) > map.getOrDefault(key * 2, 0L)) { - return new int[0]; - } - for (int i = 0; i < map.get(key); i++) { - answer[idx++] = key; - map.put(key * 2, map.get(key * 2) - 1); + Arrays.sort(changed); + Map map = new HashMap<>(); + for (int num : changed) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + int[] result = new int[changed.length / 2]; + int resultIdx = 0; + for (int num : changed) { + if (map.get(num) > 0) { + map.put(num, map.get(num) - 1); + int doubleValue = num * 2; + if (map.getOrDefault(doubleValue, 0) > 0) { + map.put(doubleValue, map.get(doubleValue) - 1); + result[resultIdx++] = num; + } else { + return new int[]{}; + } } } - return answer; + return result; } } From f112596d367a8c2ac545acf5073fa1e8a1c8d94e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Sep 2022 07:31:35 -0700 Subject: [PATCH 0801/1640] Update Top K Frequent Words.java --- Medium/Top K Frequent Words.java | 36 +++++++++++++++++++------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/Medium/Top K Frequent Words.java b/Medium/Top K Frequent Words.java index 50a3911f..7f1c4f9f 100644 --- a/Medium/Top K Frequent Words.java +++ b/Medium/Top K Frequent Words.java @@ -1,23 +1,29 @@ class Solution { public List topKFrequent(String[] words, int k) { - Map map = new HashMap<>(); + Map wordFrequency = new HashMap<>(); + Map> frequencyToWord = new HashMap<>(); + int maxFrequency = 0; for (String word : words) { - map.put(word, map.getOrDefault(word, 0) + 1); + if (!wordFrequency.containsKey(word)) { + wordFrequency.put(word, 1); + frequencyToWord.computeIfAbsent(1, j -> new HashSet<>()).add(word); + } else { + int oldFrequency = wordFrequency.get(word); + int newFrequency = oldFrequency + 1; + wordFrequency.put(word, newFrequency); + frequencyToWord.get(oldFrequency).remove(word); + frequencyToWord.computeIfAbsent(newFrequency, j -> new HashSet<>()).add(word); + } + maxFrequency = Math.max(maxFrequency, wordFrequency.get(word)); } - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(String s1, String s2) { - int c = map.get(s2) - map.get(s1); - if (c != 0) { - return c; - } - return s1.compareTo(s2); + List result = new ArrayList<>(); + for (int i = maxFrequency; i > 0 && result.size() < k; i--) { + List currFreqWords = new ArrayList<>(frequencyToWord.get(i)); + Collections.sort(currFreqWords); + for (int j = 0; j < currFreqWords.size() && result.size() < k; j++) { + result.add(currFreqWords.get(j)); } - }); - pq.addAll(map.keySet()); - List ans = new ArrayList<>(); - while (!pq.isEmpty() && k-- > 0) { - ans.add(pq.poll()); } - return ans; + return result; } } From dfc1f84c3a0f1f2a89356f79bd22b84200681643 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Sep 2022 13:01:26 -0700 Subject: [PATCH 0802/1640] Create K Radius Subarray Averages.java --- Medium/K Radius Subarray Averages.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/K Radius Subarray Averages.java diff --git a/Medium/K Radius Subarray Averages.java b/Medium/K Radius Subarray Averages.java new file mode 100644 index 00000000..18cd8995 --- /dev/null +++ b/Medium/K Radius Subarray Averages.java @@ -0,0 +1,24 @@ +class Solution { + public int[] getAverages(int[] nums, int k) { + int[] result = new int[nums.length]; + Arrays.fill(result, -1); + int subarrayLength = 2 * k + 1; + if (subarrayLength > nums.length) { + return result; + } + long sum = 0; + for (int i = 0; i < subarrayLength; i++) { + sum += nums[i]; + } + int startIdx = 0; + int endIdx = subarrayLength; + for (int i = k; i < nums.length - k; i++) { + result[i] = (int) (sum / subarrayLength); + sum -= nums[startIdx++]; + if (endIdx < nums.length) { + sum += nums[endIdx++]; + } + } + return result; + } +} From 003179ae1fa467df539e131cd0ce245fa35b4178 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Sep 2022 16:20:33 -0700 Subject: [PATCH 0803/1640] Update Intersection of Two Arrays.java --- Easy/Intersection of Two Arrays.java | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Easy/Intersection of Two Arrays.java b/Easy/Intersection of Two Arrays.java index b17c8dea..d05f4468 100644 --- a/Easy/Intersection of Two Arrays.java +++ b/Easy/Intersection of Two Arrays.java @@ -1,20 +1,25 @@ class Solution { public int[] intersection(int[] nums1, int[] nums2) { - Set set = new HashSet<>(); + boolean[][] found = new boolean[1001][2]; for (int num : nums1) { - set.add(num); + found[num][0] = true; } - Set match = new HashSet<>(); + int count = 0; for (int num : nums2) { - if (set.contains(num)) { - match.add(num); + if (!found[num][1]) { + if (found[num][0]) { + count++; + } } + found[num][1] = true; } - int[] ans = new int[match.size()]; - Iterator iter = match.iterator(); - for (int i = 0; i < ans.length; i++) { - ans[i] = iter.next(); + int[] result = new int[count]; + int idx = 0; + for (int i = 1; i <= 1000; i++) { + if (found[i][0] && found[i][1]) { + result[idx++] = i; + } } - return ans; + return result; } } From e84f22ba27be858d3241646af5f7f4e9e50d4130 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Sep 2022 16:23:26 -0700 Subject: [PATCH 0804/1640] Update Lowest Common Ancestor of Deepest Leaves.java --- ...est Common Ancestor of Deepest Leaves.java | 64 ++++++++++--------- 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/Medium/Lowest Common Ancestor of Deepest Leaves.java b/Medium/Lowest Common Ancestor of Deepest Leaves.java index 4517a201..d1fdfc59 100644 --- a/Medium/Lowest Common Ancestor of Deepest Leaves.java +++ b/Medium/Lowest Common Ancestor of Deepest Leaves.java @@ -4,40 +4,42 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ -class Solution { - public TreeNode lcaDeepestLeaves(TreeNode root) { - return helper(root).lowesetCommonAncestor; +class Solution { + public TreeNode lcaDeepestLeaves(TreeNode root) { + return dfs(root).node; + } + + private NodeResult dfs(TreeNode root) { + if (root == null) { + return new NodeResult(null, 0); } - - private UpdatedTreeNode helper(TreeNode root) { - if (root == null) { - return new UpdatedTreeNode(0, null); - } - - UpdatedTreeNode leftUpdated = helper(root.left); - UpdatedTreeNode rightUpdated = helper(root.right); - - if (leftUpdated.depth == rightUpdated.depth) { - return new UpdatedTreeNode(leftUpdated.depth + 1, root); - } - else if (leftUpdated.depth > rightUpdated.depth) { - return new UpdatedTreeNode(leftUpdated.depth + 1, leftUpdated.lowesetCommonAncestor); - } - else { - return new UpdatedTreeNode(rightUpdated.depth + 1, rightUpdated.lowesetCommonAncestor); - } + NodeResult leftResult = dfs(root.left); + NodeResult rightResult = dfs(root.right); + if (leftResult.distance > rightResult.distance) { + return new NodeResult(leftResult.node, leftResult.distance + 1); } -} - -class UpdatedTreeNode { - public int depth; - public TreeNode lowesetCommonAncestor; - - public UpdatedTreeNode(int depth, TreeNode node) { - this.depth = depth; - this.lowesetCommonAncestor = node; + if (leftResult.distance < rightResult.distance) { + return new NodeResult(rightResult.node, rightResult.distance + 1); + } + return new NodeResult(root, rightResult.distance + 1); + } + + private static class NodeResult { + TreeNode node; + int distance; + + public NodeResult(TreeNode node, int distance) { + this.node = node; + this.distance = distance; } + } } From 1db3190d568e0f894e666e6b14a557c2fc0939d9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Sep 2022 16:26:08 -0700 Subject: [PATCH 0805/1640] Update Smallest Subtree with all the Deepest Nodes.java --- ...st Subtree with all the Deepest Nodes.java | 47 ++++++++----------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/Medium/Smallest Subtree with all the Deepest Nodes.java b/Medium/Smallest Subtree with all the Deepest Nodes.java index 3999f22e..5ad5f59d 100644 --- a/Medium/Smallest Subtree with all the Deepest Nodes.java +++ b/Medium/Smallest Subtree with all the Deepest Nodes.java @@ -14,41 +14,32 @@ * } */ class Solution { - Map map; - int maxDepth; public TreeNode subtreeWithAllDeepest(TreeNode root) { - map = new HashMap<>(); - maxDepth = -1; - map.put(null, -1); - dfs(root, null); - return helper(root); + return dfs(root).node; } - private void dfs(TreeNode root, TreeNode parent) { + private NodeResult dfs(TreeNode root) { if (root == null) { - return; + return new NodeResult(null, 0); } - map.put(root, map.get(parent) + 1); - maxDepth = Math.max(maxDepth, map.get(root)); - dfs(root.left, root); - dfs(root.right, root); - } - - private TreeNode helper(TreeNode root) { - if (root == null || map.get(root) == maxDepth) { - return root; - } - TreeNode left = helper(root.left); - TreeNode right = helper(root.right); - if (left != null && right != null) { - return root; + NodeResult leftResult = dfs(root.left); + NodeResult rightResult = dfs(root.right); + if (leftResult.distance > rightResult.distance) { + return new NodeResult(leftResult.node, leftResult.distance + 1); } - if (left != null) { - return left; + if (leftResult.distance < rightResult.distance) { + return new NodeResult(rightResult.node, rightResult.distance + 1); } - if (right != null) { - return right; + return new NodeResult(root, rightResult.distance + 1); + } + + private static class NodeResult { + TreeNode node; + int distance; + + public NodeResult(TreeNode node, int distance) { + this.node = node; + this.distance = distance; } - return null; } } From e5c1fb36c9c9baaa321605b666ec7afe061dece3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 16 Sep 2022 09:17:46 -0700 Subject: [PATCH 0806/1640] Create Maximum Score from Performing Multiplication Operations.java --- ... Performing Multiplication Operations.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Maximum Score from Performing Multiplication Operations.java diff --git a/Medium/Maximum Score from Performing Multiplication Operations.java b/Medium/Maximum Score from Performing Multiplication Operations.java new file mode 100644 index 00000000..c197f348 --- /dev/null +++ b/Medium/Maximum Score from Performing Multiplication Operations.java @@ -0,0 +1,19 @@ +class Solution { + public int maximumScore(int[] nums, int[] multipliers) { + Integer[][] dp = new Integer[1001][1001]; + return helper(0, multipliers, nums, 0, dp); + } + + private int helper(int idx, int[] multipliers, int[] nums, int start, Integer[][] dp) { + if (idx == multipliers.length) { + return 0; + } + if (dp[idx][start] != null) { + return dp[idx][start]; + } + int end = nums.length - (idx - start) - 1; + int startOperation = multipliers[idx] * nums[start] + helper(idx + 1, multipliers, nums, start + 1, dp); + int endOperation = multipliers[idx] * nums[end] + helper(idx + 1, multipliers, nums, start, dp); + return dp[idx][start] = Math.max(startOperation, endOperation); + } +} From 3d388f4f61bc0a6a7525fe99f83fb3eb00ce8772 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 17 Sep 2022 09:25:41 -0700 Subject: [PATCH 0807/1640] Update Palindrome Pairs.java --- Hard/Palindrome Pairs.java | 106 +++++++++++++++++++++---------------- 1 file changed, 60 insertions(+), 46 deletions(-) diff --git a/Hard/Palindrome Pairs.java b/Hard/Palindrome Pairs.java index a9ad8490..004bc645 100644 --- a/Hard/Palindrome Pairs.java +++ b/Hard/Palindrome Pairs.java @@ -1,54 +1,68 @@ class Solution { - public List> palindromePairs(String[] words) { - List> lists = new ArrayList<>(); - Map map = new HashMap<>(); - for (int i=0; i> palindromePairs(String[] words) { + TrieNode root = new TrieNode(); + for (int i = 0; i < words.length; i++) { + String reversed = new StringBuilder(words[i]).reverse().toString(); + TrieNode curr = root; + for (int j = 0; j < reversed.length(); j++) { + if (isPalindrome(reversed, j)) { + curr.palindromePrefixRemainingIds.add(i); } - - if (map.containsKey("")) { - for (int i = 0; i < words.length; i++) { - if (i == map.get("")) { - continue; - } - - if (palindromeCheck(words[i])) { - lists.add(Arrays.asList(map.get(""), i)); - } - } + if (!curr.children.containsKey(reversed.charAt(j))) { + curr.children.put(reversed.charAt(j), new TrieNode()); } - - for (int i=0; i> result = new ArrayList<>(); + for (int i = 0; i < words.length; i++) { + String word = words[i]; + TrieNode curr = root; + for (int j = 0; j < word.length(); j++) { + if (curr.wordEndingId != -1 && isPalindrome(word, j)) { + result.add(Arrays.asList(i, curr.wordEndingId)); + } + char c = word.charAt(j); + curr = curr.children.get(c); + if (curr == null) { + break; } - - return lists; + } + if (curr == null) { + continue; + } + if (curr.wordEndingId != -1 && curr.wordEndingId != i) { + result.add(Arrays.asList(i, curr.wordEndingId)); + } + for (int idx : curr.palindromePrefixRemainingIds) { + result.add(Arrays.asList(i, idx)); + } } + return result; + } + + private static boolean isPalindrome(String s, int start) { + int end = s.length() - 1; + while (start < end) { + if (s.charAt(start) != s.charAt(end)) { + return false; + } + start++; + end--; + } + return true; + } + + private static class TrieNode { + private int wordEndingId; + private Map children; + private List palindromePrefixRemainingIds; - private boolean palindromeCheck(String word) { - int i = 0; - int j = word.length() - 1; - - while (i < j) { - if (word.charAt(i) != word.charAt(j)) { - return false; - } - - i++; - j--; - } - - return true; + public TrieNode() { + this.wordEndingId = -1; + this.children = new HashMap<>(); + this.palindromePrefixRemainingIds = new ArrayList<>(); } + } } From 5836759162015cc72783420c0e6da0afbc1128f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Sep 2022 07:46:08 -0700 Subject: [PATCH 0808/1640] Update Trapping Rain Water.java --- Hard/Trapping Rain Water.java | 39 +++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/Hard/Trapping Rain Water.java b/Hard/Trapping Rain Water.java index 6abc9416..8747d76b 100644 --- a/Hard/Trapping Rain Water.java +++ b/Hard/Trapping Rain Water.java @@ -1,20 +1,27 @@ class Solution { - public int trap(int[] A) { - Stack stack = new Stack(); - int i = 0; - int maxWater = 0; - - while (i < A.length){ - if (stack.isEmpty() || A[i] <= A[stack.peek()]){ - stack.push(i++); - } - else { - int bot = stack.pop(); - maxWater += stack.isEmpty() ? 0 : - (Math.min(A[stack.peek()], A[i]) - A[bot]) * (i - stack.peek() - 1); - } + public int trap(int[] height) { + int leftIdx = 0; + int rightIdx = height.length - 1; + int leftMax = 0; + int rightMax = 0; + int result = 0; + while (leftIdx < rightIdx) { + if (height[leftIdx] < height[rightIdx]) { + if (height[leftIdx] >= leftMax) { + leftMax = height[leftIdx]; + } else { + result += leftMax - height[leftIdx]; } - - return maxWater; + leftIdx++; + } else { + if (height[rightIdx] >= rightMax) { + rightMax = height[rightIdx]; + } else { + result += rightMax - height[rightIdx]; + } + rightIdx--; + } } + return result; + } } From 5072c845e6b61fa11d14192beedbbddd818538c6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Sep 2022 07:58:24 -0700 Subject: [PATCH 0809/1640] Create Smallest Even Multiple.java --- Easy/Smallest Even Multiple.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Smallest Even Multiple.java diff --git a/Easy/Smallest Even Multiple.java b/Easy/Smallest Even Multiple.java new file mode 100644 index 00000000..24964eca --- /dev/null +++ b/Easy/Smallest Even Multiple.java @@ -0,0 +1,5 @@ +class Solution { + public int smallestEvenMultiple(int n) { + return n % 2 == 0 ? n : 2 * n; + } +} From 0dda7d7daa3f49c79d519b79610274e490461d7b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Sep 2022 08:02:50 -0700 Subject: [PATCH 0810/1640] Create Length of the Longest Alphabetical Continuous Substring.java --- ... Longest Alphabetical Continuous Substring.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Length of the Longest Alphabetical Continuous Substring.java diff --git a/Medium/Length of the Longest Alphabetical Continuous Substring.java b/Medium/Length of the Longest Alphabetical Continuous Substring.java new file mode 100644 index 00000000..30426403 --- /dev/null +++ b/Medium/Length of the Longest Alphabetical Continuous Substring.java @@ -0,0 +1,14 @@ +class Solution { + public int longestContinuousSubstring(String s) { + int idx = 0; + int maxLength = 0; + while (idx < s.length()) { + int currIdx = idx++; + while (idx < s.length() && s.charAt(idx) - s.charAt(idx - 1) == 1) { + idx++; + } + maxLength = Math.max(maxLength, idx - currIdx); + } + return maxLength; + } +} From bf4b647842719883838761bc0e18397cb3dfda20 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Sep 2022 11:21:10 -0700 Subject: [PATCH 0811/1640] Create Reverse Odd Levels of Binary Tree.java --- Medium/Reverse Odd Levels of Binary Tree.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Medium/Reverse Odd Levels of Binary Tree.java diff --git a/Medium/Reverse Odd Levels of Binary Tree.java b/Medium/Reverse Odd Levels of Binary Tree.java new file mode 100644 index 00000000..72fc142a --- /dev/null +++ b/Medium/Reverse Odd Levels of Binary Tree.java @@ -0,0 +1,55 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public TreeNode reverseOddLevels(TreeNode root) { + int level = 0; + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + List currLevel = new ArrayList<>(); + int size = queue.size(); + while (size-- > 0) { + TreeNode removed = queue.remove(); + if (level % 2 != 0) { + currLevel.add(removed); + } + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + if (level % 2 != 0) { + reverseLevel(currLevel); + } + level++; + } + return root; + } + + private void reverseLevel(List currLevel) { + int start = 0; + int end = currLevel.size() - 1; + while (start < end) { + TreeNode startNode = currLevel.get(start++); + TreeNode endNode = currLevel.get(end--); + int temp = startNode.val; + startNode.val = endNode.val; + endNode.val = temp; + } + } +} From cf26bc24e24aa1a58b1aea2be66425d9a9c0bb65 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Sep 2022 13:02:58 -0700 Subject: [PATCH 0812/1640] Create Maximum Matching of Players With Trainers.java --- ...Maximum Matching of Players With Trainers.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Maximum Matching of Players With Trainers.java diff --git a/Medium/Maximum Matching of Players With Trainers.java b/Medium/Maximum Matching of Players With Trainers.java new file mode 100644 index 00000000..5334f4e5 --- /dev/null +++ b/Medium/Maximum Matching of Players With Trainers.java @@ -0,0 +1,15 @@ +class Solution { + public int matchPlayersAndTrainers(int[] players, int[] trainers) { + Arrays.sort(players); + Arrays.sort(trainers); + int playerIdx = 0; + int trainerIdx = 0; + while (playerIdx < players.length && trainerIdx < trainers.length) { + if (players[playerIdx] <= trainers[trainerIdx]) { + playerIdx++; + } + trainerIdx++; + } + return playerIdx; + } +} From c1e28be546847404bc46dad2f2f62f0feb3080e9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Sep 2022 17:22:27 -0700 Subject: [PATCH 0813/1640] Update Find Duplicate File in System.java --- Medium/Find Duplicate File in System.java | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Medium/Find Duplicate File in System.java b/Medium/Find Duplicate File in System.java index d1ff2b4c..8aa53097 100644 --- a/Medium/Find Duplicate File in System.java +++ b/Medium/Find Duplicate File in System.java @@ -1,17 +1,20 @@ class Solution { public List> findDuplicate(String[] paths) { - Map> map = new HashMap<>(); + Map> contentToDirectoryMapping = new HashMap<>(); for (String path : paths) { - String[] splitPath = path.split("\\s+"); - String directory = splitPath[0]; - for (int i = 1; i < splitPath.length; i++) { - String fileName = splitPath[i].substring(0, splitPath[i].indexOf('(')); - String fileContent = splitPath[i] - .substring(splitPath[i].indexOf('(') + 1, splitPath[i].indexOf(')')); - map.computeIfAbsent(fileContent, k -> new HashSet<>()).add(directory + "/" + fileName); + String[] splits = path.split("\\s+"); + String directoryName = splits[0]; + for (int i = 1; i < splits.length; i++) { + int contentStartIdx = splits[i].indexOf('('); + String fileName = splits[i].substring(0, contentStartIdx); + String content = splits[i].substring(contentStartIdx + 1, splits[i].length() - 1); + contentToDirectoryMapping.computeIfAbsent(content, k -> new HashSet<>()) + .add(directoryName + "/" + fileName); } } - return map.values().stream().filter(entry -> entry.size() > 1).map(ArrayList::new) - .collect(Collectors.toList()); + return contentToDirectoryMapping.values().stream() + .filter(e -> e.size() > 1) + .map(ArrayList::new) + .collect(Collectors.toList()); } } From fef44ff827838ece14977cd66e8af3c96e901c19 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 19 Sep 2022 10:23:24 -0700 Subject: [PATCH 0814/1640] Update Reconstruct Itinerary.java --- Hard/Reconstruct Itinerary.java | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/Hard/Reconstruct Itinerary.java b/Hard/Reconstruct Itinerary.java index 26629d58..0c3c962f 100644 --- a/Hard/Reconstruct Itinerary.java +++ b/Hard/Reconstruct Itinerary.java @@ -1,20 +1,22 @@ class Solution { public List findItinerary(List> tickets) { - LinkedList itinerary = new LinkedList<>(); - Map> graph = new HashMap<>(); - Stack stack = new Stack<>(); + Map> map = new HashMap<>(); for (List ticket : tickets) { - graph.computeIfAbsent(ticket.get(0), k -> new PriorityQueue<>()).add(ticket.get(1)); + String from = ticket.get(0); + String to = ticket.get(1); + map.computeIfAbsent(from, k -> new PriorityQueue<>()).add(to); } + Stack stack = new Stack<>(); + LinkedList result = new LinkedList<>(); stack.push("JFK"); while (!stack.isEmpty()) { - String nextDestination = stack.peek(); - if (!graph.getOrDefault(nextDestination, new PriorityQueue<>()).isEmpty()) { - stack.push(graph.get(nextDestination).poll()); + String destination = stack.peek(); + if (!map.getOrDefault(destination, new PriorityQueue<>()).isEmpty()) { + stack.push(map.get(destination).remove()); } else { - itinerary.addFirst(stack.pop()); + result.addFirst(stack.pop()); } } - return itinerary; + return result; } } From b66ddaa489dcfee59566f57a07ba62d0f71e54ef Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 19 Sep 2022 10:26:58 -0700 Subject: [PATCH 0815/1640] Update Kth Smallest Element in a BST.java --- Medium/Kth Smallest Element in a BST.java | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Medium/Kth Smallest Element in a BST.java b/Medium/Kth Smallest Element in a BST.java index 74cb3112..6f77e133 100644 --- a/Medium/Kth Smallest Element in a BST.java +++ b/Medium/Kth Smallest Element in a BST.java @@ -15,17 +15,21 @@ */ class Solution { public int kthSmallest(TreeNode root, int k) { + Integer result = null; Stack stack = new Stack<>(); - while (true) { - while (root != null) { - stack.push(root); - root = root.left; - } - root = stack.pop(); - if (--k == 0) { - return root.val; + while (root != null) { + stack.push(root); + root = root.left; + } + while (k > 1 && !stack.isEmpty()) { + TreeNode removed = stack.pop(); + TreeNode rightNode = removed.right; + while (rightNode != null) { + stack.push(rightNode); + rightNode = rightNode.left; } - root = root.right; + k--; } + return stack.peek().val; } } From fc6f2c8793a032ba59fe11071fc1c09e45b92335 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Sep 2022 08:49:15 -0700 Subject: [PATCH 0816/1640] Update Minimum Index Sum of Two Lists.java --- Easy/Minimum Index Sum of Two Lists.java | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Easy/Minimum Index Sum of Two Lists.java b/Easy/Minimum Index Sum of Two Lists.java index 1a11f2d3..0333614d 100644 --- a/Easy/Minimum Index Sum of Two Lists.java +++ b/Easy/Minimum Index Sum of Two Lists.java @@ -4,25 +4,25 @@ public String[] findRestaurant(String[] list1, String[] list2) { for (int i = 0; i < list1.length; i++) { map.put(list1[i], i); } - List list = new ArrayList<>(); int minIndexSum = Integer.MAX_VALUE; + Map stringToIndexSum = new HashMap<>(); for (int i = 0; i < list2.length; i++) { if (map.containsKey(list2[i])) { - int indexSum = map.get(list2[i]) + i; - if (indexSum < minIndexSum) { - minIndexSum = indexSum; - list = new ArrayList<>(); - list.add(list2[i]); - } - else if (indexSum == minIndexSum) { - list.add(list2[i]); - } + int indexSum = i + map.get(list2[i]); + minIndexSum = Math.min(minIndexSum, indexSum); + stringToIndexSum.put(list2[i], indexSum); } } - String[] ans = new String[list.size()]; - for (int i = 0; i < list.size(); i++) { - ans[i] = list.get(i); + List result = new ArrayList<>(); + for (String key : stringToIndexSum.keySet()) { + if (stringToIndexSum.get(key) == minIndexSum) { + result.add(key); + } + } + String[] resultArr = new String[result.size()]; + for (int i = 0; i < result.size(); i++) { + resultArr[i] = result.get(i); } - return ans; + return resultArr; } } From ede04e0150f07e34916f326458993eae5326ec7c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Sep 2022 13:05:14 -0700 Subject: [PATCH 0817/1640] Update Battleships in a board.java --- Medium/Battleships in a board.java | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Medium/Battleships in a board.java b/Medium/Battleships in a board.java index 37d19242..d84273bc 100644 --- a/Medium/Battleships in a board.java +++ b/Medium/Battleships in a board.java @@ -1,20 +1,17 @@ class Solution { - public int countBattleships(char[][] board) { - int n = board.length; - if (n == 0) return 0; - int m = board[0].length; - - int count = 0; - for (int i=0;i 0 && board[i-1][j] == 'X')continue; - if (j > 0 && board[i][j-1] == 'X')continue; - - count++; - } + + public int countBattleships(char[][] board) { + int count = 0; + int rows = board.length; + int cols = board[0].length; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (board[i][j] == '.' || (i > 0 && board[i - 1][j] == 'X') || (j > 0 && board[i][j - 1] == 'X')) { + continue; } - - return count; + count++; + } } + return count; + } } From b1eb90d0a82d11b14fc0772587d71a95fe3c9514 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Sep 2022 14:17:20 -0700 Subject: [PATCH 0818/1640] Create Lexicographically Smallest Equivalent String.java --- ...raphically Smallest Equivalent String.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/Lexicographically Smallest Equivalent String.java diff --git a/Medium/Lexicographically Smallest Equivalent String.java b/Medium/Lexicographically Smallest Equivalent String.java new file mode 100644 index 00000000..c5856615 --- /dev/null +++ b/Medium/Lexicographically Smallest Equivalent String.java @@ -0,0 +1,31 @@ +class Solution { + public String smallestEquivalentString(String s1, String s2, String baseStr) { + int[] graph = new int[26]; + for (int i = 0; i < 26; i++) { + graph[i] = i; + } + for (int i = 0; i < s1.length(); i++) { + int idxOne = s1.charAt(i) - 'a'; + int idxTwo = s2.charAt(i) - 'a'; + int parentOne = find(graph, idxOne); + int parentTwo = find(graph, idxTwo); + if(parentOne < parentTwo) { + graph[parentTwo] = parentOne; + } else { + graph[parentOne] = parentTwo; + } + } + StringBuilder sb = new StringBuilder(); + for (char c : baseStr.toCharArray()) { + sb.append((char) ('a' + find(graph, c - 'a'))); + } + return sb.toString(); + } + + private int find(int[] graph, int idx) { + while(graph[idx] != idx) { + idx = graph[idx]; + } + return idx; + } +} From 9fa41cfdd5b1f2ba38a5824197316843c2eb6cfd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Sep 2022 15:21:12 -0700 Subject: [PATCH 0819/1640] Update Maximize Distance to Closest Person.java --- .../Maximize Distance to Closest Person.java | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/Medium/Maximize Distance to Closest Person.java b/Medium/Maximize Distance to Closest Person.java index 7b65d4de..8816dda5 100644 --- a/Medium/Maximize Distance to Closest Person.java +++ b/Medium/Maximize Distance to Closest Person.java @@ -1,30 +1,14 @@ class Solution { public int maxDistToClosest(int[] seats) { - int numberOfSeats = seats.length; - int[] distanceFromRight = new int[numberOfSeats]; - int[] distanceFromLeft = new int[numberOfSeats]; - for (int i = 1; i < numberOfSeats; i++) { - if (seats[i - 1] == 0 && seats[i] == 0) { - distanceFromLeft[i] = distanceFromLeft[i - 1] + 1; - } - } - for (int i = numberOfSeats - 2; i >= 0; i--) { - if (seats[i + 1] != 1 && seats[i] == 0) { - distanceFromRight[i] = distanceFromRight[i + 1] + 1; - } - } + int n = seats.length; int maxDistance = 0; - for (int i = 0; i < numberOfSeats; i++) { - if (i == 0 || i == numberOfSeats - 1) { - maxDistance = Math.max( - maxDistance, Math.max(distanceFromLeft[i], distanceFromRight[i]) - ); - } else { - maxDistance = Math.max( - maxDistance, Math.min(distanceFromLeft[i], distanceFromRight[i]) - ); + int start = -1; + for (int i = 0; i < n; i++) { + if (seats[i] == 1) { + maxDistance = start == -1 ? i : Math.max(maxDistance, (i - start) / 2); + start = i; } } - return maxDistance + 1; + return Math.max(maxDistance, n - 1 - start); } } From 5b60dada664921fd11484f28a3fc6d3e16cfd26e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Sep 2022 15:51:09 -0700 Subject: [PATCH 0820/1640] Update and rename Easy/Rotated Digits.java to Medium/Rotated Digits.java --- Easy/Rotated Digits.java | 30 ------------------------------ Medium/Rotated Digits.java | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 30 deletions(-) delete mode 100644 Easy/Rotated Digits.java create mode 100644 Medium/Rotated Digits.java diff --git a/Easy/Rotated Digits.java b/Easy/Rotated Digits.java deleted file mode 100644 index 2bc9a2dc..00000000 --- a/Easy/Rotated Digits.java +++ /dev/null @@ -1,30 +0,0 @@ -class Solution { - public int rotatedDigits(int N) { - int count = 0; - for (int i = 1; i <= N; i++) { - if (isGood(String.valueOf(i))) { - count++; - } - } - return count; - } - - private boolean isGood(String num) { - StringBuilder sb = new StringBuilder(); - for (char c : num.toCharArray()) { - if (c == '0' || c == '1' || c == '8') { - sb.append(c); - } - else if (c == '2' || c == '5') { - sb.append(c == '2' ? '5' : '2'); - } - else if (c == '6' || c == '9') { - sb.append(c == '6' ? '9' : '6'); - } - else { - return false; - } - } - return !sb.toString().equals(num); - } -} diff --git a/Medium/Rotated Digits.java b/Medium/Rotated Digits.java new file mode 100644 index 00000000..5d0104e8 --- /dev/null +++ b/Medium/Rotated Digits.java @@ -0,0 +1,25 @@ +class Solution { + public int rotatedDigits(int n) { + int[] dp = new int[n + 1]; + int result = 0; + for (int i = 0; i <= Math.min(n, 9); i++) { + if (i == 0 || i == 1 || i == 8) { + dp[i] = 1; + } else if (i == 2 || i == 5 || i == 6 || i == 9) { + dp[i] = 2; + result++; + } + } + for (int i = 10; i <= n; i++) { + int factor = dp[i / 10]; + int remainder = dp[i % 10]; + if (factor == 1 && remainder == 1) { + dp[i] = 1; + } else if (factor >= 1 && remainder >= 1) { + dp[i] = 2; + result++; + } + } + return result; + } +} From 665277b465b02ccb9b5635361b9466b91b351420 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Sep 2022 20:03:32 -0700 Subject: [PATCH 0821/1640] Create Balance a Binary Search Tree.java --- Medium/Balance a Binary Search Tree.java | 42 ++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Medium/Balance a Binary Search Tree.java diff --git a/Medium/Balance a Binary Search Tree.java b/Medium/Balance a Binary Search Tree.java new file mode 100644 index 00000000..9fbf14ce --- /dev/null +++ b/Medium/Balance a Binary Search Tree.java @@ -0,0 +1,42 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public TreeNode balanceBST(TreeNode root) { + List sortedList = new ArrayList<>(); + inorderTraversal(root, sortedList); + return buildBST(sortedList, 0, sortedList.size() - 1); + } + + private TreeNode buildBST(List sortedList, int start, int end) { + if (start > end) { + return null; + } + int mid = (start + end) / 2; + TreeNode root = new TreeNode(sortedList.get(mid)); + root.left = buildBST(sortedList, start, mid - 1); + root.right = buildBST(sortedList, mid + 1, end); + return root; + } + + private void inorderTraversal(TreeNode root, List sortedList) { + if (root == null) { + return; + } + inorderTraversal(root.left, sortedList); + sortedList.add(root.val); + inorderTraversal(root.right, sortedList); + } +} From f6a8777afae84facfdb3a62d26c2527c11642c18 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 07:03:45 -0700 Subject: [PATCH 0822/1640] Update Set Matrix Zeroes.java --- Medium/Set Matrix Zeroes.java | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/Medium/Set Matrix Zeroes.java b/Medium/Set Matrix Zeroes.java index 5aad58c2..d2a2e67a 100644 --- a/Medium/Set Matrix Zeroes.java +++ b/Medium/Set Matrix Zeroes.java @@ -1,55 +1,50 @@ class Solution { public void setZeroes(int[][] matrix) { + int rows = matrix.length; + int cols = matrix[0].length; boolean firstRowZero = false; boolean firstColZero = false; - int numRows = matrix.length; - int numCols = matrix[0].length; - // Mark if first column needs to be set zero - for (int i = 0; i < numRows; i++) { + for (int i = 0; i < rows; i++) { if (matrix[i][0] == 0) { firstColZero = true; + break; } } - // Mark if first row needs to be set zero - for (int i = 0; i < numCols; i++) { + for (int i = 0; i < cols; i++) { if (matrix[0][i] == 0) { firstRowZero = true; + break; } } - // If a value in matrix is zero set the value at first row and column to be zero - for (int i = 1; i < numRows; i++) { - for (int j = 1; j < numCols; j++) { + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { if (matrix[i][j] == 0) { matrix[0][j] = 0; matrix[i][0] = 0; } } } - // Update the complete column to be zero if first item of row is zero - for (int i = 1; i < numRows; i++) { + for (int i = 1; i < rows; i++) { if (matrix[i][0] == 0) { - for (int j = 1; j < numCols; j++) { + for (int j = 0; j < cols; j++) { matrix[i][j] = 0; } } } - // Update the complete row to be zero if first item of column is zero - for (int i = 1; i < numCols; i++) { + for (int i = 1; i < cols; i++) { if (matrix[0][i] == 0) { - for (int j = 1; j < numRows; j++) { + for (int j = 0; j < rows; j++) { matrix[j][i] = 0; } - } + } } - // Set the first row to zero if flag is set if (firstRowZero) { - for (int i = 0; i < numCols; i++) { + for (int i = 0; i < cols; i++) { matrix[0][i] = 0; } } - // Set the first column to zero if flag is set if (firstColZero) { - for (int i = 0; i < numRows; i++) { + for (int i = 0; i < rows; i++) { matrix[i][0] = 0; } } From 2ba8f62ad50f50724cef165f9906c905023424d2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 12:59:24 -0700 Subject: [PATCH 0823/1640] Update Next Closest Time.java --- Medium/Next Closest Time.java | 55 ++++++++++++----------------------- 1 file changed, 18 insertions(+), 37 deletions(-) diff --git a/Medium/Next Closest Time.java b/Medium/Next Closest Time.java index 0d1ef172..46e267f6 100644 --- a/Medium/Next Closest Time.java +++ b/Medium/Next Closest Time.java @@ -1,42 +1,23 @@ class Solution { - public String nextClosestTime(String time) { - char[] timeDigits = time.toCharArray(); - char[] sorted = time.toCharArray(); - Arrays.sort(sorted); - - timeDigits[4] = findNext(timeDigits[4], (char)('9' + 1), sorted); - if (timeDigits[4] > time.charAt(4)) { - return String.valueOf(timeDigits); - } - - timeDigits[3] = findNext(timeDigits[3], '5', sorted); - if (timeDigits[3] > time.charAt(3)) { - return String.valueOf(timeDigits); - } - - timeDigits[1] = timeDigits[0] == '2' ? - findNext(timeDigits[1], '3', sorted) : - findNext(timeDigits[1], (char)('9' + 1), sorted); - if (timeDigits[1] > time.charAt(1)) { - return String.valueOf(timeDigits); - } - - timeDigits[0] = findNext(timeDigits[0], '2', sorted); - - return String.valueOf(timeDigits); + public String nextClosestTime(String time) { + int minutes = Integer.parseInt(time.substring(0, 2)) * 60 + Integer.parseInt(time.substring(3)); + Set digits = new HashSet<>(); + for (char c : time.toCharArray()) { + digits.add(c - '0'); } - - private char findNext(char current, char limit, char[] sorted) { - if (current == limit) { - return sorted[0]; - } - - int pos = Arrays.binarySearch(sorted, current) + 1; - - while (pos < 4 && (sorted[pos] > limit || sorted[pos] == current)) { - pos++; + while (true) { + minutes = (minutes + 1) % (24 * 60); + int[] nextTime = {minutes / 60 / 10, minutes / 60 % 10, minutes % 60 / 10, minutes % 60 % 10}; + boolean found = true; + for (int unit : nextTime) { + if (!digits.contains(unit)) { + found = false; + break; } - - return pos == 4 ? sorted[0] : sorted[pos]; + } + if (found) { + return String.format("%02d:%02d", minutes / 60, minutes % 60); + } } + } } From 84ece1d79c1e15425ea18b16b2de1350ea2d60af Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 13:05:29 -0700 Subject: [PATCH 0824/1640] Update K Empty Slots.java --- Hard/K Empty Slots.java | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/Hard/K Empty Slots.java b/Hard/K Empty Slots.java index 6b004bf0..bb499351 100644 --- a/Hard/K Empty Slots.java +++ b/Hard/K Empty Slots.java @@ -1,19 +1,23 @@ class Solution { - public int kEmptySlots(int[] flowers, int k) { - TreeSet set = new TreeSet<>(); - int day = 0; - - for (int flower : flowers) { - day++; - set.add(flower); - Integer lower = set.lower(flower); - Integer higher = set.higher(flower); - - if ((lower != null && flower - lower - 1 == k) || (higher != null && higher - flower - 1 == k)) { - return day; - } - } - - return -1; + public int kEmptySlots(int[] bulbs, int k) { + int n = bulbs.length; + int[] position = new int[n + 1]; + for (int i = 0; i < n; i++) { + position[bulbs[i]] = i; } + int result = Integer.MAX_VALUE; + int start = 1; + int end = k + 2; + for (int i = 1; end <= n; i++) { + if (position[i] > position[start] && position[i] > position[end]) { + continue; + } + if (i == end) { + result = Math.min(result, Math.max(position[start], position[end]) + 1); + } + start = i; + end = k + 1 + i; + } + return result == Integer.MAX_VALUE ? -1 : result; + } } From 637ceb6a6efdb4a2be59d8e04cdeb4c475bc418c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 13:40:03 -0700 Subject: [PATCH 0825/1640] Update and rename Easy/Largest Time for Given Digits.java to Medium/Largest Time for Given Digits.java --- Easy/Largest Time for Given Digits.java | 25 ----------------- Medium/Largest Time for Given Digits.java | 33 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 25 deletions(-) delete mode 100644 Easy/Largest Time for Given Digits.java create mode 100644 Medium/Largest Time for Given Digits.java diff --git a/Easy/Largest Time for Given Digits.java b/Easy/Largest Time for Given Digits.java deleted file mode 100644 index 51ab3232..00000000 --- a/Easy/Largest Time for Given Digits.java +++ /dev/null @@ -1,25 +0,0 @@ -class Solution { - public String largestTimeFromDigits(int[] A) { - int ans = -1; - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - if (i != j) { - for (int k = 0; k < 4; k++) { - if (i != k && j != k) { - for (int l = 0; l < 4; l++) { - if (l != i && l != j && l != k) { - int hours = 10 * A[i] + A[j]; - int mins = 10 * A[k] + A[l]; - if (hours < 24 && mins < 60) { - ans = Math.max(ans, hours * 60 + mins); - } - } - } - } - } - } - } - } - return ans >= 0 ? String.format("%02d:%02d", ans / 60, ans % 60) : ""; - } -} diff --git a/Medium/Largest Time for Given Digits.java b/Medium/Largest Time for Given Digits.java new file mode 100644 index 00000000..ca920ebb --- /dev/null +++ b/Medium/Largest Time for Given Digits.java @@ -0,0 +1,33 @@ +class Solution { + public String largestTimeFromDigits(int[] arr) { + int[] maxTime = {-1}; + permute(arr, 0, maxTime); + return maxTime[0] == -1 ? "" : String.format("%02d:%02d", maxTime[0] / 60, maxTime[0] % 60); + } + + private void permute(int[] arr, int idx, int[] maxTime) { + if (idx == arr.length) { + buildTime(arr, maxTime); + return; + } + for (int i = idx; i < arr.length; i++) { + swap(arr, i, idx); + permute(arr, idx + 1, maxTime); + swap(arr, idx, i); + } + } + + private void buildTime(int[] arr, int[] maxTime) { + int hour = arr[0] * 10 + arr[1]; + int minutes = arr[2] * 10 + arr[3]; + if (hour < 24 && minutes < 60) { + maxTime[0] = Math.max(maxTime[0], hour * 60 + minutes); + } + } + + private void swap(int[] arr, int i, int j) { + int temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + } +} From 594418682531b97b9be8612765111058481bdc28 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 13:49:41 -0700 Subject: [PATCH 0826/1640] Update Range Sum Query - Mutable.java --- Medium/Range Sum Query - Mutable.java | 59 +++++++++++++++------------ 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/Medium/Range Sum Query - Mutable.java b/Medium/Range Sum Query - Mutable.java index 5faab61f..d57769f2 100644 --- a/Medium/Range Sum Query - Mutable.java +++ b/Medium/Range Sum Query - Mutable.java @@ -1,45 +1,50 @@ class NumArray { - + + private BIT bit; private int[] nums; - private int[] indexTree; - private int n; public NumArray(int[] nums) { + this.bit = new BIT(nums.length); this.nums = nums; - this.n = nums.length; - this.indexTree = new int[n + 1]; - for (int i = 0; i < n; i++) { - initialize(i, nums[i]); + for (int i = 0; i < nums.length; i++) { + this.bit.update(i + 1, nums[i]); } } public void update(int index, int val) { - int diff = val - this.nums[index]; - this.nums[index] = val; - initialize(index, diff); + int delta = val - nums[index]; + this.bit.update(index + 1, delta); + this.nums[index] = val; } public int sumRange(int left, int right) { - return getSum(right) - getSum(left - 1); + return this.bit.query(right + 1) - this.bit.query(left); } - private void initialize(int idx, int value) { - idx++; - while (idx <= this.n) { - this.indexTree[idx] += value; - idx += (idx & -idx); - } + private static class BIT { + + private int[] sum; + + public BIT(int n) { + this.sum = new int[n + 1]; + } + + private void update(int idx, int delta) { + while (idx < sum.length) { + sum[idx] += delta; + idx += (idx & -idx); + } + } + + private int query(int idx) { + int result = 0; + while (idx > 0) { + result += sum[idx]; + idx -= (idx & -idx); + } + return result; + } } - - private int getSum(int i) { - int sum = 0; - i++; - while (i > 0) { - sum += this.indexTree[i]; - i -= (i & -i); - } - return sum; - } } /** From a9e088d67ac8a96d0ae599c6f0f524b6bd4d4ac5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 18:56:56 -0700 Subject: [PATCH 0827/1640] Update Remove Interval.java --- Medium/Remove Interval.java | 51 ++++++++++--------------------------- 1 file changed, 14 insertions(+), 37 deletions(-) diff --git a/Medium/Remove Interval.java b/Medium/Remove Interval.java index 4ebbcf9e..0405621d 100644 --- a/Medium/Remove Interval.java +++ b/Medium/Remove Interval.java @@ -1,41 +1,18 @@ class Solution { - public List> removeInterval(int[][] intervals, int[] toBeRemoved) { - List> list = new ArrayList<>(); - int removeStart = toBeRemoved[0]; - int removeEnd = toBeRemoved[1]; - for (int[] interval : intervals) { - int start = interval[0]; - int end = interval[1]; - // Case 1: Overlap the removal interval. Skip this interval - if (start >= removeStart && end <= removeEnd) { - continue; - } - // Case 2 and 3: Completely miss out the removal interval either on left side or right side of number line. - // Add the complete interval - if ((start <= removeStart && end <= removeStart) || - (start >= removeEnd && end >= removeEnd)) { - list.add(Arrays.asList(start, end)); - continue; - } - // Case 4: Interval partially overlaps on left side of removal interval on number line. - // Add the modified interval - if (start <= removeStart) { - int tempStart = Math.min(start, removeStart); - int tempEnd = Math.max(start, removeStart); - if (tempStart != tempEnd) { - list.add(Arrays.asList(tempStart, tempEnd)); - } - } - // Case 5: Interval partially overlaps on right side of removal interval on number line. - // Add the modified interval - if (end >= removeEnd) { - int tempStart = Math.min(end, removeEnd); - int tempEnd = Math.max(end, removeEnd); - if (tempStart != tempEnd) { - list.add(Arrays.asList(tempStart, tempEnd)); - } - } + public List> removeInterval(int[][] intervals, int[] toBeRemoved) { + List> result = new ArrayList<>(); + for (int[] interval : intervals) { + if (interval[0] > toBeRemoved[1] || interval[1] < toBeRemoved[0]) { + result.add(Arrays.asList(interval[0], interval[1])); + } else { + if (interval[0] < toBeRemoved[0]) { + result.add(Arrays.asList(interval[0], toBeRemoved[0])); } - return list; + if (interval[1] > toBeRemoved[1]) { + result.add(Arrays.asList(toBeRemoved[1], interval[1])); + } + } } + return result; + } } From 8d30bd80b8050b612c9e6c05e048d4038cb5cb80 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 19:11:56 -0700 Subject: [PATCH 0828/1640] Update Reorder List.java --- Medium/Reorder List.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/Medium/Reorder List.java b/Medium/Reorder List.java index f67b973c..769a555d 100644 --- a/Medium/Reorder List.java +++ b/Medium/Reorder List.java @@ -10,21 +10,15 @@ */ class Solution { public void reorderList(ListNode head) { - if (head.next == null) { - return; - } - // Find mid point ListNode slow = head; ListNode fast = head; while (fast != null && fast.next != null) { - fast = fast.next.next; slow = slow.next; + fast = fast.next.next; } - // Reverse the second half & break the two halves ListNode secondHalf = reverse(slow.next); slow.next = null; ListNode firstHalf = head; - // Merge first half and second half while (firstHalf != null && secondHalf != null) { ListNode firstHalfNext = firstHalf.next; ListNode secondHalfNext = secondHalf.next; @@ -35,12 +29,11 @@ public void reorderList(ListNode head) { } } - private ListNode reverse(ListNode head) { - ListNode curr = head; - ListNode next = null; + private ListNode reverse(ListNode node) { + ListNode curr = node; ListNode prev = null; while (curr != null) { - next = curr.next; + ListNode next = curr.next; curr.next = prev; prev = curr; curr = next; From 6b1710eec2b6bc96ac7d5dc4a77830c0ed38fce0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Sep 2022 19:38:56 -0700 Subject: [PATCH 0829/1640] Update Lonely Pixel I.java --- Medium/Lonely Pixel I.java | 52 +++++++++++++++----------------------- 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/Medium/Lonely Pixel I.java b/Medium/Lonely Pixel I.java index ae676662..42ae180d 100644 --- a/Medium/Lonely Pixel I.java +++ b/Medium/Lonely Pixel I.java @@ -1,37 +1,25 @@ class Solution { - public int findLonelyPixel(char[][] picture) { - int count = 0; - Map rowMap = new HashMap<>(); - - for (int i=0; i rowMap = new HashMap<>(); + Map colMap = new HashMap<>(); + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (picture[i][j] == 'B') { + rowMap.put(i, rowMap.getOrDefault(i, 0) + 1); + colMap.put(j, colMap.getOrDefault(j, 0) + 1); } - - Map colMap = new HashMap<>(); - for (int i=0; i Date: Thu, 22 Sep 2022 16:06:43 -0700 Subject: [PATCH 0830/1640] Update Lemonade Change.java --- Easy/Lemonade Change.java | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/Easy/Lemonade Change.java b/Easy/Lemonade Change.java index ec201343..acddd319 100644 --- a/Easy/Lemonade Change.java +++ b/Easy/Lemonade Change.java @@ -1,23 +1,22 @@ class Solution { public boolean lemonadeChange(int[] bills) { - final int LEMONADE_COST = 5; - int[] billDenominations = {20, 10, 5}; - Map cashCounter = new HashMap<>(); + int[] billCount = new int[3]; for (int bill : bills) { - int changeRequired = bill - LEMONADE_COST; - cashCounter.put(bill, cashCounter.getOrDefault(bill, 0) + 1); - for (Integer denomination : billDenominations) { - int numOfBills = Math.min( - changeRequired / denomination, cashCounter.getOrDefault(denomination, 0) - ); - changeRequired -= denomination * numOfBills; - cashCounter.put( - denomination, cashCounter.getOrDefault(denomination, 0) - numOfBills - ); + int returnAmount = bill - 5; + for (int i = 2; i >= 0 && returnAmount > 0; i--) { + int amount = i == 2 ? 20 : (i == 1 ? 10 : 5); + if (returnAmount >= amount) { + int billsRequired = returnAmount / amount; + int billsAvailable = billCount[i]; + returnAmount -= Math.min(billsRequired, billsAvailable) * amount; + billCount[i] -= Math.min(billsRequired, billsAvailable); + } } - if (changeRequired > 0) { + if (returnAmount != 0) { return false; } + int amountIdx = bill == 20 ? 2 : (bill == 10 ? 1 : 0); + billCount[amountIdx]++; } return true; } From 1f4c7f235442e827b79fa533704340792042054e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 23 Sep 2022 06:15:32 -0700 Subject: [PATCH 0831/1640] Create Concatenation of Consecutive Binary Numbers.java --- ...oncatenation of Consecutive Binary Numbers.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Concatenation of Consecutive Binary Numbers.java diff --git a/Medium/Concatenation of Consecutive Binary Numbers.java b/Medium/Concatenation of Consecutive Binary Numbers.java new file mode 100644 index 00000000..fa27285f --- /dev/null +++ b/Medium/Concatenation of Consecutive Binary Numbers.java @@ -0,0 +1,14 @@ +class Solution { + public int concatenatedBinary(int n) { + final int MOD = 1000_000_007; + int length = 0; + long result = 0; + for (int i = 1; i <= n; i++) { + if (Math.pow(2, (int) (Math.log(i) / Math.log(2))) == i) { + length++; + } + result = ((result * (int) Math.pow(2, length)) + i) % MOD; + } + return (int) result; + } +} From bdbce0f828ecae41857afe3dd3c05281c92868db Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 23 Sep 2022 06:53:26 -0700 Subject: [PATCH 0832/1640] Update Finding the Users Active Minutes.java --- Medium/Finding the Users Active Minutes.java | 24 +++++++------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/Medium/Finding the Users Active Minutes.java b/Medium/Finding the Users Active Minutes.java index 40d877af..45c9c86c 100644 --- a/Medium/Finding the Users Active Minutes.java +++ b/Medium/Finding the Users Active Minutes.java @@ -1,24 +1,16 @@ class Solution { public int[] findingUsersActiveMinutes(int[][] logs, int k) { Map> map = new HashMap<>(); - List> setList = new ArrayList<>(); - for (int i = 0; i < k; i++) { - setList.add(new HashSet<>()); - } for (int[] log : logs) { - map.computeIfAbsent(log[0], j -> new HashSet<>()).add(log[1]); - int currActiveTime = map.get(log[0]).size(); - if (currActiveTime <= k) { - setList.get(currActiveTime - 1).add(log[0]); - if (currActiveTime != 1) { - setList.get(currActiveTime - 2).remove(log[0]); - } - } + int id = log[0]; + int minute = log[1]; + map.computeIfAbsent(id, j -> new HashSet<>()).add(minute); } - int[] ans = new int[k]; - for (int i = 0; i < k; i++) { - ans[i] = setList.get(i).size(); + int[] result = new int[k]; + for (Integer key : map.keySet()) { + int uam = map.get(key).size(); + result[uam - 1]++; } - return ans; + return result; } } From a76240abf6fe3e5d8aa9edfd1e0d3cdf64aef551 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 24 Sep 2022 08:20:01 -0700 Subject: [PATCH 0833/1640] Update Path Sum II.java --- Medium/Path Sum II.java | 61 +++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 15 deletions(-) diff --git a/Medium/Path Sum II.java b/Medium/Path Sum II.java index c9610a27..776676f7 100644 --- a/Medium/Path Sum II.java +++ b/Medium/Path Sum II.java @@ -15,25 +15,56 @@ */ class Solution { public List> pathSum(TreeNode root, int targetSum) { - List> list = new ArrayList<>(); - helper(root, targetSum, new ArrayList<>(), list); - return list; - } - - private void helper(TreeNode root, int targetSum, List curr, List> list) { + List> result = new ArrayList<>(); if (root == null) { - return; + return result; } - curr.add(root.val); - if (isLeaf(root) && (targetSum - root.val) == 0) { - list.add(new ArrayList<>(curr)); + Queue queue = new LinkedList<>(); + NodePathSumWrapper currNode = new NodePathSumWrapper(root, 0); + currNode.addToPath(root.val); + queue.add(currNode); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + NodePathSumWrapper removed = queue.remove(); + TreeNode node = removed.node; + if (node.left == null && node.right == null) { + if (removed.currSum == targetSum) { + result.add(new ArrayList<>(removed.path)); + } + } else { + if (node.left != null) { + NodePathSumWrapper leftNodeWrapper = new NodePathSumWrapper(node.left, removed.currSum); + leftNodeWrapper.path.addAll(removed.path); + leftNodeWrapper.addToPath(node.left.val); + queue.add(leftNodeWrapper); + } + if (node.right != null) { + NodePathSumWrapper rightNodeWrapper = new NodePathSumWrapper(node.right, removed.currSum); + rightNodeWrapper.path.addAll(removed.path); + rightNodeWrapper.addToPath(node.right.val); + queue.add(rightNodeWrapper); + } + } + } } - helper(root.left, targetSum - root.val, curr, list); - helper(root.right, targetSum - root.val, curr, list); - curr.remove(curr.size() - 1); + return result; } - private boolean isLeaf(TreeNode root) { - return root.left == null && root.right == null; + private static class NodePathSumWrapper { + TreeNode node; + int currSum; + List path; + + public NodePathSumWrapper(TreeNode node, int currSum) { + this.node = node; + this.currSum = currSum; + this.path = new ArrayList<>(); + } + + public void addToPath(int value) { + this.path.add(value); + this.currSum += value; + } } } From af2ea2fc678f817ecdf97cb63725ce8091a62fb1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 24 Sep 2022 10:54:29 -0700 Subject: [PATCH 0834/1640] Create Number of Distinct Substrings in a String.java --- ...er of Distinct Substrings in a String.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Number of Distinct Substrings in a String.java diff --git a/Medium/Number of Distinct Substrings in a String.java b/Medium/Number of Distinct Substrings in a String.java new file mode 100644 index 00000000..17d2a053 --- /dev/null +++ b/Medium/Number of Distinct Substrings in a String.java @@ -0,0 +1,26 @@ +class Solution { + public int countDistinct(String s) { + TrieNode root = new TrieNode(); + int n = s.length(); + int count = 0; + for (int i = 0; i < n; i++) { + TrieNode curr = root; + for (int j = i; j < n; j++) { + if (!curr.children.containsKey(s.charAt(j))) { + count++; + curr.children.put(s.charAt(j), new TrieNode()); + } + curr = curr.children.get(s.charAt(j)); + } + } + return count; + } + + private static class TrieNode { + Map children; + + public TrieNode() { + this.children = new HashMap<>(); + } + } +} From 6f8dbd775a1dda098b532195266d5ad4639e9441 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 24 Sep 2022 12:11:36 -0700 Subject: [PATCH 0835/1640] Update Task Scheduler.java --- Medium/Task Scheduler.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Medium/Task Scheduler.java b/Medium/Task Scheduler.java index 5d535437..558e1f77 100644 --- a/Medium/Task Scheduler.java +++ b/Medium/Task Scheduler.java @@ -1,14 +1,14 @@ class Solution { public int leastInterval(char[] tasks, int n) { - int[] counter = new int[26]; + int[] frequencies = new int[26]; for (char task : tasks) { - counter[task - 'A']++; + frequencies[task - 'A']++; } - Arrays.sort(counter); - int maxFrequency = counter[25]; + Arrays.sort(frequencies); + int maxFrequency = frequencies[25]; int idleTime = (maxFrequency - 1) * n; - for (int i = counter.length - 2; i >= 0 && idleTime > 0; i--) { - idleTime -= Math.min(maxFrequency - 1, counter[i]); + for (int i = frequencies.length - 2; i >= 0 && idleTime > 0; i--) { + idleTime -= Math.min(maxFrequency - 1, frequencies[i]); } idleTime = Math.max(0, idleTime); return idleTime + tasks.length; From efb31e899f355bd330b829d2743d7b4763b77b61 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Sep 2022 07:26:34 -0700 Subject: [PATCH 0836/1640] Update Design Circular Queue.java --- Medium/Design Circular Queue.java | 48 +++++++++++++------------------ 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/Medium/Design Circular Queue.java b/Medium/Design Circular Queue.java index ee595135..d5f90b31 100644 --- a/Medium/Design Circular Queue.java +++ b/Medium/Design Circular Queue.java @@ -1,60 +1,52 @@ class MyCircularQueue { + + private Integer[] queue; + private int valueCursor; + private int emptyCursor; - /** Initialize your data structure here. Set the size of the queue to be k. */ - int[] queue; - int start; - int end; - int k; public MyCircularQueue(int k) { - this.k = k; - queue = new int[k]; - start = 0; - end = 0; - Arrays.fill(queue, -1); + this.queue = new Integer[k]; + this.valueCursor = 0; + this.emptyCursor = 0; } - /** Insert an element into the circular queue. Return true if the operation is successful. */ public boolean enQueue(int value) { - if (end == start && queue[end] != -1) { + if (queue[emptyCursor] != null) { return false; } - queue[end++] = value; - if (end == k) { - end = 0; + queue[emptyCursor++] = value; + if (emptyCursor == queue.length) { + emptyCursor = 0; } return true; } - /** Delete an element from the circular queue. Return true if the operation is successful. */ public boolean deQueue() { - if (queue[start] == -1) { + if (queue[valueCursor] == null) { return false; } - queue[start++] = -1; - if (start == k) { - start = 0; + queue[valueCursor++] = null; + if (valueCursor == queue.length) { + valueCursor = 0; } return true; } - /** Get the front item from the queue. */ public int Front() { - return queue[start]; + return queue[valueCursor] == null ? -1 : queue[valueCursor]; } - /** Get the last item from the queue. */ public int Rear() { - return end == 0 ? queue[k - 1] : queue[end - 1]; + int idx = emptyCursor == 0 ? queue.length - 1 : emptyCursor - 1; + return queue[idx] == null ? -1 : queue[idx]; } - /** Checks whether the circular queue is empty or not. */ public boolean isEmpty() { - return start == end && queue[end] == -1; + return queue[valueCursor] == null; } - /** Checks whether the circular queue is full or not. */ public boolean isFull() { - return start == end && queue[end] != -1; + return queue[emptyCursor] != null; } } From de8a44021575921b9959309fdd7ebf2cbb0cdf72 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Sep 2022 07:37:54 -0700 Subject: [PATCH 0837/1640] Create Sort the People.java --- Easy/Sort the People.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/Sort the People.java diff --git a/Easy/Sort the People.java b/Easy/Sort the People.java new file mode 100644 index 00000000..03678ec2 --- /dev/null +++ b/Easy/Sort the People.java @@ -0,0 +1,10 @@ +class Solution { + public String[] sortPeople(String[] names, int[] heights) { + return IntStream.range(0, names.length) + .boxed() + .sorted((o1, o2) -> heights[o2] - heights[o1]) + .map(idx -> names[idx]) + .toList() + .toArray(new String[0]); + } +} From cc332e27ccc493cb1b757625b1b781f344b23709 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Sep 2022 08:28:05 -0700 Subject: [PATCH 0838/1640] Create Sort Integers by The Power Value.java --- Medium/Sort Integers by The Power Value.java | 28 ++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/Sort Integers by The Power Value.java diff --git a/Medium/Sort Integers by The Power Value.java b/Medium/Sort Integers by The Power Value.java new file mode 100644 index 00000000..1ca20e69 --- /dev/null +++ b/Medium/Sort Integers by The Power Value.java @@ -0,0 +1,28 @@ +class Solution { + public int getKth(int lo, int hi, int k) { + Map cache = new HashMap<>(); + cache.put(1, 0); + PriorityQueue pq = new PriorityQueue<>( + Comparator.comparingInt((Integer o) -> cache.get(o)).thenComparingInt(o -> o)); + for (int i = lo; i <= hi; i++) { + calculateSteps(cache, i); + pq.add(i); + } + while (!pq.isEmpty() && k-- > 1) { + pq.poll(); + } + return pq.peek(); + } + + private int calculateSteps(Map cache, int num) { + if (num == 1) { + return 0; + } + if (cache.containsKey(num)) { + return cache.get(num); + } + int numOfSteps = 1 + calculateSteps(cache, (num % 2 == 0 ? num / 2 : num * 3 + 1)); + cache.put(num, numOfSteps); + return cache.get(num); + } +} From e2e24c78aa810257b990cae4b227e98a1c31f3cb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Sep 2022 08:31:30 -0700 Subject: [PATCH 0839/1640] Update Sort Integers by The Power Value.java --- Medium/Sort Integers by The Power Value.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/Medium/Sort Integers by The Power Value.java b/Medium/Sort Integers by The Power Value.java index 1ca20e69..aa9a5fa6 100644 --- a/Medium/Sort Integers by The Power Value.java +++ b/Medium/Sort Integers by The Power Value.java @@ -15,9 +15,6 @@ public int getKth(int lo, int hi, int k) { } private int calculateSteps(Map cache, int num) { - if (num == 1) { - return 0; - } if (cache.containsKey(num)) { return cache.get(num); } From ab63ec58b5e8fbb8d6a5dfaa35cd3ac3150f8244 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Sep 2022 18:33:56 -0700 Subject: [PATCH 0840/1640] Create Satisfiability of Equality Equations.java --- .../Satisfiability of Equality Equations.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Medium/Satisfiability of Equality Equations.java diff --git a/Medium/Satisfiability of Equality Equations.java b/Medium/Satisfiability of Equality Equations.java new file mode 100644 index 00000000..cba2bf2a --- /dev/null +++ b/Medium/Satisfiability of Equality Equations.java @@ -0,0 +1,42 @@ +class Solution { + public boolean equationsPossible(String[] equations) { + List[] graph = new ArrayList[26]; + for (int i = 0; i < 26; i++) { + graph[i] = new ArrayList<>(); + } + for (String equation : equations) { + if (equation.charAt(1) == '=') { + int first = equation.charAt(0) - 'a'; + int second = equation.charAt(3) - 'a'; + graph[first].add(second); + graph[second].add(first); + } + } + int[] color = new int[26]; + Arrays.fill(color, -1); + for (int i = 0; i < 26; i++) { + if (color[i] == -1) { + dfs(i, i, color, graph); + } + } + for (String equation : equations) { + if (equation.charAt(1) == '!') { + int first = equation.charAt(0) - 'a'; + int second = equation.charAt(3) - 'a'; + if (color[first] == color[second]) { + return false; + } + } + } + return true; + } + + private static void dfs(int node, int nodeColor, int[] color, List[] graph) { + if (color[node] == -1) { + color[node] = nodeColor; + for (int neighbor : graph[node]) { + dfs(neighbor, nodeColor, color, graph); + } + } + } +} From 28a49d33c1650bb139648a4f3cdf71d256b243b5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 26 Sep 2022 08:28:15 -0700 Subject: [PATCH 0841/1640] Update Check Whether Two Strings are Almost Equivalent.java --- ...k Whether Two Strings are Almost Equivalent.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Easy/Check Whether Two Strings are Almost Equivalent.java b/Easy/Check Whether Two Strings are Almost Equivalent.java index b417eb30..e80ee212 100644 --- a/Easy/Check Whether Two Strings are Almost Equivalent.java +++ b/Easy/Check Whether Two Strings are Almost Equivalent.java @@ -1,10 +1,15 @@ class Solution { public boolean checkAlmostEquivalent(String word1, String word2) { - int[] counter = new int[26]; + int[] frequency = new int[26]; for (int i = 0; i < word1.length(); i++) { - counter[word1.charAt(i) - 'a']++; - counter[word2.charAt(i) - 'a']--; + frequency[word1.charAt(i) - 'a']++; + frequency[word2.charAt(i) - 'a']--; } - return IntStream.range(0, 26).allMatch(idx -> Math.abs(counter[idx]) <= 3); + for (int i = 0; i < 26; i++) { + if (Math.abs(frequency[i]) > 3) { + return false; + } + } + return true; } } From 2f9945adc8b4bd81430d4043e9e80a2632cfe9b5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 26 Sep 2022 09:09:46 -0700 Subject: [PATCH 0842/1640] Update Check If a Number Is Majority Element in a Sorted Array.java --- ...Is Majority Element in a Sorted Array.java | 43 +++++++++++++++---- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/Easy/Check If a Number Is Majority Element in a Sorted Array.java b/Easy/Check If a Number Is Majority Element in a Sorted Array.java index a5620749..5913a03a 100644 --- a/Easy/Check If a Number Is Majority Element in a Sorted Array.java +++ b/Easy/Check If a Number Is Majority Element in a Sorted Array.java @@ -1,13 +1,38 @@ class Solution { - public boolean isMajorityElement(int[] nums, int target) { - if (nums.length == 1) { - return nums[0] == target; - } - - if (nums.length == 2) { - return nums[0] == target && nums[1] == target; + + private static enum DIRECTION { + LEFT, RIGHT; + } + + public boolean isMajorityElement(int[] nums, int target) { + int rightIdx = getIndex(nums, target, DIRECTION.RIGHT); + int leftIdx = getIndex(nums, target, DIRECTION.LEFT); + if (leftIdx == -1 || rightIdx == -1) { + return false; + } + int occurrences = rightIdx - leftIdx + 1; + return occurrences > nums.length / 2; + } + + private int getIndex(int[] nums, int target, DIRECTION direction) { + int resultIdx = -1; + int left = 0; + int right = nums.length - 1; + while (left <= right) { + int mid = (left + right) / 2; + if (nums[mid] == target) { + resultIdx = mid; + if (direction == DIRECTION.LEFT) { + right = mid - 1; + } else { + left = mid + 1; } - - return nums[nums.length / 2 - 1] == target && nums[nums.length / 2 + 1] == target; + } else if (nums[mid] > target) { + right = mid - 1; + } else { + left = mid + 1; + } } + return resultIdx; + } } From 769c6d0a65f6641e0a1752d2d879f04df4669224 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 26 Sep 2022 09:52:52 -0700 Subject: [PATCH 0843/1640] Update Minimum Value to Get Positive Step by Step Sum.java --- ...nimum Value to Get Positive Step by Step Sum.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Easy/Minimum Value to Get Positive Step by Step Sum.java b/Easy/Minimum Value to Get Positive Step by Step Sum.java index 0d7401f1..e8b91b93 100644 --- a/Easy/Minimum Value to Get Positive Step by Step Sum.java +++ b/Easy/Minimum Value to Get Positive Step by Step Sum.java @@ -1,11 +1,15 @@ class Solution { public int minStartValue(int[] nums) { - int minPrefixSum = 0; - int currSum = 0; + int startingValue = 1; + int currSum = 1; for (int num : nums) { + if (currSum + num < 1) { + int diff = 1 - (currSum + num); + startingValue += diff; + currSum += diff; + } currSum += num; - minPrefixSum = Math.min(minPrefixSum, currSum); } - return -1 * minPrefixSum + 1; + return startingValue; } } From 02a173e1c2409549fd772f46c9975cc9c4bc4ab7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 26 Sep 2022 10:48:05 -0700 Subject: [PATCH 0844/1640] Update Average Waiting Time.java --- Medium/Average Waiting Time.java | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/Medium/Average Waiting Time.java b/Medium/Average Waiting Time.java index 66d8f464..afba5388 100644 --- a/Medium/Average Waiting Time.java +++ b/Medium/Average Waiting Time.java @@ -1,13 +1,20 @@ class Solution { public double averageWaitingTime(int[][] customers) { - long totalWaitingTime = 0; - int currChefTime = 0; + double totalWaitingTime = 0.0; + int lastFreeTime = 0; for (int[] customer : customers) { - currChefTime = Math.max(currChefTime, customer[0]); - int endTime = currChefTime + customer[1]; - totalWaitingTime += endTime - customer[0]; - currChefTime = endTime; + int arrivalTime = customer[0]; + // Wait time before chef finishes previous task + if (lastFreeTime > arrivalTime) { + totalWaitingTime += lastFreeTime - arrivalTime; + } else { + lastFreeTime = arrivalTime; + } + // Wait time to finish task for current customer + int taskTime = customer[1]; + totalWaitingTime += taskTime; + lastFreeTime += taskTime; } - return totalWaitingTime / (double) customers.length; + return totalWaitingTime / customers.length; } } From e3d529a121ff376392ffb8ebd361e21960e59f5a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 26 Sep 2022 20:25:16 -0700 Subject: [PATCH 0845/1640] Create Push Dominoes.java --- Medium/Push Dominoes.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Push Dominoes.java diff --git a/Medium/Push Dominoes.java b/Medium/Push Dominoes.java new file mode 100644 index 00000000..16753989 --- /dev/null +++ b/Medium/Push Dominoes.java @@ -0,0 +1,32 @@ +class Solution { + public String pushDominoes(String dominoes) { + int[] forces = new int[dominoes.length()]; + int force = 0; + for (int i = 0; i < dominoes.length(); i++) { + if (dominoes.charAt(i) == 'R') { + force = dominoes.length(); + } else if (dominoes.charAt(i) == 'L') { + force = 0; + } else { + force = Math.max(force - 1, 0); + } + forces[i] += force; + } + force = 0; + for (int i = dominoes.length() - 1; i >= 0; i--) { + if (dominoes.charAt(i) == 'L') { + force = dominoes.length(); + } else if (dominoes.charAt(i) == 'R') { + force = 0; + } else { + force = Math.max(force - 1, 0); + } + forces[i] -= force; + } + StringBuilder result = new StringBuilder(); + for (int i = 0; i < forces.length; i++) { + result.append(forces[i] > 0 ? 'R' : (forces[i] < 0 ? 'L' : '.')); + } + return result.toString(); + } +} From 8df0eafdc7b49aca246f16e20cfcda929fa885ec Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 27 Sep 2022 06:38:25 -0700 Subject: [PATCH 0846/1640] Update Number of Distinct Islands.java --- Medium/Number of Distinct Islands.java | 49 ++++++++++++-------------- 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/Medium/Number of Distinct Islands.java b/Medium/Number of Distinct Islands.java index d33af963..e9ea1286 100644 --- a/Medium/Number of Distinct Islands.java +++ b/Medium/Number of Distinct Islands.java @@ -1,38 +1,35 @@ class Solution { - Set set; - int[][] dirs = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}}; public int numDistinctIslands(int[][] grid) { - if (grid.length == 0 || grid[0].length == 0) { - return 0; - } - set = new HashSet<>(); - boolean[][] visited = new boolean[grid.length][grid[0].length]; - for (int i = 0; i < grid.length; i++) { - for (int j = 0; j < grid[i].length; j++) { - if (!visited[i][j]) { - StringBuilder sb = new StringBuilder(); - dfs(grid, i, j, visited, sb, 0); - if (sb.length() > 0) { - set.add(sb.toString()); - } + int rows = grid.length; + int cols = grid[0].length; + boolean[][] visited = new boolean[rows][cols]; + Set islands = new HashSet<>(); + for (int row = 0; row < rows; row++) { + for (int col = 0; col < cols; col++) { + StringBuilder currIsland = new StringBuilder(); + dfs(grid, row, col, visited, currIsland, '0'); + if (currIsland.length() == 0) { + continue; } + islands.add(currIsland.toString()); } } - return set.size(); + return islands.size(); } - private void dfs(int[][] grid, int x, int y, boolean[][] visited, StringBuilder sb, int currDir) { - if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] != 1 || visited[x][y]) { + private void dfs(int[][] grid, int row, int col, boolean[][] visited, StringBuilder currIsland, char direction) { + if (row < 0 || row >= grid.length || col < 0 || col >= grid[0].length) { return; } - sb.append(currDir); - visited[x][y] = true; - int curr = 1; - for (int[] dir : dirs) { - int newX = x + dir[0]; - int newY = y + dir[1]; - dfs(grid, newX, newY, visited, sb, curr++); + if (visited[row][col] || grid[row][col] == 0) { + return; } - sb.append(0); + visited[row][col] = true; + currIsland.append(direction); + dfs(grid, row + 1, col, visited, currIsland, 'D'); + dfs(grid, row - 1, col, visited, currIsland, 'U'); + dfs(grid, row, col + 1, visited, currIsland, 'R'); + dfs(grid, row, col - 1, visited, currIsland, 'L'); + currIsland.append('0'); } } From b80526b3fcc2121cc770e09083d6b4e8b44742b7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 27 Sep 2022 06:38:56 -0700 Subject: [PATCH 0847/1640] Create Perfect Rectangle.java --- Hard/Perfect Rectangle.java | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Hard/Perfect Rectangle.java diff --git a/Hard/Perfect Rectangle.java b/Hard/Perfect Rectangle.java new file mode 100644 index 00000000..fb79a5e3 --- /dev/null +++ b/Hard/Perfect Rectangle.java @@ -0,0 +1,41 @@ +class Solution { + public boolean isRectangleCover(int[][] rectangles) { + int x1 = Integer.MAX_VALUE; + int x2 = Integer.MIN_VALUE; + int y1 = Integer.MAX_VALUE; + int y2 = Integer.MIN_VALUE; + Set set = new HashSet(); + int totalArea = 0; + for (int[] rectangle : rectangles) { + x1 = Math.min(rectangle[0], x1); + y1 = Math.min(rectangle[1], y1); + x2 = Math.max(rectangle[2], x2); + y2 = Math.max(rectangle[3], y2); + totalArea += (rectangle[2] - rectangle[0]) * (rectangle[3] - rectangle[1]); + String s1 = rectangle[0] + " " + rectangle[1]; + String s2 = rectangle[0] + " " + rectangle[3]; + String s3 = rectangle[2] + " " + rectangle[3]; + String s4 = rectangle[2] + " " + rectangle[1]; + if (!set.add(s1)) { + set.remove(s1); + } + if (!set.add(s2)) { + set.remove(s2); + } + if (!set.add(s3)) { + set.remove(s3); + } + if (!set.add(s4)) { + set.remove(s4); + } + } + if (!set.contains(x1 + " " + y1) || + !set.contains(x1 + " " + y2) || + !set.contains(x2 + " " + y1) || + !set.contains(x2 + " " + y2) || + set.size() != 4) { + return false; + } + return totalArea == (x2 - x1) * (y2 - y1); + } +} From 4841f87e74ad093d4b02623b77b68d59598e61b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 27 Sep 2022 13:46:38 -0700 Subject: [PATCH 0848/1640] Create Minimum Time to Collect All Apples in a Tree.java --- ... Time to Collect All Apples in a Tree.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Minimum Time to Collect All Apples in a Tree.java diff --git a/Medium/Minimum Time to Collect All Apples in a Tree.java b/Medium/Minimum Time to Collect All Apples in a Tree.java new file mode 100644 index 00000000..24feb762 --- /dev/null +++ b/Medium/Minimum Time to Collect All Apples in a Tree.java @@ -0,0 +1,25 @@ +class Solution { + public int minTime(int n, int[][] edges, List hasApple) { + Map> tree = new HashMap<>(); + for (int[] edge : edges) { + tree.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); + tree.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); + } + Set visited = new HashSet<>(); + return dfs(0, hasApple, visited, tree); + } + + private int dfs(int node, List hasApple, Set visited, Map> tree) { + visited.add(node); + int result = 0; + for (Integer child : tree.getOrDefault(node, new HashSet<>())) { + if (!visited.contains(child)) { + result += dfs(child, hasApple, visited, tree); + } + } + if ((result > 0 || hasApple.get(node)) && node != 0) { + result += 2; + } + return result; + } +} From fa57fa7c71da665f8069a858fe64778b02461f4e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 27 Sep 2022 14:46:35 -0700 Subject: [PATCH 0849/1640] Create Max Points on a Line.java --- Hard/Max Points on a Line.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/Max Points on a Line.java diff --git a/Hard/Max Points on a Line.java b/Hard/Max Points on a Line.java new file mode 100644 index 00000000..7368488e --- /dev/null +++ b/Hard/Max Points on a Line.java @@ -0,0 +1,26 @@ +class Solution { + public int maxPoints(int[][] points) { + int max = 0; + for (int i = 0; i < points.length - 1; i++) { + Map map = new HashMap<>(); + for (int j = i + 1; j < points.length; j++) { + double slope = calculateSlope(points[i], points[j]); + map.put(slope, map.getOrDefault(slope, 0) + 1); + max = Math.max(max, map.get(slope)); + } + } + return max + 1; + } + + private double calculateSlope(int[] p1, int[] p2) { + double y = (p2[1] - p1[1]) * 1.0; + double x = (p2[0] - p1[0]) * 1.0; + if (x == 0) { + return Double.NaN; + } + if(y == 0) { + return 0.0; + } + return ((double) y * 1.0) / x; + } +} From e853f815fc52a6608f2dc1c0cc58d80a01e9f839 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 27 Sep 2022 19:36:54 -0700 Subject: [PATCH 0850/1640] Update Serialize and Deserialize N-ary Tree.java --- .../Serialize and Deserialize N-ary Tree.java | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/Hard/Serialize and Deserialize N-ary Tree.java b/Hard/Serialize and Deserialize N-ary Tree.java index 29d46233..d9df1fa3 100644 --- a/Hard/Serialize and Deserialize N-ary Tree.java +++ b/Hard/Serialize and Deserialize N-ary Tree.java @@ -16,48 +16,62 @@ public Node(int _val, List _children) { } }; */ + class Codec { - // Encodes a tree to a single string. - private final String SEPARATOR = ","; - private final String NULL_SEPARATOR = "#"; - public String serialize(Node root) { - StringBuilder sb = new StringBuilder(); - serializeHelper(root, sb); - return sb.toString(); - } - private void serializeHelper(Node root, StringBuilder sb) { + private static final String SEPARATOR = ","; + private static final String NULL_NODE = "X"; + + public String serialize(Node root) { if (root == null) { - sb.append(NULL_SEPARATOR).append(SEPARATOR); + return NULL_NODE; } - else { - sb.append(root.val).append(SEPARATOR).append(root.children.size()).append(SEPARATOR); - for (Node child : root.children) { - serializeHelper(child, sb); + StringBuilder sb = new StringBuilder(); + Queue queue = new LinkedList<>(); + queue.add(root); + queue.add(null); + while (!queue.isEmpty()) { + int size = queue.size(); + for (int i = 0; i < size; i++) { + Node removed = queue.remove(); + if (removed == null) { + sb.append(NULL_NODE).append(SEPARATOR); + break; + } + for (Node child : removed.children) { + queue.add(child); + } + queue.add(null); + sb.append(removed.val).append(SEPARATOR); } } + sb.deleteCharAt(sb.length() - 1); + return sb.toString(); } // Decodes your encoded data to tree. public Node deserialize(String data) { - Deque dq = new ArrayDeque<>(Arrays.asList(data.split(SEPARATOR))); - return deserializeHelper(dq); - } - - private Node deserializeHelper(Deque dq) { - String removed = dq.removeFirst(); - if (removed.equals(NULL_SEPARATOR)) { + String[] splits = data.split(SEPARATOR); + if (splits[0].equals(NULL_NODE)) { return null; } - else { - Node node = new Node(Integer.parseInt(removed), new ArrayList<>()); - int childCount = Integer.parseInt(dq.removeFirst()); - for (int i = 0; i < childCount; i++) { - node.children.add(deserializeHelper(dq)); + Node root = new Node(Integer.parseInt(splits[0])); + Queue queue = new LinkedList<>(); + queue.add(root); + int idx = 2; + while (idx < splits.length) { + Node node = queue.remove(); + List children = new ArrayList<>(); + while (!splits[idx].equals(NULL_NODE)) { + Node child = new Node(Integer.parseInt(splits[idx++])); + children.add(child); + queue.add(child); } - return node; + idx++; + node.children = children; } + return root; } } From 48560d5ffd3000dc4da87b99a0810326b6e9a438 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 28 Sep 2022 17:19:06 -0700 Subject: [PATCH 0851/1640] Update Find K Closest Elements.java --- Medium/Find K Closest Elements.java | 41 ++++++++++++++++++++++++----- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/Medium/Find K Closest Elements.java b/Medium/Find K Closest Elements.java index 2e49a608..eeddacba 100644 --- a/Medium/Find K Closest Elements.java +++ b/Medium/Find K Closest Elements.java @@ -1,11 +1,38 @@ class Solution { public List findClosestElements(int[] arr, int k, int x) { - return Arrays.stream(arr) - .mapToObj(e -> new int[]{e, Math.abs(e - x)}) - .sorted((o1, o2) -> (o1[1] - o2[1] != 0) ? (o1[1] - o2[1]) : o1[0] - o2[0]) - .map(e -> e[0]) - .limit(k) - .sorted() - .collect(Collectors.toList()); + List result = new ArrayList<>(); + if (arr.length == k) { + for (int num : arr) { + result.add(num); + } + return result; + } + int left = 0; + int right = arr.length; + while (left < right) { + int mid = (left + right) / 2; + if (arr[mid] >= x) { + right = mid; + } else { + left = mid + 1; + } + } + left--; + right = left + 1; + while (right - left - 1 < k) { + if (left == -1) { + right++; + continue; + } + if (right == arr.length || Math.abs(arr[left] - x) <= Math.abs(arr[right] - x)) { + left--; + } else { + right++; + } + } + for (int i = left + 1; i < right; i++) { + result.add(arr[i]); + } + return result; } } From bbdb48eee960a903b785252257b5b4dfd073e8c8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 29 Sep 2022 15:34:16 -0700 Subject: [PATCH 0852/1640] Create Lexicographical Numbers.java --- Medium/Lexicographical Numbers.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Lexicographical Numbers.java diff --git a/Medium/Lexicographical Numbers.java b/Medium/Lexicographical Numbers.java new file mode 100644 index 00000000..c0ccab5e --- /dev/null +++ b/Medium/Lexicographical Numbers.java @@ -0,0 +1,19 @@ +class Solution { + public List lexicalOrder(int n) { + List result = new ArrayList<>(); + for (int i = 1; i < 10; i++) { + dfs(i, n, result); + } + return result; + } + + private void dfs(int curr, int n, List result) { + if (curr > n) { + return; + } + result.add(curr); + for (int i = 0; i < 10; i++) { + dfs(10 * curr + i, n, result); + } + } +} From 696f10ba796cd504f68052ca2493a6572c503e1e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 29 Sep 2022 16:48:19 -0700 Subject: [PATCH 0853/1640] Update Shortest Completing Word.java --- Easy/Shortest Completing Word.java | 49 +++++++++++++++--------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/Easy/Shortest Completing Word.java b/Easy/Shortest Completing Word.java index 1be5e2f8..5e9c9cb3 100644 --- a/Easy/Shortest Completing Word.java +++ b/Easy/Shortest Completing Word.java @@ -1,33 +1,34 @@ class Solution { public String shortestCompletingWord(String licensePlate, String[] words) { - Map licenseMap = new HashMap<>(); - for (Character c : licensePlate.toCharArray()) { - if (Character.isLetter(c)) { - licenseMap.put(Character.toLowerCase(c), licenseMap.getOrDefault(Character.toLowerCase(c), 0) + 1); - } - } - int minLength = Integer.MAX_VALUE; - int minLengthIdx = -1; + int shortestWordIdx = -1; + Map licensePlateFrequency = getFrequencyMap(licensePlate); for (int i = 0; i < words.length; i++) { - Map copyMap = new HashMap<>(licenseMap); - boolean found = false; - for (Character c : words[i].toCharArray()) { - if (copyMap.containsKey(Character.toLowerCase(c))) { - copyMap.put(Character.toLowerCase(c), copyMap.get(Character.toLowerCase(c)) - 1); - if (copyMap.get(Character.toLowerCase(c)) == 0) { - copyMap.remove(Character.toLowerCase(c)); - } - } - if (copyMap.size() == 0) { - found = true; - break; + if (canComplete(licensePlateFrequency, words[i])) { + if (shortestWordIdx == -1 || words[i].length() < words[shortestWordIdx].length()) { + shortestWordIdx = i; } } - if (found && words[i].length() < minLength) { - minLength = words[i].length(); - minLengthIdx = i; + } + return words[shortestWordIdx]; + } + + private boolean canComplete(Map licensePlateFrequency, String word) { + Map wordFrequency = getFrequencyMap(word); + for (Character key : licensePlateFrequency.keySet()) { + if (wordFrequency.getOrDefault(key, 0) < licensePlateFrequency.get(key)) { + return false; + } + } + return true; + } + + private Map getFrequencyMap(String s) { + Map map = new HashMap<>(); + for (char c : s.toCharArray()) { + if (Character.isLetter(c)) { + map.put(Character.toLowerCase(c), map.getOrDefault(Character.toLowerCase(c), 0) + 1); } } - return words[minLengthIdx]; + return map; } } From 236b551467bca57111e7286a4ef44f28b1719b8d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 30 Sep 2022 06:48:44 -0700 Subject: [PATCH 0854/1640] Create The Skyline Problem.java --- Hard/The Skyline Problem.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Hard/The Skyline Problem.java diff --git a/Hard/The Skyline Problem.java b/Hard/The Skyline Problem.java new file mode 100644 index 00000000..92c9e516 --- /dev/null +++ b/Hard/The Skyline Problem.java @@ -0,0 +1,27 @@ +class Solution { + public List> getSkyline(int[][] buildings) { + List> result = new ArrayList<>(); + List heights = new ArrayList<>(); + for (int[] building : buildings) { + heights.add(new int[]{building[0], -1 * building[2]}); + heights.add(new int[]{building[1], 1 * building[2]}); + } + Collections.sort(heights, (a, b) -> a[0] == b[0] ? a[1] - b[1] : a[0] - b[0]); + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + pq.add(0); + int previousMax = 0; + for (int[] height : heights) { + if (height[1] < 0) { + pq.add(-1 * height[1]); + } else { + pq.remove(height[1]); + } + int currentMax = pq.peek(); + if (currentMax != previousMax) { + result.add(Arrays.asList(height[0], currentMax)); + previousMax = currentMax; + } + } + return result; + } +} From 8368cad9032a47e77b274f6eb185dcfa11c05428 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 30 Sep 2022 16:32:17 -0700 Subject: [PATCH 0855/1640] Update Check If It Is a Straight Line.java --- Easy/Check If It Is a Straight Line.java | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/Easy/Check If It Is a Straight Line.java b/Easy/Check If It Is a Straight Line.java index 18798145..174053a3 100644 --- a/Easy/Check If It Is a Straight Line.java +++ b/Easy/Check If It Is a Straight Line.java @@ -1,24 +1,16 @@ class Solution { public boolean checkStraightLine(int[][] coordinates) { - if (coordinates.length <= 2) { - return true; - } - int[] p1 = coordinates[0]; - int[] p2 = coordinates[1]; - for (int i = 2; i < coordinates.length; i++) { - if (!isCollinear(coordinates[i], p1, p2)) { + int xOne = coordinates[1][0]; + int yOne = coordinates[1][1]; + int dx = xOne - coordinates[0][0]; + int dy = yOne - coordinates[0][1]; + for (int[] coordinate : coordinates) { + int x = coordinate[0]; + int y = coordinate[1]; + if (dx * (y - yOne) != dy * (x - xOne)) { return false; } } return true; } - - private boolean isCollinear(int[] c, int[] p1, int[] p2) { - if (p1[0] == c[0] || p2[0] == c[0]) { - return false; - } - int slope1 = (p1[1] - c[1]) / (p1[0] - c[0]); - int slope2 = (p2[1] - c[1]) / (p2[0] - c[0]); - return slope1 == slope2; - } } From 9d349f127fa17e03a2255cda117d464dc9931603 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 1 Oct 2022 08:41:07 -0700 Subject: [PATCH 0856/1640] Update Decode Ways.java --- Medium/Decode Ways.java | 76 +++++++++++++---------------------------- 1 file changed, 23 insertions(+), 53 deletions(-) diff --git a/Medium/Decode Ways.java b/Medium/Decode Ways.java index cbba3c77..a959c15a 100644 --- a/Medium/Decode Ways.java +++ b/Medium/Decode Ways.java @@ -1,58 +1,28 @@ class Solution { - int[] memo; - public int numDecodings(String s) { - if (s.length() == 0) { - return 0; - } - - memo = new int[s.length() + 1]; - Arrays.fill(memo, -1); - - return helperDp(0, s); + + public int numDecodings(String s) { + Map map = new HashMap<>(); + return helper(s, 0, map); + } + + private int helper(String s, int idx, Map map) { + if (map.containsKey(idx)) { + return map.get(idx); } - - private int helperDp(int idx, String s) { - if (memo[idx] > -1) { - return memo[idx]; - } - - int n = s.length(); - if (idx == n) { - return memo[idx] = 1; - } - - if (s.charAt(idx) == '0') { - return memo[idx] = 0; - } - - int temp = helperRecursive(idx + 1, s); - memo[idx + 1] = temp; - - if (idx < n - 1 && (s.charAt(idx) == '1' || (s.charAt(idx) == '2' && s.charAt(idx + 1) < '7'))) { - memo[idx + 2] = helperRecursive(idx + 2, s); - temp += memo[idx + 2]; - } - - return temp; + if (idx == s.length()) { + return 1; } - - private int helperRecursive(int idx, String s) { - int n = s.length(); - - if (idx == n) { - return 1; - } - - if (s.charAt(idx) == '0') { - return 0; - } - - int temp = helperRecursive(idx + 1, s); - - if (idx < n - 1 && (s.charAt(idx) == '1' || (s.charAt(idx) == '2' && s.charAt(idx + 1) < '7'))) { - temp += helperRecursive(idx + 2, s); - } - - return temp; + if (s.charAt(idx) == '0') { + return 0; } + if (idx == s.length() - 1) { + return 1; + } + int result = helper(s, idx + 1, map); + if (Integer.parseInt(s.substring(idx, idx + 2)) <= 26) { + result += helper(s, idx + 2, map); + } + map.put(idx, result); + return result; + } } From b8ff7834093621c31a36732b1b1c414dbc44120d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 1 Oct 2022 08:59:04 -0700 Subject: [PATCH 0857/1640] Update Minimum Time Difference.java --- Medium/Minimum Time Difference.java | 38 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/Medium/Minimum Time Difference.java b/Medium/Minimum Time Difference.java index a330bbea..b8ba42a1 100644 --- a/Medium/Minimum Time Difference.java +++ b/Medium/Minimum Time Difference.java @@ -1,23 +1,21 @@ class Solution { - public int findMinDifference(List timePoints) { - int[] mins = new int[timePoints.size()]; - int i = 0; - for (String s : timePoints) { - int hr = Integer.parseInt(s.split(":")[0]); - int ms = Integer.parseInt(s.split(":")[1]); - - mins[i] = hr*60 + ms; - i++; - } - - Arrays.sort(mins); - - int minTime = Integer.MAX_VALUE; - - for(int j=1;j timePoints) { + List minutes = new ArrayList<>(); + for (String timePoint : timePoints) { + minutes.add( + Integer.parseInt(timePoint.split(":")[0]) * 60 + + Integer.parseInt(timePoint.split(":")[1])); } + Collections.sort(minutes); + int prev = Integer.MIN_VALUE; + int minDiff = Integer.MAX_VALUE; + for (int minute : minutes) { + if (prev != Integer.MIN_VALUE) { + minDiff = Math.min(minDiff, minute - prev); + } + prev = minute; + } + minDiff = Math.min(minDiff, (24 * 60 - minutes.get(minutes.size() - 1) + minutes.get(0))); + return minDiff; + } } From d40ee27cfb3eb3a1fdcf29cef25a8bf111e79098 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 1 Oct 2022 11:12:26 -0700 Subject: [PATCH 0858/1640] Create Remove Letter To Equalize Frequency.java --- Easy/Remove Letter To Equalize Frequency.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Easy/Remove Letter To Equalize Frequency.java diff --git a/Easy/Remove Letter To Equalize Frequency.java b/Easy/Remove Letter To Equalize Frequency.java new file mode 100644 index 00000000..05c950c2 --- /dev/null +++ b/Easy/Remove Letter To Equalize Frequency.java @@ -0,0 +1,27 @@ +class Solution { + public boolean equalFrequency(String word) { + int[] frequency = new int[26]; + int maxFrequency = 0; + for (char c : word.toCharArray()) { + frequency[c - 'a']++; + maxFrequency = Math.max(maxFrequency, frequency[c - 'a']); + } + int maxCount = 0; + int maxMinusOneCount = 0; + for (int i = 0; i < 26; i++) { + if (frequency[i] == 0) { + continue; + } + if (frequency[i] == maxFrequency) { + maxCount++; + } + if (frequency[i] == maxFrequency - 1) { + maxMinusOneCount++; + } + if (frequency[i] < maxFrequency - 1) { + return false; + } + } + return maxMinusOneCount == 1 || maxCount == 1 || (maxMinusOneCount == 0 && maxFrequency == 1); + } +} From 78c258d69c19fde8002901d3f12b979e07ba4cac Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 1 Oct 2022 11:29:34 -0700 Subject: [PATCH 0859/1640] Create Longest Uploaded Prefix.java --- Medium/Longest Uploaded Prefix.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/Longest Uploaded Prefix.java diff --git a/Medium/Longest Uploaded Prefix.java b/Medium/Longest Uploaded Prefix.java new file mode 100644 index 00000000..f7d3f6f1 --- /dev/null +++ b/Medium/Longest Uploaded Prefix.java @@ -0,0 +1,28 @@ +class LUPrefix { + + private int longestPrefixIndex; + private boolean[] uploaded; + + public LUPrefix(int n) { + this.uploaded = new boolean[n]; + this.longestPrefixIndex = 0; + } + + public void upload(int video) { + uploaded[video - 1] = true; + while (longestPrefixIndex < uploaded.length && uploaded[longestPrefixIndex]) { + longestPrefixIndex++; + } + } + + public int longest() { + return longestPrefixIndex; + } +} + +/** + * Your LUPrefix object will be instantiated and called as such: + * LUPrefix obj = new LUPrefix(n); + * obj.upload(video); + * int param_2 = obj.longest(); + */ From e620caa766643dc6ef4b2d05a7637bf8c03d8ef5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Oct 2022 06:27:30 -0700 Subject: [PATCH 0860/1640] Create Number of Common Factors.java --- Easy/Number of Common Factors.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/Number of Common Factors.java diff --git a/Easy/Number of Common Factors.java b/Easy/Number of Common Factors.java new file mode 100644 index 00000000..4ecdf04e --- /dev/null +++ b/Easy/Number of Common Factors.java @@ -0,0 +1,12 @@ +class Solution { + public int commonFactors(int a, int b) { + int count = 0; + int minNum = Math.min(a, b); + for (int i = 1; i <= minNum / 2; i++) { + if (a % i == 0 && b % i == 0) { + count++; + } + } + return count + (a % minNum == 0 && b % minNum == 0 ? 1 : 0); + } +} From 3bdc3837cf233ccea91024ebf4ca417e759dbc47 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Oct 2022 06:32:59 -0700 Subject: [PATCH 0861/1640] Create Maximum Sum of an Hourglass.java --- Medium/Maximum Sum of an Hourglass.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Medium/Maximum Sum of an Hourglass.java diff --git a/Medium/Maximum Sum of an Hourglass.java b/Medium/Maximum Sum of an Hourglass.java new file mode 100644 index 00000000..c819295a --- /dev/null +++ b/Medium/Maximum Sum of an Hourglass.java @@ -0,0 +1,22 @@ +class Solution { + + private static final int[][] coordinates = {{0, 0}, {0, 1}, {0, 2}, {1, 1}, {2, 0}, {2, 1}, {2, 2}}; + + public int maxSum(int[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + int highestHourglassSum = 0; + for (int i = 0; i < rows - 2; i++) { + for (int j = 0; j < cols - 2; j++) { + int currSum = 0; + for (int[] coordinate : coordinates) { + int x = i + coordinate[0]; + int y = j + coordinate[1]; + currSum += grid[x][y]; + } + highestHourglassSum = Math.max(highestHourglassSum, currSum); + } + } + return highestHourglassSum; + } +} From bd54e0b674dddf3c9f5bf370929912a67d49adc6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Oct 2022 18:05:09 -0700 Subject: [PATCH 0862/1640] Create Minimum Time to Make Rope Colorful.java --- .../Minimum Time to Make Rope Colorful.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Minimum Time to Make Rope Colorful.java diff --git a/Medium/Minimum Time to Make Rope Colorful.java b/Medium/Minimum Time to Make Rope Colorful.java new file mode 100644 index 00000000..97cc34e1 --- /dev/null +++ b/Medium/Minimum Time to Make Rope Colorful.java @@ -0,0 +1,19 @@ +class Solution { + public int minCost(String colors, int[] neededTime) { + int totalTime = 0; + int left = 0; + int right = 0; + while (right < colors.length()) { + int currTotal = 0; + int currMax = 0; + while (left < neededTime.length && colors.charAt(right) == colors.charAt(left)) { + currTotal += neededTime[left]; + currMax = Math.max(currMax, neededTime[left]); + left++; + } + totalTime += currTotal - currMax; + right = left; + } + return totalTime; + } +} From bfb2be8bdc836d9f9a791680e445017af32c62bd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 5 Oct 2022 06:48:30 -0700 Subject: [PATCH 0863/1640] Update Add One Row to Tree.java --- Medium/Add One Row to Tree.java | 66 ++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/Medium/Add One Row to Tree.java b/Medium/Add One Row to Tree.java index 06a5e253..38075d28 100644 --- a/Medium/Add One Row to Tree.java +++ b/Medium/Add One Row to Tree.java @@ -4,40 +4,48 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public TreeNode addOneRow(TreeNode root, int v, int d) { - if (d == 1) { - TreeNode t = new TreeNode(v); - t.left = root; - return t; - } - - helper(root, v, d, 1); - return root; + public TreeNode addOneRow(TreeNode root, int val, int depth) { + if (depth == 1) { + TreeNode newRoot = new TreeNode(val); + newRoot.left = root; + return newRoot; } - - private void helper(TreeNode root, int v, int d, int currLevel) { - if (currLevel == d-1) { - TreeNode t1 = new TreeNode(v); - TreeNode t2 = new TreeNode(v); - - t1.left = root.left; - t2.right = root.right; - root.left = t1; - root.right = t2; - - return; - } - - if (root.left != null) { - helper(root.left, v, d, currLevel + 1); + int currDepth = 1; + Queue queue = new LinkedList<>(); + queue.add(root); + while (currDepth < depth - 1) { + Queue temp = new LinkedList<>(); + while (!queue.isEmpty()) { + TreeNode removed = queue.remove(); + if (removed.left != null) { + temp.add(removed.left); } - - if (root.right != null) { - helper(root.right, v, d, currLevel + 1); + if (removed.right != null) { + temp.add(removed.right); } + } + queue = temp; + currDepth++; + } + while (!queue.isEmpty()) { + TreeNode node = queue.remove(); + TreeNode temp = node.left; + node.left = new TreeNode(val); + node.left.left = temp; + temp = node.right; + node.right = new TreeNode(val); + node.right.right = temp; } + return root; + } } From 6f6b8f72fdf887665ebf3705c86e744008b5e16e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 7 Oct 2022 07:12:02 -0700 Subject: [PATCH 0864/1640] Update My Calendar II.java --- Medium/My Calendar II.java | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Medium/My Calendar II.java b/Medium/My Calendar II.java index 4eb4e177..5553a51c 100644 --- a/Medium/My Calendar II.java +++ b/Medium/My Calendar II.java @@ -1,18 +1,20 @@ class MyCalendarTwo { - TreeMap map; + + private TreeMap delta; + public MyCalendarTwo() { - map = new TreeMap<>(); + this.delta = new TreeMap<>(); } public boolean book(int start, int end) { - map.put(start, map.getOrDefault(start, 0) + 1); - map.put(end, map.getOrDefault(end, 0) - 1); - int eventCount = 0; - for (int val : map.values()) { - eventCount += val; - if (eventCount >= 3) { - map.put(start, map.get(start) - 1); - map.put(end, map.get(end) + 1); + delta.put(start, delta.getOrDefault(start, 0) + 1); + delta.put(end, delta.getOrDefault(end, 0) - 1); + int active = 0; + for (int d : delta.values()) { + active += d; + if (active >= 3) { + delta.put(start, delta.get(start) - 1); + delta.put(end, delta.get(end) + 1); return false; } } From dc1504aaec81030c4c2cb03b6c0befd89ffe8a16 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 7 Oct 2022 07:14:45 -0700 Subject: [PATCH 0865/1640] Create My Calendar III.java --- Hard/My Calendar III.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/My Calendar III.java diff --git a/Hard/My Calendar III.java b/Hard/My Calendar III.java new file mode 100644 index 00000000..47a51702 --- /dev/null +++ b/Hard/My Calendar III.java @@ -0,0 +1,26 @@ +class MyCalendarThree { + + private TreeMap delta; + + public MyCalendarThree() { + this.delta = new TreeMap<>(); + } + + public int book(int start, int end) { + delta.put(start, delta.getOrDefault(start, 0) + 1); + delta.put(end, delta.getOrDefault(end, 0) - 1); + int activeEvents = 0; + int maxEvents = 0; + for (int d : delta.values()) { + activeEvents += d; + maxEvents = Math.max(maxEvents, activeEvents); + } + return maxEvents; + } +} + +/** + * Your MyCalendarThree object will be instantiated and called as such: + * MyCalendarThree obj = new MyCalendarThree(); + * int param_1 = obj.book(start,end); + */ From 85b3cd517cdfe88a37db7988202f3199879c641c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 7 Oct 2022 07:59:54 -0700 Subject: [PATCH 0866/1640] Update Game of Life.java --- Medium/Game of Life.java | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/Medium/Game of Life.java b/Medium/Game of Life.java index b1cc147d..4341ee13 100644 --- a/Medium/Game of Life.java +++ b/Medium/Game of Life.java @@ -1,39 +1,48 @@ class Solution { - int[][] dirs = {{1, 0}, {0, 1}, {1, 1}, {-1, -1}, {-1, 0}, {0, -1}, {1, -1}, {-1, 1}}; + + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}; + public void gameOfLife(int[][] board) { int rows = board.length; int cols = board[0].length; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { - int count = getLiveNeighbourCount(board, i, j); + int liveNeighborCount = getLiveNeighbours(board, i, j); if (board[i][j] == 1) { - if (count < 2 || count > 3) { - board[i][j] = -1; - } - } - else { - if (count == 3) { + if (liveNeighborCount < 2 || liveNeighborCount > 3) { board[i][j] = 2; } + } else { + if (liveNeighborCount == 3) { + board[i][j] = 3; + } } } } for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { - board[i][j] = board[i][j] > 0 ? 1 : 0; + if (board[i][j] == 2) { + board[i][j] = 0; + } else if (board[i][j] == 3) { + board[i][j] = 1; + } } } } - private int getLiveNeighbourCount(int[][] board, int x, int y) { + private static int getLiveNeighbours(int[][] board, int i, int j) { int count = 0; - for (int[] dir : dirs) { - int newX = x + dir[0]; - int newY = y + dir[1]; - if (newX >= 0 && newX < board.length && newY >= 0 && newY < board[0].length && Math.abs(board[newX][newY]) == 1) { + for (int[] dir : DIRS) { + int x = i + dir[0]; + int y = j + dir[1]; + if (isValidCell(board, x, y) && (board[x][y] == 1 || board[x][y] == 2)) { count++; } } return count; } + + private static boolean isValidCell(int[][] board, int i, int j) { + return i >= 0 && j >= 0 && i < board.length && j < board[0].length; + } } From 5f0156f2c6d34365721385a850f6cc54265476b0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 7 Oct 2022 12:57:26 -0700 Subject: [PATCH 0867/1640] Update Maximum Number of Occurrences of a Substring.java --- ... Number of Occurrences of a Substring.java | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/Medium/Maximum Number of Occurrences of a Substring.java b/Medium/Maximum Number of Occurrences of a Substring.java index 6d957c4f..f0f56202 100644 --- a/Medium/Maximum Number of Occurrences of a Substring.java +++ b/Medium/Maximum Number of Occurrences of a Substring.java @@ -1,31 +1,24 @@ class Solution { public int maxFreq(String s, int maxLetters, int minSize, int maxSize) { - int n = s.length(); - if (minSize > n) { - return 0; - } - Map substringMap = new HashMap<>(); - for (int i = 0; i < n; i++) { - Map charMap = new HashMap<>(); - for (int j = 0; j < maxSize; j++) { - if (i + j >= n) { - break; - } - charMap.put(s.charAt(i + j), charMap.getOrDefault(s.charAt(i + j), 0) + 1); - if (charMap.size() > maxLetters) { - break; - } - if (j >= minSize - 1) { - substringMap.put( - s.substring(i, i + j + 1), substringMap.getOrDefault(s.substring(i, i + j + 1), 0) + 1 - ); + Map letterFrequencyMap = new HashMap<>(); + Map substringFrequencyMap = new HashMap<>(); + int start = 0; + int maxCount = 0; + for (int i = 0; i < s.length(); i++) { + letterFrequencyMap.put(s.charAt(i), letterFrequencyMap.getOrDefault(s.charAt(i), 0) + 1); + while (i - start + 1 > minSize || letterFrequencyMap.size() > maxLetters) { + letterFrequencyMap.put(s.charAt(start), letterFrequencyMap.getOrDefault(s.charAt(start), 0) - 1); + if (letterFrequencyMap.get(s.charAt(start)) == 0) { + letterFrequencyMap.remove(s.charAt(start)); } + start++; + } + if (i - start + 1 == minSize) { + String currSubstring = s.substring(start, i + 1); + substringFrequencyMap.put(currSubstring, substringFrequencyMap.getOrDefault(currSubstring, 0) + 1); + maxCount = Math.max(maxCount, substringFrequencyMap.get(currSubstring)); } } - int maxFreqCount = 0; - for (String substr : substringMap.keySet()) { - maxFreqCount = Math.max(maxFreqCount, substringMap.get(substr)); - } - return maxFreqCount; + return maxCount; } } From 046236417c41462d88d1f3d69476a10a15c05668 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 8 Oct 2022 10:14:32 -0700 Subject: [PATCH 0868/1640] Update All Possible Full Binary Trees.java --- Medium/All Possible Full Binary Trees.java | 62 +++++++++++----------- 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/Medium/All Possible Full Binary Trees.java b/Medium/All Possible Full Binary Trees.java index 7c7853c4..868b8271 100644 --- a/Medium/All Possible Full Binary Trees.java +++ b/Medium/All Possible Full Binary Trees.java @@ -4,40 +4,42 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public List allPossibleFBT(int N) { - List ans = new LinkedList<>(); - if (N % 2 == 0) { - return ans; - } - - return helper(N); + public List allPossibleFBT(int n) { + Map> dp = new HashMap<>(); + return allPossibleFBTHelper(n, dp); + } + + private List allPossibleFBTHelper(int n, Map> dp) { + if (dp.containsKey(n)) { + return dp.get(n); } - - private List helper(int N) { - List ans = new LinkedList<>(); - if (N == 1) { - ans.add(new TreeNode(0)); - return ans; - } - - for (int i = 1; i <= N - 2; i += 2) { - List left = helper(i); - List right = helper(N - i - 1); - - for (TreeNode leftNode : left) { - for (TreeNode rightNode : right) { - TreeNode node = new TreeNode(0); - node.left = leftNode; - node.right = rightNode; - ans.add(node); - } - } + List result = new ArrayList<>(); + if (n == 1) { + result.add(new TreeNode(0)); + } else if (n % 2 == 1) { + for (int i = 0; i < n; i++) { + int j = n - 1 - i; + for (TreeNode left : allPossibleFBTHelper(i, dp)) { + for (TreeNode right : allPossibleFBTHelper(j, dp)) { + TreeNode root = new TreeNode(0); + root.left = left; + root.right = right; + result.add(root); + } } - - return ans; + } } + dp.put(n, result); + return dp.get(n); + } } From 7eb7104196a33fd04a35cae9335c495d92a4f104 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Oct 2022 06:48:44 -0700 Subject: [PATCH 0869/1640] Update Two Sum IV - Input is a BST.java --- Easy/Two Sum IV - Input is a BST.java | 31 +++++++++++++++++++-------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/Easy/Two Sum IV - Input is a BST.java b/Easy/Two Sum IV - Input is a BST.java index 5f38ca2a..c55e4b47 100644 --- a/Easy/Two Sum IV - Input is a BST.java +++ b/Easy/Two Sum IV - Input is a BST.java @@ -15,18 +15,31 @@ */ class Solution { public boolean findTarget(TreeNode root, int k) { - Set set = new HashSet<>(); - return helper(root, k, set); - } - - private boolean helper(TreeNode root, int k, Set set) { if (root == null) { return false; } - if (set.contains(k - root.val)) { - return true; + Stack stack = new Stack<>(); + Set set = new HashSet<>(); + while (root != null) { + if (set.contains(k - root.val)) { + return true; + } + stack.push(root); + set.add(root.val); + root = root.left; + } + while (!stack.isEmpty()) { + TreeNode removed = stack.pop(); + TreeNode rightNode = removed.right; + while (rightNode != null) { + if (set.contains(k - rightNode.val)) { + return true; + } + stack.push(rightNode); + set.add(rightNode.val); + rightNode = rightNode.left; + } } - set.add(root.val); - return helper(root.left, k, set) || helper(root.right, k, set); + return false; } } From d3a44869b06f84365f472ba1bb3bc35c71c51b28 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Oct 2022 06:55:04 -0700 Subject: [PATCH 0870/1640] Create The Employee That Worked on the Longest Task.java --- ...loyee That Worked on the Longest Task.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/The Employee That Worked on the Longest Task.java diff --git a/Easy/The Employee That Worked on the Longest Task.java b/Easy/The Employee That Worked on the Longest Task.java new file mode 100644 index 00000000..e4d30e69 --- /dev/null +++ b/Easy/The Employee That Worked on the Longest Task.java @@ -0,0 +1,20 @@ +class Solution { + public int hardestWorker(int n, int[][] logs) { + int maxTime = 0; + int startTime = 0; + int hardestWorkerId = 0; + for (int[] log : logs) { + int taskTime = log[1] - startTime; + startTime = log[1]; + if (taskTime > maxTime) { + maxTime = taskTime; + hardestWorkerId = log[0]; + } else if (taskTime == maxTime) { + if (hardestWorkerId > log[0]) { + hardestWorkerId = log[0]; + } + } + } + return hardestWorkerId; + } +} From 95da6a203854bcd5e958fabea7da63b088504db5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Oct 2022 06:58:02 -0700 Subject: [PATCH 0871/1640] Create Find The Original Array of Prefix Xor.java --- Medium/Find The Original Array of Prefix Xor.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Find The Original Array of Prefix Xor.java diff --git a/Medium/Find The Original Array of Prefix Xor.java b/Medium/Find The Original Array of Prefix Xor.java new file mode 100644 index 00000000..97baa6e7 --- /dev/null +++ b/Medium/Find The Original Array of Prefix Xor.java @@ -0,0 +1,11 @@ +class Solution { + public int[] findArray(int[] pref) { + int n = pref.length; + int[] result = new int[n]; + result[0] = pref[0]; + for (int i = 1; i < n; i++) { + result[i] = pref[i] ^ pref[i - 1]; + } + return result; + } +} From b66408c6a6e30817a01eb9b4d51efcdb5c6ce6aa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Oct 2022 09:49:11 -0700 Subject: [PATCH 0872/1640] Update Building H2O.java --- Concurrency/Building H2O.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Concurrency/Building H2O.java b/Concurrency/Building H2O.java index 4d2a6a84..2d2dee57 100644 --- a/Concurrency/Building H2O.java +++ b/Concurrency/Building H2O.java @@ -1,26 +1,26 @@ class H2O { - private Semaphore hydrogen; - private Semaphore oxygen; - private Semaphore mutex; + + private final Semaphore hydrogenSemaphore; + private final Semaphore oxygenSemaphore; public H2O() { - this.hydrogen = new Semaphore(2); - this.oxygen = new Semaphore(0); - this.mutex = new Semaphore(1); + this.hydrogenSemaphore = new Semaphore(2); + this.oxygenSemaphore = new Semaphore(0); } public void hydrogen(Runnable releaseHydrogen) throws InterruptedException { + + this.hydrogenSemaphore.acquire(); // releaseHydrogen.run() outputs "H". Do not change or remove this line. - this.hydrogen.acquire(); releaseHydrogen.run(); - this.oxygen.release(); + this.oxygenSemaphore.release(); } public void oxygen(Runnable releaseOxygen) throws InterruptedException { - this.mutex.acquire(); - this.oxygen.acquire(2); + + this.oxygenSemaphore.acquire(2); + // releaseOxygen.run() outputs "O". Do not change or remove this line. releaseOxygen.run(); - this.hydrogen.release(2); - this.mutex.release(); + this.hydrogenSemaphore.release(2); } } From 082e2bf1bd52a719451d2b80edf7675100e53e45 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Oct 2022 17:11:30 -0700 Subject: [PATCH 0873/1640] Update Break a Palindrome.java --- Medium/Break a Palindrome.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Medium/Break a Palindrome.java b/Medium/Break a Palindrome.java index aa82cbe7..3da29e2e 100644 --- a/Medium/Break a Palindrome.java +++ b/Medium/Break a Palindrome.java @@ -1,13 +1,14 @@ class Solution { public String breakPalindrome(String palindrome) { - char[] chars = palindrome.toCharArray(); - for (int i = 0; i < palindrome.length() / 2; i++) { - if (chars[i] > 'a') { - chars[i] = 'a'; - return String.valueOf(chars); + if (palindrome.length() == 1) { + return ""; + } + for (int i = 0; i < palindrome.length(); i++) { + if (palindrome.charAt(i) != 'a' && + (palindrome.length() % 2 == 0 || i != palindrome.length() / 2)) { + return palindrome.substring(0, i) + "a" + palindrome.substring(i + 1); } } - chars[chars.length - 1] = 'b'; - return chars.length <= 1 ? "" : String.valueOf(chars); + return palindrome.substring(0, palindrome.length() - 1) + "b"; } } From d9a8774769d44280e0c179ce128a5eb5058547ed Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 10 Oct 2022 08:00:25 -0700 Subject: [PATCH 0874/1640] Update Delete Node in a BST.java --- Medium/Delete Node in a BST.java | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Medium/Delete Node in a BST.java b/Medium/Delete Node in a BST.java index 4f9cb6eb..becc3b24 100644 --- a/Medium/Delete Node in a BST.java +++ b/Medium/Delete Node in a BST.java @@ -18,22 +18,20 @@ public TreeNode deleteNode(TreeNode root, int key) { if (root == null) { return null; } - if (root.val > key) { - root.left = deleteNode(root.left, key); - } else if (root.val < key) { + if (key > root.val) { root.right = deleteNode(root.right, key); + } else if (key < root.val) { + root.left = deleteNode(root.left, key); } else { if (root.left == null || root.right == null) { - TreeNode temp = root.left == null ? root.right : root.left; - return temp; - } else { - TreeNode inorderSuccessor = root.right; - while (inorderSuccessor.left != null) { - inorderSuccessor = inorderSuccessor.left; - } - root.val = inorderSuccessor.val; - root.right = deleteNode(root.right, inorderSuccessor.val); + return root.left == null ? root.right : root.left; + } + TreeNode inorderSuccessor = root.right; + while (inorderSuccessor.left != null) { + inorderSuccessor = inorderSuccessor.left; } + root.val = inorderSuccessor.val; + root.right = deleteNode(root.right, inorderSuccessor.val); } return root; } From 4c1d0136d73cb891a03170827bd91ff1c97e8e12 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 10 Oct 2022 15:51:11 -0700 Subject: [PATCH 0875/1640] Create Design Snake Game.java --- Medium/Design Snake Game.java | 91 +++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 Medium/Design Snake Game.java diff --git a/Medium/Design Snake Game.java b/Medium/Design Snake Game.java new file mode 100644 index 00000000..e4185474 --- /dev/null +++ b/Medium/Design Snake Game.java @@ -0,0 +1,91 @@ +class SnakeGame { + + private final int width; + private final int height; + private final Set> body; + private final Deque> bodyQueue; + private final Queue> foodQueue; + private int foodPoint; + + public SnakeGame(int width, int height, int[][] food) { + this.width = width; + this.height = height; + this.body = new HashSet<>(); + this.bodyQueue = new LinkedList<>(); + this.body.add(new Pair(0, 0)); + this.bodyQueue.add(new Pair(0, 0)); + + this.foodQueue = new LinkedList<>(); + for (int[] fd : food) { + foodQueue.add(new Pair(fd[0], fd[1])); + } + this.foodPoint = 0; + } + + public int move(String direction) { + Pair currPosition = bodyQueue.peekLast(); + Pair nextPosition = move(currPosition, direction); + if (!isSnakeAlive(nextPosition)) { + return -1; + } + if (!snakeAteFood(nextPosition)) { + body.remove(bodyQueue.pollFirst()); + bodyQueue.addLast(nextPosition); + body.add(nextPosition); + } + return foodPoint; + } + + private Pair move(Pair currPosition, String direction) { + int row = currPosition.getKey(); + int col = currPosition.getValue(); + switch (direction) { + case "U": + row--; + break; + case "D": + row++; + break; + case "L": + col--; + break; + case "R": + col++; + break; + default: + break; + } + return new Pair(row, col); + } + + private boolean isSnakeAlive(Pair position) { + int row = position.getKey(); + int col = position.getValue(); + // Snake touched the boundary + if (!(row >= 0 && col >= 0 && row < height && col < width)) { + return false; + } + // Snake bit somewhere in middle of the body + if (!position.equals(this.bodyQueue.peekFirst()) && this.body.contains(position)) { + return false; + } + return true; + } + + private boolean snakeAteFood(Pair position) { + if (!foodQueue.isEmpty() && position.equals(foodQueue.peek())) { + bodyQueue.addLast(position); + body.add(position); + foodQueue.poll(); + foodPoint++; + return true; + } + return false; + } +} + +/** + * Your SnakeGame object will be instantiated and called as such: + * SnakeGame obj = new SnakeGame(width, height, food); + * int param_1 = obj.move(direction); + */ From 32d86ffd0a143146f80c611c65d083c2005be503 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 10 Oct 2022 18:55:29 -0700 Subject: [PATCH 0876/1640] Update Increasing Triplet Subsequence.java --- Medium/Increasing Triplet Subsequence.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Medium/Increasing Triplet Subsequence.java b/Medium/Increasing Triplet Subsequence.java index 53e09710..9facec89 100644 --- a/Medium/Increasing Triplet Subsequence.java +++ b/Medium/Increasing Triplet Subsequence.java @@ -5,11 +5,9 @@ public boolean increasingTriplet(int[] nums) { for (int num : nums) { if (num <= firstNum) { firstNum = num; - } - else if (num <= secondNum) { + } else if (num <= secondNum) { secondNum = num; - } - else { + } else { return true; } } From 06947197969996aecc0998205b20c5ab75854e5f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 11 Oct 2022 14:30:38 -0700 Subject: [PATCH 0877/1640] Update Check if One String Swap Can Make Strings Equal.java --- ...ne String Swap Can Make Strings Equal.java | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Easy/Check if One String Swap Can Make Strings Equal.java b/Easy/Check if One String Swap Can Make Strings Equal.java index 6b12d855..3f26dac9 100644 --- a/Easy/Check if One String Swap Can Make Strings Equal.java +++ b/Easy/Check if One String Swap Can Make Strings Equal.java @@ -1,22 +1,16 @@ class Solution { - public final int UNSET_INDEX = -1; - public final int SET_INDEX = 101; public boolean areAlmostEqual(String s1, String s2) { - int swapIndex = UNSET_INDEX; + int mismatchIdx = -1; for (int i = 0; i < s1.length(); i++) { if (s1.charAt(i) != s2.charAt(i)) { - if (swapIndex == SET_INDEX) { - return false; - } else if (swapIndex == UNSET_INDEX) { - swapIndex = i; - } else { - if (!(s1.charAt(swapIndex) == s2.charAt(i) && s1.charAt(i) == s2.charAt(swapIndex))) { - return false; - } - swapIndex = SET_INDEX; + if (mismatchIdx != -1) { + return s1.charAt(mismatchIdx) == s2.charAt(i) && + s1.charAt(i) == s2.charAt(mismatchIdx) && + s1.substring(i + 1).equals(s2.substring(i + 1)); } + mismatchIdx = i; } } - return swapIndex == UNSET_INDEX || swapIndex == SET_INDEX; + return mismatchIdx == -1; } } From 75736cbaef831244dbc186c66a4c2c829bb13929 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Oct 2022 05:58:45 -0700 Subject: [PATCH 0878/1640] Update Largest Perimeter Triangle.java --- Easy/Largest Perimeter Triangle.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Easy/Largest Perimeter Triangle.java b/Easy/Largest Perimeter Triangle.java index bc9803f5..c298121d 100644 --- a/Easy/Largest Perimeter Triangle.java +++ b/Easy/Largest Perimeter Triangle.java @@ -1,14 +1,11 @@ class Solution { - public int largestPerimeter(int[] A) { - Arrays.sort(A); - int n = A.length; - - for (int i=n-1; i>1; i--) { - if (A[i] < A[i - 1] + A[i - 2]) { - return A[i] + A[i - 1] + A[i - 2]; - } - } - - return 0; + public int largestPerimeter(int[] nums) { + Arrays.sort(nums); + for (int i = nums.length - 3; i >= 0; i--) { + if (nums[i] + nums[i + 1] > nums[i + 2]) { + return nums[i] + nums[i + 1] + nums[i + 2]; + } } + return 0; + } } From c2b9fc5c85bd783bd45c04b5f329c4e5f933223f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Oct 2022 06:37:12 -0700 Subject: [PATCH 0879/1640] Update Minimum Path Sum.java --- Medium/Minimum Path Sum.java | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/Medium/Minimum Path Sum.java b/Medium/Minimum Path Sum.java index 5a19e3ac..2100ec3a 100644 --- a/Medium/Minimum Path Sum.java +++ b/Medium/Minimum Path Sum.java @@ -1,22 +1,18 @@ class Solution { - public static int minPathSum(int[][] grid) { - int m = grid.length; - int n = grid[0].length; - - for (int i=0; i 0 && j > 0) { + dp[i][j] += Math.min(dp[i - 1][j], dp[i][j - 1]); + } else if (i > 0) { + dp[i][j] += dp[i - 1][j]; + } else if (j > 0) { + dp[i][j] += dp[i][j - 1]; } - - return grid[m-1][n-1]; + } } + return dp[grid.length - 1][grid[0].length - 1]; + } } From 814554b1fb135cb260bf3e19610ce0f2e966bc47 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Oct 2022 07:25:51 -0700 Subject: [PATCH 0880/1640] Update Design Circular Deque.java --- Medium/Design Circular Deque.java | 121 +++++++++++++++++++++--------- 1 file changed, 87 insertions(+), 34 deletions(-) diff --git a/Medium/Design Circular Deque.java b/Medium/Design Circular Deque.java index 56c261e5..86949d4a 100644 --- a/Medium/Design Circular Deque.java +++ b/Medium/Design Circular Deque.java @@ -1,62 +1,115 @@ -class MyCircularQueue { - private int[] queue; - private int valueCursor; - private int emptyCursor; +class MyCircularDeque { + + private Node head; + private Node tail; + private int k; + private int currSize; - public MyCircularQueue(int k) { - this.queue = new int[k]; - Arrays.fill(queue, -1); - this.emptyCursor = 0; - this.valueCursor = 0; + public MyCircularDeque(int k) { + this.k = k; + this.currSize = 0; + this.head = new Node(-1); + this.tail = new Node(-1); + this.head.next = this.tail; + this.tail.prev = this.head; } - public boolean enQueue(int value) { - if (this.queue[this.emptyCursor] != -1) { + public boolean insertFront(int value) { + if (isFull()) { return false; } - this.queue[this.emptyCursor++] = value; - if (this.emptyCursor == this.queue.length) { - this.emptyCursor = 0; + Node node = new Node(value); + Node nextToHead = head.next; + head.next = node; + node.prev = head; + node.next = nextToHead; + nextToHead.prev = node; + currSize++; + return true; + } + + public boolean insertLast(int value) { + if (isFull()) { + return false; } + Node node = new Node(value); + Node prevToTail = tail.prev; + tail.prev = node; + node.next = tail; + prevToTail.next = node; + node.prev = prevToTail; + currSize++; return true; } - public boolean deQueue() { - if (this.queue[this.valueCursor] == -1) { + public boolean deleteFront() { + if (isEmpty()) { return false; } - this.queue[this.valueCursor++] = -1; - if (this.valueCursor == this.queue.length) { - this.valueCursor = 0; + Node toDelete = head.next; + deleteNode(toDelete); + return true; + } + + public boolean deleteLast() { + if (isEmpty()) { + return false; } + Node toDelete = tail.prev; + deleteNode(toDelete); return true; } - public int Front() { - return this.queue[this.valueCursor]; + public int getFront() { + if (isEmpty()) { + return -1; + } + return head.next.val; } - public int Rear() { - int idx = this.emptyCursor == 0 ? this.queue.length - 1 : this.emptyCursor - 1; - return this.queue[idx]; + public int getRear() { + if (isEmpty()) { + return -1; + } + return tail.prev.val; } public boolean isEmpty() { - return this.queue[this.valueCursor] == -1; + return currSize == 0; } public boolean isFull() { - return this.queue[this.emptyCursor] != -1; + return currSize == k; + } + + private void deleteNode(Node node) { + Node prevToNode = node.prev; + Node nextToNode = node.next; + prevToNode.next = nextToNode; + nextToNode.prev = prevToNode; + currSize--; + } + + private static class Node { + int val; + Node next; + Node prev; + + public Node(int val) { + this.val = val; + } } } /** - * Your MyCircularQueue object will be instantiated and called as such: - * MyCircularQueue obj = new MyCircularQueue(k); - * boolean param_1 = obj.enQueue(value); - * boolean param_2 = obj.deQueue(); - * int param_3 = obj.Front(); - * int param_4 = obj.Rear(); - * boolean param_5 = obj.isEmpty(); - * boolean param_6 = obj.isFull(); + * Your MyCircularDeque object will be instantiated and called as such: + * MyCircularDeque obj = new MyCircularDeque(k); + * boolean param_1 = obj.insertFront(value); + * boolean param_2 = obj.insertLast(value); + * boolean param_3 = obj.deleteFront(); + * boolean param_4 = obj.deleteLast(); + * int param_5 = obj.getFront(); + * int param_6 = obj.getRear(); + * boolean param_7 = obj.isEmpty(); + * boolean param_8 = obj.isFull(); */ From 6af276e0e2045bf3afb81498dfb4844f749ac18c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Oct 2022 13:51:14 -0700 Subject: [PATCH 0881/1640] Update Serialize and Deserialize a Binary Tree.java --- ...rialize and Deserialize a Binary Tree.java | 78 ++++++++++--------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/Hard/Serialize and Deserialize a Binary Tree.java b/Hard/Serialize and Deserialize a Binary Tree.java index d8b992b7..7639f07a 100644 --- a/Hard/Serialize and Deserialize a Binary Tree.java +++ b/Hard/Serialize and Deserialize a Binary Tree.java @@ -9,48 +9,50 @@ */ public class Codec { - // Encodes a tree to a single string. - public String serialize(TreeNode root) { - StringBuilder sb = new StringBuilder(); - serializeHelper(root, sb); - return sb.toString().substring(0, sb.length() - 1); + private static final String NULL_VALUE = "-"; + private static final String DELIMETER = " "; + + // Encodes a tree to a single string. + public String serialize(TreeNode root) { + if (root == null) { + return NULL_VALUE; } - - private void serializeHelper(TreeNode root, StringBuilder sb) { - if (root == null) { - sb.append("#").append(","); - return; - } - - sb.append(root.val).append(","); - serializeHelper(root.left, sb); - serializeHelper(root.right, sb); + StringBuilder sb = new StringBuilder(); + Stack stack = new Stack<>(); + stack.add(root); + while (!stack.isEmpty()) { + TreeNode removed = stack.pop(); + if (removed == null) { + sb.append(NULL_VALUE).append(DELIMETER); + continue; + } + sb.append(removed.val).append(DELIMETER); + stack.push(removed.right); + stack.push(removed.left); } + return sb.toString().trim(); + } - // Decodes your encoded data to tree. - public TreeNode deserialize(String data) { - Queue values = new LinkedList<>(Arrays.asList(data.split(","))); - return deserializeHelper(values); - } - - private TreeNode deserializeHelper(Queue values) { - if (values.isEmpty()) { - return null; - } - - String val = values.remove(); - if (val.equals("#")) { - return null; - } - - TreeNode root = new TreeNode(Integer.parseInt(val)); - root.left = deserializeHelper(values); - root.right = deserializeHelper(values); - - return root; + // Decodes your encoded data to tree. + public TreeNode deserialize(String data) { + Queue queue = new LinkedList<>(Arrays.asList(data.split("\\s+"))); + return helper(queue); + } + + private TreeNode helper(Queue queue) { + if (queue.peek().equals(NULL_VALUE)) { + queue.remove(); + return null; } + TreeNode root = new TreeNode(Integer.parseInt(queue.peek())); + queue.remove(); + root.left = helper(queue); + root.right = helper(queue); + return root; + } } // Your Codec object will be instantiated and called as such: -// Codec codec = new Codec(); -// codec.deserialize(codec.serialize(root)); +// Codec ser = new Codec(); +// Codec deser = new Codec(); +// TreeNode ans = deser.deserialize(ser.serialize(root)); From 46e6b097c8aa58f0f26f6f71e741d36b7f42d711 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Oct 2022 14:12:26 -0700 Subject: [PATCH 0882/1640] Update Serialize and Deserialize BST.java --- Medium/Serialize and Deserialize BST.java | 84 ++++++++++++----------- 1 file changed, 43 insertions(+), 41 deletions(-) diff --git a/Medium/Serialize and Deserialize BST.java b/Medium/Serialize and Deserialize BST.java index 7f740386..ff587f9d 100644 --- a/Medium/Serialize and Deserialize BST.java +++ b/Medium/Serialize and Deserialize BST.java @@ -10,51 +10,53 @@ public class Codec { // Encodes a tree to a single string. - public StringBuilder sb; - public String serialize(TreeNode root) { - if (root == null) { - return "#"; - } - - sb = new StringBuilder(); - serializeHelper(root); - return sb.toString(); + public String serialize(TreeNode root) { + if (root == null) { + return ""; } - - private void serializeHelper(TreeNode root) { - if (root == null) { - sb.append('#').append(','); - return; - } - - sb.append(root.val).append(','); - serializeHelper(root.left); - serializeHelper(root.right); + StringBuilder sb = new StringBuilder(); + dfs(root, sb); + return sb.toString().trim(); + } + + private void dfs(TreeNode root, StringBuilder sb) { + if (root == null) { + return; } - - // Decodes your encoded data to tree. - public TreeNode deserialize(String data) { - Queue q = new LinkedList<>(Arrays.asList(data.split(","))); - return deserializeHelper(q); + sb.append(root.val).append(" "); + dfs(root.left, sb); + dfs(root.right, sb); + } + + // Decodes your encoded data to tree. + public TreeNode deserialize(String data) { + if (data.length() == 0) { + return null; } - - private TreeNode deserializeHelper(Queue queue) { - if (queue.isEmpty()) { - return null; - } - String s = queue.remove(); - if (s.equals("#")) { - return null; - } - - TreeNode root = new TreeNode(Integer.parseInt(s)); - root.left = deserializeHelper(queue); - root.right = deserializeHelper(queue); - - return root; + String[] split = data.split("\\s+"); + return buildBST(split, 0, split.length - 1); + } + + private TreeNode buildBST(String[] data, int start, int end) { + if (start > end) { + return null; + } + TreeNode root = new TreeNode(Integer.parseInt(data[start])); + int index; + for (index = start; index <= end; index++) { + if (Integer.parseInt(data[index]) > Integer.parseInt(data[start])) { + break; + } } + root.left = buildBST(data, start + 1, index - 1); + root.right = buildBST(data, index, end); + return root; + } } // Your Codec object will be instantiated and called as such: -// Codec codec = new Codec(); -// codec.deserialize(codec.serialize(root)); +// Codec ser = new Codec(); +// Codec deser = new Codec(); +// String tree = ser.serialize(root); +// TreeNode ans = deser.deserialize(tree); +// return ans; From 3daa52aee46459ef2be9182cd6be2632678961d9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 13 Oct 2022 12:41:29 -0700 Subject: [PATCH 0883/1640] Update Number of Squareful Arrays.java --- Hard/Number of Squareful Arrays.java | 56 +++++++++++++--------------- 1 file changed, 26 insertions(+), 30 deletions(-) diff --git a/Hard/Number of Squareful Arrays.java b/Hard/Number of Squareful Arrays.java index 5903c367..b21f3889 100644 --- a/Hard/Number of Squareful Arrays.java +++ b/Hard/Number of Squareful Arrays.java @@ -1,39 +1,35 @@ class Solution { - public int numSquarefulPerms(int[] A) { - Map count = new HashMap<>(); - Map> graph = new HashMap<>(); - int n = A.length; - for (int num : A) { - count.put(num, count.getOrDefault(num, 0) + 1); + public int numSquarefulPerms(int[] nums) { + Arrays.sort(nums); + int[] count = {0}; + backtrack(new ArrayList<>(), nums, new boolean[nums.length], -1, count); + return count[0]; + } + + private void backtrack(List temp, int[] nums, boolean[] used, int lastNumber, int[] count) { + if (temp.size() == nums.length){ + count[0]++; + return; } - for (Integer key1 : count.keySet()) { - graph.computeIfAbsent(key1, k -> new ArrayList<>()); - for (Integer key2 : count.keySet()) { - int r = (int) (Math.sqrt(key1 + key2) + 0.5); - if (r * r == key1 + key2) { - graph.get(key1).add(key2); + for (int i = 0; i < nums.length; i++){ + if (used[i] || (i > 0 && nums[i] == nums[i - 1] && !used[i - 1])){ + continue; + } + if (lastNumber != -1) { + if (!isSquare(nums[i] + lastNumber)) { + continue; } } + used[i] = true; + temp.add(nums[i]); + backtrack(temp, nums, used, nums[i], count); + temp.remove(temp.size() - 1); + used[i] = false; } - int ans = 0; - for (Integer key : count.keySet()) { - ans += dfs(key, n - 1, count, graph); - } - return ans; } - private int dfs(int key, int toReach, Map count, Map> graph) { - count.put(key, count.get(key) - 1); - int currAns = 1; - if (toReach != 0) { - currAns = 0; - for (int node : graph.get(key)) { - if (count.get(node) != 0) { - currAns += dfs(node, toReach - 1, count, graph); - } - } - } - count.put(key, count.get(key) + 1); - return currAns; + private boolean isSquare(int num) { + int squareRoot = (int) Math.sqrt(num); + return squareRoot * squareRoot == num; } } From d751ef0f04454a9cfc3ffcc7c481a0fe8f343383 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 14 Oct 2022 11:00:07 -0700 Subject: [PATCH 0884/1640] Update Construct Binary Tree from Inorder and Postorder Traversal.java --- ... from Inorder and Postorder Traversal.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Medium/Construct Binary Tree from Inorder and Postorder Traversal.java b/Medium/Construct Binary Tree from Inorder and Postorder Traversal.java index 9e69f9f5..ce312c11 100644 --- a/Medium/Construct Binary Tree from Inorder and Postorder Traversal.java +++ b/Medium/Construct Binary Tree from Inorder and Postorder Traversal.java @@ -14,24 +14,23 @@ * } */ class Solution { - int idx; public TreeNode buildTree(int[] inorder, int[] postorder) { Map map = new HashMap<>(); for (int i = 0; i < inorder.length; i++) { map.put(inorder[i], i); } - idx = postorder.length - 1; - return helper(inorder, postorder, 0, postorder.length - 1, map); + int[] postIdx = {postorder.length - 1}; + return helper(postorder, map, 0, inorder.length - 1, postIdx); } - private TreeNode helper(int[] inorder, int[] postorder, int start, int end, Map map) { - if (start > end) { + private TreeNode helper(int[] postorder, Map map, int leftIdx, int rightIdx, int[] postIdx) { + if (leftIdx > rightIdx) { return null; } - TreeNode node = new TreeNode(postorder[idx]); - int pos = map.get(postorder[idx--]); - node.right = helper(inorder, postorder, pos + 1, end, map); - node.left = helper(inorder, postorder, start, pos - 1, map); - return node; + TreeNode root = new TreeNode(postorder[postIdx[0]--]); + int index = map.get(root.val); + root.right = helper(postorder, map, index + 1, rightIdx, postIdx); + root.left = helper(postorder, map, leftIdx, index - 1, postIdx); + return root; } } From 4212d3c36d3f79d7b7ec9e72db2caf8a6413b6f2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 14 Oct 2022 11:31:11 -0700 Subject: [PATCH 0885/1640] Create Minimum Window Subsequence.java --- Hard/Minimum Window Subsequence.java | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Hard/Minimum Window Subsequence.java diff --git a/Hard/Minimum Window Subsequence.java b/Hard/Minimum Window Subsequence.java new file mode 100644 index 00000000..88c2a006 --- /dev/null +++ b/Hard/Minimum Window Subsequence.java @@ -0,0 +1,29 @@ +class Solution { + public String minWindow(String s1, String s2) { + String window = ""; + int j = 0; + int minLength = s1.length() + 1; + for (int i = 0; i < s1.length(); i++) { + if (s1.charAt(i) == s2.charAt(j)) { + j++; + if (j == s2.length()) { + int end = i + 1; + j--; + while (j >= 0) { + if (s1.charAt(i) == s2.charAt(j)) { + j--; + } + i--; + } + j++; + i++; + if (end - i < minLength) { + minLength = end - i; + window = s1.substring(i, end); + } + } + } + } + return window; + } +} From 1da3db3625fcedbb5c7c80ae55f244b0f8b98ead Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 15 Oct 2022 11:04:02 -0700 Subject: [PATCH 0886/1640] Create Similar RGB Color.java --- Easy/Similar RGB Color.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Similar RGB Color.java diff --git a/Easy/Similar RGB Color.java b/Easy/Similar RGB Color.java new file mode 100644 index 00000000..968464dc --- /dev/null +++ b/Easy/Similar RGB Color.java @@ -0,0 +1,16 @@ +class Solution { + public String similarRGB(String color) { + StringBuilder simlarColor = new StringBuilder(); + simlarColor.append("#"); + for (int i = 1; i < 6; i += 2) { + simlarColor.append(findClosestColor(color.substring(i, i + 2))); + } + return simlarColor.toString(); + } + + private String findClosestColor(String section) { + int num = Integer.parseInt(section, 16); + int roundedValue = Math.round((float) num / 17); + return Integer.toHexString(roundedValue).repeat(2); + } +} From 475006567f14af79eec3705a8da2dccd469b6b03 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 15 Oct 2022 12:07:13 -0700 Subject: [PATCH 0887/1640] Create String Compression II.java --- Hard/String Compression II.java | 69 +++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 Hard/String Compression II.java diff --git a/Hard/String Compression II.java b/Hard/String Compression II.java new file mode 100644 index 00000000..d2f3d371 --- /dev/null +++ b/Hard/String Compression II.java @@ -0,0 +1,69 @@ +class Solution { + + /** + * First dimension : Current index + * Second dimension : Amount of available deletions + * Third dimension : Index of previous character + * Fourth dimension : Consecutive count of previous character + */ + private static int[][][][] dp = new int[100][101][100][26]; + + public int getLengthOfOptimalCompression(String s, int k) { + int n = s.length(); + for(int i = 0; i < n; i++) { + for(int j = 0; j <= k; j++) { + for(int z = 0; z < n; z++) { + for(int l = 0; l < 26; l++) { + dp[i][j][z][l]=-1; + } + } + } + } + return best(s.toCharArray(), /* idx= */ 0, k, /* count= */ 0, /* prevChar= */ s.charAt(0)); + } + + private int best(char[] letters, int idx, int k, int count, char prevChar) { + if (idx == letters.length) { + return countNumberOfLetters(count); + } + if (dp[idx][k][count][prevChar - 'a'] != -1) { + return dp[idx][k][count][prevChar - 'a']; + } + if (k == 0) { + int result = 0; + if (letters[idx] == prevChar) { + result = best(letters, idx + 1, k, count + 1, prevChar); + } else { + result = countNumberOfLetters(count) + best(letters, idx + 1, k, 1, letters[idx]); + } + dp[idx][k][count][prevChar - 'a'] = result; + return result; + } + int result = 0; + if (letters[idx] == prevChar) { + result = Math.min( + best(letters, idx + 1, k, count + 1, prevChar), // Delete and recurse forward + best(letters, idx + 1, k - 1, count, prevChar)); // Don't delete and recurse forward + } else { + result = Math.min( + countNumberOfLetters(count) + best(letters, idx + 1, k, /* count= */ 1, /* prevChar= */ letters[idx]), // Don't delete current char and recurse forward with new count + best(letters, idx + 1, k - 1, count, prevChar)); // Delete current character and recurse forward + } + dp[idx][k][count][prevChar - 'a'] = result; + return result; + } + + private static int countNumberOfLetters(int count) { + if (count == 0) { + return count; + } + int numberOfDigits = 1; + if (count > 9) { + numberOfDigits = 2; + } + if (count > 99) { + numberOfDigits = 3; + } + return count == 1 ? 1 : (numberOfDigits + 1); + } +} From 2d6e01c44043a590ed4744774a7647f93da16437 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 16 Oct 2022 06:49:18 -0700 Subject: [PATCH 0888/1640] Create Largest Positive Integer That Exists With Its Negative.java --- ...itive Integer That Exists With Its Negative.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Largest Positive Integer That Exists With Its Negative.java diff --git a/Easy/Largest Positive Integer That Exists With Its Negative.java b/Easy/Largest Positive Integer That Exists With Its Negative.java new file mode 100644 index 00000000..b6789be7 --- /dev/null +++ b/Easy/Largest Positive Integer That Exists With Its Negative.java @@ -0,0 +1,13 @@ +class Solution { + public int findMaxK(int[] nums) { + int largestNumber = -1; + Set set = new HashSet<>(); + for (int num : nums) { + if (set.contains(-1 * num)) { + largestNumber = Math.max(Math.abs(num), largestNumber); + } + set.add(num); + } + return largestNumber; + } +} From 63bbb86862d3aec7c828d1809178100d66c6bc7e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 16 Oct 2022 06:52:59 -0700 Subject: [PATCH 0889/1640] Create Count Number of Distinct Integers After Reverse Operations.java --- ...nct Integers After Reverse Operations.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Count Number of Distinct Integers After Reverse Operations.java diff --git a/Medium/Count Number of Distinct Integers After Reverse Operations.java b/Medium/Count Number of Distinct Integers After Reverse Operations.java new file mode 100644 index 00000000..ecf51e81 --- /dev/null +++ b/Medium/Count Number of Distinct Integers After Reverse Operations.java @@ -0,0 +1,19 @@ +class Solution { + public int countDistinctIntegers(int[] nums) { + Set set = new HashSet<>(); + for (int num : nums) { + set.add(num); + set.add(reverse(num)); + } + return set.size(); + } + + private int reverse(int num) { + int reversed = 0; + while (num > 0) { + reversed = reversed * 10 + num % 10; + num /= 10; + } + return reversed; + } +} From 2e85346157382e37ab301c7d81113c7745c3206a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 16 Oct 2022 09:49:34 -0700 Subject: [PATCH 0890/1640] Create Minimum Difficulty of a Job Schedule.java --- .../Minimum Difficulty of a Job Schedule.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Hard/Minimum Difficulty of a Job Schedule.java diff --git a/Hard/Minimum Difficulty of a Job Schedule.java b/Hard/Minimum Difficulty of a Job Schedule.java new file mode 100644 index 00000000..58722245 --- /dev/null +++ b/Hard/Minimum Difficulty of a Job Schedule.java @@ -0,0 +1,30 @@ +class Solution { + public int minDifficulty(int[] jobDifficulty, int d) { + int n = jobDifficulty.length; + if (n < d) { + return -1; + } + Integer[][] dp = new Integer[n][d + 1]; + return minDifficulty(/* index= */0, d, jobDifficulty, dp); + } + + private int minDifficulty(int index, int dLeft, int[] jobDifficulty, Integer[][] dp) { + if (dp[index][dLeft] != null) { + return dp[index][dLeft]; + } + if (dLeft == 1) { + int result = 0; + for (int j = index; j < jobDifficulty.length; j++) { + result = Math.max(result, jobDifficulty[j]); + } + return result; + } + int result = Integer.MAX_VALUE; + int dailyMaxJobDiff = 0; + for (int j = index; j < jobDifficulty.length - dLeft + 1; j++) { + dailyMaxJobDiff = Math.max(dailyMaxJobDiff, jobDifficulty[j]); + result = Math.min(result, dailyMaxJobDiff + minDifficulty(j + 1, dLeft - 1, jobDifficulty, dp)); + } + return dp[index][dLeft] = result; + } +} From ec562bb60f71364c6f47356487c34c20fa3f2443 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 17 Oct 2022 08:15:42 -0700 Subject: [PATCH 0891/1640] Update Find the City With the Smallest Number of Neighbors at a Threshold Distance.java --- ... of Neighbors at a Threshold Distance.java | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/Medium/Find the City With the Smallest Number of Neighbors at a Threshold Distance.java b/Medium/Find the City With the Smallest Number of Neighbors at a Threshold Distance.java index 08292d1d..92c4b6a4 100644 --- a/Medium/Find the City With the Smallest Number of Neighbors at a Threshold Distance.java +++ b/Medium/Find the City With the Smallest Number of Neighbors at a Threshold Distance.java @@ -1,37 +1,45 @@ class Solution { public int findTheCity(int n, int[][] edges, int distanceThreshold) { - Map> map = new HashMap<>(); + Map> graph = new HashMap<>(); for (int[] edge : edges) { - map.computeIfAbsent(edge[0], k -> new HashMap<>()).put(edge[1], edge[2]); - map.computeIfAbsent(edge[1], k -> new HashMap<>()).put(edge[0], edge[2]); + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()) + .add(new int[]{edge[1], edge[2]}); + graph.computeIfAbsent(edge[1], k -> new ArrayList<>()) + .add(new int[]{edge[0], edge[2]}); } - int min = n + 1; - int res = -1; + int minNeighborCount = n + 1; + int nodeWithMinNeighbor = -1; for (int i = 0; i < n; i++) { - Queue queue = new PriorityQueue<>((a, b) -> (b[1] - a[1])); - queue.add(new int[]{i, distanceThreshold}); - boolean[] visited = new boolean[n]; - int count = 0; - while (!queue.isEmpty()) { - int[] city = queue.poll(); - if (visited[city[0]]) { - continue; - } - visited[city[0]] = true; - count++; - Map temp = map.getOrDefault(city[0], new HashMap<>()); - for (Integer neighbour : temp.keySet()) { - if (!visited[neighbour] && city[1] >= temp.get(neighbour)) { - queue.add(new int[]{neighbour, city[1] - temp.get(neighbour)}); - } - } + int numOfNeighbors = findNumberOfNeighborsWithinThresholdDistance(i, distanceThreshold, graph); + minNeighborCount = Math.min(numOfNeighbors, minNeighborCount); + nodeWithMinNeighbor = minNeighborCount == numOfNeighbors ? i : nodeWithMinNeighbor; + } + return nodeWithMinNeighbor; + } + + private int findNumberOfNeighborsWithinThresholdDistance(int node, int distanceThreshold, Map> graph) { + Queue queue = new PriorityQueue<>((a, b) -> (b[1] - a[1])); + Set visited = new HashSet<>(); + queue.add(new int[]{node, distanceThreshold}); + int numOfNeighbors = 0; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int currNode = removed[0]; + int currDistanceThreshold = removed[1]; + if (visited.contains(currNode)) { + continue; } - if (count - 1 <= min) { - min = count - 1; - res = i; + visited.add(currNode); + numOfNeighbors++; + for (int[] neighbor : graph.getOrDefault(currNode, new ArrayList<>())) { + int neighborNode = neighbor[0]; + int neighborDistance = neighbor[1]; + if (!visited.contains(neighborNode) && + currDistanceThreshold >= neighborDistance) { + queue.add(new int[]{neighborNode, currDistanceThreshold - neighborDistance}); + } } } - return res; + return numOfNeighbors; } } - From 0cc6bf7bec60cd907cb7cec5b27ed3bad9781b73 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 07:16:07 -0700 Subject: [PATCH 0892/1640] Create Wildcard Matching.java --- Hard/Wildcard Matching.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Hard/Wildcard Matching.java diff --git a/Hard/Wildcard Matching.java b/Hard/Wildcard Matching.java new file mode 100644 index 00000000..993a9f62 --- /dev/null +++ b/Hard/Wildcard Matching.java @@ -0,0 +1,32 @@ +class Solution { + public boolean isMatch(String s, String p) { + int sLen = s.length(); + int pLen = p.length(); + int sIdx = 0; + int pIdx = 0; + int startIdx = -1; + int sTempIdx = -1; + while (sIdx < sLen) { + if (pIdx < pLen && (p.charAt(pIdx) == '?' || p.charAt(pIdx) == s.charAt(sIdx))) { + sIdx++; + pIdx++; + } else if (pIdx < pLen && p.charAt(pIdx) == '*') { + startIdx = pIdx; + sTempIdx = sIdx; + pIdx++; + } else if (startIdx == -1) { + return false; + } else { + pIdx = startIdx + 1; + sIdx = sTempIdx + 1; + sTempIdx = sIdx; + } + } + for (int i = pIdx; i < pLen; i++) { + if (p.charAt(i) != '*') { + return false; + } + } + return true; + } +} From 0576cafff7971353706e956998558e0e36bacf9d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 08:16:46 -0700 Subject: [PATCH 0893/1640] Update Edit Distance.java --- Hard/Edit Distance.java | 48 ++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/Hard/Edit Distance.java b/Hard/Edit Distance.java index e3428cdc..c4000645 100644 --- a/Hard/Edit Distance.java +++ b/Hard/Edit Distance.java @@ -1,32 +1,26 @@ class Solution { - public int minDistance(String s1, String s2) { - return minDistanceHelperDP(s1, s2, s1.length(), s2.length()); + public int minDistance(String word1, String word2) { + int n = word1.length(); + int m = word2.length(); + if (n * m == 0) { + return n + m; } - - private int minDistanceHelperDP(String s1, String s2, int m, int n) { - int[][] dp = new int[m+1][n+1]; - - for (int i=0;i<=m;i++) { - for (int j=0;j<=n;j++) { - // First substring is empty - if (i == 0) { - dp[i][j] = j; - } - // Second substring is empty - else if (j == 0) { - dp[i][j] = i; - } - // If character are same, value is same as the previous dp array - else if (s1.charAt(i-1) == s2.charAt(j-1)) { - dp[i][j] = dp[i-1][j-1]; - } - // If different, then 1 + min - else { - dp[i][j] = 1 + Math.min(dp[i-1][j-1], Math.min(dp[i][j-1], dp[i-1][j])); - } - } + int[][] dp = new int[n + 1][m + 1]; + for (int i = 0; i <= n; i++) { + dp[i][0] = i; + } + for (int j = 0; j <= m; j++) { + dp[0][j] = j; + } + for (int i = 1; i <= n; i++) { + for (int j = 1; j <= m; j++) { + if (word1.charAt(i - 1) == word2.charAt(j - 1)) { + dp[i][j] = dp[i - 1][j - 1]; + } else { + dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1; } - - return dp[m][n]; + } } + return dp[n][m]; + } } From 6db7f6da4406a1b3e46814b7bec8f1884b6782a9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 08:43:52 -0700 Subject: [PATCH 0894/1640] Create Partition Equal Subset Sum.java --- Medium/Partition Equal Subset Sum.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Partition Equal Subset Sum.java diff --git a/Medium/Partition Equal Subset Sum.java b/Medium/Partition Equal Subset Sum.java new file mode 100644 index 00000000..41c71f7e --- /dev/null +++ b/Medium/Partition Equal Subset Sum.java @@ -0,0 +1,23 @@ +class Solution { + public boolean canPartition(int[] nums) { + int sum = 0; + for (int num : nums) { + sum += num; + } + if (sum % 2 == 1) { + return false; + } + sum /= 2; + int n = nums.length; + boolean[] dp = new boolean[sum + 1]; + dp[0] = true; + for (int num : nums) { + for (int i = sum; i > 0; i--) { + if (i >= num) { + dp[i] = dp[i] || dp[i - num]; + } + } + } + return dp[sum]; + } +} From 43a66786fb0437175300aa680b2604afb46292ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 08:44:42 -0700 Subject: [PATCH 0895/1640] Update Last Stone Weight II.java --- Medium/Last Stone Weight II.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/Medium/Last Stone Weight II.java b/Medium/Last Stone Weight II.java index 73764b86..61c61dd6 100644 --- a/Medium/Last Stone Weight II.java +++ b/Medium/Last Stone Weight II.java @@ -1,19 +1,15 @@ class Solution { public int lastStoneWeightII(int[] stones) { - boolean[] dp = new boolean[1501]; - dp[0] = true; int sum = 0; for (int stone : stones) { sum += stone; - for (int i = Math.min(1500, sum); i >= stone; i--) { - dp[i] |= dp[i - stone]; - } } - for (int i = sum / 2; i >= 0; i--) { - if (dp[i]) { - return sum - i - i; + int[] dp = new int[sum / 2 + 1]; + for (int i = 1; i <= stones.length; i++) { + for (int j = sum / 2; j >= stones[i - 1]; j--) { + dp[j] = Math.max(dp[j], dp[j - stones[i - 1]] + stones[i - 1]); } } - return 0; + return sum - 2 * dp[sum / 2]; } } From 03835d34accc54de7fa3ca9bd028937d5aad1949 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 10:32:57 -0700 Subject: [PATCH 0896/1640] Update Element Appearing More Than 25% In Sorted Array.java --- ...pearing More Than 25% In Sorted Array.java | 77 ++++++++----------- 1 file changed, 31 insertions(+), 46 deletions(-) diff --git a/Easy/Element Appearing More Than 25% In Sorted Array.java b/Easy/Element Appearing More Than 25% In Sorted Array.java index 139c2c07..966f0ce9 100644 --- a/Easy/Element Appearing More Than 25% In Sorted Array.java +++ b/Easy/Element Appearing More Than 25% In Sorted Array.java @@ -1,57 +1,42 @@ class Solution { + + enum Direction {LEFT, RIGHT}; + public int findSpecialInteger(int[] arr) { int n = arr.length; - int oneFourthNum = arr[n / 4]; - int halfNum = arr[n / 2]; - int threeFourthNum = arr[3 * n / 4]; - if(Math.max(n/4, binarySearchRight(arr, 0, n - 1, oneFourthNum)) - - Math.min(n/4, binarySearchLeft(arr, 0, n - 1, oneFourthNum)) >= arr.length / 4) { - return oneFourthNum; - } - if(Math.max(n/2, binarySearchRight(arr, 0, n - 1, halfNum)) - - Math.min(n/2, binarySearchLeft(arr, 0, n - 1, halfNum)) >= arr.length / 4) { - return halfNum; - } - if(Math.max((3 * n)/4, binarySearchRight(arr, 0, n - 1, threeFourthNum)) - - Math.min((3 * n)/4, binarySearchLeft(arr, 0, n - 1, threeFourthNum)) >= arr.length / 4) { - return threeFourthNum; - } - return -1; - } - - private int binarySearchLeft(int[] arr, int start, int end, int num) { - int minIdx = Integer.MAX_VALUE; - while (start < end) { - int mid = (start + end) / 2; - if (arr[mid] == num) { - minIdx = Math.min(mid, minIdx); - end = mid - 1; - } - else if (arr[mid] < num) { - start = mid + 1; - } - else { - end = mid - 1; + if (n == 1) { + return arr[0]; + } + List list = Arrays.asList(arr[n / 4], arr[n / 2], arr[3 * n / 4]); + for (int num : list) { + int firstPosition = getPosition(arr, num, Direction.LEFT); + int lastPosition = getPosition(arr, num, Direction.RIGHT); + if (lastPosition - firstPosition + 1 > n / 4) { + return num; } } - return minIdx; + return -1; } - private int binarySearchRight(int[] arr, int start, int end, int num) { - int maxIdx = Integer.MIN_VALUE; - while (start < end) { - int mid = (start + end) / 2; - if (arr[mid] == num) { - maxIdx = Math.max(mid, maxIdx); - start = mid + 1; - } - else if (arr[mid] < num) { - start = mid + 1; - } - else { - end = mid - 1; + private int getPosition(int[] nums, int num, Direction direction) { + int left = 0; + int right = nums.length - 1; + int idx = -1; + while (left <= right) { + int mid = (left + right) / 2; + if (nums[mid] == num) { + idx = mid; + if (direction == Direction.LEFT) { + right = mid - 1; + } else { + left = mid + 1; + } + } else if (nums[mid] > num) { + right = mid - 1; + } else { + left = mid + 1; } } - return maxIdx; + return idx; } } From 9d404d95b8730e63a58a7f8ba2ae54673ac88dd3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 10:34:56 -0700 Subject: [PATCH 0897/1640] Create Find the Kth Smallest Sum of a Matrix With Sorted Rows.java --- ...lest Sum of a Matrix With Sorted Rows.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Hard/Find the Kth Smallest Sum of a Matrix With Sorted Rows.java diff --git a/Hard/Find the Kth Smallest Sum of a Matrix With Sorted Rows.java b/Hard/Find the Kth Smallest Sum of a Matrix With Sorted Rows.java new file mode 100644 index 00000000..e5800be2 --- /dev/null +++ b/Hard/Find the Kth Smallest Sum of a Matrix With Sorted Rows.java @@ -0,0 +1,19 @@ +class Solution { + public int kthSmallest(int[][] mat, int k) { + PriorityQueue prevSum = new PriorityQueue<>(Collections.reverseOrder()); + prevSum.add(0); + for (int[] row : mat) { + PriorityQueue nextSum = new PriorityQueue<>(Collections.reverseOrder()); + for (int sum : prevSum) { + for (int c = 0; c < mat[0].length; c++) { + nextSum.add(sum + row[c]); + if (nextSum.size() > k) { + nextSum.poll(); + } + } + } + prevSum = nextSum; + } + return prevSum.poll(); + } +} From 5cad9a67848452fa35aad1b13247892e476ec3a8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 12:14:20 -0700 Subject: [PATCH 0898/1640] Update First Unique Number.java --- Medium/First Unique Number.java | 85 +++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 37 deletions(-) diff --git a/Medium/First Unique Number.java b/Medium/First Unique Number.java index 9a0dd44e..d5406335 100644 --- a/Medium/First Unique Number.java +++ b/Medium/First Unique Number.java @@ -1,56 +1,67 @@ class FirstUnique { - Node head; - Node tail; - Map map; - int MX_VAL = Integer.MAX_VALUE; - int MN_VAL = Integer.MIN_VALUE; + + private Node head; + private Node tail; + private Map map; + public FirstUnique(int[] nums) { - map = new HashMap<>(); - head = new Node(MN_VAL); - tail = new Node(MX_VAL); - head.next = tail; - tail.prev = head; + this.head = new Node(-1); + this.tail = new Node(-1); + this.head.next = this.tail; + this.tail.prev = this.head; + this.map = new HashMap<>(); for (int num : nums) { - add(num); + if (map.containsKey(num)) { + deleteNode(map.get(num)); + } else { + Node node = new Node(num); + map.put(num, node); + addToTail(node); + } } } public int showFirstUnique() { - return head.next.val == MX_VAL ? -1 : head.next.val; + return this.head.next.val; } public void add(int value) { if (map.containsKey(value)) { - if (map.get(value) != null) { - remove(map.get(value)); - map.put(value, null); - } - } - else { - Node newNode = new Node(value); - map.put(value, newNode); - newNode.prev = tail.prev; - tail.prev.next = newNode; - newNode.next = tail; - tail.prev = newNode; + deleteNode(map.get(value)); + return; } + Node node = new Node(value); + map.put(value, node); + addToTail(node); } - private void remove(Node node) { - Node prev = node.prev; - Node next = node.next; - prev.next = next; - next.prev = prev; + private void addToTail(Node node) { + Node prevToTail = this.tail.prev; + prevToTail.next = node; + node.next = this.tail; + node.prev = prevToTail; + this.tail.prev = node; } -} - -class Node { - int val; - Node next; - Node prev; - public Node(int val) { - this.val = val; + private void deleteNode(Node node) { + if (node == null) { + return; + } + map.put(node.val, null); + Node prevToNode = node.prev; + Node nextToNode = node.next; + prevToNode.next = nextToNode; + nextToNode.prev = prevToNode; + } + + private static class Node { + int val; + Node next; + Node prev; + + public Node(int val) { + this.val = val; + } } } From 9fd4a9da9bfe9e7310ddf9c5982e58012e46dda4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 18 Oct 2022 17:17:16 -0700 Subject: [PATCH 0899/1640] Update Find Minimum in Rotated Sorted Array.java --- .../Find Minimum in Rotated Sorted Array.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/Medium/Find Minimum in Rotated Sorted Array.java b/Medium/Find Minimum in Rotated Sorted Array.java index ef50804a..8c18f17b 100644 --- a/Medium/Find Minimum in Rotated Sorted Array.java +++ b/Medium/Find Minimum in Rotated Sorted Array.java @@ -1,21 +1,30 @@ class Solution { - public int findMin(int[] nums) { - int start = 0; - int end = nums.length-1; - while (start <= end) { - int mid = (start + end)/2; - - if (((mid > 0 ? nums[mid] < nums[mid-1] : true) && (mid < nums.length-1 ? nums[mid] < nums[mid+1] : true))) { - return nums[mid]; - } - else if (nums[mid] < nums[end]) { - end = mid-1; - } - else { - start = mid+1; - } - } - - return -1; + public int findMin(int[] nums) { + if (nums.length == 1) { + return nums[0]; } + int left = 0; + int right = nums.length - 1; + // Sorted but not rotated + if (nums[right] > nums[left]) { + return nums[left]; + } + while (left <= right) { + int mid = (left + right) / 2; + // mid + 1 is point of rotation + if (nums[mid] > nums[mid + 1]) { + return nums[mid + 1]; + } + // mid is point of rotation + if (nums[mid - 1] > nums[mid]) { + return nums[mid]; + } + if (nums[mid] > nums[0]) { + left = mid + 1; + } else { + right = mid - 1; + } + } + return Integer.MAX_VALUE; + } } From b1bcff17828b9a55239b3fb50f64b6aedfc91230 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Oct 2022 15:01:46 -0700 Subject: [PATCH 0900/1640] Update Set Mismatch.java --- Easy/Set Mismatch.java | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Easy/Set Mismatch.java b/Easy/Set Mismatch.java index f18f0a5c..9660688d 100644 --- a/Easy/Set Mismatch.java +++ b/Easy/Set Mismatch.java @@ -1,14 +1,18 @@ -import java.util.Map.Entry; - class Solution { public int[] findErrorNums(int[] nums) { - HashMap frequencyMap = Arrays.stream(nums).boxed() - .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); - return new int[]{ - frequencyMap.entrySet().stream().filter(entry -> entry.getValue().equals(2L)) - .map(Entry::getKey).findFirst().orElse(-1), - IntStream.range(1, nums.length + 1).boxed().filter(key -> !frequencyMap.containsKey(key)) - .findFirst().orElse(-1) - }; + int[] result = new int[2]; + Set set = new HashSet<>(); + int n = nums.length; + for (int num : nums) { + if (!set.add(num)) { + result[0] = num; + } + } + for (int i = 1; i <= n; i++) { + if (!set.contains(i)) { + result[1] = i; + } + } + return result; } } From 1e059b4532fdb15934439cf1a72a29aa312fa0ef Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 26 Oct 2022 08:15:25 -0700 Subject: [PATCH 0901/1640] Create Determine if Two Events Have Conflict.java --- Easy/Determine if Two Events Have Conflict.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Determine if Two Events Have Conflict.java diff --git a/Easy/Determine if Two Events Have Conflict.java b/Easy/Determine if Two Events Have Conflict.java new file mode 100644 index 00000000..66c19dce --- /dev/null +++ b/Easy/Determine if Two Events Have Conflict.java @@ -0,0 +1,14 @@ +class Solution { + public boolean haveConflict(String[] event1, String[] event2) { + int minutesEvent1Start = getMinutes(event1[0]); + int minutesEvent1End = getMinutes(event1[1]); + int minutesEvent2Start = getMinutes(event2[0]); + int minutesEvent2End = getMinutes(event2[1]); + return !(minutesEvent1End < minutesEvent2Start || minutesEvent2End < minutesEvent1Start); + } + + private static int getMinutes(String time) { + String[] split = time.split(":"); + return Integer.parseInt(split[0]) * 60 + Integer.parseInt(split[1]); + } +} From 46bd91078f416c95eb42da0018ad857c47ec359b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 27 Oct 2022 07:31:19 -0700 Subject: [PATCH 0902/1640] Create Image Overlap.java --- Medium/Image Overlap.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Image Overlap.java diff --git a/Medium/Image Overlap.java b/Medium/Image Overlap.java new file mode 100644 index 00000000..680b1750 --- /dev/null +++ b/Medium/Image Overlap.java @@ -0,0 +1,29 @@ +class Solution { + public int largestOverlap(int[][] img1, int[][] img2) { + List> nonZeroCoordinates1 = getNonZeroCoordinates(img1); + List> nonZeroCoordinates2 = getNonZeroCoordinates(img2); + int maxOverlap = 0; + Map, Integer> groupCount = new HashMap<>(); + for (Pair c1 : nonZeroCoordinates1) { + for (Pair c2 : nonZeroCoordinates2) { + Pair vector = new Pair( + c2.getKey() - c1.getKey(), c2.getValue() - c1.getValue()); + groupCount.put(vector, groupCount.getOrDefault(vector, 0) + 1); + maxOverlap = Math.max(maxOverlap, groupCount.get(vector)); + } + } + return maxOverlap; + } + + private List> getNonZeroCoordinates(int[][] arr) { + List> coordinates = new ArrayList<>(); + for (int i = 0; i < arr.length; i++) { + for (int j = 0; j < arr[0].length; j++) { + if (arr[i][j] == 1) { + coordinates.add(new Pair(i, j)); + } + } + } + return coordinates; + } +} From 3054444bd56ace22ba2c84b6f93c08b724b56607 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Oct 2022 07:06:14 -0700 Subject: [PATCH 0903/1640] Create Odd String Difference.java --- Easy/Odd String Difference.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Easy/Odd String Difference.java diff --git a/Easy/Odd String Difference.java b/Easy/Odd String Difference.java new file mode 100644 index 00000000..d6fa4b49 --- /dev/null +++ b/Easy/Odd String Difference.java @@ -0,0 +1,23 @@ +class Solution { + public String oddString(String[] words) { + Map> diffCounter = new HashMap<>(); + for (String word : words) { + String key = getDiffCounter(word); + diffCounter.computeIfAbsent(key, k -> new HashSet<>()).add(word); + } + for (String key : diffCounter.keySet()) { + if (diffCounter.get(key).size() == 1) { + return diffCounter.get(key).iterator().next(); + } + } + return ""; + } + + private static String getDiffCounter(String word) { + StringBuilder sb = new StringBuilder(); + for (int i = 1; i < word.length(); i++) { + sb.append(word.charAt(i) - word.charAt(i - 1)).append('|'); + } + return sb.toString(); + } +} From 781c66c7140e4615c927466671d90068c88c1499 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Oct 2022 07:09:52 -0700 Subject: [PATCH 0904/1640] Create Average Value of Even Numbers That Are Divisible by Three.java --- ...of Even Numbers That Are Divisible by Three.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Average Value of Even Numbers That Are Divisible by Three.java diff --git a/Easy/Average Value of Even Numbers That Are Divisible by Three.java b/Easy/Average Value of Even Numbers That Are Divisible by Three.java new file mode 100644 index 00000000..c0e3274e --- /dev/null +++ b/Easy/Average Value of Even Numbers That Are Divisible by Three.java @@ -0,0 +1,13 @@ +class Solution { + public int averageValue(int[] nums) { + int total = 0; + int count = 0; + for (int num : nums) { + if (num % 2 == 0 && num % 3 == 0) { + total += num; + count++; + } + } + return count == 0 ? 0 : total / count; + } +} From 9ea1fb1ab4c03fd65d9e6d745936c69a4d750b35 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 31 Oct 2022 08:21:08 -0700 Subject: [PATCH 0905/1640] Create Most Popular Video Creator.java --- Medium/Most Popular Video Creator.java | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Most Popular Video Creator.java diff --git a/Medium/Most Popular Video Creator.java b/Medium/Most Popular Video Creator.java new file mode 100644 index 00000000..d9e93554 --- /dev/null +++ b/Medium/Most Popular Video Creator.java @@ -0,0 +1,27 @@ +class Solution { + public List> mostPopularCreator(String[] creators, String[] ids, int[] views) { + Map creatorToViewCount = new HashMap<>(); + Map> creatorToIdWithMaxViews = new HashMap<>(); + long totalMaxViews = 0; + for (int i = 0; i < creators.length; i++) { + creatorToViewCount.put(creators[i], creatorToViewCount.getOrDefault(creators[i], 0L) + views[i]); + if (!creatorToIdWithMaxViews.containsKey(creators[i])) { + creatorToIdWithMaxViews.put(creators[i], new Pair<>(ids[i], (long) views[i])); + } else { + Pair currentIdToViewPair = creatorToIdWithMaxViews.get(creators[i]); + if (views[i] > currentIdToViewPair.getValue() || + (views[i] == currentIdToViewPair.getValue() && ids[i].compareTo(currentIdToViewPair.getKey()) < 0)) { + creatorToIdWithMaxViews.put(creators[i], new Pair<>(ids[i], (long) views[i])); + } + } + totalMaxViews = Math.max(totalMaxViews, creatorToViewCount.get(creators[i])); + } + List> result = new ArrayList<>(); + for (String key : creatorToViewCount.keySet()) { + if (creatorToViewCount.get(key) == totalMaxViews) { + result.add(Arrays.asList(key, creatorToIdWithMaxViews.get(key).getKey())); + } + } + return result; + } +} From 35b369d888bd03667297fcda4b3ee4fc5bca9877 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Nov 2022 16:41:28 -0800 Subject: [PATCH 0906/1640] Update Maximum 69 Number.java --- Easy/Maximum 69 Number.java | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/Easy/Maximum 69 Number.java b/Easy/Maximum 69 Number.java index a58d97e6..400bf663 100644 --- a/Easy/Maximum 69 Number.java +++ b/Easy/Maximum 69 Number.java @@ -1,23 +1,11 @@ class Solution { - public int maximum69Number (int num) { - int lastSixIndex = Integer.MAX_VALUE; - int count = 0; - int copy = num; - while (copy > 0) { - int rem = copy % 10; - if (rem == 6) { - lastSixIndex = count; - } - copy /= 10; - count++; + public int maximum69Number (int num) { + String numString = String.valueOf(num); + for (int i = 0; i < numString.length(); i++) { + if (numString.charAt(i) == '6') { + return Integer.parseInt(numString.substring(0, i) + '9' + numString.substring(i + 1)); + } + } + return num; } - if (lastSixIndex == Integer.MAX_VALUE) { - return num; - } - return ( - ((num / ((int) Math.pow(10, lastSixIndex + 1))) * ((int) Math.pow(10, lastSixIndex + 1))) + - (9 * ((int) Math.pow(10, lastSixIndex))) + - (num % ((int) Math.pow(10, lastSixIndex))) - ); - } } From 43e47ddc542ef8f39ee9a2c13bad4c87626f3df3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Nov 2022 16:45:40 -0800 Subject: [PATCH 0907/1640] Create Apply Operations to an Array.java --- Easy/Apply Operations to an Array.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Apply Operations to an Array.java diff --git a/Easy/Apply Operations to an Array.java b/Easy/Apply Operations to an Array.java new file mode 100644 index 00000000..b0a663a2 --- /dev/null +++ b/Easy/Apply Operations to an Array.java @@ -0,0 +1,22 @@ +class Solution { + public int[] applyOperations(int[] nums) { + for (int i = 0; i < nums.length - 1; i++) { + if (nums[i] == nums[i + 1]) { + nums[i] *= 2; + nums[i + 1] = 0; + } + } + int startIdx = 0; + int endIdx = 0; + while (endIdx < nums.length) { + if (nums[endIdx] != 0) { + nums[startIdx++] = nums[endIdx]; + } + endIdx++; + } + while (startIdx < nums.length) { + nums[startIdx++] = 0; + } + return nums; + } +} From 4a1ff57e93b88da09950bf8be416a299f010d0c1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Nov 2022 07:02:26 -0800 Subject: [PATCH 0908/1640] Create Maximum Sum of Distinct Subarrays With Length K.java --- ...m of Distinct Subarrays With Length K.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Maximum Sum of Distinct Subarrays With Length K.java diff --git a/Medium/Maximum Sum of Distinct Subarrays With Length K.java b/Medium/Maximum Sum of Distinct Subarrays With Length K.java new file mode 100644 index 00000000..044ad0bd --- /dev/null +++ b/Medium/Maximum Sum of Distinct Subarrays With Length K.java @@ -0,0 +1,26 @@ +class Solution { + public long maximumSubarraySum(int[] nums, int k) { + Map map = new HashMap<>(); + long currSum = 0; + long maxSum = 0; + for (int i = 0; i < k - 1; i++) { + map.put(nums[i], map.getOrDefault(nums[i], 0) + 1); + currSum += nums[i]; + } + int startIdx = 0; + for (int i = k - 1; i < nums.length; i++) { + map.put(nums[i], map.getOrDefault(nums[i], 0) + 1); + currSum += nums[i]; + if (map.size() == k) { + maxSum = Math.max(maxSum, currSum); + } + map.put(nums[startIdx], map.get(nums[startIdx]) - 1); + if (map.get(nums[startIdx]) == 0) { + map.remove(nums[startIdx]); + } + currSum -= nums[startIdx]; + startIdx++; + } + return maxSum; + } +} From 20bc4263b07fdae17f7a1dfe6b3ce2d95370f57f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Nov 2022 08:20:05 -0800 Subject: [PATCH 0909/1640] Update Positions of Large Groups.java --- Easy/Positions of Large Groups.java | 37 +++++++++-------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/Easy/Positions of Large Groups.java b/Easy/Positions of Large Groups.java index 0e54382f..7258f529 100644 --- a/Easy/Positions of Large Groups.java +++ b/Easy/Positions of Large Groups.java @@ -1,32 +1,17 @@ class Solution { - public List> largeGroupPositions(String S) { - List> positions = new ArrayList<>(); - - int i = 1; - int count = 1; - int start = 0; - - while (i < S.length()) { - if (S.charAt(i) == S.charAt(i-1)) { - count++; + public List> largeGroupPositions(String s) { + List> result = new ArrayList<>(); + int idx = 0; + while (idx < s.length()) { + int startIdx = idx; + char c = s.charAt(idx); + while (idx < s.length() && s.charAt(idx) == c) { + idx++; } - else { - if (count >= 3) { - List temp = Arrays.asList(start, i-1); - positions.add(temp); - } - - start = i; - count = 1; + if (idx - startIdx >= 3) { + result.add(Arrays.asList(startIdx, idx - 1)); } - - i++; } - - if (count >= 3) { - positions.add(Arrays.asList(start, i-1)); - } - - return positions; + return result; } } From f72e69c198d0ec8a8719e1985c73eafd87cbeda5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 8 Nov 2022 15:54:28 -0800 Subject: [PATCH 0910/1640] Update Binary Gap.java --- Easy/Binary Gap.java | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/Easy/Binary Gap.java b/Easy/Binary Gap.java index c86d7908..fcd7178f 100644 --- a/Easy/Binary Gap.java +++ b/Easy/Binary Gap.java @@ -1,21 +1,19 @@ class Solution { - public int binaryGap(int N) { - char[] binValues = Integer.toBinaryString(N).toCharArray(); - int oneIndex = -1; - int maxDistance = 0; - - for (int i=0; i 0) { + int rem = n % 2; + n /= 2; + if (rem == 1) { + if (lastOnePosition != -1) { + maxGap = Math.max(maxGap, currPosition - lastOnePosition); } + lastOnePosition = currPosition; } + currPosition++; } - - return maxDistance; + return maxGap; } } From d6ea23e31b958b835636b35093f5d7ceac7cf381 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Nov 2022 11:45:32 -0800 Subject: [PATCH 0911/1640] Update Online Stock Span.java --- Medium/Online Stock Span.java | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Medium/Online Stock Span.java b/Medium/Online Stock Span.java index 9f30c4fd..ff50093d 100644 --- a/Medium/Online Stock Span.java +++ b/Medium/Online Stock Span.java @@ -1,21 +1,20 @@ class StockSpanner { - Stack stack; - Stack occurences; - public StockSpanner() { - stack = new Stack<>(); - occurences = new Stack<>(); - } - - public int next(int price) { - int count = 1; - while (!stack.isEmpty() && stack.peek() <= price) { - stack.pop(); - count += occurences.pop(); + + // Entry in stack is the current price and count of prices <= current price + private final Stack stack; + + public StockSpanner() { + this.stack = new Stack<>(); + } + + public int next(int price) { + int count = 1; + while (!stack.isEmpty() && stack.peek()[0] <= price) { + count += stack.pop()[1]; + } + stack.push(new int[]{price, count}); + return count; } - stack.push(price); - occurences.push(count); - return count; - } } /** From 3d3df107b3fe373d33674fda17b65b0c7a7d4118 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Nov 2022 11:49:17 -0800 Subject: [PATCH 0912/1640] Create Root Equals Sum of Children.java --- Easy/Root Equals Sum of Children.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Root Equals Sum of Children.java diff --git a/Easy/Root Equals Sum of Children.java b/Easy/Root Equals Sum of Children.java new file mode 100644 index 00000000..a354dc1a --- /dev/null +++ b/Easy/Root Equals Sum of Children.java @@ -0,0 +1,20 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public boolean checkTree(TreeNode root) { + return root.val == (root.left.val + root.right.val); + } +} From 8a7bbfbb07984d9102d535ff62329c14c2edcd01 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Nov 2022 16:30:49 -0800 Subject: [PATCH 0913/1640] Update Remove All Adjacent Duplicates In String.java --- ...ove All Adjacent Duplicates In String.java | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/Easy/Remove All Adjacent Duplicates In String.java b/Easy/Remove All Adjacent Duplicates In String.java index 0eb0caa8..6c3a1553 100644 --- a/Easy/Remove All Adjacent Duplicates In String.java +++ b/Easy/Remove All Adjacent Duplicates In String.java @@ -1,20 +1,17 @@ class Solution { - public String removeDuplicates(String s) { - Stack stack = new Stack<>(); - int idx = 0; - while (idx < s.length()) { - char c = s.charAt(idx); - if (!stack.isEmpty() && stack.peek() == c) { - stack.pop(); - } else { - stack.push(c); - } - idx++; + public String removeDuplicates(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (!stack.isEmpty() && stack.peek() == c) { + stack.pop(); + } else { + stack.push(c); + } + } + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.reverse().toString(); } - StringBuilder sb = new StringBuilder(); - while (!stack.isEmpty()) { - sb.append(stack.pop()); - } - return sb.reverse().toString(); - } } From d01c88489e89b4840e6765486f89f97494a45615 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Nov 2022 08:29:15 -0800 Subject: [PATCH 0914/1640] Create Tweet Counts Per Frequency.java --- Medium/Tweet Counts Per Frequency.java | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Medium/Tweet Counts Per Frequency.java diff --git a/Medium/Tweet Counts Per Frequency.java b/Medium/Tweet Counts Per Frequency.java new file mode 100644 index 00000000..9d58d990 --- /dev/null +++ b/Medium/Tweet Counts Per Frequency.java @@ -0,0 +1,36 @@ +class TweetCounts { + + private final Map> map; + private static final Map INTERVAL_MAP = Map.of( + "minute", 60, + "hour", 3600, + "day", 86400); + + public TweetCounts() { + this.map = new HashMap<>(); + } + + public void recordTweet(String tweetName, int time) { + map.computeIfAbsent(tweetName, k -> new TreeMap<>()); + map.get(tweetName).merge(time, 1, Integer::sum); + } + + public List getTweetCountsPerFrequency(String freq, String tweetName, int startTime, int endTime) { + int interval = INTERVAL_MAP.get(freq); + int size = ((endTime - startTime) / interval + 1); + int[] buckets = new int[size]; + TreeMap frequencyMap = map.get(tweetName); + for (Integer key : frequencyMap.subMap(startTime, endTime + 1).keySet()) { + int idx = (key - startTime) / interval; + buckets[idx] += frequencyMap.get(key); + } + return Arrays.stream(buckets).boxed().collect(Collectors.toList()); + } +} + +/** + * Your TweetCounts object will be instantiated and called as such: + * TweetCounts obj = new TweetCounts(); + * obj.recordTweet(tweetName,time); + * List param_2 = obj.getTweetCountsPerFrequency(freq,tweetName,startTime,endTime); + */ From d23cb1bda2d74c80d1191616086fad3ccbcf6385 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Nov 2022 09:36:02 -0800 Subject: [PATCH 0915/1640] Create Number of Distinct Averages.java --- Easy/Number of Distinct Averages.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Number of Distinct Averages.java diff --git a/Easy/Number of Distinct Averages.java b/Easy/Number of Distinct Averages.java new file mode 100644 index 00000000..cb2f9b34 --- /dev/null +++ b/Easy/Number of Distinct Averages.java @@ -0,0 +1,13 @@ +class Solution { + public int distinctAverages(int[] nums) { + Arrays.sort(nums); + Set averages = new HashSet<>(); + int startIdx = 0; + int endIdx = nums.length - 1; + while (startIdx <= endIdx) { + double total = (double) (nums[startIdx++] + nums[endIdx--]); + averages.add(total / 2); + } + return averages.size(); + } +} From 3dae145fa05247256b6a6d2228d25b2ade1b4cab Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Nov 2022 15:31:55 -0800 Subject: [PATCH 0916/1640] Update Find Median from Data Stream.java --- Hard/Find Median from Data Stream.java | 41 +++++++++++++------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/Hard/Find Median from Data Stream.java b/Hard/Find Median from Data Stream.java index 7d0de21f..89269294 100644 --- a/Hard/Find Median from Data Stream.java +++ b/Hard/Find Median from Data Stream.java @@ -1,27 +1,26 @@ class MedianFinder { - - private PriorityQueue small; - private PriorityQueue large; - - public MedianFinder() { - this.small = new PriorityQueue<>((a, b) -> b - a); - this.large = new PriorityQueue<>(); - } - - public void addNum(int num) { - small.add(num); - large.add(small.remove()); - if (large.size() > small.size()) { - small.add(large.remove()); + + private final PriorityQueue minQueue; + private final PriorityQueue maxQueue; + + public MedianFinder() { + this.minQueue = new PriorityQueue<>(); + this.maxQueue = new PriorityQueue<>((a, b) -> b - a); } - } - - public double findMedian() { - if (small.size() > large.size()) { - return small.peek(); + + public void addNum(int num) { + maxQueue.add(num); + minQueue.add(maxQueue.poll()); + if (maxQueue.size() < minQueue.size()) { + maxQueue.add(minQueue.poll()); + } + } + + public double findMedian() { + return maxQueue.size() > minQueue.size() ? + ((double) maxQueue.peek()) : + ((maxQueue.peek() + minQueue.peek()) / (2.0)); } - return (small.peek() + large.peek()) / 2.0; - } } /** From 04c87abe28bd81873938b81cdaf3569305d13988 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Nov 2022 06:54:21 -0800 Subject: [PATCH 0917/1640] Update Reverse Words in a String.java --- Medium/Reverse Words in a String.java | 59 +++++++-------------------- 1 file changed, 14 insertions(+), 45 deletions(-) diff --git a/Medium/Reverse Words in a String.java b/Medium/Reverse Words in a String.java index 4d70c9e9..94076a54 100644 --- a/Medium/Reverse Words in a String.java +++ b/Medium/Reverse Words in a String.java @@ -1,49 +1,18 @@ class Solution { - public String reverseWords(String s) { - StringBuilder sb = trimSpace(s); - reverse(sb, 0, sb.length() - 1); - int start = 0; - int end = 0; - int n = sb.length(); - while (start < n) { - while (end < n && sb.charAt(end) != ' ') { - end++; - } - reverse(sb, start, end - 1); - start = end + 1; - end++; - } - return sb.toString(); - } - - private void reverse(StringBuilder sb, int start, int end) { - while (start <= end) { - char temp = sb.charAt(start); - sb.setCharAt(start++, sb.charAt(end)); - sb.setCharAt(end--, temp); - } - } - - private StringBuilder trimSpace(String s) { - StringBuilder sb = new StringBuilder(); - int start = 0; - int end = s.length() - 1; - while (start <= end && s.charAt(start) == ' ') { - start++; - } - while (end >= start && s.charAt(end) == ' ') { - end--; - } - while (start <= end) { - if (s.charAt(start) != ' ') { - sb.append(s.charAt(start++)); - } else { - if (sb.charAt(sb.length() - 1) != ' ') { - sb.append(s.charAt(start)); + public String reverseWords(String s) { + StringBuilder result = new StringBuilder(); + int idx = s.length() - 1; + while (idx >= 0) { + if (s.charAt(idx) == ' ') { + idx--; + continue; + } + StringBuilder sb = new StringBuilder(); + while (idx >= 0 && Character.isLetterOrDigit(s.charAt(idx))) { + sb.append(s.charAt(idx--)); + } + result.append(sb.reverse().toString()).append(" "); } - start++; - } + return result.toString().trim(); } - return sb; - } } From 0ce46d4114641e78c4ef9e6e411e191e8599f529 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 14 Nov 2022 06:50:12 -0800 Subject: [PATCH 0918/1640] Create Convert the Temperature.java --- Easy/Convert the Temperature.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Convert the Temperature.java diff --git a/Easy/Convert the Temperature.java b/Easy/Convert the Temperature.java new file mode 100644 index 00000000..0b1f250c --- /dev/null +++ b/Easy/Convert the Temperature.java @@ -0,0 +1,5 @@ +class Solution { + public double[] convertTemperature(double celsius) { + return new double[]{/* kelvin= */celsius + 273.15, /* fahrenheit= */celsius * 1.80 + 32.00}; + } +} From 5126b747b9e93349f0331d9b566decc819e96415 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Nov 2022 07:33:18 -0800 Subject: [PATCH 0919/1640] Update Count Complete Tree Nodes.java --- Medium/Count Complete Tree Nodes.java | 74 ++++++++++----------------- 1 file changed, 26 insertions(+), 48 deletions(-) diff --git a/Medium/Count Complete Tree Nodes.java b/Medium/Count Complete Tree Nodes.java index 8c4bd90f..822c178d 100644 --- a/Medium/Count Complete Tree Nodes.java +++ b/Medium/Count Complete Tree Nodes.java @@ -4,57 +4,35 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public int countNodes(TreeNode root) { - if (root == null) { - return 0; + public int countNodes(TreeNode root) { + int leftDepth = getDepth(root, -1); + int rightDepth = getDepth(root, 1); + if (leftDepth == rightDepth) { + return (1 << leftDepth) - 1; + } + return 1 + countNodes(root.left) + countNodes(root.right); } - int d = getDepth(root); - if (d == 0) { - return 1; + + private int getDepth(TreeNode root, int dir) { + int depth = 0; + while (root != null) { + depth++; + if (dir == -1) { + root = root.left; + } else { + root = root.right; + } + } + return depth; } - int start = 0; - int end = (int) Math.pow(2, d) - 1; - int mid; - while (start <= end) { - mid = start + (end - start) / 2; - if (exists(mid, d, root)) { - start = mid + 1; - } - else { - end = mid - 1; - } - } - return (int) Math.pow(2, d) - 1 + start; - } - - private int getDepth(TreeNode node) { - int d = 0; - while (node.left != null) { - node = node.left; - d++; - } - return d; - } - - private boolean exists(int idx, int d, TreeNode root) { - int left = 0; - int right = (int) Math.pow(2, d) - 1; - int mid; - for(int i = 0; i < d; ++i) { - mid = left + (right - left) / 2; - if (idx <= mid) { - root = root.left; - right = mid; - } - else { - root = root.right; - left = mid + 1; - } - } - return root != null; - } } From 637c0ecfd4d11bde127743b999dd406ed22b4a62 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Nov 2022 08:47:13 -0800 Subject: [PATCH 0920/1640] Create Number of Unequal Triplets in Array.java --- Easy/Number of Unequal Triplets in Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Number of Unequal Triplets in Array.java diff --git a/Easy/Number of Unequal Triplets in Array.java b/Easy/Number of Unequal Triplets in Array.java new file mode 100644 index 00000000..fc2fa82a --- /dev/null +++ b/Easy/Number of Unequal Triplets in Array.java @@ -0,0 +1,17 @@ +class Solution { + public int unequalTriplets(int[] nums) { + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + int result = 0; + int left = 0; + int right = nums.length; + for (Integer key : map.keySet()) { + right -= map.get(key); + result += left * map.get(key) * right; + left += map.get(key); + } + return result; + } +} From 1812e49c10a7c06621751a4d71cadfce8858bd8e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Nov 2022 08:54:46 -0800 Subject: [PATCH 0921/1640] Create Closest Nodes Queries in a Binary Search Tree.java --- ...Nodes Queries in a Binary Search Tree.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/Closest Nodes Queries in a Binary Search Tree.java diff --git a/Medium/Closest Nodes Queries in a Binary Search Tree.java b/Medium/Closest Nodes Queries in a Binary Search Tree.java new file mode 100644 index 00000000..e1c19211 --- /dev/null +++ b/Medium/Closest Nodes Queries in a Binary Search Tree.java @@ -0,0 +1,37 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public List> closestNodes(TreeNode root, List queries) { + TreeSet set = new TreeSet<>(); + traverse(root, set); + List> result = new ArrayList<>(); + for (Integer query : queries) { + Integer lower = set.floor(query); + Integer upper = set.ceiling(query); + result.add(Arrays.asList((lower == null ? -1 : lower), (upper == null ? -1 : upper))); + } + return result; + } + + private void traverse(TreeNode root, TreeSet set) { + if (root == null) { + return; + } + set.add(root.val); + traverse(root.left, set); + traverse(root.right, set); + } +} From ae399d8f768df2383ec59aba4a00df2e6e8dd616 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Nov 2022 08:05:53 -0800 Subject: [PATCH 0922/1640] Create Nearest Exit from Entrance in Maze.java --- .../Nearest Exit from Entrance in Maze.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Medium/Nearest Exit from Entrance in Maze.java diff --git a/Medium/Nearest Exit from Entrance in Maze.java b/Medium/Nearest Exit from Entrance in Maze.java new file mode 100644 index 00000000..097d5aaa --- /dev/null +++ b/Medium/Nearest Exit from Entrance in Maze.java @@ -0,0 +1,45 @@ +class Solution { + private static final int[][] DIRS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + + public int nearestExit(char[][] maze, int[] entrance) { + int rows = maze.length; + int cols = maze[0].length; + Queue queue = new LinkedList<>(); + boolean[][] visited = new boolean[rows][cols]; + int entranceRow = entrance[0]; + int entranceCol = entrance[1]; + queue.add(new int[]{entranceRow, entranceCol}); + visited[entranceRow][entranceCol] = true; + int steps = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + int row = removed[0]; + int col = removed[1]; + if (!(row == entranceRow && col == entranceCol) && isExit(row, col, rows, cols)) { + return steps; + } + for (int[] dir : DIRS) { + int newRow = row + dir[0]; + int newCol = col + dir[1]; + if (newRow >= 0 && + newCol >= 0 && + newRow < rows && + newCol < cols && + !visited[newRow][newCol] && + maze[newRow][newCol] != '+') { + queue.add(new int[]{newRow, newCol}); + visited[newRow][newCol] = true; + } + } + } + steps++; + } + return -1; + } + + private boolean isExit(int row, int col, int rows, int cols) { + return (row + 1 == rows) || (row - 1 == -1) || (col + 1 == cols) || (col - 1 == -1); + } +} From 03349e814400e7424baa08800e48776c0712612c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 23 Nov 2022 10:08:28 -0800 Subject: [PATCH 0923/1640] Create Check if an Array Is Consecutive.java --- Easy/Check if an Array Is Consecutive.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Check if an Array Is Consecutive.java diff --git a/Easy/Check if an Array Is Consecutive.java b/Easy/Check if an Array Is Consecutive.java new file mode 100644 index 00000000..618d43e6 --- /dev/null +++ b/Easy/Check if an Array Is Consecutive.java @@ -0,0 +1,15 @@ +class Solution { + public boolean isConsecutive(int[] nums) { + int min = Integer.MAX_VALUE; + for (int num : nums) { + min = Math.min(num, min); + } + Set set = new HashSet<>(); + for (int num : nums) { + if (num - min >= nums.length || !set.add(num - min)) { + return false; + } + } + return true; + } +} From 563ba954dbc3b26098553f86d33d670736748635 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 24 Nov 2022 07:50:33 -0800 Subject: [PATCH 0924/1640] Update Word Search.java --- Medium/Word Search.java | 57 ++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/Medium/Word Search.java b/Medium/Word Search.java index b5dc90c4..5a63db20 100644 --- a/Medium/Word Search.java +++ b/Medium/Word Search.java @@ -1,34 +1,33 @@ class Solution { - - private final int[][] DIRS = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}}; - - public boolean exist(char[][] board, String word) { - int m = board.length; - int n = board[0].length; - for (int i = 0; i < board.length; i++) { - for (int j = 0; j < board[0].length; j++) { - if (found(board, i, j, word, 0, m, n)) { - return true; + + private static final int[][] DIRS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + + public boolean exist(char[][] board, String word) { + int m = board.length; + int n = board[0].length; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + if (isFound(board, word, 0, i, j, m, n)) { + return true; + } + } } - } + return false; } - return false; - } - - private boolean found(char[][] board, int x, int y, String word, int idx, int m, int n) { - if (idx == word.length()) { - return true; - } - if (x < 0 || x == m || y < 0 || y == n || board[x][y] != word.charAt(idx)) { - return false; - } - board[x][y] = '#'; - for (int[] dir : DIRS) { - if (found(board, x + dir[0], y + dir[1], word, idx + 1, m, n)) { - return true; - } + + private boolean isFound(char[][] board, String word, int idx, int row, int col, int m, int n) { + if (idx == word.length()) { + return true; + } + if (row < 0 || col < 0 || row >= m || col >= n || board[row][col] != word.charAt(idx)) { + return false; + } + board[row][col] ^= 256; + boolean result = false; + for (int[] dir : DIRS) { + result = result || isFound(board, word, idx + 1, row + dir[0], col + dir[1], m, n); + } + board[row][col] ^= 256; + return result; } - board[x][y] = word.charAt(idx); - return false; - } } From 5630843a2267978f32010c6e932463b95d5ee920 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Nov 2022 08:55:59 -0800 Subject: [PATCH 0925/1640] Create Sum of Subarray Minimums.java --- Medium/Sum of Subarray Minimums.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Sum of Subarray Minimums.java diff --git a/Medium/Sum of Subarray Minimums.java b/Medium/Sum of Subarray Minimums.java new file mode 100644 index 00000000..942f0c91 --- /dev/null +++ b/Medium/Sum of Subarray Minimums.java @@ -0,0 +1,20 @@ +class Solution { + + private final static int MOD = 1000_000_007; + + public int sumSubarrayMins(int[] arr) { + Stack stack = new Stack<>(); + long sum = 0; + for (int i = 0; i <= arr.length; i++) { + while (!stack.isEmpty() && (i == arr.length || arr[stack.peek()] >= arr[i])) { + int minValue = stack.pop(); + int countOnLeft = stack.empty() ? -1 : stack.peek(); + int countOnRight = i; + long totalCount = (minValue - countOnLeft) * (countOnRight - minValue) % MOD; + sum = (sum + (totalCount * arr[minValue])) % MOD; + } + stack.push(i); + } + return (int) (sum); + } +} From 264bbb46899a1b314b9598267c56fbc9dd6e2e5c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Nov 2022 17:54:23 -0800 Subject: [PATCH 0926/1640] Create Check if String Is Decomposable Into Value-Equal Substrings.java --- ...omposable Into Value-Equal Substrings.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Easy/Check if String Is Decomposable Into Value-Equal Substrings.java diff --git a/Easy/Check if String Is Decomposable Into Value-Equal Substrings.java b/Easy/Check if String Is Decomposable Into Value-Equal Substrings.java new file mode 100644 index 00000000..6d6d55c4 --- /dev/null +++ b/Easy/Check if String Is Decomposable Into Value-Equal Substrings.java @@ -0,0 +1,25 @@ +class Solution { + public boolean isDecomposable(String s) { + boolean sizeTwoFound = false; + int idx = 0; + while (idx < s.length()) { + char c = s.charAt(idx); + int tempIdx = idx; + while (tempIdx < s.length() && s.charAt(tempIdx) == c && tempIdx - idx < 3) { + tempIdx++; + } + int occurrences = tempIdx - idx; + if (occurrences < 2) { + return false; + } + if (occurrences == 2) { + if (sizeTwoFound) { + return false; + } + sizeTwoFound = true; + } + idx = tempIdx; + } + return sizeTwoFound; + } +} From e6f524172f779bbc7c26b65c6d9397110432c575 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Nov 2022 15:38:41 -0800 Subject: [PATCH 0927/1640] Create Maximum Profit in Job Scheduling.java --- Hard/Maximum Profit in Job Scheduling.java | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Hard/Maximum Profit in Job Scheduling.java diff --git a/Hard/Maximum Profit in Job Scheduling.java b/Hard/Maximum Profit in Job Scheduling.java new file mode 100644 index 00000000..f95e58ab --- /dev/null +++ b/Hard/Maximum Profit in Job Scheduling.java @@ -0,0 +1,28 @@ +class Solution { + public int jobScheduling(int[] startTime, int[] endTime, int[] profit) { + int n = startTime.length; + int[][] jobs = new int[n][3]; + for (int i = 0; i < n; i++) { + jobs[i] = new int[]{startTime[i], endTime[i], profit[i]}; + } + Arrays.sort(jobs, (a, b) -> a[0] - b[0]); + Integer[] cache = new Integer[n]; + return dfs(0, jobs, cache); + } + + private int dfs(int idx, int[][] jobs, Integer[] cache) { + if (idx == jobs.length) { + return 0; + } + if (cache[idx] != null) { + return cache[idx]; + } + int nextIdx = idx + 1; + while (nextIdx < jobs.length && jobs[idx][1] > jobs[nextIdx][0]) { + nextIdx++; + } + int jobScheduled = jobs[idx][2] + dfs(nextIdx, jobs, cache); + int jobNotScheduled = dfs(idx + 1, jobs, cache); + return cache[idx] = Math.max(jobScheduled, jobNotScheduled); + } +} From 15b90757530a1a4ad64f74a23a63e6e25b7375e6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Nov 2022 18:27:56 -0800 Subject: [PATCH 0928/1640] Create Minimum Cuts to Divide a Circle.java --- Easy/Minimum Cuts to Divide a Circle.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Minimum Cuts to Divide a Circle.java diff --git a/Easy/Minimum Cuts to Divide a Circle.java b/Easy/Minimum Cuts to Divide a Circle.java new file mode 100644 index 00000000..16540797 --- /dev/null +++ b/Easy/Minimum Cuts to Divide a Circle.java @@ -0,0 +1,5 @@ +class Solution { + public int numberOfCuts(int n) { + return n == 1 ? 0 : (n % 2 == 0 ? n / 2 : n); + } +} From df0a087491cd52a1f0cfec5e22ef09a135d8ea83 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Nov 2022 07:57:29 -0800 Subject: [PATCH 0929/1640] Create Append Characters to String to Make Subsequence.java --- ...nd Characters to String to Make Subsequence.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Append Characters to String to Make Subsequence.java diff --git a/Medium/Append Characters to String to Make Subsequence.java b/Medium/Append Characters to String to Make Subsequence.java new file mode 100644 index 00000000..af35ca3d --- /dev/null +++ b/Medium/Append Characters to String to Make Subsequence.java @@ -0,0 +1,13 @@ +class Solution { + public int appendCharacters(String s, String t) { + int idxS = 0; + int idxT = 0; + while (idxS < s.length() && idxT < t.length()) { + if (s.charAt(idxS) == t.charAt(idxT)) { + idxT++; + } + idxS++; + } + return idxT == t.length() ? 0 : t.length() - idxT; + } +} From cbe46171937d1765f96c60fff58e4c143c9b2f52 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Nov 2022 17:45:33 -0800 Subject: [PATCH 0930/1640] Create Remove Nodes From Linked List.java --- Medium/Remove Nodes From Linked List.java | 40 +++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Medium/Remove Nodes From Linked List.java diff --git a/Medium/Remove Nodes From Linked List.java b/Medium/Remove Nodes From Linked List.java new file mode 100644 index 00000000..850e4da0 --- /dev/null +++ b/Medium/Remove Nodes From Linked List.java @@ -0,0 +1,40 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode removeNodes(ListNode head) { + ListNode revNode = reverse(head); + ListNode curr = revNode; + ListNode prev = null; + int maxValue = Integer.MIN_VALUE; + while (curr != null) { + if (curr.val < maxValue) { + prev.next = curr.next; + } else { + prev = curr; + maxValue = Math.max(curr.val, maxValue); + } + curr = curr.next; + } + return reverse(revNode); + } + + private ListNode reverse(ListNode node) { + ListNode curr = node; + ListNode prev = null; + while (curr != null) { + ListNode next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; + } +} From 9bb3ac3b04c648b30d94067e777f2cd3351e992d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Nov 2022 07:04:59 -0800 Subject: [PATCH 0931/1640] Update Design Snake Game.java --- Medium/Design Snake Game.java | 137 +++++++++++++++------------------- 1 file changed, 62 insertions(+), 75 deletions(-) diff --git a/Medium/Design Snake Game.java b/Medium/Design Snake Game.java index e4185474..dd645d15 100644 --- a/Medium/Design Snake Game.java +++ b/Medium/Design Snake Game.java @@ -1,87 +1,74 @@ class SnakeGame { - - private final int width; - private final int height; - private final Set> body; - private final Deque> bodyQueue; - private final Queue> foodQueue; - private int foodPoint; - - public SnakeGame(int width, int height, int[][] food) { - this.width = width; - this.height = height; - this.body = new HashSet<>(); - this.bodyQueue = new LinkedList<>(); - this.body.add(new Pair(0, 0)); - this.bodyQueue.add(new Pair(0, 0)); - this.foodQueue = new LinkedList<>(); - for (int[] fd : food) { - foodQueue.add(new Pair(fd[0], fd[1])); + private final Deque snake; + private final Queue foodQueue; + private final Set snakeBody; + private final int width; + private final int height; + private int score; + + public SnakeGame(int width, int height, int[][] food) { + this.snake = new ArrayDeque<>(); + this.snake.addFirst(new int[]{0, 0}); + this.foodQueue = new LinkedList<>(); + this.foodQueue.addAll(Arrays.asList(food)); + this.snakeBody = new HashSet<>(); + this.snakeBody.add(0 + "|" + 0); + this.width = width; + this.height = height; + this.score = 0; } - this.foodPoint = 0; - } - - public int move(String direction) { - Pair currPosition = bodyQueue.peekLast(); - Pair nextPosition = move(currPosition, direction); - if (!isSnakeAlive(nextPosition)) { - return -1; + + public int move(String direction) { + int[] nextMove = getNextMove(direction); + if (!isMoveWithInBound(nextMove)) { + return -1; + } + moveSnake(nextMove); + if (isBitingItself(nextMove)) { + return -1; + } + this.snakeBody.add(nextMove[0] + "|" + nextMove[1]); + return score; } - if (!snakeAteFood(nextPosition)) { - body.remove(bodyQueue.pollFirst()); - bodyQueue.addLast(nextPosition); - body.add(nextPosition); + + private int[] getNextMove(String direction) { + int[] nextMove = Arrays.copyOf(this.snake.peekFirst(), 2); + switch (direction) { + case "L" -> nextMove[1]--; + case "R" -> nextMove[1]++; + case "U" -> nextMove[0]--; + case "D" -> nextMove[0]++; + default -> {} + } + return nextMove; } - return foodPoint; - } - - private Pair move(Pair currPosition, String direction) { - int row = currPosition.getKey(); - int col = currPosition.getValue(); - switch (direction) { - case "U": - row--; - break; - case "D": - row++; - break; - case "L": - col--; - break; - case "R": - col++; - break; - default: - break; + + private boolean isMoveWithInBound(int[] move) { + int x = move[0]; + int y = move[1]; + return x >= 0 && y >= 0 && x < this.height && y < this.width; } - return new Pair(row, col); - } - - private boolean isSnakeAlive(Pair position) { - int row = position.getKey(); - int col = position.getValue(); - // Snake touched the boundary - if (!(row >= 0 && col >= 0 && row < height && col < width)) { - return false; + + private void moveSnake(int[] move) { + this.snake.addFirst(move); + if (snakeEatsFood(move)) { + this.foodQueue.remove(); + this.score++; + } else { + int[] tail = this.snake.removeLast(); + this.snakeBody.remove(tail[0] + "|" + tail[1]); + } } - // Snake bit somewhere in middle of the body - if (!position.equals(this.bodyQueue.peekFirst()) && this.body.contains(position)) { - return false; + + private boolean snakeEatsFood(int[] move) { + return !this.foodQueue.isEmpty() && move[0] == this.foodQueue.peek()[0] && move[1] == this.foodQueue.peek()[1]; } - return true; - } - - private boolean snakeAteFood(Pair position) { - if (!foodQueue.isEmpty() && position.equals(foodQueue.peek())) { - bodyQueue.addLast(position); - body.add(position); - foodQueue.poll(); - foodPoint++; - return true; + + private boolean isBitingItself(int[] move) { + String key = move[0] + "|" + move[1]; + return this.snakeBody.contains(key); } - return false; - } } /** From 34ebf07124878e5a55181ef53d014a7b785abf81 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Nov 2022 07:49:06 -0800 Subject: [PATCH 0932/1640] Create Design SQL.java --- Medium/Design SQL.java | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Medium/Design SQL.java diff --git a/Medium/Design SQL.java b/Medium/Design SQL.java new file mode 100644 index 00000000..644009b1 --- /dev/null +++ b/Medium/Design SQL.java @@ -0,0 +1,47 @@ +class SQL { + + private final Map>> database; + private final Map tableIdMap; + + public SQL(List tableNames, List columns) { + this.database = new HashMap<>(); + this.tableIdMap = new HashMap<>(); + for (String name : tableNames) { + database.put(name, new HashMap<>()); + tableIdMap.put(name, 1); + } + } + + public void insertRow(String tableName, List row) { + // Select the table + Map> table = this.database.get(tableName); + // Insert row in the table + table.put(tableIdMap.get(tableName), row); + // Increment rowId for the table + tableIdMap.put(tableName, tableIdMap.get(tableName) + 1); + } + + public void deleteRow(String tableName, int rowId) { + // Select the table + Map> table = this.database.get(tableName); + // Delete the row against the rowId + table.remove(rowId); + } + + public String selectCell(String tableName, int rowId, int columnId) { + // Select the table + Map> table = this.database.get(tableName); + // Select row + List row = table.get(rowId); + // Select column + return row.get(columnId - 1); + } +} + +/** + * Your SQL object will be instantiated and called as such: + * SQL obj = new SQL(names, columns); + * obj.insertRow(name,row); + * obj.deleteRow(name,rowId); + * String param_3 = obj.selectCell(name,rowId,columnId); + */ From f1a24c0311d138b2efa37d8169e2230c4b902c10 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 30 Nov 2022 08:17:24 -0800 Subject: [PATCH 0933/1640] Update Implement Trie II (Prefix Tree).java --- Medium/Implement Trie II (Prefix Tree).java | 110 ++++++++------------ 1 file changed, 46 insertions(+), 64 deletions(-) diff --git a/Medium/Implement Trie II (Prefix Tree).java b/Medium/Implement Trie II (Prefix Tree).java index e6bae27d..a3bddf29 100644 --- a/Medium/Implement Trie II (Prefix Tree).java +++ b/Medium/Implement Trie II (Prefix Tree).java @@ -1,82 +1,64 @@ -class Trie { +public class Trie { - private Node head; + private final TrieNode root; - public Trie() { - this.head = new Node('-'); - } - - public void insert(String word) { - Node curr = this.head; - for (char c : word.toCharArray()) { - if (!curr.children.containsKey(c)) { - curr.children.put(c, new Node(c)); - } - curr = curr.children.get(c); + public Trie() { + this.root = new TrieNode(); } - curr.wordToFrequency.put(word, curr.wordToFrequency.getOrDefault(word, 0) + 1); - } - public int countWordsEqualTo(String word) { - Node curr = this.head; - curr = traverseTrie(curr, word); - if (curr == null) { - return 0; + public void insert(String word) { + TrieNode curr = root; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + curr.children.put(c, new TrieNode()); + } + curr = curr.children.get(c); + curr.startingWordCount++; + } + curr.completeWordCount++; } - return curr.wordToFrequency.getOrDefault(word, 0); - } - public int countWordsStartingWith(String prefix) { - Node curr = this.head; - curr = traverseTrie(curr, prefix); - if (curr == null) { - return 0; + public int countWordsEqualTo(String word) { + TrieNode endNode = searchWord(word); + return endNode == null ? 0 : endNode.completeWordCount; } - int count = 0; - Queue queue = new LinkedList<>(); - queue.add(curr); - while (!queue.isEmpty()) { - Node removed = queue.remove(); - for (String word : removed.wordToFrequency.keySet()) { - count += removed.wordToFrequency.get(word); - } - for (Character child : removed.children.keySet()) { - queue.add(removed.children.get(child)); - } + + public int countWordsStartingWith(String prefix) { + TrieNode endNode = searchWord(prefix); + return endNode == null ? 0 : endNode.startingWordCount; } - return count; - } - public void erase(String word) { - Node curr = this.head; - curr = traverseTrie(curr, word); - if (curr == null || curr.wordToFrequency.getOrDefault(word, 0) == 0) { - return; + public void erase(String word) { + TrieNode curr = root; + for (char c : word.toCharArray()) { + curr = curr.children.get(c); + curr.startingWordCount--; + } + curr.completeWordCount--; } - curr.wordToFrequency.put(word, curr.wordToFrequency.get(word) - 1); - } - private Node traverseTrie(Node curr, String word) { - for (char c : word.toCharArray()) { - if (!curr.children.containsKey(c)) { - return null; - } - curr = curr.children.get(c); + private TrieNode searchWord(String word) { + TrieNode curr = root; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + return null; + } + curr = curr.children.get(c); + } + return curr; } - return curr; - } - private static class Node { - char c; - Map children; - Map wordToFrequency; + private static class TrieNode { + Map children; + int completeWordCount; + int startingWordCount; - public Node(char c) { - this.c = c; - this.children = new HashMap<>(); - this.wordToFrequency = new HashMap<>(); + public TrieNode() { + this.children = new HashMap<>(); + this.completeWordCount = 0; + this.startingWordCount = 0; + } } - } } /** From 6d24d46dd60184c7eb523490bf7a9f91b76a997d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 30 Nov 2022 13:56:53 -0800 Subject: [PATCH 0934/1640] Update Serialize and Deserialize BST.java --- Medium/Serialize and Deserialize BST.java | 70 +++++++++++------------ 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/Medium/Serialize and Deserialize BST.java b/Medium/Serialize and Deserialize BST.java index ff587f9d..a6da4bff 100644 --- a/Medium/Serialize and Deserialize BST.java +++ b/Medium/Serialize and Deserialize BST.java @@ -10,48 +10,44 @@ public class Codec { // Encodes a tree to a single string. - public String serialize(TreeNode root) { - if (root == null) { - return ""; + public String serialize(TreeNode root) { + if (root == null) { + return "#"; + } + StringBuilder sb = new StringBuilder(); + dfsSerialize(root, sb); + return sb.toString().trim(); } - StringBuilder sb = new StringBuilder(); - dfs(root, sb); - return sb.toString().trim(); - } - - private void dfs(TreeNode root, StringBuilder sb) { - if (root == null) { - return; + + private void dfsSerialize(TreeNode root, StringBuilder sb) { + if (root == null) { + sb.append("#").append(" "); + return; + } + sb.append(root.val).append(" "); + dfsSerialize(root.left, sb); + dfsSerialize(root.right, sb); } - sb.append(root.val).append(" "); - dfs(root.left, sb); - dfs(root.right, sb); - } - // Decodes your encoded data to tree. - public TreeNode deserialize(String data) { - if (data.length() == 0) { - return null; + // Decodes your encoded data to tree. + public TreeNode deserialize(String data) { + Queue queue = new LinkedList<>(Arrays.asList(data.split("\\s+"))); + return dfsDeserialize(queue); } - String[] split = data.split("\\s+"); - return buildBST(split, 0, split.length - 1); - } - - private TreeNode buildBST(String[] data, int start, int end) { - if (start > end) { - return null; + + private TreeNode dfsDeserialize(Queue queue) { + if (queue.isEmpty()) { + return null; + } + String removed = queue.remove(); + if (removed.equals("#")) { + return null; + } + TreeNode root = new TreeNode(Integer.parseInt(removed)); + root.left = dfsDeserialize(queue); + root.right = dfsDeserialize(queue); + return root; } - TreeNode root = new TreeNode(Integer.parseInt(data[start])); - int index; - for (index = start; index <= end; index++) { - if (Integer.parseInt(data[index]) > Integer.parseInt(data[start])) { - break; - } - } - root.left = buildBST(data, start + 1, index - 1); - root.right = buildBST(data, index, end); - return root; - } } // Your Codec object will be instantiated and called as such: From 2aaa32060b5eed2a459b110c4e1468c2c244c11e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 2 Dec 2022 07:12:27 -0800 Subject: [PATCH 0935/1640] Update Minimize Product Sum of Two Arrays.java --- .../Minimize Product Sum of Two Arrays.java | 48 +++++++++---------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/Medium/Minimize Product Sum of Two Arrays.java b/Medium/Minimize Product Sum of Two Arrays.java index 4f8e184b..8302c68e 100644 --- a/Medium/Minimize Product Sum of Two Arrays.java +++ b/Medium/Minimize Product Sum of Two Arrays.java @@ -1,29 +1,25 @@ class Solution { - public int minProductSum(int[] nums1, int[] nums2) { - int[] frequencyOne = new int[101]; - int[] frequencyTwo = new int[101]; - for (int i = 0; i < nums1.length; i++) { - frequencyOne[nums1[i]]++; - frequencyTwo[nums2[i]]++; + public int minProductSum(int[] nums1, int[] nums2) { + int[] frequencyOne = new int[101]; + int[] frequencyTwo = new int[101]; + for (int i = 0; i < nums1.length; i++) { + frequencyOne[nums1[i]]++; + frequencyTwo[nums2[i]]++; + } + int productSum = 0; + int idxOne = 1; + int idxTwo = 100; + while (idxOne < 101 && idxTwo > 0) { + if (frequencyOne[idxOne] == 0) { + idxOne++; + } else if (frequencyTwo[idxTwo] == 0) { + idxTwo--; + } else { + productSum += idxOne * idxTwo; + frequencyOne[idxOne]--; + frequencyTwo[idxTwo]--; + } + } + return productSum; } - int idxOne = 0; - int idxTwo = 100; - int sum = 0; - while (idxOne < 101 && idxTwo >= 0) { - while (idxOne < 101 && frequencyOne[idxOne] == 0) { - idxOne++; - } - while (idxTwo >= 0 && frequencyTwo[idxTwo] == 0) { - idxTwo--; - } - if (idxOne == 101 || idxTwo == -1) { - break; - } - int counter = Math.min(frequencyOne[idxOne], frequencyTwo[idxTwo]); - sum += counter * idxOne * idxTwo; - frequencyOne[idxOne] -= counter; - frequencyTwo[idxTwo] -= counter; - } - return sum; - } } From 113c6829c318263f68ae8f415c0f93c2bbd74ecb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 2 Dec 2022 17:58:28 -0800 Subject: [PATCH 0936/1640] Update Sort Characters By Frequency.java --- Medium/Sort Characters By Frequency.java | 63 ++++++++++-------------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/Medium/Sort Characters By Frequency.java b/Medium/Sort Characters By Frequency.java index d85dc32a..7c0978bc 100644 --- a/Medium/Sort Characters By Frequency.java +++ b/Medium/Sort Characters By Frequency.java @@ -1,41 +1,32 @@ class Solution { - public String frequencySort(String s) { - int[] freqMap = new int[62]; - int maxFrequency = 0; - for (char c : s.toCharArray()) { - int charIdx = getCharIndex(c); - freqMap[charIdx]++; - maxFrequency = Math.max(maxFrequency, freqMap[charIdx]); - } - List[] revMap = new List[maxFrequency + 1]; - for (int i = 0; i < 62; i++) { - char c = getDecodedChar(i); - int currFreq = freqMap[i]; - if (currFreq != 0) { - if (revMap[currFreq] == null) { - revMap[currFreq] = new ArrayList<>(); + + private static final String ALL_LETTERS = + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + + public String frequencySort(String s) { + Map map = new HashMap<>(); + int maxFrequency = 0; + for (char c : s.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); + maxFrequency = Math.max(maxFrequency, map.get(c)); } - revMap[currFreq].add(c); - } - } - StringBuilder sb = new StringBuilder(); - for (int i = maxFrequency; i > 0; i--) { - if (revMap[i] != null) { - List characterList = revMap[i]; - for (char c : characterList) { - sb.append(String.valueOf(c).repeat(i)); + List[] frequencyToChar = new List[maxFrequency + 1]; + for (char c : map.keySet()) { + if (frequencyToChar[map.get(c)] == null) { + frequencyToChar[map.get(c)] = new ArrayList<>(); + } + frequencyToChar[map.get(c)].add(c); + } + StringBuilder sb = new StringBuilder(); + for (int i = maxFrequency; i > 0; i--) { + List characters = frequencyToChar[i] == null ? + new ArrayList<>() : frequencyToChar[i]; + for (char c : characters) { + for (int j = 0; j < i; j++) { + sb.append(c); + } + } } - } + return sb.toString(); } - return sb.toString(); - } - - private char getDecodedChar(int idx) { - return (char) (idx < 26 ? 97 + idx : (idx >= 52 ? 48 + idx - 52 : 65 + idx - 26)); - } - - private int getCharIndex(char c) { - return Character.isDigit(c) ? 52 + c - '0' - : (Character.isUpperCase(c) ? c - 'A' + 26 : c - 'a'); - } } From 115f63273228150273361f99273264895fcb3dc1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 4 Dec 2022 16:23:16 -0800 Subject: [PATCH 0937/1640] Create Circular Sentence.java --- Easy/Circular Sentence.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Circular Sentence.java diff --git a/Easy/Circular Sentence.java b/Easy/Circular Sentence.java new file mode 100644 index 00000000..51b21134 --- /dev/null +++ b/Easy/Circular Sentence.java @@ -0,0 +1,16 @@ +class Solution { + public boolean isCircularSentence(String sentence) { + String[] words = sentence.split("\\s+"); + int n = words.length; + for (int i = 0; i < n - 1; i++) { + char lastCharOfCurrentWord = words[i].charAt(words[i].length() - 1); + char firstCharOfNextWord = words[i + 1].charAt(0); + if (lastCharOfCurrentWord != firstCharOfNextWord) { + return false; + } + } + char lastCharOfLastWord = words[n - 1].charAt(words[n - 1].length() - 1); + char firstCharOfFirstWord = words[0].charAt(0); + return lastCharOfLastWord == firstCharOfFirstWord; + } +} From e41fdb30da2687e6b40d00db24ef7d2f706c776e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 5 Dec 2022 07:05:17 -0800 Subject: [PATCH 0938/1640] Create Divide Players Into Teams of Equal Skill.java --- ...ide Players Into Teams of Equal Skill.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Divide Players Into Teams of Equal Skill.java diff --git a/Medium/Divide Players Into Teams of Equal Skill.java b/Medium/Divide Players Into Teams of Equal Skill.java new file mode 100644 index 00000000..bebcec21 --- /dev/null +++ b/Medium/Divide Players Into Teams of Equal Skill.java @@ -0,0 +1,19 @@ +class Solution { + public long dividePlayers(int[] skill) { + Arrays.sort(skill); + long totalChemistry = 0; + int start = 0; + int end = skill.length - 1; + int totalSkill = skill[start] + skill[end]; + while (start < end) { + int currTotal = skill[start] + skill[end]; + if (currTotal != totalSkill) { + return -1; + } + totalChemistry += skill[start] * skill[end]; + start++; + end--; + } + return totalChemistry; + } +} From 31e3692033b5707773e492a822e1ce895b55474a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 6 Dec 2022 17:25:20 -0800 Subject: [PATCH 0939/1640] Update Range Sum of BST.java --- Easy/Range Sum of BST.java | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Easy/Range Sum of BST.java b/Easy/Range Sum of BST.java index b3d21555..3ed8dfdd 100644 --- a/Easy/Range Sum of BST.java +++ b/Easy/Range Sum of BST.java @@ -14,22 +14,22 @@ * } */ class Solution { - public int rangeSumBST(TreeNode root, int low, int high) { - Stack stack = new Stack<>(); - stack.push(root); - int sum = 0; - while (!stack.isEmpty()) { - TreeNode removed = stack.pop(); - if (removed.val > low && removed.left != null) { - stack.push(removed.left); - } - if (removed.val < high && removed.right != null) { - stack.push(removed.right); - } - if (low <= removed.val && removed.val <= high) { - sum += removed.val; + public int rangeSumBST(TreeNode root, int low, int high) { + int sum = 0; + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + TreeNode removed = queue.remove(); + if (removed.val >= low && removed.val <= high) { + sum += removed.val; + } + if (removed.val >= low && removed.left != null) { + queue.add(removed.left); + } + if (removed.val <= high && removed.right != null) { + queue.add(removed.right); + } } + return sum; } - return sum; - } } From 78dad25c23a39aeb7d419d3a59a394fcccd0095d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Dec 2022 07:10:09 -0800 Subject: [PATCH 0940/1640] Update Design an Expression Tree With Evaluate Function.java --- ...xpression Tree With Evaluate Function.java | 108 ++++++++++-------- 1 file changed, 61 insertions(+), 47 deletions(-) diff --git a/Medium/Design an Expression Tree With Evaluate Function.java b/Medium/Design an Expression Tree With Evaluate Function.java index 123e21df..e01eb49f 100644 --- a/Medium/Design an Expression Tree With Evaluate Function.java +++ b/Medium/Design an Expression Tree With Evaluate Function.java @@ -4,50 +4,56 @@ */ abstract class Node { - public abstract int evaluate(); - // define your fields here + public abstract int evaluate(); + // define your fields here }; + class NumericNode extends Node { - - private int val; - - public NumericNode(int val) { - this.val = val; - } - - public int evaluate() { - return this.val; - } + private int val; + + public NumericNode(int val) { + this.val = val; + } + + @Override + public int evaluate() { + return this.val; + } } + class OperatorNode extends Node { - private char operator; - private Node leftNode; - private Node rightNode; - - public OperatorNode(char operator, Node leftNode, Node rightNode) { - this.operator = operator; - this.leftNode = leftNode; - this.rightNode = rightNode; - } - - public int evaluate() { - int leftValue = this.leftNode == null ? 0 : this.leftNode.evaluate(); - int rightValue = this.rightNode == null ? 0 : this.rightNode.evaluate(); - if (this.operator == '+') { - return leftValue + rightValue; - } else if (this.operator == '-') { - return leftValue - rightValue; - } else if (this.operator == '*') { - return leftValue * rightValue; - } else { - return leftValue / rightValue; + private char operator; + private Node left; + private Node right; + + public OperatorNode(char operator) { + this.operator = operator; + this.left = null; + this.right = null; + } + + @Override + public int evaluate() { + return switch(operator) { + case '+' -> left.evaluate() + right.evaluate(); + case '-' -> left.evaluate() - right.evaluate(); + case '*' -> left.evaluate() * right.evaluate(); + case '/' -> left.evaluate() / right.evaluate(); + default -> 0; + }; + } + + public void setRightNode(Node right) { + this.right = right; + } + + public void setLeftNode(Node left) { + this.left = left; } - } } - /** * This is the TreeBuilder class. * You can treat it as the driver code that takes the postinfix input @@ -55,19 +61,27 @@ public int evaluate() { */ class TreeBuilder { - Node buildTree(String[] postfix) { - Stack stack = new Stack<>(); - for(String token: postfix){ - if (token.equals("*") || token.equals("+") || token.equals("-") || token.equals("/")) { - Node o2 = stack.pop(); - Node o1 = stack.pop(); - stack.push(new OperatorNode(token.charAt(0), o1, o2)); - } else{ - stack.push(new NumericNode(Integer.parseInt(token))); - } + private static final Set OPERATORS = Set.of("+", "-", "/", "*"); + + Node buildTree(String[] postfix) { + int[] idx = {postfix.length - 1}; + return buildTree(postfix, idx); + } + + private Node buildTree(String[] postfix, int[] idx) { + if (idx[0] < 0) { + return null; + } + String val = postfix[idx[0]--]; + if (OPERATORS.contains(val)) { + OperatorNode node = new OperatorNode(val.charAt(0)); + node.setRightNode(buildTree(postfix, idx)); + node.setLeftNode(buildTree(postfix, idx)); + return node; + } + NumericNode node = new NumericNode(Integer.parseInt(val)); + return node; } - return stack.pop(); - } }; From 2446f4b5c48df4479b74c241e97da53bf152c004 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Dec 2022 13:32:53 -0800 Subject: [PATCH 0941/1640] Update Valid Word Square.java --- Easy/Valid Word Square.java | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Easy/Valid Word Square.java b/Easy/Valid Word Square.java index 69e1925d..392d8392 100644 --- a/Easy/Valid Word Square.java +++ b/Easy/Valid Word Square.java @@ -1,16 +1,13 @@ class Solution { - public boolean validWordSquare(List words) { - return IntStream.range(0, words.size()) - .allMatch(i -> words.get(i).equals(verticalRepresentation(words, i))); - } - - private String verticalRepresentation(List words, int col){ - StringBuilder sb = new StringBuilder(); - for (String word : words) { - if (col < word.length()) { - sb.append(word.charAt(col)); - } + public boolean validWordSquare(List words) { + int n = words.size(); + for (int i = 0; i < n; i++){ + for (int j = 0; j < words.get(i).length(); j++){ + if(j >= n || words.get(j).length() <= i || words.get(j).charAt(i) != words.get(i).charAt(j)) { + return false; + } + } + } + return true; } - return sb.toString(); - } } From f5a0c5ccd9016a35202cf2719443bb7519c434a0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Dec 2022 18:54:48 -0800 Subject: [PATCH 0942/1640] Update Leaf-Similar Trees.java --- Easy/Leaf-Similar Trees.java | 38 +++++++++++++++--------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/Easy/Leaf-Similar Trees.java b/Easy/Leaf-Similar Trees.java index 38bb0ab9..1ac4d480 100644 --- a/Easy/Leaf-Similar Trees.java +++ b/Easy/Leaf-Similar Trees.java @@ -14,29 +14,23 @@ * } */ class Solution { - public boolean leafSimilar(TreeNode root1, TreeNode root2) { - return getLeaves(root1).equals(getLeaves(root2)); - } - - private List getLeaves(TreeNode root) { - Stack stack = new Stack<>(); - List leaves = new ArrayList<>(); - while (root != null) { - stack.push(root); - root = root.left; + public boolean leafSimilar(TreeNode root1, TreeNode root2) { + StringBuilder leavesOne = new StringBuilder(); + StringBuilder leavesTwo = new StringBuilder(); + populateLeaves(root1, leavesOne); + populateLeaves(root2, leavesTwo); + return leavesOne.toString().equals(leavesTwo.toString()); } - while (!stack.isEmpty()) { - TreeNode removed = stack.pop(); - if (removed.left == null && removed.right == null) { - leaves.add(removed.val); - } else { - TreeNode rightNode = removed.right; - while (rightNode != null) { - stack.push(rightNode); - rightNode = rightNode.left; + + private void populateLeaves(TreeNode root, StringBuilder leaves) { + if (root == null) { + return; } - } + if (root.left == null && root.right == null) { + leaves.append(root.val).append(","); + return; + } + populateLeaves(root.left, leaves); + populateLeaves(root.right, leaves); } - return leaves; - } } From 4bcd108338b86f2326ab9206633a14c39aec3650 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Dec 2022 09:06:36 -0800 Subject: [PATCH 0943/1640] Create XOR Operation in an Array.java --- Easy/XOR Operation in an Array.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/XOR Operation in an Array.java diff --git a/Easy/XOR Operation in an Array.java b/Easy/XOR Operation in an Array.java new file mode 100644 index 00000000..17908959 --- /dev/null +++ b/Easy/XOR Operation in an Array.java @@ -0,0 +1,10 @@ +class Solution { + public int xorOperation(int n, int start) { + int xor = start; + for (int i = 1; i < n; i++) { + int nextNum = start + 2 * i; + xor = xor ^ nextNum; + } + return xor; + } +} From 785a04d97ef2dbb81982d8da6ba9b597cfe82a77 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Dec 2022 09:21:12 -0800 Subject: [PATCH 0944/1640] Create Largest Local Values in a Matrix.java --- Easy/Largest Local Values in a Matrix.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Largest Local Values in a Matrix.java diff --git a/Easy/Largest Local Values in a Matrix.java b/Easy/Largest Local Values in a Matrix.java new file mode 100644 index 00000000..570443a9 --- /dev/null +++ b/Easy/Largest Local Values in a Matrix.java @@ -0,0 +1,17 @@ +class Solution { + public int[][] largestLocal(int[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + int[][] result = new int[rows - 2][cols - 2]; + for (int i = 0; i < rows - 2; i++) { + for (int j = 0; j < cols - 2; j++) { + for (int k = i; k < i + 3; k++) { + for (int l = j; l < j + 3; l++) { + result[i][j] = Math.max(result[i][j], grid[k][l]); + } + } + } + } + return result; + } +} From b265e9d12baf76f919f69b0e4d37f03b8770908e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Dec 2022 09:21:26 -0800 Subject: [PATCH 0945/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddb9b55e..92c01bb6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 1100+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1200+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count From e085714d8caaca4531f99522fff03693b0f0bc15 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Dec 2022 09:32:42 -0800 Subject: [PATCH 0946/1640] Update Number of Connected Components in an Undirected Graph.java --- ...ted Components in an Undirected Graph.java | 72 +++++++------------ 1 file changed, 25 insertions(+), 47 deletions(-) diff --git a/Medium/Number of Connected Components in an Undirected Graph.java b/Medium/Number of Connected Components in an Undirected Graph.java index e794deea..59e0be29 100644 --- a/Medium/Number of Connected Components in an Undirected Graph.java +++ b/Medium/Number of Connected Components in an Undirected Graph.java @@ -1,51 +1,29 @@ class Solution { - public int countComponents(int n, int[][] edges) { - DisjointSet disjointSet = new DisjointSet(n); - for (int[] edge : edges) { - disjointSet.union(edge[0], edge[1]); - } - Set rootSet = new HashSet<>(); - for (int i = 0; i < n; i++) { - rootSet.add(disjointSet.find(i)); - } - return rootSet.size(); - } - - private static class DisjointSet { - - private final int[] root; - private final int[] rank; - - public DisjointSet(int size) { - this.root = new int[size]; - this.rank = new int[size]; - for (int i = 0; i < size; i++) { - this.root[i] = i; - this.rank[i] = 1; - } - } - - public void union(int nodeOne, int nodeTwo) { - int rootOne = find(nodeOne); - int rootTwo = find(nodeTwo); - if (rootOne != rootTwo) { - if (this.rank[rootOne] > this.rank[rootTwo]) { - this.root[rootTwo] = rootOne; - } else if (this.rank[rootOne] < this.rank[rootTwo]) { - this.root[rootOne] = rootTwo; - } else { - this.root[rootTwo] = rootOne; - this.rank[rootOne]++; + public int countComponents(int n, int[][] edges) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); + graph.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); } - } - } - - - public int find(int node) { - if (node == root[node]) { - return node; - } - return root[node] = find(root[node]); + int connectedComponentCount = 0; + Set visited = new HashSet<>(); + for (int i = 0; i < n; i++) { + if (!visited.contains(i)) { + Queue queue = new LinkedList<>(); + visited.add(i); + queue.add(i); + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (Integer neighbor : graph.getOrDefault(removed, new HashSet<>())) { + if (!visited.contains(neighbor)) { + queue.add(neighbor); + visited.add(neighbor); + } + } + } + connectedComponentCount++; + } + } + return connectedComponentCount; } - } } From c8738e752f5ac6c600a310b58337240ed342df7d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Dec 2022 17:18:06 -0800 Subject: [PATCH 0947/1640] Update Maximum Difference Between Node and Ancestor.java --- ... Difference Between Node and Ancestor.java | 44 ++++++++++++++----- 1 file changed, 33 insertions(+), 11 deletions(-) diff --git a/Medium/Maximum Difference Between Node and Ancestor.java b/Medium/Maximum Difference Between Node and Ancestor.java index 75d54cfa..b623f146 100644 --- a/Medium/Maximum Difference Between Node and Ancestor.java +++ b/Medium/Maximum Difference Between Node and Ancestor.java @@ -14,16 +14,38 @@ * } */ class Solution { - public int maxAncestorDiff(TreeNode root) { - return dfs(root, root.val, root.val); - } - - private int dfs(TreeNode root, int min, int max) { - if (root == null) { - return max - min; + public int maxAncestorDiff(TreeNode root) { + int maxDiff = 0; + Queue queue = new LinkedList<>(); + queue.add(new NodeValuePair(root, root.val, root.val)); + while (!queue.isEmpty()) { + NodeValuePair removed = queue.remove(); + TreeNode node = removed.node; + Integer minNodeValue = removed.minNodeValue; + Integer maxNodeValue = removed.maxNodeValue; + maxDiff = Math.max(maxDiff, Math.max(Math.abs(node.val - minNodeValue), Math.abs(node.val - maxNodeValue))); + Integer updatedMinNodeValue = Math.min(node.val, minNodeValue); + Integer updatedMaxNodeValue = Math.max(node.val, maxNodeValue); + if (node.left != null) { + queue.add(new NodeValuePair(node.left, updatedMinNodeValue, updatedMaxNodeValue)); + } + if (node.right != null) { + queue.add(new NodeValuePair(node.right, updatedMinNodeValue, updatedMaxNodeValue)); + } + } + return maxDiff; + } + + + private static class NodeValuePair { + private TreeNode node; + private Integer minNodeValue; + private Integer maxNodeValue; + + public NodeValuePair(TreeNode node, Integer minNodeValue, Integer maxNodeValue) { + this.node = node; + this.minNodeValue = minNodeValue; + this.maxNodeValue = maxNodeValue; + } } - max = Math.max(root.val, max); - min = Math.min(root.val, min); - return Math.max(dfs(root.left, min, max), dfs(root.right, min, max)); - } } From 6b413315ca240c5ca220caa614a4fda11cb8d483 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 10 Dec 2022 15:27:20 -0800 Subject: [PATCH 0948/1640] Create Maximum Product of Splitted Binary Tree.java --- ...ximum Product of Splitted Binary Tree.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/Maximum Product of Splitted Binary Tree.java diff --git a/Medium/Maximum Product of Splitted Binary Tree.java b/Medium/Maximum Product of Splitted Binary Tree.java new file mode 100644 index 00000000..72a36750 --- /dev/null +++ b/Medium/Maximum Product of Splitted Binary Tree.java @@ -0,0 +1,37 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int maxProduct(TreeNode root) { + List allNodeSums = new ArrayList<>(); + long totalSum = treeSum(root, allNodeSums); + long best = 0; + for (long sum : allNodeSums) { + best = Math.max(best, sum * (totalSum - sum)); + } + return (int) (best % 1000_000_007); + } + + private int treeSum(TreeNode root, List allNodeSums) { + if (root == null) { + return 0; + } + int leftSum = treeSum(root.left, allNodeSums); + int rightSum = treeSum(root.right, allNodeSums); + int totalSum = leftSum + rightSum + root.val; + allNodeSums.add(totalSum); + return totalSum; + } +} From e274ecf892388dfae8e765220fc608d5a7607366 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 10 Dec 2022 15:33:59 -0800 Subject: [PATCH 0949/1640] Create Maximum Value of a String in an Array.java --- Easy/Maximum Value of a String in an Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Maximum Value of a String in an Array.java diff --git a/Easy/Maximum Value of a String in an Array.java b/Easy/Maximum Value of a String in an Array.java new file mode 100644 index 00000000..29b0ec25 --- /dev/null +++ b/Easy/Maximum Value of a String in an Array.java @@ -0,0 +1,17 @@ +class Solution { + public int maximumValue(String[] strs) { + return Arrays.stream(strs) + .mapToInt(Solution::getStringValue) + .max() + .orElse(0); + } + + private static int getStringValue(String s) { + for (char c : s.toCharArray()) { + if (!Character.isDigit(c)) { + return s.length(); + } + } + return Integer.parseInt(s); + } +} From 087654b6cd0a153c8e1dac0d4cda069225e578e9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 10 Dec 2022 15:48:47 -0800 Subject: [PATCH 0950/1640] Create Maximum Star Sum of a Graph.java --- Medium/Maximum Star Sum of a Graph.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Maximum Star Sum of a Graph.java diff --git a/Medium/Maximum Star Sum of a Graph.java b/Medium/Maximum Star Sum of a Graph.java new file mode 100644 index 00000000..f54f2f83 --- /dev/null +++ b/Medium/Maximum Star Sum of a Graph.java @@ -0,0 +1,19 @@ +class Solution { + public int maxStarSum(int[] vals, int[][] edges, int k) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], node -> new PriorityQueue<>(Comparator.reverseOrder())).add(vals[edge[1]]); + graph.computeIfAbsent(edge[1], node -> new PriorityQueue<>(Comparator.reverseOrder())).add(vals[edge[0]]); + } + int maxSum = Integer.MIN_VALUE; + for (int i = 0; i < vals.length; i++) { + int currSum = vals[i]; + PriorityQueue pq = graph.getOrDefault(i, new PriorityQueue<>()); + for (int j = 0; j < k && !pq.isEmpty(); j++){ + currSum += Math.max(pq.poll(), 0); + } + maxSum = Math.max(maxSum, currSum); + } + return maxSum; + } +} From fbdfc0054f2ce1852d8a5c959029dc3593af9745 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Dec 2022 19:49:00 -0800 Subject: [PATCH 0951/1640] Update Implement Queue using Stacks.java --- Easy/Implement Queue using Stacks.java | 68 ++++++++++++-------------- 1 file changed, 31 insertions(+), 37 deletions(-) diff --git a/Easy/Implement Queue using Stacks.java b/Easy/Implement Queue using Stacks.java index c2a5254d..fd2b165e 100644 --- a/Easy/Implement Queue using Stacks.java +++ b/Easy/Implement Queue using Stacks.java @@ -1,46 +1,40 @@ class MyQueue { + + private final Stack stackOne; + private final Stack stackTwo; - /** Initialize your data structure here. */ - Stack stack; - Stack revStack; - public MyQueue() { - stack = new Stack<>(); - revStack = new Stack<>(); - } - - /** Push element x to the back of queue. */ - public void push(int x) { - stack.push(x); - } - - /** Removes the element from in front of queue and returns that element. */ - public int pop() { - while (!stack.isEmpty()) { - revStack.push(stack.pop()); + public MyQueue() { + this.stackOne = new Stack<>(); + this.stackTwo = new Stack<>(); } - int num = revStack.pop(); - while (!revStack.isEmpty()) { - stack.push(revStack.pop()); + + public void push(int x) { + this.stackOne.push(x); } - return num; - } - - /** Get the front element. */ - public int peek() { - while (!stack.isEmpty()) { - revStack.push(stack.pop()); + + public int pop() { + exchangeElements(stackOne, stackTwo); + int popped = stackTwo.pop(); + exchangeElements(stackTwo, stackOne); + return popped; } - int num = revStack.peek(); - while (!revStack.isEmpty()) { - stack.push(revStack.pop()); + + public int peek() { + exchangeElements(stackOne, stackTwo); + int peeked = stackTwo.peek(); + exchangeElements(stackTwo, stackOne); + return peeked; + } + + public boolean empty() { + return stackOne.isEmpty(); + } + + private void exchangeElements(Stack stack1, Stack stack2) { + while (!stack1.isEmpty()) { + stack2.push(stack1.pop()); + } } - return num; - } - - /** Returns whether the queue is empty. */ - public boolean empty() { - return stack.isEmpty(); - } } /** From 9c5f812efa54980ba27f7c1bb0929a6b765a1a19 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 17 Dec 2022 08:15:32 -0800 Subject: [PATCH 0952/1640] Update Evaluate Reverse Polish Notation.java --- Medium/Evaluate Reverse Polish Notation.java | 45 ++++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/Medium/Evaluate Reverse Polish Notation.java b/Medium/Evaluate Reverse Polish Notation.java index 483049db..17b3a709 100644 --- a/Medium/Evaluate Reverse Polish Notation.java +++ b/Medium/Evaluate Reverse Polish Notation.java @@ -1,27 +1,26 @@ class Solution { - public int evalRPN(String[] tokens) { - Stack stack = new Stack<>(); - String operations = "+-/*"; - for (String token : tokens) { - stack.push(operations.contains(token) ? Objects - .requireNonNull(performOperation(stack.pop(), stack.pop(), token)) - : Integer.parseInt(token)); + + private static final Set OPERATIONS = Set.of("*", "+", "/", "-"); + + public int evalRPN(String[] tokens) { + Stack stack = new Stack<>(); + for (String token : tokens) { + if (OPERATIONS.contains(token)) { + stack.push(performOperation(stack.pop(), stack.pop(), token)); + } else { + stack.push(Integer.parseInt(token)); + } + } + return stack.pop(); } - return stack.pop(); - } - - private Integer performOperation(Integer secondOperand, Integer firstOperand, String operation) { - switch (operation) { - case "+": - return firstOperand + secondOperand; - case "-": - return firstOperand - secondOperand; - case "*": - return firstOperand * secondOperand; - case "/": - return firstOperand / secondOperand; - default: - return null; + + private static int performOperation(int num2, int num1, String operation) throws UnsupportedOperationException { + return switch(operation) { + case "+" -> num1 + num2; + case "-" -> num1 - num2; + case "*" -> num1 * num2; + case "/" -> num1 / num2; + default -> throw new UnsupportedOperationException("Operation not supported"); + }; } - } } From d36cc6fa3adebcf5efd85afa882b87df8a322f46 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Dec 2022 06:40:30 -0800 Subject: [PATCH 0953/1640] Create Count Pairs Of Similar Strings.java --- Easy/Count Pairs Of Similar Strings.java | 26 ++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Easy/Count Pairs Of Similar Strings.java diff --git a/Easy/Count Pairs Of Similar Strings.java b/Easy/Count Pairs Of Similar Strings.java new file mode 100644 index 00000000..d9b1f7f9 --- /dev/null +++ b/Easy/Count Pairs Of Similar Strings.java @@ -0,0 +1,26 @@ +class Solution { + public int similarPairs(String[] words) { + Map map = new HashMap<>(); + int pairCount = 0; + for (String word : words) { + String key = buildSortedCharString(word); + pairCount += map.getOrDefault(key, 0); + map.put(key, map.getOrDefault(key, 0) + 1); + } + return pairCount; + } + + private static String buildSortedCharString(String s) { + boolean[] exists = new boolean[26]; + for (char c : s.toCharArray()) { + exists[c - 'a'] = true; + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 26; i++) { + if (exists[i]) { + sb.append((char) (97 + i)); + } + } + return sb.toString(); + } +} From d07aabcad7e83b10d73795d0d926a99803b91081 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Dec 2022 16:50:46 -0800 Subject: [PATCH 0954/1640] Update Find if Path Exists in Graph.java --- Easy/Find if Path Exists in Graph.java | 44 ++++++++++++-------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/Easy/Find if Path Exists in Graph.java b/Easy/Find if Path Exists in Graph.java index cfa38aaa..7a0c6a47 100644 --- a/Easy/Find if Path Exists in Graph.java +++ b/Easy/Find if Path Exists in Graph.java @@ -1,28 +1,26 @@ class Solution { - public boolean validPath(int n, int[][] edges, int start, int end) { - Map> graph = new HashMap<>(); - for (int[] edge : edges) { - graph.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); - graph.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); - } - Queue queue = new LinkedList<>(); - queue.add(start); - Set visited = new HashSet<>(); - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int removed = queue.remove(); - if (removed == end) { - return true; + public boolean validPath(int n, int[][] edges, int source, int destination) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); + graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); } - visited.add(removed); - for (Integer connection : graph.getOrDefault(removed, new HashSet<>())) { - if (!visited.contains(connection)) { - queue.add(connection); - } + Queue queue = new LinkedList<>(); + queue.add(source); + Set visited = new HashSet<>(); + visited.add(source); + while (!queue.isEmpty()) { + Integer removed = queue.remove(); + if (removed == destination) { + return true; + } + for (Integer connection : graph.getOrDefault(removed, new ArrayList<>())) { + if (!visited.contains(connection)) { + queue.add(connection); + visited.add(connection); + } + } } - } + return false; } - return false; - } } From e5b615220164071dfed7f08df0512d06af5877bd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 19 Dec 2022 13:18:29 -0800 Subject: [PATCH 0955/1640] Create Add Edges to Make Degrees of All Nodes Even.java --- ...ges to Make Degrees of All Nodes Even.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Hard/Add Edges to Make Degrees of All Nodes Even.java diff --git a/Hard/Add Edges to Make Degrees of All Nodes Even.java b/Hard/Add Edges to Make Degrees of All Nodes Even.java new file mode 100644 index 00000000..2258af63 --- /dev/null +++ b/Hard/Add Edges to Make Degrees of All Nodes Even.java @@ -0,0 +1,48 @@ +class Solution { + public boolean isPossible(int n, List> edges) { + Map> graph = new HashMap<>(); + for (List edge : edges) { + graph.computeIfAbsent(edge.get(0), k -> new HashSet<>()).add(edge.get(1)); + graph.computeIfAbsent(edge.get(1), k -> new HashSet<>()).add(edge.get(0)); + } + List nodeWithOddEdges = graph.entrySet() + .stream() + .filter(e -> e.getValue().size() % 2 != 0) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + if (nodeWithOddEdges.size() == 0) { + return true; + } + if (nodeWithOddEdges.size() == 2) { + Integer nodeOne = nodeWithOddEdges.get(0); + Integer nodeTwo = nodeWithOddEdges.get(1); + if (!hasEdge(graph, nodeOne, nodeTwo)) { + return true; + } + for (int i = 1; i <= n; i++) { + if (i == nodeOne || i == nodeTwo) { + continue; + } + if (!hasEdge(graph, i, nodeOne) && !hasEdge(graph, i, nodeTwo)) { + return true; + } + } + } + if (nodeWithOddEdges.size() == 4) { + Integer nodeOne = nodeWithOddEdges.get(0); + Integer nodeTwo = nodeWithOddEdges.get(1); + Integer nodeThree = nodeWithOddEdges.get(2); + Integer nodeFour = nodeWithOddEdges.get(3); + if ((!hasEdge(graph, nodeOne, nodeTwo) && !hasEdge(graph, nodeThree, nodeFour)) || + (!hasEdge(graph, nodeOne, nodeThree) && !hasEdge(graph, nodeTwo, nodeFour)) || + (!hasEdge(graph, nodeOne, nodeFour) && !hasEdge(graph, nodeTwo, nodeThree))) { + return true; + } + } + return false; + } + + private static boolean hasEdge(Map> graph, int nodeOne, int nodeTwo) { + return graph.getOrDefault(nodeOne, new HashSet<>()).contains(nodeTwo); + } +} From a854e63dfc56e32291cd1647c431e08cb4c6dcf8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 19 Dec 2022 18:41:16 -0800 Subject: [PATCH 0956/1640] Update Keys and Rooms.java --- Medium/Keys and Rooms.java | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/Medium/Keys and Rooms.java b/Medium/Keys and Rooms.java index 6a2f8c3f..a4fd783a 100644 --- a/Medium/Keys and Rooms.java +++ b/Medium/Keys and Rooms.java @@ -1,19 +1,18 @@ class Solution { public boolean canVisitAllRooms(List> rooms) { - Stack stack = new Stack<>(); - Set set = new HashSet<>(); - set.add(0); - stack.add(0); - while (!stack.isEmpty()) { - int keyPopped = stack.pop(); - List keys = rooms.get(keyPopped); - for (Integer key : keys) { - if (!set.contains(key)) { - stack.push(key); - set.add(key); + Set visited = new HashSet<>(); + Queue queue = new LinkedList<>(); + queue.add(0); + visited.add(0); + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (Integer nextRoom : rooms.get(removed)) { + if (!visited.contains(nextRoom)) { + queue.add(nextRoom); + visited.add(nextRoom); } } } - return set.size() == rooms.size(); + return visited.size() == rooms.size(); } } From 27b93972f221d1e43babb8cb12d7b81da50ab9d4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 21 Dec 2022 11:29:49 -0800 Subject: [PATCH 0957/1640] Create Possible Bipartition.java --- Medium/Possible Bipartition.java | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Medium/Possible Bipartition.java diff --git a/Medium/Possible Bipartition.java b/Medium/Possible Bipartition.java new file mode 100644 index 00000000..4d2a0500 --- /dev/null +++ b/Medium/Possible Bipartition.java @@ -0,0 +1,38 @@ +class Solution { + public boolean possibleBipartition(int n, int[][] dislikes) { + Map> map = new HashMap<>(); + for (int[] dislike : dislikes) { + map.computeIfAbsent(dislike[0], k -> new ArrayList<>()).add(dislike[1]); + map.computeIfAbsent(dislike[1], k -> new ArrayList<>()).add(dislike[0]); + } + int[] color = new int[n + 1]; + Arrays.fill(color, -1); + for (int i = 1; i <= n; i++) { + if (color[i] == -1) { + if (!bfs(i, map, color)) { + return false; + } + } + } + return true; + } + + private boolean bfs(int node, Map> map, int[] color) { + Queue queue = new LinkedList<>(); + queue.add(node); + color[node] = 0; + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (Integer neighbor : map.getOrDefault(removed, new ArrayList<>())) { + if (color[neighbor] == color[removed]) { + return false; + } + if (color[neighbor] == -1) { + color[neighbor] = 1 - color[removed]; + queue.add(neighbor); + } + } + } + return true; + } +} From 2bf7a2c4394fa169963d600ae9b150da3e23cb58 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 Jan 2023 14:56:14 -0800 Subject: [PATCH 0958/1640] Create Count the Digits That Divide a Number.java --- Easy/Count the Digits That Divide a Number.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Count the Digits That Divide a Number.java diff --git a/Easy/Count the Digits That Divide a Number.java b/Easy/Count the Digits That Divide a Number.java new file mode 100644 index 00000000..085c312b --- /dev/null +++ b/Easy/Count the Digits That Divide a Number.java @@ -0,0 +1,14 @@ +class Solution { + public int countDigits(int num) { + int count = 0; + int copy = num; + while (num > 0) { + int digit = num % 10; + num /= 10; + if (digit != 0 && copy % digit == 0) { + count++; + } + } + return count; + } +} From 9c40397d9529c19fb89e58a0da425e1cbf381180 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Jan 2023 07:56:02 -0800 Subject: [PATCH 0959/1640] Create Minimum Rounds to Complete All Tasks.java --- .../Minimum Rounds to Complete All Tasks.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Medium/Minimum Rounds to Complete All Tasks.java diff --git a/Medium/Minimum Rounds to Complete All Tasks.java b/Medium/Minimum Rounds to Complete All Tasks.java new file mode 100644 index 00000000..309810a0 --- /dev/null +++ b/Medium/Minimum Rounds to Complete All Tasks.java @@ -0,0 +1,22 @@ +class Solution { + public int minimumRounds(int[] tasks) { + Map frequencyMap = Arrays.stream(tasks) + .boxed() + .collect(Collectors.groupingBy( + Function.identity(), + HashMap::new, + Collectors.counting())); + int rounds = 0; + for (Long occurrences : frequencyMap.values()) { + if (occurrences == 1) { + return -1; + } + if (occurrences % 3 == 0) { + rounds += (int) (occurrences / 3); + } else { + rounds += (int) (occurrences / 3 + 1); + } + } + return rounds; + } +} From 719bf44f00dd6998ba07eb1b59eeb85d013b90ad Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Jan 2023 16:09:13 -0800 Subject: [PATCH 0960/1640] Create Maximum Enemy Forts That Can Be Captured.java --- Easy/Maximum Enemy Forts That Can Be Captured.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Maximum Enemy Forts That Can Be Captured.java diff --git a/Easy/Maximum Enemy Forts That Can Be Captured.java b/Easy/Maximum Enemy Forts That Can Be Captured.java new file mode 100644 index 00000000..207f220c --- /dev/null +++ b/Easy/Maximum Enemy Forts That Can Be Captured.java @@ -0,0 +1,14 @@ +class Solution { + public int captureForts(int[] forts) { + int maximumCapture = 0; + for (int i = 0, j = 0; i < forts.length; i++) { + if (forts[i] != 0) { + if (forts[i] == -1 * forts[j]) { + maximumCapture = Math.max(maximumCapture, i - j - 1); + } + j = i; + } + } + return maximumCapture; + } +} From bc70c5ce3de3cc4d2c6eb127df4fc1ca9a0aa778 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 5 Jan 2023 17:01:13 -0800 Subject: [PATCH 0961/1640] Update Maximum Ice Cream Bars.java --- Medium/Maximum Ice Cream Bars.java | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/Medium/Maximum Ice Cream Bars.java b/Medium/Maximum Ice Cream Bars.java index 75d34abf..d8faca38 100644 --- a/Medium/Maximum Ice Cream Bars.java +++ b/Medium/Maximum Ice Cream Bars.java @@ -1,12 +1,18 @@ class Solution { - public int maxIceCream(int[] costs, int coins) { - PriorityQueue pq = new PriorityQueue<>(); - pq.addAll(Arrays.stream(costs).boxed().collect(Collectors.toList())); - int icecreamCount = 0; - while (!pq.isEmpty() && (coins - pq.peek()) >= 0) { - coins -= pq.poll(); - icecreamCount++; + public int maxIceCream(int[] costs, int coins) { + int[] costFrequency = new int[1000_01]; + for (int cost : costs) { + costFrequency[cost]++; + } + int numberOfIcecreams = 0; + for (int i = 1; i <= 1000_00 && coins >= i; i++) { + if (costFrequency[i] > 0) { + while (coins >= i && costFrequency[i]-- > 0) { + numberOfIcecreams++; + coins -= i; + } + } + } + return numberOfIcecreams; } - return icecreamCount; - } } From e61e21200c8f2fcff2b34695094afe06832bff5b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 6 Jan 2023 13:16:55 -0800 Subject: [PATCH 0962/1640] Create Shortest Distance to Target String in a Circular Array.java --- ... to Target String in a Circular Array.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Easy/Shortest Distance to Target String in a Circular Array.java diff --git a/Easy/Shortest Distance to Target String in a Circular Array.java b/Easy/Shortest Distance to Target String in a Circular Array.java new file mode 100644 index 00000000..9280c7b9 --- /dev/null +++ b/Easy/Shortest Distance to Target String in a Circular Array.java @@ -0,0 +1,24 @@ +class Solution { + public int closetTarget(String[] words, String target, int startIndex) { + int firstIdx = -1; + int lastIdx = -1; + int n = words.length; + int minDistance = Integer.MAX_VALUE; + for (int i = 0; i < n; i++) { + if (words[i].equals(target)) { + if (firstIdx == -1) { + firstIdx = i; + } + lastIdx = i; + minDistance = Math.min(minDistance, Math.abs(i - startIndex)); + } + } + if (minDistance == Integer.MAX_VALUE) { + return -1; + } + return Math.min(minDistance, Math.min( + n - startIndex + firstIdx, // Reach first instance by circulating from end of array + startIndex + n - lastIdx // Reach last instance by circulating from start of array + )); + } +} From 189cdff25edfd0ef53dbfa628a4641c268b7abfb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 7 Jan 2023 17:33:45 -0800 Subject: [PATCH 0963/1640] Create Categorize Box According to Criteria.java --- .../Categorize Box According to Criteria.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Easy/Categorize Box According to Criteria.java diff --git a/Easy/Categorize Box According to Criteria.java b/Easy/Categorize Box According to Criteria.java new file mode 100644 index 00000000..0c817a0a --- /dev/null +++ b/Easy/Categorize Box According to Criteria.java @@ -0,0 +1,23 @@ +class Solution { + + private static final int BULKY_DIMENSION_THRESHOLD = 1000_0; + private static final int BULKY_VOLUME_THRESHOLD = 1000_000_000; + private static final int HEAVY_MASS_THRESHOLD = 100; + + public String categorizeBox(int length, int width, int height, int mass) { + long volume = ((long) length) * width * height; + boolean isBulky = length >= BULKY_DIMENSION_THRESHOLD || + width >= BULKY_DIMENSION_THRESHOLD || + height >= BULKY_DIMENSION_THRESHOLD || + mass >= BULKY_DIMENSION_THRESHOLD || + volume >= BULKY_VOLUME_THRESHOLD; + boolean isHeavy = mass >= HEAVY_MASS_THRESHOLD; + if (isBulky && isHeavy) { + return "Both"; + } + if (!(isBulky || isHeavy)) { + return "Neither"; + } + return isBulky ? "Bulky" : "Heavy"; + } +} From f06c8e3273d72e11060a0be394e204a591bc435f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Jan 2023 07:52:27 -0800 Subject: [PATCH 0964/1640] Create Maximum Count of Positive Integer and Negative Integer.java --- ...ount of Positive Integer and Negative Integer.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Maximum Count of Positive Integer and Negative Integer.java diff --git a/Easy/Maximum Count of Positive Integer and Negative Integer.java b/Easy/Maximum Count of Positive Integer and Negative Integer.java new file mode 100644 index 00000000..73e0dba8 --- /dev/null +++ b/Easy/Maximum Count of Positive Integer and Negative Integer.java @@ -0,0 +1,11 @@ +class Solution { + public int maximumCount(int[] nums) { + int positiveCount = 0; + int negativeCount = 0; + for (int num : nums) { + positiveCount += num > 0 ? 1 : 0; + negativeCount += num < 0 ? 1 : 0; + } + return Math.max(positiveCount, negativeCount); + } +} From 18e448cd295f317da27099cbcf970eb572bf14a5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Jan 2023 18:43:32 -0800 Subject: [PATCH 0965/1640] Update Binary Tree Preorder Traversal.java --- Medium/Binary Tree Preorder Traversal.java | 36 ++++++++++++---------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Medium/Binary Tree Preorder Traversal.java b/Medium/Binary Tree Preorder Traversal.java index e2f64ac4..61765340 100644 --- a/Medium/Binary Tree Preorder Traversal.java +++ b/Medium/Binary Tree Preorder Traversal.java @@ -4,31 +4,33 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public List preorderTraversal(TreeNode root) { - ArrayList ans = new ArrayList<>(); if (root == null) { - return ans; + return List.of(); } - Stack s = new Stack<>(); - - s.push(root); - - while(s.size() > 0) { - TreeNode curr = s.pop(); - ans.add(curr.val); - if(curr.right != null) { - s.push(curr.right); + Stack stack = new Stack<>(); + stack.push(root); + List result = new ArrayList<>(); + while (!stack.isEmpty()) { + TreeNode removed = stack.pop(); + result.add(removed.val); + if (removed.right != null) { + stack.push(removed.right); } - - if(curr.left != null) { - s.push(curr.left); + if (removed.left != null) { + stack.push(removed.left); } } - - return ans; + return result; } } From c6424ab6674f7ebf8e91f7a5a6abc35df95cfc9d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 9 Jan 2023 15:17:52 -0800 Subject: [PATCH 0966/1640] Create Find Consecutive Integers from a Data Stream.java --- ...nsecutive Integers from a Data Stream.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Find Consecutive Integers from a Data Stream.java diff --git a/Medium/Find Consecutive Integers from a Data Stream.java b/Medium/Find Consecutive Integers from a Data Stream.java new file mode 100644 index 00000000..7f57b28d --- /dev/null +++ b/Medium/Find Consecutive Integers from a Data Stream.java @@ -0,0 +1,23 @@ +class DataStream { + + private int k; + private int value; + private int counter; + + public DataStream(int value, int k) { + this.k = k; + this.value = value; + this.counter = 0; + } + + public boolean consec(int num) { + counter = value == num ? (counter + 1) : 0; + return counter >= k; + } +} + +/** + * Your DataStream object will be instantiated and called as such: + * DataStream obj = new DataStream(value, k); + * boolean param_1 = obj.consec(num); + */ From 48e25e725edbaaf7fe10c72071a978ed3b98629b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 13 Jan 2023 07:54:35 -0800 Subject: [PATCH 0967/1640] Create Maximal Score After Applying K Operations.java --- ...Maximal Score After Applying K Operations.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Maximal Score After Applying K Operations.java diff --git a/Medium/Maximal Score After Applying K Operations.java b/Medium/Maximal Score After Applying K Operations.java new file mode 100644 index 00000000..ca776caf --- /dev/null +++ b/Medium/Maximal Score After Applying K Operations.java @@ -0,0 +1,15 @@ +class Solution { + public long maxKelements(int[] nums, int k) { + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + for (int num : nums) { + pq.add(num); + } + long sum = 0; + while (!pq.isEmpty() && k-- > 0) { + int removed = pq.poll(); + sum += removed; + pq.add((int) Math.ceil(((double) removed) / 3)); + } + return sum; + } +} From 62a78b3aff64a78ca71d7be3a7ab14b1deb50ad2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 13 Jan 2023 16:14:26 -0800 Subject: [PATCH 0968/1640] Update Number of Nodes in the Sub-Tree With the Same Label.java --- ...s in the Sub-Tree With the Same Label.java | 50 +++++++++---------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/Medium/Number of Nodes in the Sub-Tree With the Same Label.java b/Medium/Number of Nodes in the Sub-Tree With the Same Label.java index 473b9052..1798a058 100644 --- a/Medium/Number of Nodes in the Sub-Tree With the Same Label.java +++ b/Medium/Number of Nodes in the Sub-Tree With the Same Label.java @@ -1,30 +1,28 @@ class Solution { - public int[] countSubTrees(int n, int[][] edges, String labels) { - Map> map = new HashMap<>(); - for (int[] edge : edges) { - map.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); - map.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); - } - int[] count = new int[n]; - Set set = new HashSet<>(); - dfs(map, 0, labels, count, set); - return count; - } - - private int[] dfs(Map> map, int curr, String labels, int[] count, Set set) { - int[] cnt = new int[26]; - if (set.add(curr)) { - char c = labels.charAt(curr); - for (Integer child : map.getOrDefault(curr, new ArrayList<>())) { - int[] temp = dfs(map, child, labels, count, set); - for (int i = 0; i < 26; i++) { - cnt[i] += temp[i]; + public int[] countSubTrees(int n, int[][] edges, String labels) { + Map> tree = new HashMap<>(); + for (int[] edge : edges) { + tree.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); + tree.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + } + int[] result = new int[n]; + Set visited = new HashSet<>(); + bfs(tree, 0, labels, result, visited); + return result; + } + + private int[] bfs(Map> tree, int currNode, String labels, int[] result, Set visited) { + int[] labelCount = new int[26]; + if (visited.add(currNode)) { + labelCount[labels.charAt(currNode) - 'a']++; + for (Integer child : tree.getOrDefault(currNode, new ArrayList<>())) { + int[] childLabelCount = bfs(tree, child, labels, result, visited); + for (int i = 0; i < 26; i++) { + labelCount[i] += childLabelCount[i]; + } + } + result[currNode] += labelCount[labels.charAt(currNode) - 'a']; } - } - cnt[c - 'a']++; - count[curr] = cnt[c - 'a']; + return labelCount; } - return cnt; - } } - From 624e04a5d4bf97cd2769e8bf938a967ee9d7574e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 15 Jan 2023 07:42:33 -0800 Subject: [PATCH 0969/1640] Create Difference Between Element Sum and Digit Sum of an Array.java --- ...Element Sum and Digit Sum of an Array.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Difference Between Element Sum and Digit Sum of an Array.java diff --git a/Easy/Difference Between Element Sum and Digit Sum of an Array.java b/Easy/Difference Between Element Sum and Digit Sum of an Array.java new file mode 100644 index 00000000..1aef4cbe --- /dev/null +++ b/Easy/Difference Between Element Sum and Digit Sum of an Array.java @@ -0,0 +1,20 @@ +class Solution { + public int differenceOfSum(int[] nums) { + int elementSum = 0; + int digitSum = 0; + for (int num : nums) { + elementSum += num; + digitSum += getDigitSum(num); + } + return Math.abs(elementSum - digitSum); + } + + private static int getDigitSum(int num) { + int sum = 0; + while (num > 0) { + sum += num % 10; + num /= 10; + } + return sum; + } +} From 90a64d0a37ed431611cbf2ea17d630c4f83f5afb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 20 Jan 2023 15:12:58 -0800 Subject: [PATCH 0970/1640] Update Duplicate Zeros.java --- Easy/Duplicate Zeros.java | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Easy/Duplicate Zeros.java b/Easy/Duplicate Zeros.java index 54a3592a..9f97be38 100644 --- a/Easy/Duplicate Zeros.java +++ b/Easy/Duplicate Zeros.java @@ -1,23 +1,23 @@ class Solution { - public void duplicateZeros(int[] arr) { - int numOfZeros = 0; - for (int num : arr) { - numOfZeros += num == 0 ? 1 : 0; + public void duplicateZeros(int[] arr) { + int count = 0; + for (int i = 0; i < arr.length; i++) { + count += arr[i] == 0 ? 1 : 0; + } + int idxOne = arr.length - 1; + int idxTwo = arr.length + count - 1; + while (idxOne != idxTwo) { + insertAtEnd(arr, idxOne, idxTwo--); + if (arr[idxOne] == 0) { + insertAtEnd(arr, idxOne, idxTwo--); + } + idxOne--; + } } - int i = arr.length - 1; - int j = arr.length + numOfZeros - 1; - while (i != j) { - insert(arr, i, j--); - if (arr[i] == 0) { - insert(arr, i, j--); - } - i--; + + private void insertAtEnd(int[] arr, int idxOne, int idxTwo) { + if (idxTwo < arr.length) { + arr[idxTwo] = arr[idxOne]; + } } - } - - private void insert(int[] arr, int i, int j) { - if (j < arr.length) { - arr[j] = arr[i]; - } - } } From 3d6bf009a611de4148b75486de8943b64ae803ab Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 21 Jan 2023 11:00:35 -0800 Subject: [PATCH 0971/1640] Create Minimum Common Value.java --- Easy/Minimum Common Value.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Minimum Common Value.java diff --git a/Easy/Minimum Common Value.java b/Easy/Minimum Common Value.java new file mode 100644 index 00000000..5062e9a3 --- /dev/null +++ b/Easy/Minimum Common Value.java @@ -0,0 +1,16 @@ +class Solution { + public int getCommon(int[] nums1, int[] nums2) { + int idxOne = 0; + int idxTwo = 0; + while (idxOne < nums1.length && idxTwo < nums2.length) { + if (nums1[idxOne] < nums2[idxTwo]) { + idxOne++; + } else if (nums2[idxTwo] < nums1[idxOne]) { + idxTwo++; + } else { + return nums1[idxOne]; + } + } + return -1; + } +} From 7a9b3a761ee43e2cb1a685bd42bc637ee70c4442 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 Jan 2023 07:22:28 -0800 Subject: [PATCH 0972/1640] Create Alternating Digit Sum.java --- Easy/Alternating Digit Sum.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Alternating Digit Sum.java diff --git a/Easy/Alternating Digit Sum.java b/Easy/Alternating Digit Sum.java new file mode 100644 index 00000000..4505e2e3 --- /dev/null +++ b/Easy/Alternating Digit Sum.java @@ -0,0 +1,18 @@ +class Solution { + public int alternateDigitSum(int n) { + int firstHalf = 0; + int secondHalf = 0; + int count = 0; + while (n > 0) { + secondHalf += n % 10; + n /= 10; + count++; + if (n > 0) { + firstHalf += n % 10; + n /= 10; + count++; + } + } + return count % 2 == 0 ? (firstHalf + -1 * secondHalf) : (secondHalf + -1 * firstHalf); + } +} From 7cf358c7e57a4ed4395a36dbccd4887cbb008f85 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 Jan 2023 09:21:19 -0800 Subject: [PATCH 0973/1640] Create Sort the Students by Their Kth Score.java --- Medium/Sort the Students by Their Kth Score.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Medium/Sort the Students by Their Kth Score.java diff --git a/Medium/Sort the Students by Their Kth Score.java b/Medium/Sort the Students by Their Kth Score.java new file mode 100644 index 00000000..7c4f83e9 --- /dev/null +++ b/Medium/Sort the Students by Their Kth Score.java @@ -0,0 +1,6 @@ +class Solution { + public int[][] sortTheStudents(int[][] score, int k) { + Arrays.sort(score, (o1, o2) -> o2[k] - o1[k]); + return score; + } +} From cd0f908dc1d656cfa78277a5b3c730bfee750902 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 25 Jan 2023 07:20:35 -0800 Subject: [PATCH 0974/1640] Create Find Closest Node to Given Two Nodes.java --- .../Find Closest Node to Given Two Nodes.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Medium/Find Closest Node to Given Two Nodes.java diff --git a/Medium/Find Closest Node to Given Two Nodes.java b/Medium/Find Closest Node to Given Two Nodes.java new file mode 100644 index 00000000..4c68c333 --- /dev/null +++ b/Medium/Find Closest Node to Given Two Nodes.java @@ -0,0 +1,40 @@ +class Solution { + public int closestMeetingNode(int[] edges, int node1, int node2) { + int n = edges.length; + int[] distance1 = new int[n]; + int[] distance2 = new int[n]; + Arrays.fill(distance1, Integer.MAX_VALUE); + Arrays.fill(distance2, Integer.MAX_VALUE); + bfs(node1, edges, distance1); + bfs(node2, edges, distance2); + int minDistanceNode = -1; + int currMinDistance = Integer.MAX_VALUE; + for (int i = 0; i < n; i++) { + if (currMinDistance > Math.max(distance1[i], distance2[i])) { + minDistanceNode = i; + currMinDistance = Math.max(distance1[i], distance2[i]); + } + } + return minDistanceNode; + } + + private void bfs(int startNode, int[] edges, int[] distance) { + int n = edges.length; + Queue queue = new LinkedList<>(); + queue.add(startNode); + boolean[] visited = new boolean[n]; + distance[startNode] = 0; + while (!queue.isEmpty()) { + int node = queue.remove(); + if (visited[node]) { + continue; + } + visited[node] = true; + int neighbor = edges[node]; + if (neighbor != -1 && !visited[neighbor]) { + distance[neighbor] = 1 + distance[node]; + queue.add(neighbor); + } + } + } +} From f79aa6c69435885fa989c69475a03565e89cdb8c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 Jan 2023 10:24:06 -0800 Subject: [PATCH 0975/1640] Create Cheapest Flights Within K Stops.java --- Medium/Cheapest Flights Within K Stops.java | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Cheapest Flights Within K Stops.java diff --git a/Medium/Cheapest Flights Within K Stops.java b/Medium/Cheapest Flights Within K Stops.java new file mode 100644 index 00000000..e937fdaf --- /dev/null +++ b/Medium/Cheapest Flights Within K Stops.java @@ -0,0 +1,32 @@ +class Solution { + public int findCheapestPrice(int n, int[][] flights, int src, int dst, int k) { + Map> graph = new HashMap<>(); + for (int[] flight : flights) { + graph.computeIfAbsent(flight[0], ArrayList::new).add(new int[]{flight[1], flight[2]}); + } + int[] price = new int[n]; + Arrays.fill(price, Integer.MAX_VALUE); + Queue queue = new LinkedList<>(); + queue.add(new int[]{src, 0}); + while (k-- >= 0 && !queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + int currCity = removed[0]; + int currPrice = removed[1]; + if (!graph.containsKey(currCity)) { + continue; + } + for (int[] node : graph.get(currCity)) { + int nextCity = node[0]; + int flightPrice = node[1]; + if (currPrice + flightPrice < price[nextCity]) { + price[nextCity] = currPrice + flightPrice; + queue.add(new int[]{nextCity, price[nextCity]}); + } + } + } + } + return price[dst] == Integer.MAX_VALUE ? -1 : price[dst]; + } +} From 05bfdaadb040e1c68d26c1330d3c8f6957ed4f29 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 28 Jan 2023 08:57:17 -0800 Subject: [PATCH 0976/1640] Create Minimum Health to Beat Game.java --- Medium/Minimum Health to Beat Game.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Minimum Health to Beat Game.java diff --git a/Medium/Minimum Health to Beat Game.java b/Medium/Minimum Health to Beat Game.java new file mode 100644 index 00000000..9b93099e --- /dev/null +++ b/Medium/Minimum Health to Beat Game.java @@ -0,0 +1,11 @@ +class Solution { + public long minimumHealth(int[] damage, int armor) { + int maxDamage = 0; + long totalDamage = 0; + for (int d : damage) { + totalDamage += d; + maxDamage = Math.max(maxDamage, d); + } + return totalDamage - Math.min(armor, maxDamage) + 1; + } +} From 53169adafa0de5cb98c80b743910af00afdd9053 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 29 Jan 2023 08:03:55 -0800 Subject: [PATCH 0977/1640] Update LFU Cache.java --- Hard/LFU Cache.java | 209 +++++++++++++++++++++++--------------------- 1 file changed, 111 insertions(+), 98 deletions(-) diff --git a/Hard/LFU Cache.java b/Hard/LFU Cache.java index 4d52ade6..d4caef70 100644 --- a/Hard/LFU Cache.java +++ b/Hard/LFU Cache.java @@ -1,112 +1,125 @@ class LFUCache { - private final Map keyToNodeMap; - private final Map frequencyToNodeMap; - private final Map keyToFrequencyMap; - private int capacity; - private int currentCapacity; - - public LFUCache(int capacity) { - this.capacity = capacity; - this.currentCapacity = 0; - this.keyToNodeMap = new HashMap<>(); - this.frequencyToNodeMap = new TreeMap<>(); - this.keyToFrequencyMap = new HashMap<>(); - } - - public int get(int key) { - if (!keyToNodeMap.containsKey(key)) { - return -1; + private final TreeMap frequencyToNodeMap; + private final Map keyToNodeMap; + private final int capacity; + + public LFUCache(int capacity) { + this.frequencyToNodeMap = new TreeMap<>(); + this.keyToNodeMap = new HashMap<>(); + this.capacity = capacity; + } + + public int get(int key) { + if (!keyToNodeMap.containsKey(key)) { + return -1; + } + Node node = keyToNodeMap.get(key); + updateNodeForFrequencyChange(node); + return node.value; } - Node node = keyToNodeMap.get(key); - removeNode(node); - int currentFrequency = keyToFrequencyMap.get(key); - int newFrequency = currentFrequency + 1; - keyToFrequencyMap.put(key, newFrequency); - addNodeToFrequencyHead(node, newFrequency); - return node.val; - } - - public void put(int key, int value) { - if (this.capacity == 0) { - return; + + public void put(int key, int value) { + if (this.keyToNodeMap.containsKey(key)) { + updateNode(key, value); + } else { + addNewNode(key, value); + } } - removeNodeIfCapacityReached(key); - Node node = getNode(key, value); - int newFrequency = keyToFrequencyMap.getOrDefault(key, 0) + 1; - keyToFrequencyMap.put(key, newFrequency); - keyToNodeMap.put(key, node); - if (newFrequency > 1) { - removeNode(node); + + private void updateNode(int key, int value) { + Node node = keyToNodeMap.get(key); + node.value = value; + updateNodeForFrequencyChange(node); } - addNodeToFrequencyHead(node, newFrequency); - } - - private void removeNodeIfCapacityReached(int key) { - if (!keyToNodeMap.containsKey(key) && this.currentCapacity == capacity) { - for (Integer freq : frequencyToNodeMap.keySet()) { - Node[] nodes = frequencyToNodeMap.get(freq); - if (nodes[1].prev.val == -1) { - continue; + + private void addNewNode(int key, int value) { + if (capacity == 0) { + return; + } + if (capacity == keyToNodeMap.size()) { + evictCache(); + } + Node node = new Node(key, value); + addToFrequencyMap(node); + keyToNodeMap.put(key, node); + } + + private void evictCache() { + int firstKey = frequencyToNodeMap.firstKey(); + Node nodeToEvict = frequencyToNodeMap.get(firstKey).getFirstNode(); + removeNode(nodeToEvict); + keyToNodeMap.remove(nodeToEvict.key); + if (frequencyToNodeMap.get(firstKey).getFirstNode().value == -1) { + frequencyToNodeMap.remove(firstKey); + } + } + + private void updateNodeForFrequencyChange(Node node) { + int prevFrequency = node.frequency; + node.frequency = node.frequency + 1; + removeNode(node); + if (frequencyToNodeMap.get(prevFrequency).getFirstNode().value == -1) { + frequencyToNodeMap.remove(prevFrequency); } - Node toRemove = nodes[1].prev; - removeNode(toRemove); - keyToNodeMap.remove(toRemove.key); - keyToFrequencyMap.remove(toRemove.key); - this.currentCapacity--; - break; - } + addToFrequencyMap(node); } - } - - private Node getNode(int key, int value) { - Node node; - if (keyToNodeMap.containsKey(key)) { - node = keyToNodeMap.get(key); - removeNode(node); - node.val = value; - } else { - this.currentCapacity++; - node = new Node(value, key); + + private void removeNode(Node node) { + Node prevToNode = node.prev; + Node nextToNode = node.next; + prevToNode.next = nextToNode; + nextToNode.prev = prevToNode; } - return node; - } - - private void addNodeToFrequencyHead(Node node, int newFrequency) { - if (!frequencyToNodeMap.containsKey(newFrequency)) { - Node head = new Node(-1, Integer.MIN_VALUE); - Node tail = new Node(-1, Integer.MAX_VALUE); - head.next = tail; - tail.prev = head; - frequencyToNodeMap.put(newFrequency, new Node[]{head, tail}); + + private void addToFrequencyMap(Node node) { + if (!frequencyToNodeMap.containsKey(node.frequency)) { + frequencyToNodeMap.put(node.frequency, new NodeLinkedList()); + } + frequencyToNodeMap.get(node.frequency).addNode(node); } - Node headNode = frequencyToNodeMap.get(newFrequency)[0]; - Node nextToHead = headNode.next; - nextToHead.prev = node; - node.next = nextToHead; - headNode.next = node; - node.prev = headNode; - } - - private void removeNode(Node node) { - Node prevNode = node.prev; - Node nextNode = node.next; - prevNode.next = nextNode; - nextNode.prev = prevNode; - } - - private static class Node { - int val; - int key; - Node next; - Node prev; - - public Node(int val, int key) { - this.val = val; - this.key = key; + + private static class NodeLinkedList { + private final Node head; + private final Node tail; + + public NodeLinkedList() { + this.head = new Node(-1, -1); + this.tail = new Node(-1, -1); + head.next = tail; + tail.prev = head; + } + + public Node getFirstNode() { + return head.next; + } + + public void addNode(Node node) { + Node prevToTail = tail.prev; + node.prev = prevToTail; + prevToTail.next = node; + node.next = tail; + tail.prev = node; + } + } + + private static class Node { + private final int key; + private int value; + private int frequency; + private Node next; + private Node prev; + + public Node(int key, int value) { + this.key = key; + this.value = value; + this.frequency = 1; + this.next = null; + this.prev = null; + } } - } } + /** * Your LFUCache object will be instantiated and called as such: * LFUCache obj = new LFUCache(capacity); From 31dc4a0798c5265f6be9f3c86a8f712677e0ec29 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 31 Jan 2023 09:34:06 -0800 Subject: [PATCH 0978/1640] Create Count Distinct Numbers on Board.java --- Easy/Count Distinct Numbers on Board.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Count Distinct Numbers on Board.java diff --git a/Easy/Count Distinct Numbers on Board.java b/Easy/Count Distinct Numbers on Board.java new file mode 100644 index 00000000..42a7ad68 --- /dev/null +++ b/Easy/Count Distinct Numbers on Board.java @@ -0,0 +1,5 @@ +class Solution { + public int distinctIntegers(int n) { + return Math.max(n - 1, 1); + } +} From e5b2cf9e87f8d6d9b2af971a8a7b85b6e1d7da8c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 31 Jan 2023 19:33:57 -0800 Subject: [PATCH 0979/1640] Update Greatest Common Divisor of Strings.java --- Easy/Greatest Common Divisor of Strings.java | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Easy/Greatest Common Divisor of Strings.java b/Easy/Greatest Common Divisor of Strings.java index 263b6caa..f817725a 100644 --- a/Easy/Greatest Common Divisor of Strings.java +++ b/Easy/Greatest Common Divisor of Strings.java @@ -1,13 +1,13 @@ class Solution { - public String gcdOfStrings(String str1, String str2) { - if (str1.length() < str2.length()) { - return gcdOfStrings(str2, str1); - } else if (!str1.startsWith(str2)) { - return ""; - } else if (str2.isEmpty()) { - return str1; - } else { - return gcdOfStrings(str1.substring(str2.length()), str2); + public String gcdOfStrings(String str1, String str2) { + if (!(str1 + str2).equals(str2 + str1)) { + return ""; + } + int gcdLength = gcd(str1.length(), str2.length()); + return str1.substring(0, gcdLength); + } + + private int gcd(int x, int y) { + return y == 0 ? x : gcd(y, x % y); } - } } From 4b9a51fdb0b1e94b07a03039eb29024aea14b456 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Feb 2023 16:17:33 -0800 Subject: [PATCH 0980/1640] Update Verifying an Alien Dictionary.java --- Easy/Verifying an Alien Dictionary.java | 46 ++++++++++++------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Easy/Verifying an Alien Dictionary.java b/Easy/Verifying an Alien Dictionary.java index e11a4728..08bf111e 100644 --- a/Easy/Verifying an Alien Dictionary.java +++ b/Easy/Verifying an Alien Dictionary.java @@ -1,27 +1,27 @@ class Solution { - public boolean isAlienSorted(String[] words, String order) { - Map map = new HashMap<>(); - int idx = 0; - for (char c : order.toCharArray()) { - map.put(c, idx++); - } - for (int i = 1; i < words.length; i++) { - if (!isSorted(words[i - 1], words[i], map)) { - return false; - } - } - return true; - } - - private boolean isSorted(String wordOne, String wordTwo, Map map) { - for (int i = 0; i < Math.min(wordOne.length(), wordTwo.length()); i++) { - int diff = map.get(wordOne.charAt(i)) - map.get(wordTwo.charAt(i)); - if (diff > 0) { - return false; - } else if (diff < 0) { + public boolean isAlienSorted(String[] words, String order) { + Map map = new HashMap<>(); + for (int i = 0; i < order.length(); i++) { + map.put(order.charAt(i), i); + } + for (int i = 0; i < words.length - 1; i++) { + if (!inOrder(words[i], words[i + 1], map)) { + return false; + } + } return true; - } } - return wordOne.length() <= wordTwo.length(); - } + + private static boolean inOrder(String wordOne, String wordTwo, Map map) { + for (int i = 0; i < Math.min(wordOne.length(), wordTwo.length()); i++) { + int diff = map.get(wordOne.charAt(i)) - map.get(wordTwo.charAt(i)); + if (diff < 0) { + return true; + } + if (diff > 0) { + return false; + } + } + return wordOne.length() <= wordTwo.length(); + } } From 938ce93e6cdd35b86c4fd07e51fba01ff59ebcd7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 2 Feb 2023 13:56:24 -0800 Subject: [PATCH 0981/1640] Update Subtree of Another Tree.java --- Easy/Subtree of Another Tree.java | 35 +++++++++++++------------------ 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/Easy/Subtree of Another Tree.java b/Easy/Subtree of Another Tree.java index a88e3642..c0e307eb 100644 --- a/Easy/Subtree of Another Tree.java +++ b/Easy/Subtree of Another Tree.java @@ -14,26 +14,21 @@ * } */ class Solution { - public boolean isSubtree(TreeNode root, TreeNode subRoot) { - if (root == null) { - return false; + public boolean isSubtree(TreeNode root, TreeNode subRoot) { + if (root == null) { + return false; + } + boolean result = root.val == subRoot.val && isSubtreeHelper(root, subRoot); + return result || isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot); } - if (isSubtreeHelper(root, subRoot)) { - return true; + + private boolean isSubtreeHelper(TreeNode root, TreeNode subRoot) { + if (root == null && subRoot == null) { + return true; + } + if (root == null || subRoot == null) { + return false; + } + return root.val == subRoot.val && isSubtreeHelper(root.left, subRoot.left) && isSubtreeHelper(root.right, subRoot.right); } - return isSubtree(root.left, subRoot) || isSubtree(root.right, subRoot); - } - - private boolean isSubtreeHelper(TreeNode root, TreeNode subRoot) { - if (root == null && subRoot == null) { - return true; - } - if (root == null || subRoot == null) { - return false; - } - if (root.val != subRoot.val) { - return false; - } - return isSubtreeHelper(root.left, subRoot.left) && isSubtreeHelper(root.right, subRoot.right); - } } From a625604af6f02e0390f75f6108f970c05d26d446 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 3 Feb 2023 08:20:13 -0800 Subject: [PATCH 0982/1640] Update ZigZag Conversion.java --- Medium/ZigZag Conversion.java | 48 +++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/Medium/ZigZag Conversion.java b/Medium/ZigZag Conversion.java index 62539da4..31793633 100644 --- a/Medium/ZigZag Conversion.java +++ b/Medium/ZigZag Conversion.java @@ -1,25 +1,29 @@ class Solution { - public String convert(String s, int numRows) { - if (numRows == 1) { - return s; + public String convert(String s, int numRows) { + if (numRows == 1) { + return s; + } + StringBuilder[] rows = new StringBuilder[numRows]; + for (int i = 0; i < numRows; i++) { + rows[i] = new StringBuilder(); + } + int row = 0; + int n = s.length(); + int idx = 0; + while (idx < n) { + while (idx < n && row < numRows) { + rows[row++].append(s.charAt(idx++)); + } + row -= 2; + while (idx < n && row >= 0) { + rows[row--].append(s.charAt(idx++)); + } + row += 2; + } + StringBuilder result = new StringBuilder(); + for (StringBuilder sb : rows) { + result.append(sb.toString()); + } + return result.toString(); } - List list = new ArrayList<>(); - for (int i = 0; i < numRows; i++) { - list.add(new StringBuilder()); - } - int idx = 0; - boolean downDirection = false; - for (char c : s.toCharArray()) { - list.get(idx).append(c); - if (idx == 0 || idx == numRows - 1) { - downDirection = !downDirection; - } - idx += downDirection ? 1 : -1; - } - StringBuilder result = new StringBuilder(); - for (StringBuilder sb : list) { - result.append(sb.toString()); - } - return result.toString(); - } } From 9382e4c247c939f8fdcc65d312cd74f164929342 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 4 Feb 2023 12:38:17 -0800 Subject: [PATCH 0983/1640] Update Permutation in String.java --- Medium/Permutation in String.java | 62 +++++++++++++++++-------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/Medium/Permutation in String.java b/Medium/Permutation in String.java index ff95424e..dd255290 100644 --- a/Medium/Permutation in String.java +++ b/Medium/Permutation in String.java @@ -1,32 +1,38 @@ class Solution { - public boolean checkInclusion(String s1, String s2) { - if (s2.length() < s1.length()) { - return false; - } - int[] frequency = new int[26]; - for (int i = 0; i < s1.length(); i++) { - frequency[s1.charAt(i) - 'a']++; - frequency[s2.charAt(i) - 'a']--; - } - if (allZeroArray(frequency)) { - return true; - } - for (int i = s1.length(); i < s2.length(); i++) { - frequency[s2.charAt(i) - 'a']--; - frequency[s2.charAt(i - s1.length()) - 'a']++; - if (allZeroArray(frequency)) { - return true; - } - } - return false; - } - - private boolean allZeroArray(int[] frequency) { - for (int count : frequency) { - if (count != 0) { + public boolean checkInclusion(String s1, String s2) { + if (s1.length() > s2.length()) { + return false; + } + Map map = new HashMap<>(); + for (char c : s1.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); + } + int n = s1.length(); + int[] count = {map.size()}; + for (int i = 0; i < n - 1; i++) { + updateMap(map, s2.charAt(i), count, true); + } + int start = 0; + for (int i = n - 1; i < s2.length(); i++) { + updateMap(map, s2.charAt(i), count, true); + if (count[0] == 0) { + return true; + } + updateMap(map, s2.charAt(start++), count, false); + } return false; - } } - return true; - } + + private void updateMap(Map map, char c, int[] count, boolean decrement) { + if (map.containsKey(c)) { + int diff = decrement ? -1 : 1; + map.put(c, map.get(c) + diff); + if (decrement && map.get(c) == 0) { + count[0]--; + } + if (!decrement && map.get(c) == 1) { + count[0]++; + } + } + } } From 532d5eb08cb2ee1c9c1cde71af78a29516d2ade3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 4 Feb 2023 17:32:09 -0800 Subject: [PATCH 0984/1640] Create Separate the Digits in an Array.java --- Easy/Separate the Digits in an Array.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Separate the Digits in an Array.java diff --git a/Easy/Separate the Digits in an Array.java b/Easy/Separate the Digits in an Array.java new file mode 100644 index 00000000..9bd6878f --- /dev/null +++ b/Easy/Separate the Digits in an Array.java @@ -0,0 +1,19 @@ +class Solution { + public int[] separateDigits(int[] nums) { + List result = new ArrayList<>(); + for (int num : nums) { + int startIdx = result.size(); + while (num > 0) { + result.add(num % 10); + num /= 10; + } + int endIdx = result.size() - 1; + while (startIdx < endIdx) { + int temp = result.get(startIdx); + result.set(startIdx++, result.get(endIdx)); + result.set(endIdx--, temp); + } + } + return result.stream().mapToInt(Integer::intValue).toArray(); + } +} From de44f03a3fb7c986644554e147995415f204ad05 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 Feb 2023 09:17:44 -0800 Subject: [PATCH 0985/1640] Delete Find All Anagrams in a String.java --- Easy/Find All Anagrams in a String.java | 39 ------------------------- 1 file changed, 39 deletions(-) delete mode 100644 Easy/Find All Anagrams in a String.java diff --git a/Easy/Find All Anagrams in a String.java b/Easy/Find All Anagrams in a String.java deleted file mode 100644 index 8d79ab3b..00000000 --- a/Easy/Find All Anagrams in a String.java +++ /dev/null @@ -1,39 +0,0 @@ -class Solution { - public static List findAnagrams(String s, String p) { - List indexes = new ArrayList<>(); - Map pMap = new TreeMap<>(); - - for (char c : p.toCharArray()) { - pMap.put(c, pMap.getOrDefault(c, 0) + 1); - } - - Map map = new TreeMap<>(); - - for (int i=0; i Date: Sun, 5 Feb 2023 09:18:04 -0800 Subject: [PATCH 0986/1640] Update Find All Anagrams in a String.java --- Medium/Find All Anagrams in a String.java | 48 ++++++++++------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/Medium/Find All Anagrams in a String.java b/Medium/Find All Anagrams in a String.java index 1edba8c7..e18917da 100644 --- a/Medium/Find All Anagrams in a String.java +++ b/Medium/Find All Anagrams in a String.java @@ -1,30 +1,24 @@ class Solution { - public List findAnagrams(String s, String p) { - List list = new ArrayList<>(); - if (s.length() < p.length()) { - return list; + public List findAnagrams(String s, String p) { + if (s.length() < p.length()) { + return new ArrayList<>(); + } + List result = new ArrayList<>(); + int[] patternCounter = new int[26]; + for (char c : p.toCharArray()) { + patternCounter[c - 'a']++; + } + int[] counter = new int[26]; + int start = 0; + for (int i = 0; i < s.length(); i++) { + counter[s.charAt(i) - 'a']++; + if (i >= p.length() - 1) { + if (Arrays.equals(patternCounter, counter)) { + result.add(start); + } + counter[s.charAt(start++) - 'a']--; + } + } + return result; } - int[] pArr = new int[26]; - for (char c : p.toCharArray()) { - pArr[c - 'a']++; - } - String pStr = Arrays.toString(pArr); - int start = 0; - int end = 0; - int n = s.length(); - int[] sArr = new int[26]; - while (end < (p.length() - 1)) { - sArr[s.charAt(end) - 'a']++; - end++; - } - while (end < n) { - sArr[s.charAt(end) - 'a']++; - end++; - if (Arrays.toString(sArr).equals(pStr)) { - list.add(start); - } - sArr[s.charAt(start++) - 'a']--; - } - return list; - } } From c61ec791cae1ce3acec4d2c1c42cc54d5a69d18c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 Feb 2023 09:24:35 -0800 Subject: [PATCH 0987/1640] Create Take Gifts From the Richest Pile.java --- Easy/Take Gifts From the Richest Pile.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Take Gifts From the Richest Pile.java diff --git a/Easy/Take Gifts From the Richest Pile.java b/Easy/Take Gifts From the Richest Pile.java new file mode 100644 index 00000000..ea754818 --- /dev/null +++ b/Easy/Take Gifts From the Richest Pile.java @@ -0,0 +1,17 @@ +class Solution { + public long pickGifts(int[] gifts, int k) { + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + long totalGifts = 0; + for (int gift : gifts) { + pq.add(gift); + totalGifts += gift; + } + while (k-- > 0) { + int removedGift = pq.poll(); + int remainingGift = (int) Math.sqrt(removedGift); + totalGifts -= removedGift - remainingGift; + pq.add(remainingGift); + } + return totalGifts; + } +} From 3986e088971911d98b392aca2374ff92d43b3290 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 Feb 2023 15:04:35 -0800 Subject: [PATCH 0988/1640] Create Count Vowel Strings in Ranges.java --- Medium/Count Vowel Strings in Ranges.java | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Count Vowel Strings in Ranges.java diff --git a/Medium/Count Vowel Strings in Ranges.java b/Medium/Count Vowel Strings in Ranges.java new file mode 100644 index 00000000..8f836610 --- /dev/null +++ b/Medium/Count Vowel Strings in Ranges.java @@ -0,0 +1,26 @@ +class Solution { + + public int[] vowelStrings(String[] words, int[][] queries) { + int[] counter = new int[words.length]; + int currCounter = 0; + for (int i = 0; i < words.length; i++) { + String word = words[i]; + if (isVowel(word.charAt(0)) && isVowel(word.charAt(word.length() - 1))) { + currCounter++; + } + counter[i] = currCounter; + } + int[] result = new int[queries.length]; + for (int i = 0; i < queries.length; i++) { + int left = queries[i][0]; + int right = queries[i][1]; + result[i] = counter[right]; + result[i] -= left == 0 ? 0 : counter[left - 1]; + } + return result; + } + + private static boolean isVowel(char c) { + return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'; + } +} From efb2017407da2c52f7d34d7f9d781b48edbee60f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Feb 2023 07:16:42 -0800 Subject: [PATCH 0989/1640] Create Maximum Number of Integers to Choose From a Range I.java --- ...er of Integers to Choose From a Range I.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Maximum Number of Integers to Choose From a Range I.java diff --git a/Medium/Maximum Number of Integers to Choose From a Range I.java b/Medium/Maximum Number of Integers to Choose From a Range I.java new file mode 100644 index 00000000..8f3ad2ee --- /dev/null +++ b/Medium/Maximum Number of Integers to Choose From a Range I.java @@ -0,0 +1,17 @@ +class Solution { + public int maxCount(int[] banned, int n, int maxSum) { + int count = 0; + Set bannedSet = Arrays.stream(banned).boxed().collect(Collectors.toSet()); + for (int i = 1; i <= n && count < n; i++) { + if (bannedSet.contains(i)) { + continue; + } + if (maxSum - i < 0) { + break; + } + count++; + maxSum -= i; + } + return count; + } +} From 9df7f26ef218c97b9d2bc7d481410eff64d2c20c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 Feb 2023 19:13:28 -0800 Subject: [PATCH 0990/1640] Update Fruit Into Baskets.java --- Medium/Fruit Into Baskets.java | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Medium/Fruit Into Baskets.java b/Medium/Fruit Into Baskets.java index 79889371..937fbbe9 100644 --- a/Medium/Fruit Into Baskets.java +++ b/Medium/Fruit Into Baskets.java @@ -1,21 +1,21 @@ class Solution { - public int totalFruit(int[] fruits) { - Map map = new HashMap<>(); - int startIdx = 0; - int endIdx = 0; - int n = fruits.length; - int maxPickedCount = 0; - while (endIdx < n) { - map.put(fruits[endIdx], map.getOrDefault(fruits[endIdx++], 0) + 1); - while (startIdx < endIdx && map.size() > 2) { - map.put(fruits[startIdx], map.get(fruits[startIdx]) - 1); - if (map.get(fruits[startIdx]) == 0) { - map.remove(fruits[startIdx]); + public int totalFruit(int[] fruits) { + int maximumFruits = 0; + Map map = new HashMap<>(); + int start = 0; + int end = 0; + while (end < fruits.length) { + map.put(fruits[end], map.getOrDefault(fruits[end], 0) + 1); + end++; + while (start < end && map.size() > 2) { + map.put(fruits[start], map.get(fruits[start]) - 1); + if (map.get(fruits[start]) == 0) { + map.remove(fruits[start]); + } + start++; + } + maximumFruits = Math.max(maximumFruits, end - start); } - startIdx++; - } - maxPickedCount = Math.max(maxPickedCount, endIdx - startIdx); + return maximumFruits; } - return maxPickedCount; - } } From dd963fb55ab560527a37f106c8cdd9b7e0f729b3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Feb 2023 07:59:20 -0800 Subject: [PATCH 0991/1640] Update Moving Average from Data Stream.java --- Easy/Moving Average from Data Stream.java | 34 +++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Easy/Moving Average from Data Stream.java b/Easy/Moving Average from Data Stream.java index e52fa84a..ec9dca5b 100644 --- a/Easy/Moving Average from Data Stream.java +++ b/Easy/Moving Average from Data Stream.java @@ -1,23 +1,23 @@ class MovingAverage { - - private int currSum; - private Queue queue; - private int size; - - public MovingAverage(int size) { - this.currSum = 0; - this.size = size; - this.queue = new LinkedList<>(); - } - public double next(int val) { - this.queue.add(val); - this.currSum += val; - if (this.queue.size() > this.size) { - this.currSum -= this.queue.remove(); + private final Queue queue; + private double currSum; + private final int size; + + public MovingAverage(int size) { + this.queue = new LinkedList<>(); + this.currSum = 0; + this.size = size; + } + + public double next(int val) { + this.queue.add(val); + this.currSum += val; + if (this.queue.size() > this.size) { + this.currSum -= this.queue.remove(); + } + return this.currSum / this.queue.size(); } - return ((double) this.currSum) / this.queue.size(); - } } /** From d8c193280da25404d9ac9f4d29cfca00843b7f1b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Feb 2023 15:28:38 -0800 Subject: [PATCH 0992/1640] Update Print FooBar Alternately.java --- Concurrency/Print FooBar Alternately.java | 53 ++++++++++++----------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/Concurrency/Print FooBar Alternately.java b/Concurrency/Print FooBar Alternately.java index f19a774f..94fa19cc 100644 --- a/Concurrency/Print FooBar Alternately.java +++ b/Concurrency/Print FooBar Alternately.java @@ -1,32 +1,33 @@ class FooBar { - private int n; - - private Semaphore fooSemaphore = new Semaphore(1); - private Semaphore barSemaphore = new Semaphore(0); - - public FooBar(int n) { - this.n = n; - } - - public void foo(Runnable printFoo) throws InterruptedException { - - for (int i = 0; i < n; i++) { - - // printFoo.run() outputs "foo". Do not change or remove this line. - fooSemaphore.acquire(); - printFoo.run(); - barSemaphore.release(); + private int n; + + private final Semaphore fooMutex; + private final Semaphore barMutex; + + public FooBar(int n) { + this.n = n; + this.fooMutex = new Semaphore(1); + this.barMutex = new Semaphore(0); } - } - - public void bar(Runnable printBar) throws InterruptedException { - for (int i = 0; i < n; i++) { + public void foo(Runnable printFoo) throws InterruptedException { + + for (int i = 0; i < n; i++) { + + // printFoo.run() outputs "foo". Do not change or remove this line. + this.fooMutex.acquire(); + printFoo.run(); + this.barMutex.release(); + } + } - // printBar.run() outputs "bar". Do not change or remove this line. - barSemaphore.acquire(); - printBar.run(); - fooSemaphore.release(); + public void bar(Runnable printBar) throws InterruptedException { + + for (int i = 0; i < n; i++) { + this.barMutex.acquire(); + // printBar.run() outputs "bar". Do not change or remove this line. + printBar.run(); + this.fooMutex.release(); + } } - } } From 480f89b337836a264757186757a99ab02813a3f5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Feb 2023 07:34:32 -0800 Subject: [PATCH 0993/1640] Create Jump Game II.java --- Medium/Jump Game II.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Jump Game II.java diff --git a/Medium/Jump Game II.java b/Medium/Jump Game II.java new file mode 100644 index 00000000..0f3a792c --- /dev/null +++ b/Medium/Jump Game II.java @@ -0,0 +1,17 @@ +class Solution { + public int jump(int[] nums) { + int jumpCount = 0; + int left = 0; + int right = 0; + while (right < nums.length - 1) { + int farthest = 0; + for (int i = left; i <= right; i++) { + farthest = Math.max(farthest, i + nums[i]); + } + left = right + 1; + right = farthest; + jumpCount++; + } + return jumpCount; + } +} From fe1871836b77d554ab4138ae0c14cbcbd0a8d42e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Feb 2023 09:15:01 -0800 Subject: [PATCH 0994/1640] Update Wiggle Sort.java --- Medium/Wiggle Sort.java | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/Medium/Wiggle Sort.java b/Medium/Wiggle Sort.java index e4e8ad13..68cac74b 100644 --- a/Medium/Wiggle Sort.java +++ b/Medium/Wiggle Sort.java @@ -1,24 +1,11 @@ class Solution { - public void wiggleSort(int[] nums) { - boolean small = true; - for (int i = 0; i < nums.length - 1; i++) { - if (small) { - if (nums[i] > nums[i + 1]) { - swap(nums, i, i + 1); + public void wiggleSort(int[] nums) { + for (int i = 1; i < nums.length; i++) { + if ((i % 2 == 1 && nums[i] < nums[i - 1]) || (i % 2 != 1 && nums[i] > nums[i - 1])) { + int temp = nums[i]; + nums[i] = nums[i - 1]; + nums[i - 1] = temp; + } } - } - else { - if (nums[i] < nums[i + 1]) { - swap(nums, i, i + 1); - } - } - small = !small; } - } - - private void swap(int[] nums, int idx1, int idx2) { - int temp = nums[idx2]; - nums[idx2] = nums[idx1]; - nums[idx1] = temp; - } } From b26a7663e960de9519cbc98871856baad532aa88 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Feb 2023 19:34:52 -0800 Subject: [PATCH 0995/1640] Create Naming a Company.java --- Hard/Naming a Company.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/Naming a Company.java diff --git a/Hard/Naming a Company.java b/Hard/Naming a Company.java new file mode 100644 index 00000000..c24f78fe --- /dev/null +++ b/Hard/Naming a Company.java @@ -0,0 +1,26 @@ +class Solution { + public long distinctNames(String[] ideas) { + Map> map = new HashMap<>(); + for (String idea : ideas) { + map.computeIfAbsent(idea.charAt(0), k -> new HashSet<>()).add(idea.substring(1, idea.length())); + } + long result = 0; + for (Character key1 : map.keySet()) { + for (Character key2 : map.keySet()) { + if (key1 == key2) { + continue; + } + int intersection = 0; + for (String word : map.get(key1)) { + if (map.get(key2).contains(word)) { + intersection++; + } + } + int distinctOne = map.get(key1).size() - intersection; + int distinctTwo = map.get(key2).size() - intersection; + result += distinctOne * distinctTwo; + } + } + return result; + } +} From 6e03310edaf59a802d56843c9be946c608a610d1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Feb 2023 07:47:26 -0800 Subject: [PATCH 0996/1640] Update Buddy Strings.java --- Easy/Buddy Strings.java | 57 +++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 30 deletions(-) diff --git a/Easy/Buddy Strings.java b/Easy/Buddy Strings.java index e153e52d..83f94a5a 100644 --- a/Easy/Buddy Strings.java +++ b/Easy/Buddy Strings.java @@ -1,36 +1,33 @@ class Solution { - public boolean buddyStrings(String s, String goal) { - if (s.length() != goal.length()) { - return false; - } - if (s.equals(goal)) { - Set set = new HashSet<>(); - for (char c : s.toCharArray()) { - if (set.contains(c)) { - return true; + public boolean buddyStrings(String s, String goal) { + if (s.length() != goal.length()) { + return false; } - set.add(c); - } - return false; - } - char[] mismatch = {'-', '-'}; - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) != goal.charAt(i)) { - if (mismatch[0] == '|') { - return false; + int mismatchIdx = -1; + Set set = new HashSet<>(); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) != goal.charAt(i)) { + if (mismatchIdx == Integer.MAX_VALUE) { + return false; + } + if (mismatchIdx == -1) { + mismatchIdx = i; + } else { + if (!(s.charAt(mismatchIdx) == goal.charAt(i) && s.charAt(i) == goal.charAt(mismatchIdx))) { + return false; + } + mismatchIdx = Integer.MAX_VALUE; + } + } else { + set.add(s.charAt(i)); + } + } + if (mismatchIdx != -1 && mismatchIdx != Integer.MAX_VALUE) { + return false; } - if (mismatch[0] == '-') { - mismatch[0] = s.charAt(i); - mismatch[1] = goal.charAt(i); - } else { - if (goal.charAt(i) == mismatch[0] && s.charAt(i) == mismatch[1]) { - mismatch[0] = '|'; - continue; - } - return false; + if (mismatchIdx == -1) { + return s.length() > set.size(); } - } + return true; } - return mismatch[0] == '|'; - } } From b6ff432749cbebdce0a67a16c8df8b02adbc170f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Feb 2023 09:46:15 -0800 Subject: [PATCH 0997/1640] Update Partition Labels.java --- Medium/Partition Labels.java | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Medium/Partition Labels.java b/Medium/Partition Labels.java index d8896c4a..e3157703 100644 --- a/Medium/Partition Labels.java +++ b/Medium/Partition Labels.java @@ -1,19 +1,19 @@ class Solution { - public List partitionLabels(String s) { - Map lastIndex = new HashMap<>(); - for (int i = 0; i < s.length(); i++) { - lastIndex.put(s.charAt(i), i); + public List partitionLabels(String s) { + Map map = new HashMap<>(); + for (int i = 0; i < s.length(); i++) { + map.put(s.charAt(i), i); + } + List result = new ArrayList<>(); + int start = 0; + int maxIdx = Integer.MIN_VALUE; + for (int i = 0; i < s.length(); i++) { + maxIdx = Math.max(map.get(s.charAt(i)), maxIdx); + if (maxIdx == i) { + result.add(i - start + 1); + start = i + 1; + } + } + return result; } - List partitionIndices = new ArrayList<>(); - int currMaxIdx = -1; - int prevIdx = 0; - for (int i = 0; i < s.length(); i++) { - currMaxIdx = Math.max(currMaxIdx, lastIndex.get(s.charAt(i))); - if (i == currMaxIdx) { - partitionIndices.add(i - prevIdx + 1); - prevIdx = i + 1; - } - } - return partitionIndices; - } } From 7977ed03d5c487dcefca359d38f582880815addd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Feb 2023 17:05:00 -0800 Subject: [PATCH 0998/1640] Update As Far from Land as Possible.java --- Medium/As Far from Land as Possible.java | 65 ++++++++++++------------ 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/Medium/As Far from Land as Possible.java b/Medium/As Far from Land as Possible.java index 2e80a70b..6e1ba29a 100644 --- a/Medium/As Far from Land as Possible.java +++ b/Medium/As Far from Land as Possible.java @@ -1,37 +1,38 @@ class Solution { - private final int[][] DIRS = {{1, 0}, {-1, 0}, {0, -1}, {0, 1}}; - - public int maxDistance(int[][] grid) { - Queue queue = new LinkedList<>(); - int numRows = grid.length; - int numCols = grid[0].length; - for (int i = 0; i < numRows; i++) { - for (int j = 0; j < numCols; j++) { - if (grid[i][j] == 1) { - queue.add(new int[]{i, j}); + + private static final int[][] DIRS = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}}; + + public int maxDistance(int[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + Queue queue = new LinkedList<>(); + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (grid[i][j] == 1) { + queue.add(new int[]{i, j}); + } + } } - } - } - if (queue.isEmpty() || queue.size() == numRows * numCols) { - return -1; - } - int distance = 0; - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int[] removed = queue.remove(); - for (int[] dir : DIRS) { - int x = removed[0] + dir[0]; - int y = removed[1] + dir[1]; - if (x < 0 || y < 0 || x >= numRows || y >= numCols || grid[x][y] == 1) { - continue; - } - grid[x][y] = 1; - queue.add(new int[]{x, y}); + if (queue.isEmpty() || queue.size() == rows * cols) { + return -1; + } + int distance = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + for (int[] dir : DIRS) { + int x = removed[0] + dir[0]; + int y = removed[1] + dir[1]; + if (x < 0 || y < 0 || x >= rows || y >= cols || grid[x][y] == 1) { + continue; + } + grid[x][y] = 1; + queue.add(new int[]{x, y}); + } + } + distance++; } - } - distance++; + return distance - 1; } - return distance - 1; - } } From 7290c9653ccdcc649a0b7ff58af31b658651a31e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 11 Feb 2023 12:07:02 -0800 Subject: [PATCH 0999/1640] Update Shortest Path with Alternating Colors.java --- ...Shortest Path with Alternating Colors.java | 117 ++++++++---------- 1 file changed, 51 insertions(+), 66 deletions(-) diff --git a/Medium/Shortest Path with Alternating Colors.java b/Medium/Shortest Path with Alternating Colors.java index c2c3622a..63f670d0 100644 --- a/Medium/Shortest Path with Alternating Colors.java +++ b/Medium/Shortest Path with Alternating Colors.java @@ -1,72 +1,57 @@ class Solution { - private final Integer RED = 1; - private final Integer BLUE = 2; - public int[] shortestAlternatingPaths(int n, int[][] red_edges, int[][] blue_edges) { - Map> map = new HashMap<>(); - for (int[] edge : red_edges) { - map.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(new Connection(edge[1], RED)); - } - for (int[] edge : blue_edges) { - map.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(new Connection(edge[1], BLUE)); - } - int[] distances = new int[n]; - for (int i = 1; i < n; i++) { - distances[i] = getDistance(map, i, n); - } - return distances; - } - - private int getDistance(Map> map, int target, int n) { - int curr = 0; - int steps = 0; - boolean found = false; - Queue queue = new LinkedList<>(); - boolean[][] visited = new boolean[2][n]; - queue.add(new int[]{0, -1}); - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int[] removed = queue.remove(); - if (removed[0] == target) { - found = true; - break; + + private static final Integer RED = 1; + private static final Integer BLUE = 2; + + public int[] shortestAlternatingPaths(int n, int[][] red_edges, int[][] blue_edges) { + Map> map = new HashMap<>(); + for (int[] edge : red_edges) { + map.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(new Connection(edge[1], RED)); } - int color = removed[1]; - for (Connection connection : map.getOrDefault(removed[0], new ArrayList<>())) { - if (color == -1 && !visited[connection.color - 1][connection.val]) { - visited[connection.color - 1][connection.val] = true; - queue.add(connection.getArray()); - } - else if (color == 1 && connection.color != 1 && !visited[connection.color - 1][connection.val]) { - visited[connection.color - 1][connection.val] = true; - queue.add(connection.getArray()); - } - else if (color == 2 && connection.color != 2 && !visited[connection.color - 1][connection.val]) { - visited[connection.color - 1][connection.val] = true; - queue.add(connection.getArray()); - } + for (int[] edge : blue_edges) { + map.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(new Connection(edge[1], BLUE)); + } + int[] distances = new int[n]; + for (int i = 1; i < n; i++) { + distances[i] = getDistance(map, i, n); } - } - if (found) { - break; - } - steps++; + return distances; } - return found ? steps : -1; - } -} - -class Connection { - int val; - int color; - - public Connection(int val, int color) { - this.val = val; - this.color = color; - } - - public int[] getArray() { - return new int[]{this.val, this.color}; - } + private int getDistance(Map> map, int target, int n) { + int steps = 0; + Queue queue = new LinkedList<>(); + boolean[][] visited = new boolean[2][n]; + queue.add(new int[]{0, -1}); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + if (removed[0] == target) { + return steps; + } + int color = removed[1]; + for (Connection connection : map.getOrDefault(removed[0], new ArrayList<>())) { + if (color == -1 && !visited[connection.color - 1][connection.val]) { + visited[connection.color - 1][connection.val] = true; + queue.add(connection.getArray()); + } else if (color == 1 && connection.color != 1 && !visited[connection.color - 1][connection.val]) { + visited[connection.color - 1][connection.val] = true; + queue.add(connection.getArray()); + } else if (color == 2 && connection.color != 2 && !visited[connection.color - 1][connection.val]) { + visited[connection.color - 1][connection.val] = true; + queue.add(connection.getArray()); + } + } + } + steps++; + } + return -1; + } + + private record Connection(int val, int color) { + public int[] getArray() { + return new int[]{this.val, this.color}; + } + } } From 22b6c990c61bf5654876f76a64087fc6315d8c7a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Feb 2023 08:36:44 -0800 Subject: [PATCH 1000/1640] Create Minimum Fuel Cost to Report to the Capital.java --- ...um Fuel Cost to Report to the Capital.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/Minimum Fuel Cost to Report to the Capital.java diff --git a/Medium/Minimum Fuel Cost to Report to the Capital.java b/Medium/Minimum Fuel Cost to Report to the Capital.java new file mode 100644 index 00000000..ee48239f --- /dev/null +++ b/Medium/Minimum Fuel Cost to Report to the Capital.java @@ -0,0 +1,28 @@ +class Solution { + public long minimumFuelCost(int[][] roads, int seats) { + Map> graph = new HashMap<>(); + for (int[] road : roads) { + graph.computeIfAbsent(road[0], k -> new ArrayList<>()).add(road[1]); + graph.computeIfAbsent(road[1], k -> new ArrayList<>()).add(road[0]); + } + long[] fuel = {0l}; + dfs(0, -1, graph, seats, fuel); + return fuel[0]; + } + + private long dfs(int node, int parent, Map> graph, int seats, long[] fuel) { + int representativeCount = 1; + if (!graph.containsKey(node)) { + return representativeCount; + } + for (int child : graph.get(node)) { + if (child != parent) { + representativeCount += dfs(child, node, graph, seats, fuel); + } + } + if (node != 0) { + fuel[0] += Math.ceil((double) representativeCount / seats); + } + return representativeCount; + } +} From c809100454403a9bfcf897cedfc3028e3e4c554b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Feb 2023 10:04:53 -0800 Subject: [PATCH 1001/1640] Create Find the Array Concatenation Value.java --- Easy/Find the Array Concatenation Value.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Find the Array Concatenation Value.java diff --git a/Easy/Find the Array Concatenation Value.java b/Easy/Find the Array Concatenation Value.java new file mode 100644 index 00000000..974ca82b --- /dev/null +++ b/Easy/Find the Array Concatenation Value.java @@ -0,0 +1,13 @@ +class Solution { + public long findTheArrayConcVal(int[] nums) { + long concatenatedValue = 0; + int start = 0; + int end = nums.length - 1; + while (start <= end) { + concatenatedValue += start == end ? nums[start] : Integer.parseInt(nums[start] + "" + nums[end]); + start++; + end--; + } + return concatenatedValue; + } +} From b3d2e3be3d2d459e3a1f852c2d55bc074d4facf8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 12 Feb 2023 17:05:45 -0800 Subject: [PATCH 1002/1640] Updated Readme stats --- Concurrency/README.md | 11 + Easy/README.md | 1010 +++++++++++++++++--------------- Hard/README.md | 162 +++--- Medium/README.md | 1282 ++++++++++++++++++++++++----------------- README.md | 7 +- 5 files changed, 1407 insertions(+), 1065 deletions(-) create mode 100644 Concurrency/README.md diff --git a/Concurrency/README.md b/Concurrency/README.md new file mode 100644 index 00000000..8bc6ef63 --- /dev/null +++ b/Concurrency/README.md @@ -0,0 +1,11 @@ +# Concurrency LeetCode Java Solutions +S.no | Coding Problem +--- | --- +1 | [Building H2O](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/Building%20H2O.java) +2 | [Design Bounded Blocking Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/Design%20Bounded%20Blocking%20Queue.java) +3 | [Fizz Buzz Multithreaded](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/Fizz%20Buzz%20Multithreaded.java) +4 | [Print FooBar Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/Print%20FooBar%20Alternately.java) +5 | [Print Zero Even Odd](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/Print%20Zero%20Even%20Odd.java) +6 | [Print in Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/Print%20in%20Order.java) +7 | [The Dining Philosophers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/The%20Dining%20Philosophers.java) +8 | [Traffic Light Controlled Intersection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Concurrency/Traffic%20Light%20Controlled%20Intersection.java) diff --git a/Easy/README.md b/Easy/README.md index 423b1cfa..63afc542 100644 --- a/Easy/README.md +++ b/Easy/README.md @@ -1,454 +1,560 @@ -# Easy LeetCode-Java-Solutions +# Easy LeetCode Java Solutions S.no | Coding Problem --- | --- -1|[Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) -2|[Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) -3|[High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) -4|[Binary Tree Tilt](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Tilt.java) -5|[Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Stack.java) -6|[Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) -7|[Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) -8|[Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) -9|[Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) -10|[Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) -11|[Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) -12|[Check If String Is a Prefix of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20String%20Is%20a%20Prefix%20of%20Array.java) -13|[The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) -14|[Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) -15|[Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) -16|[Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) -17|[Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) -18|[Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) -19|[Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) -20|[Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bold%20Words%20in%20String.java) -21|[Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) -22|[Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) -23|[Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) -24|[Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) -25|[Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) -26|[Binary Number with Alternating Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Number%20with%20Alternating%20Bits.java) -27|[Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) -28|[Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) -29|[Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) -30|[Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) -31|[Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) -32|[X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) -33|[Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Integer.java) -34|[Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) -35|[Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) -36|[Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) -37|[Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) -38|[Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) -39|[Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) -40|[Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) -41|[Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) -42|[Check If N and Its Double Exist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20N%20and%20Its%20Double%20Exist.java) -43|[Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) -44|[Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) -45|[Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Non-decreasing%20Array.java) -46|[Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) -47|[Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) -48|[Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) -49|[Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) -50|[Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) -51|[Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) -52|[Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) -53|[Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) -54|[Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) -55|[Power of four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20four.java) -56|[Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) -57|[Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) -58|[Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) -59|[Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) -60|[Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) -61|[Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) -62|[Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) -63|[Check if Binary String Has at Most One Segment of Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Binary%20String%20Has%20at%20Most%20One%20Segment%20of%20Ones.java) -64|[Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) -65|[Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) -66|[Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) -67|[Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) -68|[Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) -69|[1-bit and 2-bit Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/1-bit%20and%202-bit%20Characters.java) -70|[Binary Gap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Gap.java) -71|[Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) -72|[Binary Tree Level Order Traversal II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Level%20Order%20Traversal%20II.java) -73|[Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) -74|[Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) -75|[Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) -76|[Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) -77|[Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) -78|[Check if All the Integers in a Range Are Covered](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered.java) -79|[Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) -80|[Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) -81|[Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) -82|[Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) -83|[Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) -84|[Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) -85|[Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) -86|[Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) -87|[Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) -88|[Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) -89|[Assign Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Assign%20Cookies.java) -90|[Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) -91|[Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) -92|[Buddy Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Buddy%20Strings.java) -93|[Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) -94|[Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) -95|[Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) -96|[Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) -97|[Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) -98|[Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) -99|[Consecutive Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Consecutive%20Characters.java) -100|[Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) -101|[Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) -102|[Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20and%20Say.java) -103|[Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) -104|[Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) -105|[Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) -106|[Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) -107|[Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) -108|[Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) -109|[DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) -110|[Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) -111|[Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) -112|[Backspace String Compare](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Backspace%20String%20Compare.java) -113|[Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) -114|[Baseball Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Baseball%20Game.java) -115|[Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) -116|[Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) -117|[Maximum Product of three numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20three%20numbers.java) -118|[Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) -119|[Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) -120|[Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) -121|[Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) -122|[Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) -123|[Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) -124|[Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) -125|[Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) -126|[Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) -127|[Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) -128|[Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) -129|[Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) -130|[Check if Array Is Sorted and Rotated](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20Is%20Sorted%20and%20Rotated.java) -131|[Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) -132|[Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) -133|[Can Make Arithmetic Progression From Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Make%20Arithmetic%20Progression%20From%20Sequence.java) -134|[Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) -135|[Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) -136|[Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) -137|[Binary Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Search.java) -138|[K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) -139|[Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) -140|[Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) -141|[Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) -142|[Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) -143|[Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reorder%20Data%20in%20Log%20Files.java) -144|[Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) -145|[trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) -146|[Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) -147|[License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) -148|[Balanced Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Balanced%20Binary%20Tree.java) -149|[Check If It Is a Straight Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20It%20Is%20a%20Straight%20Line.java) -150|[Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Area%20of%20Island.java) -151|[Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) -152|[Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) -153|[String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) -154|[Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) -155|[Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) -156|[Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) -157|[Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) -158|[Binary Prefix Divisible By 5](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Prefix%20Divisible%20By%205.java) -159|[Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) -160|[Count Negative Numbers in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Negative%20Numbers%20in%20a%20Sorted%20Matrix.java) -161|[Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) -162|[Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) -163|[Check if All Characters Have Equal Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20Characters%20Have%20Equal%20Number%20of%20Occurrences.java) -164|[Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) -165|[Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) -166|[Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotated%20Digits.java) -167|[Count Good Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Good%20Triplets.java) -168|[Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) -169|[Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) -170|[Arranging Coins](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Arranging%20Coins.java) -171|[Check if Word Equals Summation of Two Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Word%20Equals%20Summation%20of%20Two%20Words.java) -172|[House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/House%20Robber.java) -173|[Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) -174|[Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) -175|[Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) -176|[Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) -177|[Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) -178|[Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) -179|[Base 7](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Base%207.java) -180|[Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) -181|[SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) -182|[Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) -183|[Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) -184|[Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) -185|[Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) -186|[Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) -187|[Two Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20II.java) -188|[Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) -189|[Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) -190|[Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) -191|[Sum of left leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20left%20leaves.java) -192|[Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) -193|[Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) -194|[Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) -195|[Build an Array With Stack Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20an%20Array%20With%20Stack%20Operations.java) -196|[Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) -197|[Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) -198|[K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K%20Closest%20Points%20to%20Origin.java) -199|[Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Time%20for%20Given%20Digits.java) -200|[range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) -201|[Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) -202|[Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) -203|[To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) -204|[Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) -205|[Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) -206|[Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) -207|[Count Items Matching a Rule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Items%20Matching%20a%20Rule.java) -208|[Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) -209|[Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) -210|[Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) -211|[Binary Tree Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Paths.java) -212|[Valid Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbrevation.java) -213|[Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) -214|[Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) -215|[Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) -216|[Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Anagrams%20in%20a%20String.java) -217|[Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) -218|[Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) -219|[Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) -220|[Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) -221|[Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) -222|[How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) -223|[Armstrong Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Armstrong%20Number.java) -224|[Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) -225|[Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) -226|[Cells with Odd Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20with%20Odd%20Values%20in%20a%20Matrix.java) -227|[Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) -228|[Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) -229|[Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Stack.java) -230|[Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) -231|[Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) -232|[N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) -233|[Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) -234|[Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) -235|[Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) -236|[Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) -237|[Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) -238|[Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) -239|[Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) -240|[Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) -241|[Check if One String Swap Can Make Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20One%20String%20Swap%20Can%20Make%20Strings%20Equal.java) -242|[Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) -243|[Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) -244|[Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) -245|[N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Level%20Order%20Traversal.java) -246|[Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) -247|[First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) -248|[Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) -249|[Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) -250|[Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) -251|[Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) -252|[Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subdomain%20Visit%20Count.java) -253|[Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) -254|[Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) -255|[Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) -256|[Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) -257|[Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) -258|[Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) -259|[Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) -260|[Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) -261|[Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) -262|[Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) -263|[Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) -264|[Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) -265|[Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Even%20Numbers%20After%20Queries.java) -266|[Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) -267|[Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) -268|[Intersection of two arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20arrays%20II.java) -269|[Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) -270|[Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) -271|[Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) -272|[Check if the Sentence Is Pangram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20the%20Sentence%20Is%20Pangram.java) -273|[Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) -274|[Available Captures for Rook](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Available%20Captures%20for%20Rook.java) -275|[Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) -276|[Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) -277|[Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) -278|[Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) -279|[Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) -280|[Check If a Word Occurs As a Prefix of Any Word in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Word%20Occurs%20As%20a%20Prefix%20of%20Any%20Word%20in%20a%20Sentence.java) -281|[Concatenation of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Concatenation%20of%20Array.java) -282|[Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) -283|[Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) -284|[Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) -285|[Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) -286|[Calculate Money in Leetcode Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Money%20in%20Leetcode%20Bank.java) -287|[Check If Two String Arrays are Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20Two%20String%20Arrays%20are%20Equivalent.java) -288|[Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) -289|[Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) -290|[Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) -291|[Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) -292|[Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) -293|[Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) -294|[Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) -295|[Bulls and Cows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bulls%20and%20Cows.java) -296|[Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) -297|[nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) -298|[Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) -299|[Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) -300|[Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) -301|[Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) -302|[Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) -303|[Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) -304|[Convert BST to Greater Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20Greater%20Tree.java) -305|[Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) -306|[Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray.java) -307|[Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) -308|[Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) -309|[Build Array from Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20Array%20from%20Permutation.java) -310|[Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) -311|[Best time to buy & sell a stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20time%20to%20buy%20&%20sell%20a%20stock%20II.java) -312|[Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) -313|[Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) -314|[Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) -315|[Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) -316|[Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) -317|[Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) -318|[Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) -319|[Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) -320|[Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) -321|[N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) -322|[Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) -323|[Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) -324|[Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) -325|[Add Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Strings.java) -326|[Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) -327|[Best Time to Buy and Sell Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Time%20to%20Buy%20and%20Sell%20Stock.java) -328|[String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Compression.java) -329|[Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) -330|[Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) -331|[Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) -332|[Leaf Similar Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf%20Similar%20Tree.java) -333|[Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) -334|[Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) -335|[Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) -336|[Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) -337|[Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) -338|[Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) -339|[Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) -340|[Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) -341|[Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) -342|[Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) -343|[Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) -344|[Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) -345|[Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) -346|[N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) -347|[Delete node in a linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20node%20in%20a%20linked%20list.java) -348|[Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) -349|[Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) -350|[Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) -351|[Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) -352|[Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) -353|[Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) -354|[Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) -355|[Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) -356|[Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) -357|[Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) -358|[Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) -359|[Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) -360|[Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) -361|[Array Partition I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Partition%20I.java) -362|[Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) -363|[Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) -364|[Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) -365|[Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) -366|[Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) -367|[Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) -368|[Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) -369|[Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) -370|[Count Largest Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Largest%20Group.java) -371|[Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) -372|[Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) -373|[Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) -374|[Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) -375|[Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) -376|[Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) -377|[Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) -378|[Add Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Digits.java) -379|[Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) -380|[Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20City%20Scheduling.java) -381|[Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) -382|[contains_duplicates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/contains_duplicates.java) -383|[Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) -384|[Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) -385|[Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) -386|[Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) -387|[Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) -388|[Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum%20III.java) -389|[Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) -390|[Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) -391|[Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) -392|[Average Salary Excluding the Minimum and Maximum Salary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Salary%20Excluding%20the%20Minimum%20and%20Maximum%20Salary.java) -393|[Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) -394|[Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) -395|[Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) -396|[Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) -397|[Count Square Sum Triples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Square%20Sum%20Triples.java) -398|[Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) -399|[Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) -400|[Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) -401|[Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) -402|[Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) -403|[Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) -404|[Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) -405|[Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) -406|[Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) -407|[Add Binary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Binary.java) -408|[Convert Binary Number in a Linked List to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Binary%20Number%20in%20a%20Linked%20List%20to%20Integer.java) -409|[Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) -410|[Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) -411|[Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) -412|[Check Array Formation Through Concatenation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Array%20Formation%20Through%20Concatenation.java) -413|[Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) -414|[Add to Array-Form of Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20to%20Array-Form%20of%20Integer.java) -415|[Fibonacci Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Numbers.java) -416|[Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) -417|[Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) -418|[Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) -419|[N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) -420|[Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) -421|[Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) -422|[Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) -423|[Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) -424|[How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) -425|[Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) -426|[Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) -427|[Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) -428|[Count Odd Numbers in an Interval Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Odd%20Numbers%20in%20an%20Interval%20Range.java) -429|[String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) -430|[Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) -431|[Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Unsorted%20Continuous%20Subarray.java) -432|[Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) -433|[Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) -434|[Array Transformation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Transformation.java) -435|[Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) -436|[Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) -437|[Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) -438|[First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) -439|[Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) -440|[sum_of_two_integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/sum_of_two_integers.java) -441|[Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) -442|[Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) -443|[Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) -444|[Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) -445|[Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) -446|[Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) -447|[Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) -448|[Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) -449|[Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) -450|[Average of Levels in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20of%20Levels%20in%20Binary%20Tree.java) -451|[Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) +1 | [1-bit and 2-bit Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/1-bit%20and%202-bit%20Characters.java) +2 | [A Number After a Double Reversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/A%20Number%20After%20a%20Double%20Reversal.java) +3 | [Add Binary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Binary.java) +4 | [Add Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Digits.java) +5 | [Add Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Strings.java) +6 | [Add to Array-Form of Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20to%20Array-Form%20of%20Integer.java) +7 | [Alternating Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Alternating%20Digit%20Sum.java) +8 | [Apply Operations to an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Apply%20Operations%20to%20an%20Array.java) +9 | [Armstrong Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Armstrong%20Number.java) +10 | [Arranging Coins](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Arranging%20Coins.java) +11 | [Array Partition I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Partition%20I.java) +12 | [Array Transformation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Transformation.java) +13 | [Assign Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Assign%20Cookies.java) +14 | [Available Captures for Rook](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Available%20Captures%20for%20Rook.java) +15 | [Average Salary Excluding the Minimum and Maximum Salary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Salary%20Excluding%20the%20Minimum%20and%20Maximum%20Salary.java) +16 | [Average Value of Even Numbers That Are Divisible by Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Value%20of%20Even%20Numbers%20That%20Are%20Divisible%20by%20Three.java) +17 | [Average of Levels in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20of%20Levels%20in%20Binary%20Tree.java) +18 | [Backspace String Compare](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Backspace%20String%20Compare.java) +19 | [Balanced Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Balanced%20Binary%20Tree.java) +20 | [Base 7](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Base%207.java) +21 | [Baseball Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Baseball%20Game.java) +22 | [Best Poker Hand](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Poker%20Hand.java) +23 | [Best Time to Buy and Sell Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Time%20to%20Buy%20and%20Sell%20Stock.java) +24 | [Binary Gap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Gap.java) +25 | [Binary Number with Alternating Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Number%20with%20Alternating%20Bits.java) +26 | [Binary Prefix Divisible By 5](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Prefix%20Divisible%20By%205.java) +27 | [Binary Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Search.java) +28 | [Binary Tree Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Inorder%20Traversal.java) +29 | [Binary Tree Level Order Traversal II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Level%20Order%20Traversal%20II.java) +30 | [Binary Tree Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Paths.java) +31 | [Binary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Postorder%20Traversal.java) +32 | [Binary Tree Tilt](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Tilt.java) +33 | [Binary Watch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Watch.java) +34 | [Buddy Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Buddy%20Strings.java) +35 | [Build Array from Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20Array%20from%20Permutation.java) +36 | [Build an Array With Stack Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20an%20Array%20With%20Stack%20Operations.java) +37 | [Bulls and Cows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bulls%20and%20Cows.java) +38 | [Calculate Amount Paid in Taxes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Amount%20Paid%20in%20Taxes.java) +39 | [Calculate Digit Sum of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Digit%20Sum%20of%20a%20String.java) +40 | [Calculate Money in Leetcode Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Money%20in%20Leetcode%20Bank.java) +41 | [Can Make Arithmetic Progression From Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Make%20Arithmetic%20Progression%20From%20Sequence.java) +42 | [Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) +43 | [Capitalize the Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Capitalize%20the%20Title.java) +44 | [Categorize Box According to Criteria](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Categorize%20Box%20According%20to%20Criteria.java) +45 | [Cells in a Range on an Excel Sheet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20in%20a%20Range%20on%20an%20Excel%20Sheet.java) +46 | [Cells with Odd Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20with%20Odd%20Values%20in%20a%20Matrix.java) +47 | [Check Array Formation Through Concatenation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Array%20Formation%20Through%20Concatenation.java) +48 | [Check Distances Between Same Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Distances%20Between%20Same%20Letters.java) +49 | [Check If It Is a Straight Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20It%20Is%20a%20Straight%20Line.java) +50 | [Check If N and Its Double Exist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20N%20and%20Its%20Double%20Exist.java) +51 | [Check If String Is a Prefix of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20String%20Is%20a%20Prefix%20of%20Array.java) +52 | [Check If Two String Arrays are Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20Two%20String%20Arrays%20are%20Equivalent.java) +53 | [Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) +54 | [Check If a Word Occurs As a Prefix of Any Word in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Word%20Occurs%20As%20a%20Prefix%20of%20Any%20Word%20in%20a%20Sentence.java) +55 | [Check Whether Two Strings are Almost Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Whether%20Two%20Strings%20are%20Almost%20Equivalent.java) +56 | [Check if All A's Appears Before All B's](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20A's%20Appears%20Before%20All%20B's.java) +57 | [Check if All Characters Have Equal Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20Characters%20Have%20Equal%20Number%20of%20Occurrences.java) +58 | [Check if All the Integers in a Range Are Covered](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered.java) +59 | [Check if Array Is Sorted and Rotated](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20Is%20Sorted%20and%20Rotated.java) +60 | [Check if Binary String Has at Most One Segment of Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Binary%20String%20Has%20at%20Most%20One%20Segment%20of%20Ones.java) +61 | [Check if Every Row and Column Contains All Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Every%20Row%20and%20Column%20Contains%20All%20Numbers.java) +62 | [Check if Matrix Is X-Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Matrix%20Is%20X-Matrix.java) +63 | [Check if Number Has Equal Digit Count and Digit Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Number%20Has%20Equal%20Digit%20Count%20and%20Digit%20Value.java) +64 | [Check if Numbers Are Ascending in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Numbers%20Are%20Ascending%20in%20a%20Sentence.java) +65 | [Check if One String Swap Can Make Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20One%20String%20Swap%20Can%20Make%20Strings%20Equal.java) +66 | [Check if String Is Decomposable Into Value-Equal Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20String%20Is%20Decomposable%20Into%20Value-Equal%20Substrings.java) +67 | [Check if Word Equals Summation of Two Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Word%20Equals%20Summation%20of%20Two%20Words.java) +68 | [Check if an Array Is Consecutive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20an%20Array%20Is%20Consecutive.java) +69 | [Check if the Sentence Is Pangram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20the%20Sentence%20Is%20Pangram.java) +70 | [Circular Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Circular%20Sentence.java) +71 | [Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) +72 | [Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) +73 | [Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) +74 | [Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) +75 | [Concatenation of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Concatenation%20of%20Array.java) +76 | [Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) +77 | [Consecutive Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Consecutive%20Characters.java) +78 | [Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) +79 | [Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) +80 | [Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) +81 | [Contains Duplicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate.java) +82 | [Convert 1D Array Into 2D Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%201D%20Array%20Into%202D%20Array.java) +83 | [Convert BST to Greater Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20Greater%20Tree.java) +84 | [Convert Binary Number in a Linked List to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Binary%20Number%20in%20a%20Linked%20List%20to%20Integer.java) +85 | [Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) +86 | [Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) +87 | [Convert the Temperature](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20the%20Temperature.java) +88 | [Count Asterisks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Asterisks.java) +89 | [Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) +90 | [Count Common Words With One Occurrence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Common%20Words%20With%20One%20Occurrence.java) +91 | [Count Distinct Numbers on Board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Distinct%20Numbers%20on%20Board.java) +92 | [Count Elements With Strictly Smaller and Greater Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Elements%20With%20Strictly%20Smaller%20and%20Greater%20Elements.java) +93 | [Count Equal and Divisible Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Equal%20and%20Divisible%20Pairs%20in%20an%20Array.java) +94 | [Count Good Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Good%20Triplets.java) +95 | [Count Hills and Valleys in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Hills%20and%20Valleys%20in%20an%20Array.java) +96 | [Count Integers With Even Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Integers%20With%20Even%20Digit%20Sum.java) +97 | [Count Items Matching a Rule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Items%20Matching%20a%20Rule.java) +98 | [Count Largest Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Largest%20Group.java) +99 | [Count Negative Numbers in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Negative%20Numbers%20in%20a%20Sorted%20Matrix.java) +100 | [Count Number of Pairs With Absolute Difference K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Number%20of%20Pairs%20With%20Absolute%20Difference%20K.java) +101 | [Count Odd Numbers in an Interval Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Odd%20Numbers%20in%20an%20Interval%20Range.java) +102 | [Count Operations to Obtain Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Operations%20to%20Obtain%20Zero.java) +103 | [Count Pairs Of Similar Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Pairs%20Of%20Similar%20Strings.java) +104 | [Count Prefixes of a Given String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Prefixes%20of%20a%20Given%20String.java) +105 | [Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) +106 | [Count Special Quadruplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Special%20Quadruplets.java) +107 | [Count Square Sum Triples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Square%20Sum%20Triples.java) +108 | [Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) +109 | [Count Vowel Substrings of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Vowel%20Substrings%20of%20a%20String.java) +110 | [Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) +111 | [Count the Digits That Divide a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Digits%20That%20Divide%20a%20Number.java) +112 | [Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) +113 | [Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Bits.java) +114 | [Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) +115 | [Counting Words With a Given Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Words%20With%20a%20Given%20Prefix.java) +116 | [Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) +117 | [Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) +118 | [Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) +119 | [DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) +120 | [Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) +121 | [Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) +122 | [Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) +123 | [Decode the Message](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20the%20Message.java) +124 | [Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) +125 | [Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) +126 | [Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) +127 | [Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) +128 | [Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) +129 | [Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) +130 | [Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) +131 | [Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) +132 | [Delete Node in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Node%20in%20a%20Linked%20List.java) +133 | [Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) +134 | [Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) +135 | [Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) +136 | [Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) +137 | [Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) +138 | [Design an Ordered Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20Stream.java) +139 | [Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) +140 | [Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) +141 | [Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) +142 | [Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) +143 | [Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) +144 | [Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) +145 | [Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) +146 | [Determine if Two Events Have Conflict](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20Two%20Events%20Have%20Conflict.java) +147 | [Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) +148 | [Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) +149 | [Difference Between Element Sum and Digit Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Difference%20Between%20Element%20Sum%20and%20Digit%20Sum%20of%20an%20Array.java) +150 | [Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) +151 | [Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) +152 | [Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) +153 | [Divide Array Into Equal Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20Array%20Into%20Equal%20Pairs.java) +154 | [Divide a String Into Groups of Size k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20a%20String%20Into%20Groups%20of%20Size%20k.java) +155 | [Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) +156 | [Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) +157 | [Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) +158 | [Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) +159 | [Evaluate Boolean Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Evaluate%20Boolean%20Binary%20Tree.java) +160 | [Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) +161 | [Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) +162 | [Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) +163 | [Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) +164 | [Fibonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Number.java) +165 | [Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) +166 | [Final Value of Variable After Performing Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Value%20of%20Variable%20After%20Performing%20Operations.java) +167 | [Find All K-Distant Indices in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20K-Distant%20Indices%20in%20an%20Array.java) +168 | [Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) +169 | [Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) +170 | [Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) +171 | [Find Closest Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Closest%20Number%20to%20Zero.java) +172 | [Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) +173 | [Find First Palindromic String in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20First%20Palindromic%20String%20in%20the%20Array.java) +174 | [Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) +175 | [Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) +176 | [Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) +177 | [Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) +178 | [Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) +179 | [Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) +180 | [Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) +181 | [Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) +182 | [Find Resultant Array After Removing Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Resultant%20Array%20After%20Removing%20Anagrams.java) +183 | [Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) +184 | [Find Subarrays With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Subarrays%20With%20Equal%20Sum.java) +185 | [Find Target Indices After Sorting Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Target%20Indices%20After%20Sorting%20Array.java) +186 | [Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) +187 | [Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) +188 | [Find if Path Exists in Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20if%20Path%20Exists%20in%20Graph.java) +189 | [Find the Array Concatenation Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Array%20Concatenation%20Value.java) +190 | [Find the Difference of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Difference%20of%20Two%20Arrays.java) +191 | [Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) +192 | [Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) +193 | [Find the K-Beauty of a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20K-Beauty%20of%20a%20Number.java) +194 | [Find the Middle Index in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Middle%20Index%20in%20Array.java) +195 | [Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) +196 | [Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) +197 | [Finding 3-Digit Even Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Finding%203-Digit%20Even%20Numbers.java) +198 | [First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) +199 | [First Letter to Appear Twice](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Letter%20to%20Appear%20Twice.java) +200 | [First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) +201 | [Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) +202 | [Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) +203 | [Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) +204 | [Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) +205 | [Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) +206 | [Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) +207 | [Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) +208 | [Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) +209 | [Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) +210 | [Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) +211 | [Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) +212 | [Greatest English Letter in Upper and Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20English%20Letter%20in%20Upper%20and%20Lower%20Case.java) +213 | [Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) +214 | [Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) +215 | [Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) +216 | [Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) +217 | [Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) +218 | [Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) +219 | [Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) +220 | [High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) +221 | [How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) +222 | [How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) +223 | [Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) +224 | [Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) +225 | [Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) +226 | [Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) +227 | [Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) +228 | [Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) +229 | [Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) +230 | [Intersection of Multiple Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Multiple%20Arrays.java) +231 | [Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) +232 | [Intersection of Two Arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays%20II.java) +233 | [Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) +234 | [Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) +235 | [Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) +236 | [Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) +237 | [Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) +238 | [Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) +239 | [Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) +240 | [Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) +241 | [K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) +242 | [Keep Multiplying Found Values by Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keep%20Multiplying%20Found%20Values%20by%20Two.java) +243 | [Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) +244 | [Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) +245 | [Kth Distinct String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Distinct%20String%20in%20an%20Array.java) +246 | [Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) +247 | [Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) +248 | [Largest 3-Same-Digit Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%203-Same-Digit%20Number%20in%20String.java) +249 | [Largest Local Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Local%20Values%20in%20a%20Matrix.java) +250 | [Largest Number After Digit Swaps by Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20After%20Digit%20Swaps%20by%20Parity.java) +251 | [Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) +252 | [Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) +253 | [Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) +254 | [Largest Positive Integer That Exists With Its Negative](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Positive%20Integer%20That%20Exists%20With%20Its%20Negative.java) +255 | [Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) +256 | [Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) +257 | [Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) +258 | [Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) +259 | [Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) +260 | [Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) +261 | [Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) +262 | [Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) +263 | [Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) +264 | [License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) +265 | [Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) +266 | [Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) +267 | [Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) +268 | [Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) +269 | [Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) +270 | [Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) +271 | [Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) +272 | [Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) +273 | [Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) +274 | [Longest Subsequence With Limited Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Subsequence%20With%20Limited%20Sum.java) +275 | [Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) +276 | [Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) +277 | [Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) +278 | [Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) +279 | [Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) +280 | [Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) +281 | [Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) +282 | [Make Array Zero by Subtracting Equal Amounts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20Array%20Zero%20by%20Subtracting%20Equal%20Amounts.java) +283 | [Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) +284 | [Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) +285 | [Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) +286 | [Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) +287 | [Maximize Sum Of Array After K Negations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Sum%20Of%20Array%20After%20K%20Negations.java) +288 | [Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) +289 | [Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) +290 | [Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) +291 | [Maximum Count of Positive Integer and Negative Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Count%20of%20Positive%20Integer%20and%20Negative%20Integer.java) +292 | [Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) +293 | [Maximum Difference Between Increasing Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20Between%20Increasing%20Elements.java) +294 | [Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) +295 | [Maximum Enemy Forts That Can Be Captured](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Enemy%20Forts%20That%20Can%20Be%20Captured.java) +296 | [Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) +297 | [Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) +298 | [Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) +299 | [Maximum Number of Pairs in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Pairs%20in%20Array.java) +300 | [Maximum Number of Words Found in Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20Found%20in%20Sentences.java) +301 | [Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) +302 | [Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) +303 | [Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) +304 | [Maximum Product of Three Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Three%20Numbers.java) +305 | [Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) +306 | [Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) +307 | [Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) +308 | [Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray.java) +309 | [Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) +310 | [Maximum Value of a String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20a%20String%20in%20an%20Array.java) +311 | [Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) +312 | [Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) +313 | [Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) +314 | [Merge Similar Items](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Similar%20Items.java) +315 | [Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) +316 | [Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) +317 | [Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) +318 | [Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) +319 | [Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) +320 | [Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) +321 | [Min Max Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Max%20Game.java) +322 | [Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) +323 | [Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) +324 | [Minimum Amount of Time to Fill Cups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Amount%20of%20Time%20to%20Fill%20Cups.java) +325 | [Minimum Bit Flips to Convert Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Bit%20Flips%20to%20Convert%20Number.java) +326 | [Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) +327 | [Minimum Common Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Common%20Value.java) +328 | [Minimum Cost of Buying Candies With Discount](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20of%20Buying%20Candies%20With%20Discount.java) +329 | [Minimum Cost to Move Chips to The Same Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20to%20Move%20Chips%20to%20The%20Same%20Position.java) +330 | [Minimum Cuts to Divide a Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cuts%20to%20Divide%20a%20Circle.java) +331 | [Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) +332 | [Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) +333 | [Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) +334 | [Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) +335 | [Minimum Hours of Training to Win a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Hours%20of%20Training%20to%20Win%20a%20Competition.java) +336 | [Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) +337 | [Minimum Moves to Convert String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Convert%20String.java) +338 | [Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) +339 | [Minimum Number of Moves to Seat Everyone](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Moves%20to%20Seat%20Everyone.java) +340 | [Minimum Number of Operations to Convert Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Operations%20to%20Convert%20Time.java) +341 | [Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) +342 | [Minimum Recolors to Get K Consecutive Black Blocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Recolors%20to%20Get%20K%20Consecutive%20Black%20Blocks.java) +343 | [Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) +344 | [Minimum Sum of Four Digit Number After Splitting Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Sum%20of%20Four%20Digit%20Number%20After%20Splitting%20Digits.java) +345 | [Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) +346 | [Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) +347 | [Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) +348 | [Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) +349 | [Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) +350 | [Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) +351 | [Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Ranges.java) +352 | [Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) +353 | [Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) +354 | [Most Frequent Even Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Even%20Element.java) +355 | [Most Frequent Number Following Key In an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Number%20Following%20Key%20In%20an%20Array.java) +356 | [Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) +357 | [Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) +358 | [Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) +359 | [N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) +360 | [N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) +361 | [N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) +362 | [N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) +363 | [Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) +364 | [Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) +365 | [Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) +366 | [Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) +367 | [Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) +368 | [Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) +369 | [Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) +370 | [Number of Arithmetic Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Arithmetic%20Triplets.java) +371 | [Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) +372 | [Number of Common Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Common%20Factors.java) +373 | [Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) +374 | [Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) +375 | [Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) +376 | [Number of Distinct Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Distinct%20Averages.java) +377 | [Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) +378 | [Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) +379 | [Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) +380 | [Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) +381 | [Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) +382 | [Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) +383 | [Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) +384 | [Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) +385 | [Number of Unequal Triplets in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Unequal%20Triplets%20in%20Array.java) +386 | [Number of Valid Words in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Valid%20Words%20in%20a%20Sentence.java) +387 | [Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) +388 | [Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) +389 | [Odd String Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Odd%20String%20Difference.java) +390 | [Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) +391 | [Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) +392 | [Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) +393 | [Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) +394 | [Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) +395 | [Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) +396 | [Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) +397 | [Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) +398 | [Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) +399 | [Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) +400 | [Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) +401 | [Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) +402 | [Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) +403 | [Percentage of Letter in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Percentage%20of%20Letter%20in%20String.java) +404 | [Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) +405 | [Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) +406 | [Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) +407 | [Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) +408 | [Power of Four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Four.java) +409 | [Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) +410 | [Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) +411 | [Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) +412 | [Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) +413 | [Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) +414 | [Range Sum of BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20of%20BST.java) +415 | [Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) +416 | [Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) +417 | [Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) +418 | [Rearrange Characters to Make Target String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Characters%20to%20Make%20Target%20String.java) +419 | [Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) +420 | [Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rectangle%20Overlap.java) +421 | [Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) +422 | [Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) +423 | [Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) +424 | [Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) +425 | [Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) +426 | [Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) +427 | [Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) +428 | [Remove Digit From Number to Maximize Result](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Digit%20From%20Number%20to%20Maximize%20Result.java) +429 | [Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) +430 | [Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) +431 | [Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) +432 | [Remove Letter To Equalize Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Letter%20To%20Equalize%20Frequency.java) +433 | [Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) +434 | [Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) +435 | [Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) +436 | [Remove Palindromic Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Palindromic%20Subsequences.java) +437 | [Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) +438 | [Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) +439 | [Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) +440 | [Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) +441 | [Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) +442 | [Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) +443 | [Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) +444 | [Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) +445 | [Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) +446 | [Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) +447 | [Reverse Prefix of Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Prefix%20of%20Word.java) +448 | [Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) +449 | [Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) +450 | [Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) +451 | [Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) +452 | [Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) +453 | [Rings and Rods](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rings%20and%20Rods.java) +454 | [Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) +455 | [Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) +456 | [Root Equals Sum of Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Root%20Equals%20Sum%20of%20Children.java) +457 | [Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) +458 | [Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) +459 | [Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) +460 | [Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) +461 | [Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) +462 | [Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) +463 | [Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) +464 | [Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) +465 | [Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) +466 | [Separate the Digits in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Separate%20the%20Digits%20in%20an%20Array.java) +467 | [Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) +468 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) +469 | [Shortest Distance to Target String in a Circular Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20Target%20String%20in%20a%20Circular%20Array.java) +470 | [Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) +471 | [Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) +472 | [Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) +473 | [Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) +474 | [Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) +475 | [Similar RGB Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Similar%20RGB%20Color.java) +476 | [Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) +477 | [Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) +478 | [Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) +479 | [Smallest Even Multiple](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Even%20Multiple.java) +480 | [Smallest Index With Equal Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Index%20With%20Equal%20Value.java) +481 | [Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) +482 | [Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) +483 | [Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) +484 | [Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) +485 | [Sort Even and Odd Indices Independently](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Even%20and%20Odd%20Indices%20Independently.java) +486 | [Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) +487 | [Sort the People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20the%20People.java) +488 | [Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) +489 | [Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) +490 | [Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) +491 | [Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) +492 | [SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) +493 | [Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) +494 | [String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) +495 | [String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) +496 | [Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) +497 | [Strong Password Checker II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strong%20Password%20Checker%20II.java) +498 | [Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) +499 | [Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) +500 | [Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) +501 | [Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) +502 | [Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) +503 | [Sum Of Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20Of%20Two%20Integers.java) +504 | [Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) +505 | [Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) +506 | [Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) +507 | [Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) +508 | [Sum of Left Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Left%20Leaves.java) +509 | [Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) +510 | [Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) +511 | [Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) +512 | [Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) +513 | [Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) +514 | [Take Gifts From the Richest Pile](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Take%20Gifts%20From%20the%20Richest%20Pile.java) +515 | [Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teemo%20Attacking.java) +516 | [Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) +517 | [The Employee That Worked on the Longest Task](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20Employee%20That%20Worked%20on%20the%20Longest%20Task.java) +518 | [The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) +519 | [Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) +520 | [Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) +521 | [Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) +522 | [Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) +523 | [Time Needed to Buy Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Time%20Needed%20to%20Buy%20Tickets.java) +524 | [To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) +525 | [Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) +526 | [Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) +527 | [Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) +528 | [Two Furthest Houses With Different Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Furthest%20Houses%20With%20Different%20Colors.java) +529 | [Two Out of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Out%20of%20Three.java) +530 | [Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) +531 | [Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) +532 | [Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) +533 | [Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) +534 | [Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) +535 | [Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) +536 | [Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) +537 | [Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) +538 | [Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) +539 | [Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) +540 | [Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) +541 | [Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) +542 | [Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) +543 | [Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) +544 | [Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) +545 | [Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) +546 | [Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) +547 | [Valid Word Abbreviation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbreviation.java) +548 | [Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) +549 | [Valid Word Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Square.java) +550 | [Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) +551 | [Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) +552 | [Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) +553 | [X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) +554 | [XOR Operation in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/XOR%20Operation%20in%20an%20Array.java) +555 | [nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) +556 | [range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) +557 | [trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) diff --git a/Hard/README.md b/Hard/README.md index 06ab9137..75b409d1 100644 --- a/Hard/README.md +++ b/Hard/README.md @@ -1,69 +1,97 @@ -# Hard LeetCode-Java-Solutions +# Hard LeetCode Java Solutions S.no | Coding Problem --- | --- -1|[Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) -2|[Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) -3|[First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) -4|[Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) -5|[Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) -6|[Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) -7|[Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) -8|[Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) -9|[Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) -10|[Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) -11|[Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Interval.java) -12|[Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) -13|[Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) -14|[Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) -15|[Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) -16|[Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) -17|[Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) -18|[Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parallel%20Courses.java) -19|[LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) -20|[Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) -21|[K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) -22|[Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) -23|[N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) -24|[Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) -25|[Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) -26|[Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) -27|[Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) -28|[Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) -29|[Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) -30|[Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) -31|[Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) -32|[Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) -33|[Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) -34|[Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) -35|[LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LRU%20Cache.java) -36|[Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) -37|[Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) -38|[Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) -39|[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Hard.md) -40|[Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) -41|[Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) -42|[Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) -43|[Find Median From Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20From%20Data%20Stream.java) -44|[Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) -45|[Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) -46|[Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) -47|[Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) -48|[Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) -49|[Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) -50|[Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) -51|[Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Interleaving%20String.java) -52|[Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) -53|[Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) -54|[Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) -55|[Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) -56|[Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) -57|[Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) -58|[Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) -59|[Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) -60|[Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) -61|[Binary Tree PostOrder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20PostOrder%20Traversal.java) -62|[Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) -63|[Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) -64|[Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) -65|[Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) -66|[Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) +1 | [Add Edges to Make Degrees of All Nodes Even](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Add%20Edges%20to%20Make%20Degrees%20of%20All%20Nodes%20Even.java) +2 | [Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) +3 | [Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) +4 | [Best Time to Buy and Sell Stock IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20IV.java) +5 | [Binary Tree Cameras](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Cameras.java) +6 | [Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) +7 | [Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) +8 | [Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) +9 | [Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) +10 | [Construct Target Array With Multiple Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Construct%20Target%20Array%20With%20Multiple%20Sums.java) +11 | [Count Vowels Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Vowels%20Permutation.java) +12 | [Count of Smaller Numbers After Self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20of%20Smaller%20Numbers%20After%20Self.java) +13 | [Course Schedule III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Course%20Schedule%20III.java) +14 | [Critical Connections in a Network](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Critical%20Connections%20in%20a%20Network.java) +15 | [Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) +16 | [Design In-Memory File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20In-Memory%20File%20System.java) +17 | [Design Movie Rental System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Movie%20Rental%20System.java) +18 | [Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) +19 | [Design Skiplist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Skiplist.java) +20 | [Dice Roll Simulation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Dice%20Roll%20Simulation.java) +21 | [Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) +22 | [Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) +23 | [Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) +24 | [Expression Add Operators](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Expression%20Add%20Operators.java) +25 | [Find Median from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20from%20Data%20Stream.java) +26 | [Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) +27 | [Find the Kth Smallest Sum of a Matrix With Sorted Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Kth%20Smallest%20Sum%20of%20a%20Matrix%20With%20Sorted%20Rows.java) +28 | [First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) +29 | [Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) +30 | [Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) +31 | [Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) +32 | [K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) +33 | [K Inverse Pairs Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Inverse%20Pairs%20Array.java) +34 | [Kth Smallest Number in Multiplication Table](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Kth%20Smallest%20Number%20in%20Multiplication%20Table.java) +35 | [LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) +36 | [Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) +37 | [Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) +38 | [Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) +39 | [Longest Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Valid%20Parentheses.java) +40 | [Max Points on a Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Points%20on%20a%20Line.java) +41 | [Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Stack.java) +42 | [Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) +43 | [Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) +44 | [Maximum Performance of a Team](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Performance%20of%20a%20Team.java) +45 | [Maximum Profit in Job Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Profit%20in%20Job%20Scheduling.java) +46 | [Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) +47 | [Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) +48 | [Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) +49 | [Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) +50 | [Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) +51 | [Minimum Difficulty of a Job Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Difficulty%20of%20a%20Job%20Schedule.java) +52 | [Minimum Number of Refueling Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Number%20of%20Refueling%20Stops.java) +53 | [Minimum Window Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Subsequence.java) +54 | [Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) +55 | [My Calendar III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/My%20Calendar%20III.java) +56 | [N-Queens II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens%20II.java) +57 | [N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) +58 | [Naming a Company](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Naming%20a%20Company.java) +59 | [Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) +60 | [Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) +61 | [Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) +62 | [Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) +63 | [Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) +64 | [Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) +65 | [Paint House III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20III.java) +66 | [Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) +67 | [Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) +68 | [Perfect Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Perfect%20Rectangle.java) +69 | [Poor Pigs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Poor%20Pigs.java) +70 | [Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) +71 | [Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reconstruct%20Itinerary.java) +72 | [Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) +73 | [Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) +74 | [Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) +75 | [Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) +76 | [Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) +77 | [Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) +78 | [Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) +79 | [Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) +80 | [Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) +81 | [Stamping The Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stamping%20The%20Sequence.java) +82 | [Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) +83 | [String Compression II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/String%20Compression%20II.java) +84 | [Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) +85 | [Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) +86 | [Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) +87 | [The Skyline Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/The%20Skyline%20Problem.java) +88 | [Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) +89 | [Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) +90 | [Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) +91 | [Vertical Order Traversal Of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Vertical%20Order%20Traversal%20Of%20a%20Binary%20Tree.java) +92 | [Wildcard Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Wildcard%20Matching.java) +93 | [Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) +94 | [Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) diff --git a/Medium/README.md b/Medium/README.md index 549b4e57..afdf245d 100644 --- a/Medium/README.md +++ b/Medium/README.md @@ -1,545 +1,741 @@ -# Medium LeetCode-Java-Solutions +# Medium LeetCode Java Solutions S.no | Coding Problem --- | --- -1|[Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) -2|[Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Ranges.java) -3|[First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) -4|[Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) -5|[Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) -6|[3Sum Closest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Closest.java) -7|[Binary Tree Zigzag Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Zigzag%20Level%20Order%20Traversal.java) -8|[House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) -9|[Campus Bikes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes.java) -10|[Arithmetic Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Subarrays.java) -11|[Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) -12|[Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) -13|[Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Itinerary.java) -14|[Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) -15|[Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) -16|[Champagne Tower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Champagne%20Tower.java) -17|[Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) -18|[Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) -19|[Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) -20|[Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) -21|[The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) -22|[Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) -23|[Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) -24|[Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) -25|[Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) -26|[Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) -27|[Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) -28|[Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) -29|[Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) -30|[Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Overlap.java) -31|[Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) -32|[Capacity To Ship Packages Within D Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Capacity%20To%20Ship%20Packages%20Within%20D%20Days.java) -33|[Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) -34|[Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) -35|[Find Smallest Common Element in All Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Smallest%20Common%20Element%20in%20All%20Rows.java) -36|[Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) -37|[Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) -38|[Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) -39|[Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) -40|[Count Number of Homogenous Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Homogenous%20Substrings.java) -41|[Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) -42|[Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) -43|[Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) -44|[Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) -45|[Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) -46|[Find Largest Value in Each Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Each%20Tree%20Row.java) -47|[Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) -48|[Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) -49|[Design a File Sharing System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20File%20Sharing%20System.java) -50|[Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) -51|[Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) -52|[Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) -53|[Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) -54|[Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) -55|[Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) -56|[Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) -57|[Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) -58|[Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) -59|[Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) -60|[Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) -61|[Diameter of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diameter%20of%20N-ary%20Tree.java) -62|[Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) -63|[Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) -64|[Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) -65|[Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) -66|[Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) -67|[Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) -68|[Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) -69|[Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) -70|[Count Number of Teams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Teams.java) -71|[Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) -72|[Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) -73|[Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) -74|[Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) -75|[Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) -76|[As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) -77|[Count Square Submatrices with All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Square%20Submatrices%20with%20All%20Ones.java) -78|[Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) -79|[Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) -80|[Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) -81|[Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) -82|[Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) -83|[Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) -84|[Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) -85|[Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) -86|[Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) -87|[Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) -88|[Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) -89|[Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Town%20Judge.java) -90|[Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) -91|[Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) -92|[Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) -93|[Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) -94|[Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) -95|[Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) -96|[Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) -97|[Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) -98|[Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) -99|[Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) -100|[Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) -101|[Find Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Permutation.java) -102|[Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) -103|[Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) -104|[Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) -105|[Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) -106|[Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) -107|[Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) -108|[Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) -109|[Design Browser History](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Browser%20History.java) -110|[Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) -111|[Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) -112|[Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) -113|[Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) -114|[3Sum Smaller](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Smaller.java) -115|[Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) -116|[Construct K Palindrome Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20K%20Palindrome%20Strings.java) -117|[Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) -118|[Average Waiting Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Average%20Waiting%20Time.java) -119|[Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) -120|[Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) -121|[4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) -122|[Advantage Shuffle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Advantage%20Shuffle.java) -123|[Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) -124|[Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) -125|[Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) -126|[Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) -127|[Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) -128|[Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) -129|[House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) -130|[Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) -131|[Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) -132|[Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) -133|[Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) -134|[Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) -135|[Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) -136|[Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) -137|[Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) -138|[Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) -139|[Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) -140|[Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) -141|[Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) -142|[Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) -143|[Camelcase Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Camelcase%20Matching.java) -144|[Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) -145|[Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) -146|[Count Servers That Communicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Servers%20That%20Communicate.java) -147|[Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) -148|[Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) -149|[Split Linked List into Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20into%20Parts.java) -150|[Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) -151|[Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) -152|[Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) -153|[Adding Two Negabinary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Two%20Negabinary%20Numbers.java) -154|[Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) -155|[Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) -156|[Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) -157|[Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) -158|[Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) -159|[Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) -160|[Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) -161|[Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) -162|[Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) -163|[Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) -164|[Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) -165|[Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) -166|[Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) -167|[Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) -168|[Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) -169|[Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) -170|[Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) -171|[Filter Restaurants by Vegan-Friendly, Price and Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Filter%20Restaurants%20by%20Vegan-Friendly,%20Price%20and%20Distance.java) -172|[Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) -173|[Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) -174|[Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) -175|[Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) -176|[Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) -177|[Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) -178|[Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) -179|[Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) -180|[Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) -181|[Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) -182|[Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) -183|[Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) -184|[Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) -185|[Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) -186|[Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) -187|[Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) -188|[Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) -189|[Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) -190|[Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) -191|[Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) -192|[Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) -193|[Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) -194|[Deepest Leaves Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Deepest%20Leaves%20Sum.java) -195|[Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) -196|[Clone N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20N-ary%20Tree.java) -197|[Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) -198|[Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) -199|[Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) -200|[Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) -201|[Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) -202|[Delete Leaves With a Given Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Leaves%20With%20a%20Given%20Value.java) -203|[Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) -204|[Binary Tree Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Inorder%20Traversal.java) -205|[Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) -206|[Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) -207|[Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) -208|[Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) -209|[Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) -210|[Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) -211|[Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) -212|[4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) -213|[Find Root of N-Ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Root%20of%20N-Ary%20Tree.java) -214|[Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) -215|[Can Make Palindrome from Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Make%20Palindrome%20from%20Substring.java) -216|[Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) -217|[Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) -218|[Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) -219|[Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) -220|[Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) -221|[Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) -222|[Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Subsequence.java) -223|[Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) -224|[Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) -225|[Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) -226|[Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) -227|[Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) -228|[Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) -229|[Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) -230|[All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) -231|[Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) -232|[Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) -233|[Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) -234|[Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) -235|[Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) -236|[Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) -237|[Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) -238|[Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) -239|[Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) -240|[Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) -241|[Apply Discount Every n Orders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20Every%20n%20Orders.java) -242|[All Elements in Two Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Elements%20in%20Two%20Binary%20Search%20Trees.java) -243|[Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) -244|[Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) -245|[Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) -246|[Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) -247|[Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) -248|[Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) -249|[Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) -250|[Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) -251|[Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) -252|[Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) -253|[Angle Between Hands of a Clock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Angle%20Between%20Hands%20of%20a%20Clock.java) -254|[Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) -255|[Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20a%20Corresponding%20Node%20of%20a%20Binary%20Tree%20in%20a%20Clone%20of%20That%20Tree.java) -256|[Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) -257|[Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) -258|[Dot Product of Two Sparse Vectors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dot%20Product%20of%20Two%20Sparse%20Vectors.java) -259|[Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) -260|[HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) -261|[Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Anagrams%20in%20a%20String.java) -262|[Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) -263|[Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) -264|[Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) -265|[Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) -266|[Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) -267|[Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) -268|[Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) -269|[Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) -270|[Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) -271|[Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) -272|[Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) -273|[Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) -274|[Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) -275|[Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) -276|[Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) -277|[Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) -278|[Design A Leaderboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20A%20Leaderboard.java) -279|[Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) -280|[Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) -281|[Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) -282|[The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) -283|[Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) -284|[Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) -285|[Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) -286|[Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) -287|[Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) -288|[Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) -289|[Cinema Seat Allocation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cinema%20Seat%20Allocation.java) -290|[Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) -291|[Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) -292|[Check If All 1's Are at Least Length K Places Away](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20All%201's%20Are%20at%20Least%20Length%20K%20Places%20Away.java) -293|[RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) -294|[Vertical Order Traversal Of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vertical%20Order%20Traversal%20Of%20Binary%20Tree.java) -295|[Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) -296|[Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) -297|[Delete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Tree%20Nodes.java) -298|[Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) -299|[Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Is%20a%20Valid%20Sequence%20from%20Root%20to%20Leaves%20Path%20in%20a%20Binary%20Tree.java) -300|[Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) -301|[Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) -302|[One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) -303|[Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) -304|[Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) -305|[Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) -306|[4Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum%20II.java) -307|[Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) -308|[Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) -309|[Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) -310|[Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) -311|[Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) -312|[Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) -313|[Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) -314|[Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) -315|[Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) -316|[Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) -317|[Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) -318|[Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) -319|[Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) -320|[Find Nearest Right Node in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Nearest%20Right%20Node%20in%20Binary%20Tree.java) -321|[Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) -322|[Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) -323|[Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) -324|[Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) -325|[Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) -326|[Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) -327|[Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) -328|[Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) -329|[Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) -330|[Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) -331|[Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) -332|[Alert Using Same Key-Card Three or More Times in a One Hour Period](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Alert%20Using%20Same%20Key-Card%20Three%20or%20More%20Times%20in%20a%20One%20Hour%20Period.java) -333|[Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) -334|[Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) -335|[Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) -336|[Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) -337|[Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) -338|[Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) -339|[Design a Stack With Increment Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20Stack%20With%20Increment%20Operation.java) -340|[Break a Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Break%20a%20Palindrome.java) -341|[Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) -342|[Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) -343|[Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) -344|[Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) -345|[Add and Search Word - Data structure design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20and%20Search%20Word%20-%20Data%20structure%20design.java) -346|[Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) -347|[Check If a String Can Break Another String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Can%20Break%20Another%20String.java) -348|[Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) -349|[Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) -350|[Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) -351|[Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) -352|[Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) -353|[Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) -354|[Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) -355|[Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) -356|[Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) -357|[Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) -358|[Display Table of Food Orders in a Restaurant](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Display%20Table%20of%20Food%20Orders%20in%20a%20Restaurant.java) -359|[Campus Bikes II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes%20II.java) -360|[Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) -361|[Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) -362|[Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) -363|[Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) -364|[Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) -365|[Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) -366|[Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) -367|[Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) -368|[Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) -369|[Design Underground System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Underground%20System.java) -370|[Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) -371|[Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) -372|[Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) -373|[Check if There is a Valid Path in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20There%20is%20a%20Valid%20Path%20in%20a%20Grid.java) -374|[Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) -375|[Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) -376|[Clone Binary Tree With Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Binary%20Tree%20With%20Random%20Pointer.java) -377|[Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) -378|[Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) -379|[Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) -380|[Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) -381|[Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) -382|[Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) -383|[Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) -384|[Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) -385|[The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) -386|[Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) -387|[Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) -388|[Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) -389|[Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) -390|[Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) -391|[Can Convert String in K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Convert%20String%20in%20K%20Moves.java) -392|[Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) -393|[Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) -394|[Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) -395|[Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) -396|[Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) -397|[Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) -398|[Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) -399|[Count Submatrices With All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Submatrices%20With%20All%20Ones.java) -400|[Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) -401|[Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) -402|[Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) -403|[Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) -404|[Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) -405|[Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) -406|[Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) -407|[My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) -408|[Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) -409|[Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) -410|[Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) -411|[Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Counting%20Bits.java) -412|[Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) -413|[Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) -414|[Find Center of Star Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Center%20of%20Star%20Graph.java) -415|[Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) -416|[Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) -417|[Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) -418|[Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) -419|[Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) -420|[Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) -421|[132 Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/132%20Pattern.java) -422|[Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) -423|[Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) -424|[Find the duplicate number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20duplicate%20number.java) -425|[Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) -426|[Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) -427|[Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) -428|[Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) -429|[Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) -430|[My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) -431|[Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) -432|[Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) -433|[Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) -434|[Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) -435|[Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) -436|[Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) -437|[Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) -438|[Add Minimum Number of Rungs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Minimum%20Number%20of%20Rungs.java) -439|[Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) -440|[Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) -441|[H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) -442|[Best Time to Buy and Sell Stock with Cooldown](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Cooldown.java) -443|[Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) -444|[Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) -445|[Find Elements in a Contaminated Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Elements%20in%20a%20Contaminated%20Binary%20Tree.java) -446|[Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) -447|[Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) -448|[Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) -449|[Determine if Two Strings Are Close](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20Two%20Strings%20Are%20Close.java) -450|[Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) -451|[Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) -452|[The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) -453|[Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) -454|[Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) -455|[Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Teemo%20Attacking.java) -456|[Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) -457|[Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) -458|[Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) -459|[Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) -460|[Binary Tree Coloring Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Coloring%20Game.java) -461|[Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) -462|[Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) -463|[Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) -464|[01 Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/01%20Matrix.java) -465|[Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) -466|[Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) -467|[Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) -468|[Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) -469|[Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) -470|[Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) -471|[Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) -472|[Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) -473|[Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) -474|[Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) -475|[Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) -476|[Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) -477|[String to Integer(atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer(atoi).java) -478|[Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) -479|[Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) -480|[Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) -481|[Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) -482|[Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) -483|[Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) -484|[Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) -485|[Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) -486|[Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) -487|[Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) -488|[Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) -489|[Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) -490|[Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) -491|[Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) -492|[Divide Array in Sets of K Consecutive Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Array%20in%20Sets%20of%20K%20Consecutive%20Numbers.java) -493|[Check Completeness of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20Completeness%20of%20a%20Binary%20Tree.java) -494|[Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) -495|[Count Sorted Vowel Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sorted%20Vowel%20Strings.java) -496|[Check If a String Contains All Binary Codes of Size K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Contains%20All%20Binary%20Codes%20of%20Size%20K.java) -497|[Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) -498|[Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) -499|[Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) -500|[Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) -501|[Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) -502|[ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) -503|[Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) -504|[All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) -505|[Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) -506|[Design Authentication Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Authentication%20Manager.java) -507|[People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) -508|[Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) -509|[All Paths from Source Lead to Destination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20from%20Source%20Lead%20to%20Destination.java) -510|[Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) -511|[Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) -512|[Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) -513|[Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) -514|[All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) -515|[Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) -516|[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Medium.md) -517|[Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) -518|[Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) -519|[Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) -520|[Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) -521|[Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) -522|[Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) -523|[Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) -524|[Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) -525|[Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) -526|[Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) -527|[Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) -528|[H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) -529|[3Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum.java) -530|[Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) -531|[Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) -532|[Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) -533|[Count Good Nodes in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Good%20Nodes%20in%20Binary%20Tree.java) -534|[Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) -535|[Even Odd Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Even%20Odd%20Tree.java) -536|[Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) -537|[Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) -538|[Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) -539|[Construct Binary Search Tree from Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Search%20Tree%20from%20Preorder%20Traversal.java) -540|[Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) -541|[Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) -542|[Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) +1 | [01 Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/01%20Matrix.java) +2 | [132 Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/132%20Pattern.java) +3 | [3Sum Closest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Closest.java) +4 | [3Sum Smaller](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Smaller.java) +5 | [3Sum With Multiplicity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20With%20Multiplicity.java) +6 | [3Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum.java) +7 | [4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) +8 | [4Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum%20II.java) +9 | [4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) +10 | [Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) +11 | [Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) +12 | [Add Minimum Number of Rungs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Minimum%20Number%20of%20Rungs.java) +13 | [Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) +14 | [Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) +15 | [Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) +16 | [Adding Spaces to a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Spaces%20to%20a%20String.java) +17 | [Adding Two Negabinary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Two%20Negabinary%20Numbers.java) +18 | [Advantage Shuffle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Advantage%20Shuffle.java) +19 | [Alert Using Same Key-Card Three or More Times in a One Hour Period](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Alert%20Using%20Same%20Key-Card%20Three%20or%20More%20Times%20in%20a%20One%20Hour%20Period.java) +20 | [All Ancestors of a Node in a Directed Acyclic Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Ancestors%20of%20a%20Node%20in%20a%20Directed%20Acyclic%20Graph.java) +21 | [All Divisions With the Highest Score of a Binary Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Divisions%20With%20the%20Highest%20Score%20of%20a%20Binary%20Array.java) +22 | [All Elements in Two Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Elements%20in%20Two%20Binary%20Search%20Trees.java) +23 | [All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) +24 | [All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) +25 | [All Paths from Source Lead to Destination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20from%20Source%20Lead%20to%20Destination.java) +26 | [All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) +27 | [Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) +28 | [Angle Between Hands of a Clock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Angle%20Between%20Hands%20of%20a%20Clock.java) +29 | [Append Characters to String to Make Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20Characters%20to%20String%20to%20Make%20Subsequence.java) +30 | [Append K Integers With Minimal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20K%20Integers%20With%20Minimal%20Sum.java) +31 | [Apply Discount Every n Orders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20Every%20n%20Orders.java) +32 | [Apply Discount to Prices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20to%20Prices.java) +33 | [Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) +34 | [Arithmetic Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Subarrays.java) +35 | [Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) +36 | [Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) +37 | [As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) +38 | [Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) +39 | [Average Waiting Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Average%20Waiting%20Time.java) +40 | [Bag of Tokens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bag%20of%20Tokens.java) +41 | [Balance a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Balance%20a%20Binary%20Search%20Tree.java) +42 | [Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) +43 | [Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) +44 | [Best Time to Buy and Sell Stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20II.java) +45 | [Best Time to Buy and Sell Stock with Cooldown](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Cooldown.java) +46 | [Binary Search Tree Iterator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator%20II.java) +47 | [Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) +48 | [Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) +49 | [Binary Tree Coloring Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Coloring%20Game.java) +50 | [Binary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Level%20Order%20Traversal.java) +51 | [Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) +52 | [Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) +53 | [Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) +54 | [Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) +55 | [Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) +56 | [Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) +57 | [Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) +58 | [Binary Tree Zigzag Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Zigzag%20Level%20Order%20Traversal.java) +59 | [Binary Trees With Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Trees%20With%20Factors.java) +60 | [Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) +61 | [Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) +62 | [Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bold%20Words%20in%20String.java) +63 | [Bomb Enemy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bomb%20Enemy.java) +64 | [Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) +65 | [Brace Expansion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Brace%20Expansion.java) +66 | [Break a Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Break%20a%20Palindrome.java) +67 | [Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) +68 | [Buildings With an Ocean View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Buildings%20With%20an%20Ocean%20View.java) +69 | [Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) +70 | [Camelcase Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Camelcase%20Matching.java) +71 | [Campus Bikes II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes%20II.java) +72 | [Campus Bikes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes.java) +73 | [Can Convert String in K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Convert%20String%20in%20K%20Moves.java) +74 | [Can Make Palindrome from Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Make%20Palindrome%20from%20Substring.java) +75 | [Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) +76 | [Capacity To Ship Packages Within D Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Capacity%20To%20Ship%20Packages%20Within%20D%20Days.java) +77 | [Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) +78 | [Champagne Tower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Champagne%20Tower.java) +79 | [Cheapest Flights Within K Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cheapest%20Flights%20Within%20K%20Stops.java) +80 | [Check Completeness of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20Completeness%20of%20a%20Binary%20Tree.java) +81 | [Check If All 1's Are at Least Length K Places Away](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20All%201's%20Are%20at%20Least%20Length%20K%20Places%20Away.java) +82 | [Check If a String Can Break Another String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Can%20Break%20Another%20String.java) +83 | [Check If a String Contains All Binary Codes of Size K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Contains%20All%20Binary%20Codes%20of%20Size%20K.java) +84 | [Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Is%20a%20Valid%20Sequence%20from%20Root%20to%20Leaves%20Path%20in%20a%20Binary%20Tree.java) +85 | [Check if There is a Valid Path in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20There%20is%20a%20Valid%20Path%20in%20a%20Grid.java) +86 | [Cinema Seat Allocation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cinema%20Seat%20Allocation.java) +87 | [Clone Binary Tree With Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Binary%20Tree%20With%20Random%20Pointer.java) +88 | [Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) +89 | [Clone N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20N-ary%20Tree.java) +90 | [Closest Nodes Queries in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Closest%20Nodes%20Queries%20in%20a%20Binary%20Search%20Tree.java) +91 | [Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) +92 | [Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) +93 | [Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) +94 | [Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) +95 | [Combination Sum IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20IV.java) +96 | [Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) +97 | [Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) +98 | [Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) +99 | [Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) +100 | [Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) +101 | [Concatenation of Consecutive Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Concatenation%20of%20Consecutive%20Binary%20Numbers.java) +102 | [Connecting Cities With Minimum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Connecting%20Cities%20With%20Minimum%20Cost.java) +103 | [Construct Binary Search Tree from Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Search%20Tree%20from%20Preorder%20Traversal.java) +104 | [Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) +105 | [Construct Binary Tree from Preorder and Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Preorder%20and%20Inorder%20Traversal.java) +106 | [Construct K Palindrome Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20K%20Palindrome%20Strings.java) +107 | [Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) +108 | [Construct String With Repeat Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20String%20With%20Repeat%20Limit.java) +109 | [Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) +110 | [Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) +111 | [Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) +112 | [Continuous Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Continuous%20Subarray%20Sum.java) +113 | [Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) +114 | [Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) +115 | [Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) +116 | [Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) +117 | [Count Collisions on a Road](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Collisions%20on%20a%20Road.java) +118 | [Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) +119 | [Count Good Nodes in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Good%20Nodes%20in%20Binary%20Tree.java) +120 | [Count Nodes Equal to Average of Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Average%20of%20Subtree.java) +121 | [Count Nodes Equal to Sum of Descendants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Sum%20of%20Descendants.java) +122 | [Count Number of Bad Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Bad%20Pairs.java) +123 | [Count Number of Distinct Integers After Reverse Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Distinct%20Integers%20After%20Reverse%20Operations.java) +124 | [Count Number of Homogenous Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Homogenous%20Substrings.java) +125 | [Count Number of Teams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Teams.java) +126 | [Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) +127 | [Count Servers That Communicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Servers%20That%20Communicate.java) +128 | [Count Sorted Vowel Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sorted%20Vowel%20Strings.java) +129 | [Count Square Submatrices with All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Square%20Submatrices%20with%20All%20Ones.java) +130 | [Count Sub Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sub%20Islands.java) +131 | [Count Submatrices With All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Submatrices%20With%20All%20Ones.java) +132 | [Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) +133 | [Count Unreachable Pairs of Nodes in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Unreachable%20Pairs%20of%20Nodes%20in%20an%20Undirected%20Graph.java) +134 | [Count Vowel Strings in Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Vowel%20Strings%20in%20Ranges.java) +135 | [Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20and%20Say.java) +136 | [Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) +137 | [Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) +138 | [Create Binary Tree From Descriptions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Create%20Binary%20Tree%20From%20Descriptions.java) +139 | [Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) +140 | [Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) +141 | [Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) +142 | [Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) +143 | [Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) +144 | [Deepest Leaves Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Deepest%20Leaves%20Sum.java) +145 | [Delete Leaves With a Given Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Leaves%20With%20a%20Given%20Value.java) +146 | [Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) +147 | [Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) +148 | [Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) +149 | [Delete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Tree%20Nodes.java) +150 | [Delete the Middle Node of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20the%20Middle%20Node%20of%20a%20Linked%20List.java) +151 | [Design A Leaderboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20A%20Leaderboard.java) +152 | [Design Add and Search Words Data Structure](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Add%20and%20Search%20Words%20Data%20Structure.java) +153 | [Design Authentication Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Authentication%20Manager.java) +154 | [Design Browser History](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Browser%20History.java) +155 | [Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) +156 | [Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) +157 | [Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) +158 | [Design Front Middle Back Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Front%20Middle%20Back%20Queue.java) +159 | [Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) +160 | [Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) +161 | [Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) +162 | [Design SQL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20SQL.java) +163 | [Design Snake Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Snake%20Game.java) +164 | [Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) +165 | [Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) +166 | [Design Underground System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Underground%20System.java) +167 | [Design a File Sharing System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20File%20Sharing%20System.java) +168 | [Design a Stack With Increment Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20Stack%20With%20Increment%20Operation.java) +169 | [Design an ATM Machine](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20ATM%20Machine.java) +170 | [Design an Expression Tree With Evaluate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20Expression%20Tree%20With%20Evaluate%20Function.java) +171 | [Determine if Two Strings Are Close](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20Two%20Strings%20Are%20Close.java) +172 | [Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) +173 | [Diameter of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diameter%20of%20N-ary%20Tree.java) +174 | [Display Table of Food Orders in a Restaurant](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Display%20Table%20of%20Food%20Orders%20in%20a%20Restaurant.java) +175 | [Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) +176 | [Divide Array in Sets of K Consecutive Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Array%20in%20Sets%20of%20K%20Consecutive%20Numbers.java) +177 | [Divide Players Into Teams of Equal Skill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Players%20Into%20Teams%20of%20Equal%20Skill.java) +178 | [Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) +179 | [Dot Product of Two Sparse Vectors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dot%20Product%20of%20Two%20Sparse%20Vectors.java) +180 | [Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) +181 | [Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) +182 | [Equal Row and Column Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Equal%20Row%20and%20Column%20Pairs.java) +183 | [Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) +184 | [Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) +185 | [Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) +186 | [Evaluate the Bracket Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20the%20Bracket%20Pairs%20of%20a%20String.java) +187 | [Even Odd Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Even%20Odd%20Tree.java) +188 | [Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) +189 | [Execution of All Suffix Instructions Staying in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid.java) +190 | [Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) +191 | [Fair Distribution of Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fair%20Distribution%20of%20Cookies.java) +192 | [Filter Restaurants by Vegan-Friendly, Price and Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Filter%20Restaurants%20by%20Vegan-Friendly,%20Price%20and%20Distance.java) +193 | [Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Anagrams%20in%20a%20String.java) +194 | [Find All Lonely Numbers in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Lonely%20Numbers%20in%20the%20Array.java) +195 | [Find All Possible Recipes from Given Supplies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Possible%20Recipes%20from%20Given%20Supplies.java) +196 | [Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) +197 | [Find Center of Star Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Center%20of%20Star%20Graph.java) +198 | [Find Closest Node to Given Two Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Closest%20Node%20to%20Given%20Two%20Nodes.java) +199 | [Find Consecutive Integers from a Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Consecutive%20Integers%20from%20a%20Data%20Stream.java) +200 | [Find Distance in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Distance%20in%20a%20Binary%20Tree.java) +201 | [Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) +202 | [Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) +203 | [Find Elements in a Contaminated Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Elements%20in%20a%20Contaminated%20Binary%20Tree.java) +204 | [Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) +205 | [Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) +206 | [Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) +207 | [Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) +208 | [Find Largest Value in Each Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Each%20Tree%20Row.java) +209 | [Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) +210 | [Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) +211 | [Find Missing Observations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Missing%20Observations.java) +212 | [Find Nearest Right Node in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Nearest%20Right%20Node%20in%20Binary%20Tree.java) +213 | [Find Original Array From Doubled Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Original%20Array%20From%20Doubled%20Array.java) +214 | [Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) +215 | [Find Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Permutation.java) +216 | [Find Players With Zero or One Losses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Players%20With%20Zero%20or%20One%20Losses.java) +217 | [Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) +218 | [Find Root of N-Ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Root%20of%20N-Ary%20Tree.java) +219 | [Find Smallest Common Element in All Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Smallest%20Common%20Element%20in%20All%20Rows.java) +220 | [Find The Original Array of Prefix Xor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20The%20Original%20Array%20of%20Prefix%20Xor.java) +221 | [Find Triangular Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Triangular%20Sum%20of%20an%20Array.java) +222 | [Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20a%20Corresponding%20Node%20of%20a%20Binary%20Tree%20in%20a%20Clone%20of%20That%20Tree.java) +223 | [Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) +224 | [Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) +225 | [Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) +226 | [Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) +227 | [Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) +228 | [Find the Duplicate Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Duplicate%20Number.java) +229 | [Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) +230 | [Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) +231 | [Find the Minimum and Maximum Number of Nodes Between Critical Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Minimum%20and%20Maximum%20Number%20of%20Nodes%20Between%20Critical%20Points.java) +232 | [Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) +233 | [Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) +234 | [Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) +235 | [First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) +236 | [Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) +237 | [Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) +238 | [Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) +239 | [Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) +240 | [Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) +241 | [Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) +242 | [Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) +243 | [Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) +244 | [Friends Of Appropriate Ages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friends%20Of%20Appropriate%20Ages.java) +245 | [Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) +246 | [Furthest Building You Can Reach](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Furthest%20Building%20You%20Can%20Reach.java) +247 | [Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) +248 | [Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) +249 | [Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) +250 | [Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) +251 | [Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) +252 | [Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) +253 | [Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) +254 | [Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) +255 | [Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) +256 | [Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) +257 | [H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) +258 | [H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) +259 | [HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) +260 | [Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) +261 | [House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) +262 | [House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) +263 | [House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber.java) +264 | [Image Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Image%20Overlap.java) +265 | [Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) +266 | [Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) +267 | [Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) +268 | [Implement Trie II (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20II%20(Prefix%20Tree).java) +269 | [Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) +270 | [Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) +271 | [Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) +272 | [Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) +273 | [Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) +274 | [Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) +275 | [Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Interval.java) +276 | [Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) +277 | [Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) +278 | [Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) +279 | [Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) +280 | [Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) +281 | [Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) +282 | [Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interleaving%20String.java) +283 | [Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) +284 | [Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) +285 | [Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) +286 | [Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) +287 | [Jump Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20II.java) +288 | [Jump Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20III.java) +289 | [Jump Game VI](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20VI.java) +290 | [Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) +291 | [K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Closest%20Points%20to%20Origin.java) +292 | [K Radius Subarray Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Radius%20Subarray%20Averages.java) +293 | [Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) +294 | [Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) +295 | [Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) +296 | [Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) +297 | [Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) +298 | [Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) +299 | [Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) +300 | [Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) +301 | [LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/LRU%20Cache.java) +302 | [Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) +303 | [Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) +304 | [Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) +305 | [Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Time%20for%20Given%20Digits.java) +306 | [Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) +307 | [Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) +308 | [Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) +309 | [Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) +310 | [Length of the Longest Alphabetical Continuous Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Length%20of%20the%20Longest%20Alphabetical%20Continuous%20Substring.java) +311 | [Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) +312 | [Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) +313 | [Lexicographical Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographical%20Numbers.java) +314 | [Lexicographically Smallest Equivalent String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20Equivalent%20String.java) +315 | [Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) +316 | [Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) +317 | [Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) +318 | [Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) +319 | [Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) +320 | [Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) +321 | [Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) +322 | [Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) +323 | [Longest Arithmetic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence.java) +324 | [Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) +325 | [Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) +326 | [Longest Happy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Happy%20String.java) +327 | [Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) +328 | [Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) +329 | [Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) +330 | [Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) +331 | [Longest String Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20String%20Chain.java) +332 | [Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) +333 | [Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) +334 | [Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) +335 | [Longest Uploaded Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Uploaded%20Prefix.java) +336 | [Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) +337 | [Longest Word With All Prefixes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20With%20All%20Prefixes.java) +338 | [Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) +339 | [Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) +340 | [Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) +341 | [Lowest Common Ancestor of a Binary Tree III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20III.java) +342 | [Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) +343 | [Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) +344 | [Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) +345 | [Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) +346 | [Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) +347 | [Matchsticks to Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Matchsticks%20to%20Square.java) +348 | [Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Area%20of%20Island.java) +349 | [Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) +350 | [Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) +351 | [Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) +352 | [Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) +353 | [Max Sum of a Pair With Equal Sum of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Sum%20of%20a%20Pair%20With%20Equal%20Sum%20of%20Digits.java) +354 | [Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) +355 | [Maximal Score After Applying K Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Score%20After%20Applying%20K%20Operations.java) +356 | [Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) +357 | [Maximize Number of Subsequences in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Number%20of%20Subsequences%20in%20a%20String.java) +358 | [Maximize the Topmost Element After K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Topmost%20Element%20After%20K%20Moves.java) +359 | [Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) +360 | [Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Area%20of%20a%20Piece%20of%20Cake%20After%20Horizontal%20and%20Vertical%20Cuts.java) +361 | [Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) +362 | [Maximum Bags With Full Capacity of Rocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Bags%20With%20Full%20Capacity%20of%20Rocks.java) +363 | [Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) +364 | [Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) +365 | [Maximum Consecutive Floors Without Special Floors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Consecutive%20Floors%20Without%20Special%20Floors.java) +366 | [Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) +367 | [Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) +368 | [Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) +369 | [Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) +370 | [Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) +371 | [Maximum Length of Repeated Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Repeated%20Subarray.java) +372 | [Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) +373 | [Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) +374 | [Maximum Matching of Players With Trainers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Matching%20of%20Players%20With%20Trainers.java) +375 | [Maximum Nesting Depth of Two Valid Parentheses Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Nesting%20Depth%20of%20Two%20Valid%20Parentheses%20Strings.java) +376 | [Maximum Number of Coins You Can Get](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Coins%20You%20Can%20Get.java) +377 | [Maximum Number of Events That Can Be Attended](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Events%20That%20Can%20Be%20Attended.java) +378 | [Maximum Number of Groups Entering a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Groups%20Entering%20a%20Competition.java) +379 | [Maximum Number of Integers to Choose From a Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I.java) +380 | [Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) +381 | [Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) +382 | [Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) +383 | [Maximum Points You Can Obtain from Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Points%20You%20Can%20Obtain%20from%20Cards.java) +384 | [Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) +385 | [Maximum Product of Splitted Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Splitted%20Binary%20Tree.java) +386 | [Maximum Product of Word Lengths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Word%20Lengths.java) +387 | [Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) +388 | [Maximum Score from Performing Multiplication Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20from%20Performing%20Multiplication%20Operations.java) +389 | [Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) +390 | [Maximum Star Sum of a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Star%20Sum%20of%20a%20Graph.java) +391 | [Maximum Sum of Distinct Subarrays With Length K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Distinct%20Subarrays%20With%20Length%20K.java) +392 | [Maximum Sum of an Hourglass](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20an%20Hourglass.java) +393 | [Maximum Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Swap.java) +394 | [Maximum Total Importance of Roads](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Total%20Importance%20of%20Roads.java) +395 | [Maximum Twin Sum of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Twin%20Sum%20of%20a%20Linked%20List.java) +396 | [Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) +397 | [Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) +398 | [Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) +399 | [Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) +400 | [Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) +401 | [Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) +402 | [Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) +403 | [Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) +404 | [Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) +405 | [Merge Nodes in Between Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Nodes%20in%20Between%20Zeros.java) +406 | [Min Cost to Connect All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Cost%20to%20Connect%20All%20Points.java) +407 | [Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Stack.java) +408 | [Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) +409 | [Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) +410 | [Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) +411 | [Minimize Product Sum of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Product%20Sum%20of%20Two%20Arrays.java) +412 | [Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) +413 | [Minimum Amount of Time to Collect Garbage](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Amount%20of%20Time%20to%20Collect%20Garbage.java) +414 | [Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) +415 | [Minimum Average Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Average%20Difference.java) +416 | [Minimum Consecutive Cards to Pick Up](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Consecutive%20Cards%20to%20Pick%20Up.java) +417 | [Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) +418 | [Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) +419 | [Minimum Deletions to Make Array Beautiful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Array%20Beautiful.java) +420 | [Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) +421 | [Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) +422 | [Minimum Falling Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Falling%20Path%20Sum.java) +423 | [Minimum Fuel Cost to Report to the Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Fuel%20Cost%20to%20Report%20to%20the%20Capital.java) +424 | [Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) +425 | [Minimum Health to Beat Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Health%20to%20Beat%20Game.java) +426 | [Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) +427 | [Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) +428 | [Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) +429 | [Minimum Moves to Equal Array Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements.java) +430 | [Minimum Moves to Reach Target Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Reach%20Target%20Score.java) +431 | [Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) +432 | [Minimum Number of Steps to Make Two Strings Anagram II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram%20II.java) +433 | [Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) +434 | [Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) +435 | [Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) +436 | [Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) +437 | [Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) +438 | [Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) +439 | [Minimum Rounds to Complete All Tasks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Rounds%20to%20Complete%20All%20Tasks.java) +440 | [Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) +441 | [Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) +442 | [Minimum Swaps to Group All 1's Together](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Swaps%20to%20Group%20All%201's%20Together.java) +443 | [Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) +444 | [Minimum Time to Collect All Apples in a Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Collect%20All%20Apples%20in%20a%20Tree.java) +445 | [Minimum Time to Complete Trips](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Complete%20Trips.java) +446 | [Minimum Time to Make Rope Colorful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Make%20Rope%20Colorful.java) +447 | [Mirror Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mirror%20Reflection.java) +448 | [Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) +449 | [Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) +450 | [Most Popular Video Creator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Popular%20Video%20Creator.java) +451 | [Most Profit Assigning Work](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Profit%20Assigning%20Work.java) +452 | [Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) +453 | [Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) +454 | [My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) +455 | [My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) +456 | [N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/N-ary%20Tree%20Level%20Order%20Traversal.java) +457 | [Nearest Exit from Entrance in Maze](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nearest%20Exit%20from%20Entrance%20in%20Maze.java) +458 | [Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) +459 | [Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) +460 | [Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) +461 | [Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) +462 | [Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) +463 | [Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) +464 | [Next Greater Numerically Balanced Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Numerically%20Balanced%20Number.java) +465 | [Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) +466 | [Node With Highest Edge Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Node%20With%20Highest%20Edge%20Score.java) +467 | [Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) +468 | [Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-decreasing%20Array.java) +469 | [Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) +470 | [Number of Closed Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Closed%20Islands.java) +471 | [Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) +472 | [Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) +473 | [Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) +474 | [Number of Distinct Substrings in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Substrings%20in%20a%20String.java) +475 | [Number of Enclaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Enclaves.java) +476 | [Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) +477 | [Number of Laser Beams in a Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Laser%20Beams%20in%20a%20Bank.java) +478 | [Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) +479 | [Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) +480 | [Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) +481 | [Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) +482 | [Number of Pairs of Interchangeable Rectangles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Interchangeable%20Rectangles.java) +483 | [Number of Pairs of Strings With Concatenation Equal to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target.java) +484 | [Number of Provinces](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Provinces.java) +485 | [Number of Smooth Descent Periods of a Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock.java) +486 | [Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) +487 | [Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) +488 | [Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) +489 | [Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) +490 | [Number of Ways to Split Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Ways%20to%20Split%20Array.java) +491 | [Number of Zero-Filled Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Zero-Filled%20Subarrays.java) +492 | [Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) +493 | [Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) +494 | [One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) +495 | [Ones and Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ones%20and%20Zeroes.java) +496 | [Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) +497 | [Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) +498 | [Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) +499 | [Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) +500 | [Optimal Partition of String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Partition%20of%20String.java) +501 | [Out of Boundary Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Out%20of%20Boundary%20Paths.java) +502 | [Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) +503 | [Pacific Atlantic Water Flow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pacific%20Atlantic%20Water%20Flow.java) +504 | [Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) +505 | [Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) +506 | [Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) +507 | [Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Parallel%20Courses.java) +508 | [Partition Array According to Given Pivot](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Array%20According%20to%20Given%20Pivot.java) +509 | [Partition Equal Subset Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Equal%20Subset%20Sum.java) +510 | [Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) +511 | [Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) +512 | [Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) +513 | [Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) +514 | [Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20III.java) +515 | [Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) +516 | [Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) +517 | [Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) +518 | [Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) +519 | [Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) +520 | [People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) +521 | [Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) +522 | [Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) +523 | [Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) +524 | [Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) +525 | [Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) +526 | [Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) +527 | [Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) +528 | [Possible Bipartition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Possible%20Bipartition.java) +529 | [Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) +530 | [Pow(x, n)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow(x,%20n).java) +531 | [Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) +532 | [Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) +533 | [Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) +534 | [Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) +535 | [Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) +536 | [Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) +537 | [Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) +538 | [Product of Two Run-Length Encoded Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Two%20Run-Length%20Encoded%20Arrays.java) +539 | [Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) +540 | [Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) +541 | [Push Dominoes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Push%20Dominoes.java) +542 | [Put Boxes Into the Warehouse I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Put%20Boxes%20Into%20the%20Warehouse%20I.java) +543 | [Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) +544 | [Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) +545 | [RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) +546 | [Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) +547 | [Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) +548 | [Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) +549 | [Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) +550 | [Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) +551 | [Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) +552 | [Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) +553 | [Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) +554 | [Reachable Nodes With Restrictions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reachable%20Nodes%20With%20Restrictions.java) +555 | [Rearrange Array Elements by Sign](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20Elements%20by%20Sign.java) +556 | [Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) +557 | [Recover Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Recover%20Binary%20Search%20Tree.java) +558 | [Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) +559 | [Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) +560 | [Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) +561 | [Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) +562 | [Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) +563 | [Remove All Ones With Row and Column Flips II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Ones%20With%20Row%20and%20Column%20Flips%20II.java) +564 | [Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) +565 | [Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) +566 | [Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) +567 | [Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) +568 | [Remove Duplicates From an Unsorted Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20an%20Unsorted%20Linked%20List.java) +569 | [Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) +570 | [Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) +571 | [Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) +572 | [Remove Nodes From Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nodes%20From%20Linked%20List.java) +573 | [Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) +574 | [Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) +575 | [Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) +576 | [Removing Stars From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Removing%20Stars%20From%20a%20String.java) +577 | [Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Data%20in%20Log%20Files.java) +578 | [Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) +579 | [Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) +580 | [Reordered Power of 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reordered%20Power%20of%202.java) +581 | [Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) +582 | [Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) +583 | [Replace Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Elements%20in%20an%20Array.java) +584 | [Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) +585 | [Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) +586 | [Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) +587 | [Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Integer.java) +588 | [Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) +589 | [Reverse Nodes in Even Length Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20Even%20Length%20Groups.java) +590 | [Reverse Odd Levels of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Odd%20Levels%20of%20Binary%20Tree.java) +591 | [Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) +592 | [Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) +593 | [Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) +594 | [Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) +595 | [Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) +596 | [Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) +597 | [Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) +598 | [Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) +599 | [Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotated%20Digits.java) +600 | [Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) +601 | [Satisfiability of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfiability%20of%20Equality%20Equations.java) +602 | [Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) +603 | [Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) +604 | [Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) +605 | [Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) +606 | [Search a 2D Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix%20II.java) +607 | [Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) +608 | [Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) +609 | [Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) +610 | [Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) +611 | [Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) +612 | [Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) +613 | [Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) +614 | [Sender With Largest Word Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sender%20With%20Largest%20Word%20Count.java) +615 | [Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) +616 | [Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) +617 | [Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) +618 | [Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) +619 | [Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) +620 | [Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) +621 | [Short Encoding of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Short%20Encoding%20of%20Words.java) +622 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) +623 | [Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) +624 | [Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) +625 | [Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Unsorted%20Continuous%20Subarray.java) +626 | [Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) +627 | [Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) +628 | [Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) +629 | [Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) +630 | [Simple Bank System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simple%20Bank%20System.java) +631 | [Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) +632 | [Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) +633 | [Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) +634 | [Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) +635 | [Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) +636 | [Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) +637 | [Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) +638 | [Smallest String With Swaps](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20Swaps.java) +639 | [Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) +640 | [Smallest Value of the Rearranged Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Value%20of%20the%20Rearranged%20Number.java) +641 | [Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) +642 | [Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) +643 | [Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) +644 | [Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) +645 | [Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) +646 | [Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) +647 | [Sort Integers by The Power Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Integers%20by%20The%20Power%20Value.java) +648 | [Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) +649 | [Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) +650 | [Sort the Jumbled Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Jumbled%20Numbers.java) +651 | [Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) +652 | [Sort the Students by Their Kth Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Students%20by%20Their%20Kth%20Score.java) +653 | [Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) +654 | [Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) +655 | [Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) +656 | [Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) +657 | [Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) +658 | [Split Linked List in Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20in%20Parts.java) +659 | [Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) +660 | [Step-By-Step Directions From a Binary Tree Node to Another](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Step-By-Step%20Directions%20From%20a%20Binary%20Tree%20Node%20to%20Another.java) +661 | [Stock Price Fluctuation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stock%20Price%20Fluctuation.java) +662 | [Strictly Palindromic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Strictly%20Palindromic%20Number.java) +663 | [String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20Compression.java) +664 | [String to Integer (atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer%20(atoi).java) +665 | [Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) +666 | [Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) +667 | [Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) +668 | [Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subdomain%20Visit%20Count.java) +669 | [Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) +670 | [Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) +671 | [Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) +672 | [Successful Pairs of Spells and Potions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Successful%20Pairs%20of%20Spells%20and%20Potions.java) +673 | [Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) +674 | [Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) +675 | [Sum of Beauty of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Beauty%20of%20All%20Substrings.java) +676 | [Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Even%20Numbers%20After%20Queries.java) +677 | [Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) +678 | [Sum of Numbers With Units Digit K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Numbers%20With%20Units%20Digit%20K.java) +679 | [Sum of Subarray Minimums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Subarray%20Minimums.java) +680 | [Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) +681 | [Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) +682 | [Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) +683 | [Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) +684 | [Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) +685 | [Synonymous Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Synonymous%20Sentences.java) +686 | [Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) +687 | [Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) +688 | [Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) +689 | [The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) +690 | [The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) +691 | [The Number of Weak Characters in the Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Weak%20Characters%20in%20the%20Game.java) +692 | [The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) +693 | [The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) +694 | [Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) +695 | [Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) +696 | [Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) +697 | [Time Needed to Rearrange a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Rearrange%20a%20Binary%20String.java) +698 | [Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) +699 | [Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) +700 | [Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) +701 | [Tree Diameter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tree%20Diameter.java) +702 | [Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Triangle.java) +703 | [Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) +704 | [Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) +705 | [Tweet Counts Per Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tweet%20Counts%20Per%20Frequency.java) +706 | [Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20City%20Scheduling.java) +707 | [Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) +708 | [Two Sum II - Input Array Is Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20II%20-%20Input%20Array%20Is%20Sorted.java) +709 | [UTF-8 Validation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/UTF-8%20Validation.java) +710 | [Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) +711 | [Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) +712 | [Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) +713 | [Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) +714 | [Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) +715 | [Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) +716 | [Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) +717 | [Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) +718 | [Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) +719 | [Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) +720 | [Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) +721 | [Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) +722 | [Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) +723 | [Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) +724 | [Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) +725 | [Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) +726 | [Vowels of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowels%20of%20All%20Substrings.java) +727 | [Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) +728 | [Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) +729 | [Watering Plants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Watering%20Plants.java) +730 | [Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) +731 | [Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) +732 | [Wiggle Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Subsequence.java) +733 | [Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) +734 | [Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) +735 | [Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) +736 | [Word Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Subsets.java) +737 | [ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) +738 | [Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) diff --git a/README.md b/README.md index 92c01bb6..e264f9eb 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Problem Category | Count --- | --- -[Easy](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Easy/README.md) | 452 -[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/README.md) | 543 -[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Hard/README.md) | 67 +[Easy](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Easy/README.md) | 558 +[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/README.md) | 739 +[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Hard/README.md) | 95 +[Concurrency](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Concurrency/README.md) | 9 From 941a02b99156b765207db30669a59e0a85fe346e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Feb 2023 10:03:21 -0800 Subject: [PATCH 1003/1640] Update Print Zero Even Odd.java --- Concurrency/Print Zero Even Odd.java | 69 ++++++++++++++-------------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/Concurrency/Print Zero Even Odd.java b/Concurrency/Print Zero Even Odd.java index 35b3a599..784b7fd7 100644 --- a/Concurrency/Print Zero Even Odd.java +++ b/Concurrency/Print Zero Even Odd.java @@ -1,42 +1,43 @@ class ZeroEvenOdd { - private int n; - private int flag = 0; - - public ZeroEvenOdd(int n) { - this.n = n; - } + private int n; + + private final Semaphore zeroMutex; + private final Semaphore oddMutex; + private final Semaphore evenMutex; + + public ZeroEvenOdd(int n) { + this.n = n; + this.zeroMutex = new Semaphore(1); + this.oddMutex = new Semaphore(0); + this.evenMutex = new Semaphore(0); + } - // printNumber.accept(x) outputs "x", where x is an integer. - public synchronized void zero(IntConsumer printNumber) throws InterruptedException { - for (int i = 0; i < n; i++) { - while (flag != 0) { - this.wait(); - } - printNumber.accept(0); - flag = i % 2 == 0 ? 1 : 2; - this.notifyAll(); + // printNumber.accept(x) outputs "x", where x is an integer. + public void zero(IntConsumer printNumber) throws InterruptedException { + for (int i = 0; i < n; i++) { + this.zeroMutex.acquire(); + printNumber.accept(0); + if (i % 2 == 0) { + this.oddMutex.release(); + } else { + this.evenMutex.release(); + } + } } - } - public synchronized void even(IntConsumer printNumber) throws InterruptedException { - for (int i = 2; i <= n; i += 2) { - while (flag != 2) { - this.wait(); - } - printNumber.accept(i); - flag = 0; - this.notifyAll(); + public void even(IntConsumer printNumber) throws InterruptedException { + for (int i = 2; i <= n; i += 2) { + this.evenMutex.acquire(); + printNumber.accept(i); + this.zeroMutex.release(); + } } - } - public synchronized void odd(IntConsumer printNumber) throws InterruptedException { - for (int i = 1; i <= n; i += 2) { - while (flag != 1) { - this.wait(); - } - printNumber.accept(i); - flag = 0; - this.notifyAll(); + public void odd(IntConsumer printNumber) throws InterruptedException { + for (int i = 1; i <= n; i += 2) { + this.oddMutex.acquire(); + printNumber.accept(i); + this.zeroMutex.release(); + } } - } } From 87be42c91377f21ea55b34ec2417a668b5efdd2b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Feb 2023 14:19:47 -0800 Subject: [PATCH 1004/1640] Update Fizz Buzz Multithreaded.java --- Concurrency/Fizz Buzz Multithreaded.java | 124 +++++++++++------------ 1 file changed, 59 insertions(+), 65 deletions(-) diff --git a/Concurrency/Fizz Buzz Multithreaded.java b/Concurrency/Fizz Buzz Multithreaded.java index 2e213c7c..b749ba25 100644 --- a/Concurrency/Fizz Buzz Multithreaded.java +++ b/Concurrency/Fizz Buzz Multithreaded.java @@ -1,77 +1,71 @@ class FizzBuzz { - private int n; - private int count; - private Semaphore fizz; - private Semaphore buzz; - private Semaphore fizzBuzz; - private Semaphore number; + private int n; + private final Semaphore fizzSemaphore; + private final Semaphore buzzSemaphore; + private final Semaphore fizzBuzzSemaphore; + private final Semaphore numSemaphore; - public FizzBuzz(int n) { - this.n = n; - this.count = 1; - this.fizz = new Semaphore(0); - this.buzz = new Semaphore(0); - this.fizzBuzz = new Semaphore(0); - this.number = new Semaphore(1); - } + public FizzBuzz(int n) { + this.n = n; + this.fizzSemaphore = new Semaphore(0); + this.buzzSemaphore = new Semaphore(0); + this.fizzBuzzSemaphore = new Semaphore(0); + this.numSemaphore = new Semaphore(1); + } - // printFizz.run() outputs "fizz". - public void fizz(Runnable printFizz) throws InterruptedException { - while (this.count <= this.n) { - if (this.count % 3 == 0 && this.count % 5 != 0) { - this.fizz.acquire(); - printFizz.run(); - this.count++; - releaseLock(this.count); - } + // printFizz.run() outputs "fizz". + public void fizz(Runnable printFizz) throws InterruptedException { + for (int i = 1; i <= n; i++) { + if (i % 3 == 0 && i % 5 != 0) { + fizzSemaphore.acquire(); + printFizz.run(); + releaseLock(i + 1); + } + } } - } - // printBuzz.run() outputs "buzz". - public void buzz(Runnable printBuzz) throws InterruptedException { - while (this.count <= this.n) { - if (this.count % 3 != 0 && this.count % 5 == 0) { - this.buzz.acquire(); - printBuzz.run(); - this.count++; - releaseLock(this.count); - } + // printBuzz.run() outputs "buzz". + public void buzz(Runnable printBuzz) throws InterruptedException { + for (int i = 1; i <= n; i++) { + if (i % 3 != 0 && i % 5 == 0) { + buzzSemaphore.acquire(); + printBuzz.run(); + releaseLock(i + 1); + } + } } - } - // printFizzBuzz.run() outputs "fizzbuzz". - public void fizzbuzz(Runnable printFizzBuzz) throws InterruptedException { - while (this.count <= this.n) { - if (this.count % 3 == 0 && this.count % 5 == 0) { - this.fizzBuzz.acquire(); - printFizzBuzz.run(); - this.count++; - releaseLock(this.count); - } + // printFizzBuzz.run() outputs "fizzbuzz". + public void fizzbuzz(Runnable printFizzBuzz) throws InterruptedException { + for (int i = 1; i <= n; i++) { + if (i % 3 == 0 && i % 5 == 0) { + fizzBuzzSemaphore.acquire(); + printFizzBuzz.run(); + releaseLock(i + 1); + } + } } - } - // printNumber.accept(x) outputs "x", where x is an integer. - public void number(IntConsumer printNumber) throws InterruptedException { - while (this.count <= this.n) { - if (this.count % 3 != 0 && this.count % 5 != 0) { - this.number.acquire(); - printNumber.accept(this.count); - this.count++; - releaseLock(this.count); - } + // printNumber.accept(x) outputs "x", where x is an integer. + public void number(IntConsumer printNumber) throws InterruptedException { + for (int i = 1; i <= n; i++) { + if (i % 3 != 0 && i % 5 != 0) { + numSemaphore.acquire(); + printNumber.accept(i); + releaseLock(i + 1); + } + } } - } - - private void releaseLock(int n) { - if (n % 15 == 0) { - this.fizzBuzz.release(); - } else if (n % 3 == 0) { - this.fizz.release(); - } else if (n % 5 == 0) { - this.buzz.release(); - } else { - this.number.release(); + + private void releaseLock(int num) { + if (num % 3 == 0 && num % 5 == 0) { + fizzBuzzSemaphore.release(); + } else if (num % 3 == 0 && num % 5 != 0) { + fizzSemaphore.release(); + } else if (num % 3 != 0 && num % 5 == 0) { + buzzSemaphore.release(); + } else { + numSemaphore.release(); + } } - } } From 1f05921833771527f5641a8aeca47ecf237a7866 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 14 Feb 2023 06:34:22 -0800 Subject: [PATCH 1005/1640] Update and rename Easy/Maximum Subarray.java to Medium/Maximum Subarray.java --- Easy/Maximum Subarray.java | 14 -------------- Medium/Maximum Subarray.java | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 14 deletions(-) delete mode 100644 Easy/Maximum Subarray.java create mode 100644 Medium/Maximum Subarray.java diff --git a/Easy/Maximum Subarray.java b/Easy/Maximum Subarray.java deleted file mode 100644 index 46b106c7..00000000 --- a/Easy/Maximum Subarray.java +++ /dev/null @@ -1,14 +0,0 @@ -class Solution { - public int maxSubArray(int[] nums) { - int currSum = 0; - int maxSum = Integer.MIN_VALUE; - for (int num : nums) { - currSum += num; - if (num > currSum) { - currSum = num; - } - maxSum = Math.max(maxSum, currSum); - } - return maxSum; - } -} diff --git a/Medium/Maximum Subarray.java b/Medium/Maximum Subarray.java new file mode 100644 index 00000000..459a8733 --- /dev/null +++ b/Medium/Maximum Subarray.java @@ -0,0 +1,14 @@ +class Solution { + public int maxSubArray(int[] nums) { + int currSum = 0; + int maxSum = Integer.MIN_VALUE; + for (int num : nums) { + currSum += num; + if (currSum < num) { + currSum = num; + } + maxSum = Math.max(maxSum, currSum); + } + return maxSum; + } +} From c83324310a19917ce235b528685059aea0d12cbd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 14 Feb 2023 16:17:25 -0800 Subject: [PATCH 1006/1640] Update Add to Array-Form of Integer.java --- Easy/Add to Array-Form of Integer.java | 31 ++++++++++++++++---------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/Easy/Add to Array-Form of Integer.java b/Easy/Add to Array-Form of Integer.java index 1ef362dd..64cbbb31 100644 --- a/Easy/Add to Array-Form of Integer.java +++ b/Easy/Add to Array-Form of Integer.java @@ -1,15 +1,22 @@ class Solution { - public List addToArrayForm(int[] num, int k) { - int carry = 0; - int idx = num.length - 1; - List result = new ArrayList<>(); - while (idx >= 0 || carry > 0 || k > 0) { - int temp = k % 10 + carry + (idx >= 0 ? num[idx--] : 0); - result.add(temp % 10); - carry = temp / 10; - k /= 10; + public List addToArrayForm(int[] num, int k) { + List result = new ArrayList<>(); + int idx = num.length - 1; + int carry = 0; + while (idx >= 0 || k > 0 || carry > 0) { + if (idx >= 0 && k > 0) { + carry += num[idx--] + k % 10; + k /= 10; + } else if (idx >= 0 && k == 0) { + carry += num[idx--]; + } else if (idx < 0 && k > 0) { + carry += k % 10; + k /= 10; + } + result.add(carry % 10); + carry /= 10; + } + Collections.reverse(result); + return result; } - Collections.reverse(result); - return result; - } } From 3e3198b55f0d3166f08c5ab86352a665771d008d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 17 Feb 2023 06:36:40 -0800 Subject: [PATCH 1007/1640] Update Minimum Distance Between BST Nodes.java --- Easy/Minimum Distance Between BST Nodes.java | 35 +++++++++----------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/Easy/Minimum Distance Between BST Nodes.java b/Easy/Minimum Distance Between BST Nodes.java index 4c147e39..af92feb0 100644 --- a/Easy/Minimum Distance Between BST Nodes.java +++ b/Easy/Minimum Distance Between BST Nodes.java @@ -14,25 +14,22 @@ * } */ class Solution { - Integer minDiff; - Integer prev; - public int minDiffInBST(TreeNode root) { - minDiff = Integer.MAX_VALUE; - prev = null; - helper(root); - return minDiff; - } - - private void helper(TreeNode root) { - if (root == null) { - return; + public int minDiffInBST(TreeNode root) { + int[] minDiff = {Integer.MAX_VALUE}; + Integer[] prevVal = {null}; + inorder(root, minDiff, prevVal); + return minDiff[0]; } - helper(root.left); - if (prev != null) { - minDiff = Math.min(minDiff, root.val - prev); + + private void inorder(TreeNode node, int[] minDiff, Integer[] prevValue) { + if (node == null) { + return; + } + inorder(node.left, minDiff, prevValue); + if (prevValue[0] != null) { + minDiff[0] = Math.min(minDiff[0], node.val - prevValue[0]); + } + prevValue[0] = node.val; + inorder(node.right, minDiff, prevValue); } - prev = root.val; - helper(root.right); - } } - From 2d13d75457e356dbe454eba180176f4f36650728 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Feb 2023 07:01:28 -0800 Subject: [PATCH 1008/1640] Update Invert Binary Tree.java --- Easy/Invert Binary Tree.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/Easy/Invert Binary Tree.java b/Easy/Invert Binary Tree.java index f02950d0..d2c3c6ab 100644 --- a/Easy/Invert Binary Tree.java +++ b/Easy/Invert Binary Tree.java @@ -14,15 +14,13 @@ * } */ class Solution { - public TreeNode invertTree(TreeNode root) { - if (root == null) { - return root; + public TreeNode invertTree(TreeNode root) { + if (root == null) { + return null; + } + TreeNode leftNode = root.left; + root.left = invertTree(root.right); + root.right = invertTree(leftNode); + return root; } - TreeNode right = root.right; - root.right = root.left; - root.left = right; - invertTree(root.left); - invertTree(root.right); - return root; - } } From 888e64c2bca1c5d0472848c3c46d8e25e170b232 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 18 Feb 2023 07:48:29 -0800 Subject: [PATCH 1009/1640] Update Reshape the matrix.java --- Easy/Reshape the matrix.java | 41 ++++++++++++++---------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/Easy/Reshape the matrix.java b/Easy/Reshape the matrix.java index 1093a616..ca61f4e4 100644 --- a/Easy/Reshape the matrix.java +++ b/Easy/Reshape the matrix.java @@ -1,31 +1,22 @@ class Solution { - public int[][] matrixReshape(int[][] nums, int r, int c) { - int numOfElem = nums.length*nums[0].length; - if (numOfElem != r*c) { - return nums; + public int[][] matrixReshape(int[][] mat, int r, int c) { + int m = mat.length; + int n = mat[0].length; + if (m * n != r * c) { + return mat; } - - int[] expandedArray = new int[numOfElem]; - int k = 0; - - for (int i=0;i Date: Sat, 18 Feb 2023 07:51:15 -0800 Subject: [PATCH 1010/1640] Update Pascal's Triangle.java --- Easy/Pascal's Triangle.java | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Easy/Pascal's Triangle.java b/Easy/Pascal's Triangle.java index a64f8bd4..86ea8bdb 100644 --- a/Easy/Pascal's Triangle.java +++ b/Easy/Pascal's Triangle.java @@ -1,15 +1,17 @@ class Solution { - public List> generate(int numRows) { - List> result = new ArrayList<>(); - for (int i = 0; i < numRows; i++) { - List temp = new ArrayList<>(); - for (int j = 0; j <= i; j++) { - temp.add( - (j == 0 || j == i) ? 1 : - (result.get(i - 1).get(j - 1) + result.get(i - 1).get(j))); - } - result.add(temp); + public List> generate(int numRows) { + List> result = new ArrayList<>(); + for (int i = 0; i < numRows; i++) { + List temp = new ArrayList<>(); + for (int j = 0; j <= i; j++) { + if (j == 0 || j == i) { + temp.add(1); + } else { + temp.add(result.get(i - 1).get(j - 1) + result.get(i - 1).get(j)); + } + } + result.add(temp); + } + return result; } - return result; - } } From 5b7f7f5de5b85e3aa420e0223ec82615647694a1 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 19 Feb 2023 13:32:39 -0800 Subject: [PATCH 1011/1640] Added Merge Two 2D Arrays by Summing Values.java --- ...Merge Two 2D Arrays by Summing Values.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Easy/Merge Two 2D Arrays by Summing Values.java diff --git a/Easy/Merge Two 2D Arrays by Summing Values.java b/Easy/Merge Two 2D Arrays by Summing Values.java new file mode 100644 index 00000000..87d07080 --- /dev/null +++ b/Easy/Merge Two 2D Arrays by Summing Values.java @@ -0,0 +1,27 @@ +class Solution { + public int[][] mergeArrays(int[][] nums1, int[][] nums2) { + int[] totalSum = new int[1001]; + int count = nums1.length; + for (int i = 0; i < nums1.length; i++) { + int id = nums1[i][0]; + int val = nums1[i][1]; + totalSum[id] = val; + } + for (int i = 0; i < nums2.length; i++) { + int id = nums2[i][0]; + int val = nums2[i][1]; + if (totalSum[id] == 0) { + count++; + } + totalSum[id] += val; + } + int[][] result = new int[count][2]; + int idx = 0; + for (int i = 1; i <= 1000; i++) { + if (totalSum[i] != 0) { + result[idx++] = new int[]{i, totalSum[i]}; + } + } + return result; + } +} From 698dadd406bcf0e6091890cd813e244c4d302a60 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 20 Feb 2023 15:50:52 -0800 Subject: [PATCH 1012/1640] Added Maximum Difference by Remapping a Digit --- ...ximum Difference by Remapping a Digit.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Easy/Maximum Difference by Remapping a Digit.java diff --git a/Easy/Maximum Difference by Remapping a Digit.java b/Easy/Maximum Difference by Remapping a Digit.java new file mode 100644 index 00000000..5241297f --- /dev/null +++ b/Easy/Maximum Difference by Remapping a Digit.java @@ -0,0 +1,25 @@ +class Solution { + public int minMaxDifference(int num) { + char digitsOne[] = String.valueOf(num).toCharArray(); + char digitsTwo[] = String.valueOf(num).toCharArray(); + char firstDigitOne = digitsOne[0]; + char firstDigitTwo = digitsOne[0]; + for (int i = 0; i < digitsOne.length; i++) { + if (digitsOne[i] != '9') { + firstDigitOne = digitsOne[i]; + break; + } + } + for (int i = 0; i < digitsOne.length; i++) { + if (digitsOne[i] == firstDigitOne) { + digitsOne[i] = '9'; + } + } + for(int i = 0; i < digitsOne.length; i++) { + if (digitsTwo[i] == firstDigitTwo) { + digitsTwo[i] = '0'; + } + } + return Integer.parseInt(String.valueOf(digitsOne)) - Integer.parseInt(String.valueOf(digitsTwo)); + } +} From 05a1586f1b4523f85f9f861ad51c4355090f6e0c Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 20 Feb 2023 16:36:19 -0800 Subject: [PATCH 1013/1640] Updated Merge Two Sorted Lists.java --- Easy/Merge Two Sorted Lists.java | 56 +++++++++++++------------------- 1 file changed, 23 insertions(+), 33 deletions(-) diff --git a/Easy/Merge Two Sorted Lists.java b/Easy/Merge Two Sorted Lists.java index cb2fff94..e594a670 100644 --- a/Easy/Merge Two Sorted Lists.java +++ b/Easy/Merge Two Sorted Lists.java @@ -9,39 +9,29 @@ * } */ class Solution { - public ListNode mergeTwoLists(ListNode list1, ListNode list2) { - if (list1 == null || list2 == null) { - return list1 == null ? list2 : list1; - } - ListNode prev = null; - ListNode head = null; - while (list1 != null && list2 != null) { - if (list1.val <= list2.val) { - prev = list1; - if (head == null) { - head = list1; - } - list1 = list1.next; - } else { - ListNode node = list2; - list2 = list2.next; - if (prev == null) { - node.next = list1; - prev = node; - head = prev; - } else { - prev.next = node; - node.next = list1; - prev = node; + public ListNode mergeTwoLists(ListNode l1, ListNode l2) { + ListNode dummy = new ListNode(); + ListNode curr = dummy; + while (l1 != null || l2 != null) { + int val = -1; + if (l1 != null && l2 != null) { + if (l1.val > l2.val) { + val = l2.val; + l2 = l2.next; + } else { + val = l1.val; + l1 = l1.next; + } + } else if (l1 != null && l2 == null) { + val = l1.val; + l1 = l1.next; + } else { + val = l2.val; + l2 = l2.next; + } + curr.next = new ListNode(val); + curr = curr.next; } - } - } - if (list2 != null) { - prev.next = list2; - } - if (list1 != null) { - prev.next = list1; + return dummy.next; } - return head; - } } From 325529cc8c40d2a54321708adcf6d75e779f2436 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 20 Feb 2023 17:44:04 -0800 Subject: [PATCH 1014/1640] Updated Single Element in a Sorted Array --- Medium/Single Element in a Sorted Array.java | 44 ++++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Medium/Single Element in a Sorted Array.java b/Medium/Single Element in a Sorted Array.java index 3565e0b3..924794d3 100644 --- a/Medium/Single Element in a Sorted Array.java +++ b/Medium/Single Element in a Sorted Array.java @@ -1,25 +1,25 @@ class Solution { - public int singleNonDuplicate(int[] nums) { - if (nums.length == 1) { - return nums[0]; + public int singleNonDuplicate(int[] nums) { + int start = 0; + int end = nums.length - 1; + while (start < end) { + int mid = (end - start) / 2 + start; + if (nums[mid + 1] == nums[mid]) { + if ((end - mid) % 2 == 0) { + start = mid + 2; + } else { + end = mid - 1; + } + } else if (nums[mid - 1] == nums[mid]) { + if ((end - mid) % 2 == 0) { + end = mid - 2; + } else { + start = mid + 1; + } + } else { + return nums[mid]; + } + } + return nums[start]; } - return binarySearchHelper(nums, 0, nums.length - 1); - } - - private int binarySearchHelper(int[] nums, int start, int end) { - if (start > end) { - return Integer.MIN_VALUE; - } - int mid = (start + end) / 2; - if (mid == 0 && mid + 1 < nums.length && nums[mid] != nums[mid + 1]) { - return nums[mid]; - } - if (mid == nums.length - 1 && mid - 1 >= 0 && nums[mid] != nums[mid - 1]) { - return nums[mid]; - } - if (mid + 1 < nums.length && nums[mid] != nums[mid + 1] && mid - 1 >= 0 && nums[mid] != nums[mid - 1]) { - return nums[mid]; - } - return Math.max(binarySearchHelper(nums, start, mid - 1), binarySearchHelper(nums, mid + 1, end)); - } } From 244314f060c3b89916572a439c1ed7bfd0220b22 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 22 Feb 2023 19:59:10 -0800 Subject: [PATCH 1015/1640] Added IPO.java --- Hard/IPO.java | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Hard/IPO.java diff --git a/Hard/IPO.java b/Hard/IPO.java new file mode 100644 index 00000000..26cfaac8 --- /dev/null +++ b/Hard/IPO.java @@ -0,0 +1,31 @@ +class Solution { + public int findMaximizedCapital(int k, int w, int[] profits, int[] capital) { + int n = profits.length; + Project[] projects = new Project[n]; + int maximumCapital = w; + for (int i = 0; i < n; i++) { + projects[i] = new Project(capital[i], profits[i]); + } + Arrays.sort(projects); + PriorityQueue pq = new PriorityQueue<>(Collections.reverseOrder()); + int idx = 0; + for (int i = 0; i < k; i++) { + while (idx < n && projects[idx].capital <= maximumCapital) { + pq.add(projects[idx++].profit); + } + if (pq.isEmpty()) { + break; + } + maximumCapital += pq.poll(); + } + return maximumCapital; + } + + private record Project(int capital, int profit) implements Comparable { + + @Override + public int compareTo(Project o) { + return capital - o.capital; + } + } +} From 1d92d5d1e5a0182c540ff6fcef5a7d9190d01fb4 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 24 Feb 2023 06:30:26 -0800 Subject: [PATCH 1016/1640] Update Minimize Deviation in Array.java --- Hard/Minimize Deviation in Array.java | 36 +++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Hard/Minimize Deviation in Array.java b/Hard/Minimize Deviation in Array.java index 736ccbd0..905621e6 100644 --- a/Hard/Minimize Deviation in Array.java +++ b/Hard/Minimize Deviation in Array.java @@ -1,21 +1,21 @@ class Solution { - public int minimumDeviation(int[] nums) { - int currMinimum = Integer.MAX_VALUE; - PriorityQueue priorityQueue = new PriorityQueue<>((a, b) -> b - a); - for (int num : nums) { - if (num % 2 != 0) { - num *= 2; - } - currMinimum = Math.min(currMinimum, num); - priorityQueue.add(num); + public int minimumDeviation(int[] nums) { + int currMinimum = Integer.MAX_VALUE; + PriorityQueue pq = new PriorityQueue<>(Collections.reverseOrder()); + for (int num : nums) { + if (num % 2 != 0) { + num *= 2; + } + currMinimum = Math.min(currMinimum, num); + pq.add(num); + } + int deviation = Integer.MAX_VALUE; + while (pq.peek() % 2 == 0) { + int removed = pq.poll() / 2; + currMinimum = Math.min(currMinimum, removed); + pq.add(removed); + deviation = Math.min(deviation, pq.peek() - currMinimum); + } + return deviation; } - int deviation = Integer.MAX_VALUE; - while (priorityQueue.peek() % 2 == 0) { - int removed = priorityQueue.poll() / 2; - currMinimum = Math.min(currMinimum, removed); - priorityQueue.add(removed); - deviation = Math.min(deviation, priorityQueue.peek() - currMinimum); - } - return deviation; - } } From 47e01c0983188538f8c087478b4c123d36be4a32 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 24 Feb 2023 07:27:59 -0800 Subject: [PATCH 1017/1640] Updated Symmetric Tree.java to iterative style --- Easy/Symmetric Tree.java | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/Easy/Symmetric Tree.java b/Easy/Symmetric Tree.java index b20e39a5..929d6ade 100644 --- a/Easy/Symmetric Tree.java +++ b/Easy/Symmetric Tree.java @@ -12,19 +12,30 @@ * this.right = right; * } * } -*/ + */ class Solution { - public boolean isSymmetric(TreeNode root) { - return helper(root.left, root.right); - } - - private boolean helper(TreeNode leftNode, TreeNode rightNode) { - if (leftNode == null && rightNode == null) { - return true; + public boolean isSymmetric(TreeNode root) { + Queue queue = new LinkedList<>(); + queue.add(new TreeNode[]{root.left, root.right}); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + TreeNode[] removed = queue.remove(); + TreeNode nodeOne = removed[0]; + TreeNode nodeTwo = removed[1]; + if (nodeOne == null && nodeTwo == null) { + continue; + } + if (nodeOne == null || nodeTwo == null) { + return false; + } + if (nodeOne.val != nodeTwo.val) { + return false; + } + queue.add(new TreeNode[]{nodeOne.left, nodeTwo.right}); + queue.add(new TreeNode[]{nodeOne.right, nodeTwo.left}); + } + } + return true; } - if ((leftNode == null || rightNode == null) || leftNode.val != rightNode.val) { - return false; - } - return helper(leftNode.left, rightNode.right) && helper(leftNode.right, rightNode.left); - } } From 927db22e2033d9a015d4ac5a98354d61dd571aa7 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 26 Feb 2023 07:43:57 -0800 Subject: [PATCH 1018/1640] Added Left and Right Sum Differences.java --- Easy/Left and Right Sum Differences.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Left and Right Sum Differences.java diff --git a/Easy/Left and Right Sum Differences.java b/Easy/Left and Right Sum Differences.java new file mode 100644 index 00000000..99a5338a --- /dev/null +++ b/Easy/Left and Right Sum Differences.java @@ -0,0 +1,17 @@ +class Solution { + public int[] leftRigthDifference(int[] nums) { + int n = nums.length; + int leftToRightSum = 0; + for (int i = 0; i < n; i++) { + leftToRightSum += nums[i]; + } + int[] result = new int[n]; + int rightToLeftSum = 0; + for (int i = n - 1; i >= 0; i--) { + leftToRightSum -= nums[i]; + result[i] = Math.abs(rightToLeftSum - leftToRightSum); + rightToLeftSum += nums[i]; + } + return result; + } +} From 53da45bc0c044f5f368965d8fb7798e1e11b1f92 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 26 Feb 2023 09:49:15 -0800 Subject: [PATCH 1019/1640] Modified Edit Distance.java to use top-down --- Hard/Edit Distance.java | 48 ++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/Hard/Edit Distance.java b/Hard/Edit Distance.java index c4000645..b7ae5930 100644 --- a/Hard/Edit Distance.java +++ b/Hard/Edit Distance.java @@ -1,26 +1,34 @@ class Solution { - public int minDistance(String word1, String word2) { - int n = word1.length(); - int m = word2.length(); - if (n * m == 0) { - return n + m; + public int minDistance(String word1, String word2) { + return minDistanceHelper( + word1, + word2, + word1.length(), + word2.length(), + new Integer[word1.length() + 1][word2.length() + 1]); } - int[][] dp = new int[n + 1][m + 1]; - for (int i = 0; i <= n; i++) { - dp[i][0] = i; - } - for (int j = 0; j <= m; j++) { - dp[0][j] = j; - } - for (int i = 1; i <= n; i++) { - for (int j = 1; j <= m; j++) { - if (word1.charAt(i - 1) == word2.charAt(j - 1)) { - dp[i][j] = dp[i - 1][j - 1]; + + private int minDistanceHelper(String word1, String word2, int word1Index, int word2Index, Integer[][] memo) { + if (word1Index == 0) { + return word2Index; + } + if (word2Index == 0) { + return word1Index; + } + if (memo[word1Index][word2Index] != null) { + return memo[word1Index][word2Index]; + } + int minEditDistance = 0; + if (word1.charAt(word1Index - 1) == word2.charAt(word2Index - 1)) { + minEditDistance = minDistanceHelper(word1, word2, word1Index - 1, word2Index - 1, memo); } else { - dp[i][j] = Math.min(dp[i - 1][j - 1], Math.min(dp[i - 1][j], dp[i][j - 1])) + 1; + int distanceWithInsertion = minDistanceHelper(word1, word2, word1Index, word2Index - 1, memo); + int distanceWithDeletion = minDistanceHelper(word1, word2, word1Index - 1, word2Index, memo); + int distanceWithReplace = minDistanceHelper(word1, word2, word1Index - 1, word2Index - 1, memo); + minEditDistance = Math.min(distanceWithInsertion, + Math.min(distanceWithDeletion, distanceWithReplace)) + 1; } - } + memo[word1Index][word2Index] = minEditDistance; + return minEditDistance; } - return dp[n][m]; - } } From 810f758e80a7b1a3503efeca72c7cad54f3587a5 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 26 Feb 2023 14:31:05 -0800 Subject: [PATCH 1020/1640] Updated Design a File Sharing System.java --- Medium/Design a File Sharing System.java | 85 +++++++++++------------- 1 file changed, 39 insertions(+), 46 deletions(-) diff --git a/Medium/Design a File Sharing System.java b/Medium/Design a File Sharing System.java index 2f6c3de7..b5bba82b 100644 --- a/Medium/Design a File Sharing System.java +++ b/Medium/Design a File Sharing System.java @@ -1,57 +1,50 @@ class FileSharing { - Map> chunkToUserMap; - Map> userToChunkMap; - int id; - PriorityQueue availableIds; - public FileSharing(int m) { - id = 1; - chunkToUserMap = new HashMap<>(); - userToChunkMap = new HashMap<>(); - for (int i = 1; i <= m; i++) { - chunkToUserMap.put(i, new HashSet<>()); - } - availableIds = new PriorityQueue<>(); - } - public int join(List ownedChunks) { - int userId = getUserId(); - userToChunkMap.put(userId, new HashSet<>(ownedChunks)); - for (Integer chunk : ownedChunks) { - chunkToUserMap.get(chunk).add(userId); - } - return userId; - } - - private int getUserId() { - if (availableIds.isEmpty()) { - return id++; + private final PriorityQueue userIdsInSystem; + private final Map> chunkToUserIdMapping; + private final Map> userIdToChunkMapping; + + public FileSharing(int m) { + this.userIdsInSystem = new PriorityQueue<>(); + this.userIdsInSystem.add(1); + this.chunkToUserIdMapping = new HashMap<>(); + for (int i = 1; i <= m; i++) { + chunkToUserIdMapping.put(i, new HashSet<>()); + } + this.userIdToChunkMapping = new HashMap<>(); } - return availableIds.poll(); - } - public void leave(int userID) { - Set chunksOwned = userToChunkMap.get(userID); - userToChunkMap.remove(userID); - for (Integer chunk : chunksOwned) { - chunkToUserMap.get(chunk).remove(userID); + public int join(List ownedChunks) { + int currUserId = this.userIdsInSystem.poll(); + if (this.userIdsInSystem.isEmpty()) { + this.userIdsInSystem.add(currUserId + 1); + } + this.userIdToChunkMapping.computeIfAbsent(currUserId, k -> new HashSet<>()); + for (Integer chunk : ownedChunks) { + this.chunkToUserIdMapping.get(chunk).add(currUserId); + this.userIdToChunkMapping.get(currUserId).add(chunk); + } + return currUserId; } - availableIds.add(userID); - } - public List request(int userID, int chunkID) { - Set usersOwningChunk = chunkToUserMap.get(chunkID); - Iterator iterator = usersOwningChunk.iterator(); - List users = new ArrayList<>(); - while (iterator.hasNext()) { - users.add(iterator.next()); + public void leave(int userID) { + this.userIdsInSystem.add(userID); + Set chunksOwned = this.userIdToChunkMapping.get(userID); + this.userIdToChunkMapping.remove(userID); + for (Integer chunk : chunksOwned) { + this.chunkToUserIdMapping.get(chunk).remove(userID); + } } - if (!usersOwningChunk.contains(userID) && usersOwningChunk.size() > 0) { - userToChunkMap.get(userID).add(chunkID); - chunkToUserMap.get(chunkID).add(userID); + + public List request(int userID, int chunkID) { + if (this.chunkToUserIdMapping.get(chunkID).isEmpty()) { + return new ArrayList<>(); + } + List usersOwningChunk = this.chunkToUserIdMapping.get(chunkID).stream().sorted().toList(); + this.userIdToChunkMapping.get(userID).add(chunkID); + this.chunkToUserIdMapping.get(chunkID).add(userID); + return usersOwningChunk; } - Collections.sort(users); - return users; - } } /** From 1e98fdc3096551c66e133562c022fd0e9988b391 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 27 Feb 2023 12:39:07 -0800 Subject: [PATCH 1021/1640] Updated Search in a Binary Search Tree to iterative --- Easy/Search in a Binary Search Tree.java | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Easy/Search in a Binary Search Tree.java b/Easy/Search in a Binary Search Tree.java index 63e2f736..e3c00460 100644 --- a/Easy/Search in a Binary Search Tree.java +++ b/Easy/Search in a Binary Search Tree.java @@ -14,13 +14,21 @@ * } */ class Solution { - public TreeNode searchBST(TreeNode root, int val) { - if (root == null) { - return root; + public TreeNode searchBST(TreeNode root, int val) { + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + TreeNode removed = queue.remove(); + if (removed.val == val) { + return removed; + } + if (removed.val > val && removed.left != null) { + queue.add(removed.left); + } + if (removed.val < val && removed.right != null) { + queue.add(removed.right); + } + } + return null; } - if (root.val == val) { - return root; - } - return root.val > val ? searchBST(root.left, val) : searchBST(root.right, val); - } } From f195348c24a342a359567b22fd34bb1b510c2b91 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 28 Feb 2023 06:41:12 -0800 Subject: [PATCH 1022/1640] Updated Find Duplicate Subtrees.java --- Medium/Find Duplicate Subtrees.java | 45 ++++++++++++++--------------- 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/Medium/Find Duplicate Subtrees.java b/Medium/Find Duplicate Subtrees.java index b81a4bec..4800644b 100644 --- a/Medium/Find Duplicate Subtrees.java +++ b/Medium/Find Duplicate Subtrees.java @@ -4,35 +4,32 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - Map map; - public List findDuplicateSubtrees(TreeNode root) { - map = new HashMap<>(); - List ans = new ArrayList<>(); - - helper(root); - - for (TreeNode node : map.values()) { - if (node != null) { - ans.add(node); - } - } - - return ans; + List result = new LinkedList<>(); + traverse(root, new HashMap<>(), result); + return result; } - - private String helper(TreeNode root) { - if (root == null) { - return "#"; + + private String traverse(TreeNode node, Map frequencyMap, List result) { + if (node == null) { + return ""; + } + String key = ("(" + traverse(node.left, frequencyMap, result) + ")" + node.val + + "(" + traverse(node.right, frequencyMap, result) + ")"); + frequencyMap.put(key, frequencyMap.getOrDefault(key, 0) + 1); + if (frequencyMap.get(key) == 2) { + result.add(node); } - - String path = root.val + "|" + helper(root.left) + "|" + helper(root.right); - map.put(path, map.containsKey(path) ? root : null); - - return path; + return key; } } From 32a5bef670a17c7a973a8be96f7da57e8edf5ed7 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 28 Feb 2023 09:04:22 -0800 Subject: [PATCH 1023/1640] Updated 3Sum.java --- Medium/3Sum.java | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/Medium/3Sum.java b/Medium/3Sum.java index fc4f25fa..3c615e51 100644 --- a/Medium/3Sum.java +++ b/Medium/3Sum.java @@ -1,21 +1,25 @@ class Solution { - public List> threeSum(int[] nums) { - Set> result = new HashSet<>(); - Set duplicates = new HashSet<>(); - Map map = new HashMap<>(); - for (int i = 0; i < nums.length; i++) { - if (duplicates.add(nums[i])) { - for (int j = i + 1; j < nums.length; j++) { - int target = -nums[i] - nums[j]; - if (map.containsKey(target) && map.get(target) == i) { - List temp = Arrays.asList(nums[i], nums[j], target); - Collections.sort(temp); - result.add(temp); - } - map.put(nums[j], i); + public List> threeSum(int[] nums) { + Arrays.sort(nums); + List> result = new ArrayList<>(); + for (int i = 0; i < nums.length; i++) { + if (i != 0 && nums[i] == nums[i - 1]) { + continue; + } + int low = i + 1; + int high = nums.length - 1; + while (low < high) { + int currSum = nums[low] + nums[high] + nums[i]; + if (currSum > 0 || (high < nums.length - 1 && nums[high] == nums[high + 1])) { + high--; + } else if (currSum < 0 || (low > i + 1 && nums[low] == nums[low - 1])) { + low++; + } else { + result.add(Arrays.asList(nums[i], nums[low++], nums[high--])); + } + + } } - } + return result; } - return new ArrayList<>(result); - } } From 0faa2f57c2d5132d784e990e4050703d9a22ac57 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Feb 2023 13:01:26 -0800 Subject: [PATCH 1024/1640] Create Smallest Number in Infinite Set.java --- Medium/Smallest Number in Infinite Set.java | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Medium/Smallest Number in Infinite Set.java diff --git a/Medium/Smallest Number in Infinite Set.java b/Medium/Smallest Number in Infinite Set.java new file mode 100644 index 00000000..2555f5ce --- /dev/null +++ b/Medium/Smallest Number in Infinite Set.java @@ -0,0 +1,34 @@ +class SmallestInfiniteSet { + + private final PriorityQueue pq; + private int current; + + public SmallestInfiniteSet() { + this.pq = new PriorityQueue<>(); + this.current = 1; + } + + public int popSmallest() { + int result = current; + if (!pq.isEmpty() && pq.peek() < current) { + result = pq.poll(); + } else { + current++; + } + while (!pq.isEmpty() && pq.peek() == result) { + pq.poll(); + } + return result; + } + + public void addBack(int num) { + pq.add(num); + } +} + +/** + * Your SmallestInfiniteSet object will be instantiated and called as such: + * SmallestInfiniteSet obj = new SmallestInfiniteSet(); + * int param_1 = obj.popSmallest(); + * obj.addBack(num); + */ From 96456396916637efbd8750f300bd4eb1a2544d28 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 28 Feb 2023 16:23:55 -0800 Subject: [PATCH 1025/1640] Update Sort An Array.java --- Medium/Sort An Array.java | 67 +++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/Medium/Sort An Array.java b/Medium/Sort An Array.java index 7c3f105e..a906afc4 100644 --- a/Medium/Sort An Array.java +++ b/Medium/Sort An Array.java @@ -1,40 +1,39 @@ class Solution { - public int[] sortArray(int[] nums) { - int n = nums.length - 1; - mergeSort(nums, 0, n); - return nums; - } - - private void mergeSort(int[] nums, int start, int end) { - if (end - start + 1 <= 1) { - return; + public int[] sortArray(int[] nums) { + mergeSort(nums, 0, nums.length - 1); + return nums; } - int mid = start + (end - start) / 2; - mergeSort(nums, start, mid); - mergeSort(nums, mid + 1, end); - merge(nums, start, mid, end); - } - private void merge(int[] nums, int start, int mid, int end) { - int left = start; - int right = mid + 1; - int[] temp = new int[end - start + 1]; - int idx = 0; - while (left <= mid && right <= end) { - if (nums[left] < nums[right]) { - temp[idx++] = nums[left++]; - } else { - temp[idx++] = nums[right++]; - } - } - while (left <= mid) { - temp[idx++] = nums[left++]; + private void mergeSort(int[] nums, int start, int end) { + if (end - start <= 0) { + return; + } + int mid = start + (end - start) / 2; + mergeSort(nums, start, mid); + mergeSort(nums, mid + 1, end); + merge(nums, start, mid, end); } - while (right <= end) { - temp[idx++] = nums[right++]; - } - for (int i = start; i <= end; i++) { - nums[i] = temp[i - start]; + + private void merge(int[] nums, int start, int mid, int end) { + int left = start; + int right = mid + 1; + int[] temp = new int[end - start + 1]; + int idx = 0; + while (left <= mid && right <= end) { + if (nums[left] < nums[right]) { + temp[idx++] = nums[left++]; + } else { + temp[idx++] = nums[right++]; + } + } + while (left <= mid) { + temp[idx++] = nums[left++]; + } + while (right <= end) { + temp[idx++] = nums[right++]; + } + for (int i = start; i <= end; i++) { + nums[i] = temp[i - start]; + } } - } } From 701b492cca15c9ae51364a99939bb6e010231c77 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Mar 2023 10:22:10 -0800 Subject: [PATCH 1026/1640] Update Snapshot Array.java --- Medium/Snapshot Array.java | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/Medium/Snapshot Array.java b/Medium/Snapshot Array.java index d735dde3..282b6476 100644 --- a/Medium/Snapshot Array.java +++ b/Medium/Snapshot Array.java @@ -1,26 +1,28 @@ class SnapshotArray { - TreeMap[] A; - int snapId; - public SnapshotArray(int length) { - A = new TreeMap[length]; - snapId = 0; - for (int i = 0; i < length; i++) { - A[i] = new TreeMap(); - A[i].put(0, 0); + + private final TreeMap[] db; + private int currentSnapId; + + public SnapshotArray(int length) { + db = new TreeMap[length]; + for (int i = 0; i < length; i++) { + db[i] = new TreeMap(); + db[i].put(0, 0); + } + this.currentSnapId = 0; } - } - public void set(int index, int val) { - A[index].put(snapId, val); - } + public void set(int index, int val) { + db[index].put(currentSnapId, val); + } - public int snap() { - return snapId++; - } + public int snap() { + return currentSnapId++; + } - public int get(int index, int snap_id) { - return A[index].floorEntry(snap_id).getValue(); - } + public int get(int index, int snap_id) { + return db[index].floorEntry(snap_id).getValue(); + } } /** From 9e9de5a770cd44269526d201256e9a1ad9e2eca2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Mar 2023 14:19:09 -0800 Subject: [PATCH 1027/1640] Update Valid Word Square.java --- Easy/Valid Word Square.java | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/Easy/Valid Word Square.java b/Easy/Valid Word Square.java index 392d8392..0226d4d5 100644 --- a/Easy/Valid Word Square.java +++ b/Easy/Valid Word Square.java @@ -1,13 +1,23 @@ class Solution { public boolean validWordSquare(List words) { - int n = words.size(); - for (int i = 0; i < n; i++){ - for (int j = 0; j < words.get(i).length(); j++){ - if(j >= n || words.get(j).length() <= i || words.get(j).charAt(i) != words.get(i).charAt(j)) { - return false; - } + int column = 0; + for (String rowWord : words) { + String columnWord = getColumnWord(words, column++); + if (!rowWord.equals(columnWord)) { + return false; } } return true; } + + private String getColumnWord(List words, int column) { + StringBuilder sb = new StringBuilder(); + for (String word : words) { + if (column >= word.length()) { + break; + } + sb.append(word.charAt(column)); + } + return sb.toString(); + } } From 6d98b0acf584ad06ac2e346602eabbfe56492a20 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Mar 2023 16:38:55 -0800 Subject: [PATCH 1028/1640] Update String Compression.java --- Medium/String Compression.java | 35 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/Medium/String Compression.java b/Medium/String Compression.java index 182df66f..060e655e 100644 --- a/Medium/String Compression.java +++ b/Medium/String Compression.java @@ -1,22 +1,21 @@ class Solution { - public int compress(char[] chars) { - int idx = 0; - int startIdx = 0; - while (idx < chars.length) { - char c = chars[idx]; - int count = 0; - while (idx < chars.length && chars[idx] == c) { - idx++; - count++; - } - chars[startIdx++] = c; - if (count > 1) { - String countString = String.valueOf(count); - for (char cs : countString.toCharArray()) { - chars[startIdx++] = cs; + public int compress(char[] chars) { + int startIdx = 0; + for (int i = 0; i < chars.length;) { + char c = chars[i]; + int count = 0; + while (i < chars.length && chars[i] == c) { + count++; + i++; + } + chars[startIdx++] = c; + if (count > 1) { + String temp = String.valueOf(count); + for (char digit : temp.toCharArray()) { + chars[startIdx++] = digit; + } + } } - } + return startIdx; } - return startIdx; - } } From e3fbc59aee6b6786bf7263c740613949c9a6f162 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 2 Mar 2023 15:23:23 -0800 Subject: [PATCH 1029/1640] Update Majority Element II.java --- Medium/Majority Element II.java | 79 +++++++++++++++++---------------- 1 file changed, 40 insertions(+), 39 deletions(-) diff --git a/Medium/Majority Element II.java b/Medium/Majority Element II.java index a44275b4..5b59752e 100644 --- a/Medium/Majority Element II.java +++ b/Medium/Majority Element II.java @@ -1,42 +1,43 @@ class Solution { - public List majorityElement(int[] nums) { - Integer majorityElementOne = null; - Integer majorityElementTwo = null; - int countOne = 0; - int countTwo = 0; - for (int num : nums) { - if (majorityElementOne != null && num == majorityElementOne) { - countOne++; - } else if (majorityElementTwo != null && num == majorityElementTwo) { - countTwo++; - } else if (countOne == 0) { - majorityElementOne = num; - countOne = 1; - } else if (countTwo == 0) { - majorityElementTwo = num; - countTwo = 1; - } else { - countOne--; - countTwo--; - } + public List majorityElement(int[] nums) { + Integer candidateOne = null; + Integer candidateTwo = null; + int countOne = 0; + int countTwo = 0; + for (int num : nums) { + if (candidateOne != null && candidateOne == num) { + countOne++; + } else if (candidateTwo != null && candidateTwo == num) { + countTwo++; + } else if (countOne == 0) { + candidateOne = num; + countOne++; + } else if (countTwo == 0) { + candidateTwo = num; + countTwo++; + } else { + countOne--; + countTwo--; + } + } + countOne = 0; + countTwo = 0; + for (int num : nums) { + if (candidateOne != null && candidateOne == num) { + countOne++; + } + if (candidateTwo != null && candidateTwo == num) { + countTwo++; + } + } + int n = nums.length; + List result = new ArrayList<>(); + if (countOne > n / 3) { + result.add(candidateOne); + } + if (countTwo > n / 3) { + result.add(candidateTwo); + } + return result; } - List result = new ArrayList<>(); - countOne = 0; - countTwo = 0; - for (int num : nums) { - if (majorityElementOne != null && majorityElementOne == num) { - countOne++; - } - if (majorityElementTwo != null && majorityElementTwo == num) { - countTwo++; - } - } - if (countOne > nums.length / 3) { - result.add(majorityElementOne); - } - if (countTwo > nums.length / 3) { - result.add(majorityElementTwo); - } - return result; - } } From a269fd566dba3b6aa0bac12af2a9693e009d5f24 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 2 Mar 2023 17:41:32 -0800 Subject: [PATCH 1030/1640] Added Find the Index of the First Occurrence in a String --- ... the Index of the First Occurrence in a String.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Medium/Find the Index of the First Occurrence in a String.java diff --git a/Medium/Find the Index of the First Occurrence in a String.java b/Medium/Find the Index of the First Occurrence in a String.java new file mode 100644 index 00000000..4156d0ba --- /dev/null +++ b/Medium/Find the Index of the First Occurrence in a String.java @@ -0,0 +1,10 @@ +class Solution { + public int strStr(String haystack, String needle) { + for (int i = 0; i <= haystack.length() - needle.length(); i++) { + if (haystack.substring(i, i + needle.length()).equals(needle)) { + return i; + } + } + return -1; + } +} From 613eb298b5fd1c6bb1330ba14ab90e0821333507 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 4 Mar 2023 12:00:07 -0800 Subject: [PATCH 1031/1640] Added Count Subarrays With Fixed Bounds.java --- Hard/Count Subarrays With Fixed Bounds.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Hard/Count Subarrays With Fixed Bounds.java diff --git a/Hard/Count Subarrays With Fixed Bounds.java b/Hard/Count Subarrays With Fixed Bounds.java new file mode 100644 index 00000000..2846d647 --- /dev/null +++ b/Hard/Count Subarrays With Fixed Bounds.java @@ -0,0 +1,21 @@ +class Solution { + public long countSubarrays(int[] nums, int minK, int maxK) { + long result = 0; + int minPosition = -1; + int maxPosition = -1; + int leftIdx = -1; + for (int i = 0; i < nums.length; i++) { + if (nums[i] < minK || nums[i] > maxK) { + leftIdx = i; + } + if (nums[i] == minK) { + minPosition = i; + } + if (nums[i] == maxK) { + maxPosition = i; + } + result += Math.max(0, Math.min(maxPosition, minPosition) - leftIdx); + } + return result; + } +} From 56629ad0d6abb90ec8e4cb4a783e94e95004135d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 5 Mar 2023 07:21:38 -0800 Subject: [PATCH 1032/1640] Added Jump Game IV --- Hard/Jump Game IV.java | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Hard/Jump Game IV.java diff --git a/Hard/Jump Game IV.java b/Hard/Jump Game IV.java new file mode 100644 index 00000000..960ce4b7 --- /dev/null +++ b/Hard/Jump Game IV.java @@ -0,0 +1,39 @@ +class Solution { + public int minJumps(int[] arr) { + int n = arr.length; + Map> graph = new HashMap<>(); + for (int i = 0; i < n; i++) { + graph.computeIfAbsent(arr[i], k -> new ArrayList<>()).add(i); + } + Queue path = new LinkedList<>(); + Set visited = new HashSet<>(); + path.add(0); + int steps = 0; + while (!path.isEmpty()) { + int size = path.size(); + while (size-- > 0) { + int removed = path.remove(); + if (removed == n - 1) { + return steps; + } + for (Integer child : graph.get(arr[removed])) { + if (!visited.contains(child)) { + visited.add(child); + path.add(child); + } + } + graph.get(arr[removed]).clear(); + if (removed + 1 < n && !visited.contains(removed + 1)) { + visited.add(removed + 1); + path.add(removed + 1); + } + if (removed - 1 >= 0 && !visited.contains(removed - 1)) { + visited.add(removed - 1); + path.add(removed - 1); + } + } + steps++; + } + return -1; + } +} From 1357acfbe52974366ce73cf9fa75be37ce33e035 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 5 Mar 2023 14:15:35 -0800 Subject: [PATCH 1033/1640] Added Pass the Pillow --- Easy/Pass the Pillow.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Easy/Pass the Pillow.java diff --git a/Easy/Pass the Pillow.java b/Easy/Pass the Pillow.java new file mode 100644 index 00000000..e9ae16ea --- /dev/null +++ b/Easy/Pass the Pillow.java @@ -0,0 +1,7 @@ +class Solution { + public int passThePillow(int n, int time) { + int factor = time / (n - 1); + int remainder = time % (n - 1); + return factor % 2 != 0 ? (n - remainder) : (1 + remainder); + } +} From 6e71fbed13f389fec45c81356bae45542fe61627 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 6 Mar 2023 19:53:48 -0800 Subject: [PATCH 1034/1640] Updated Minimum Time to Complete Trips.java --- Medium/Minimum Time to Complete Trips.java | 46 +++++++++++----------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Medium/Minimum Time to Complete Trips.java b/Medium/Minimum Time to Complete Trips.java index 901a3e57..f6fa3539 100644 --- a/Medium/Minimum Time to Complete Trips.java +++ b/Medium/Minimum Time to Complete Trips.java @@ -1,27 +1,27 @@ class Solution { - public long minimumTime(int[] time, int totalTrips) { - long minTime = 1; - long fastestBus = time[0]; - for (int t : time) { - fastestBus = Math.min(fastestBus, t); + public long minimumTime(int[] time, int totalTrips) { + int maxTime = 1; + for (int t : time) { + maxTime = Math.max(maxTime, t); + } + long left = 1; + long right = (long) maxTime * totalTrips; + while (left < right) { + long mid = (left + right) / 2; + if (isPossible(time, mid, totalTrips)) { + right = mid; + } else { + left = mid + 1; + } + } + return left; } - long maxTime = fastestBus * totalTrips; - while (minTime < maxTime) { - long midTime = minTime + (maxTime - minTime) / 2; - if (getNumberOfTripsWithTime(time, midTime) >= totalTrips) { - maxTime = midTime; - } else { - minTime = midTime + 1; - } + + private boolean isPossible(int[] time, long totalTime, int totalTrips) { + long actualTrips = 0; + for (int t : time) { + actualTrips += totalTime / t; + } + return actualTrips >= totalTrips; } - return minTime; - } - - private long getNumberOfTripsWithTime(int[] time, long currentTime) { - long totalTrips = 0; - for (int t : time) { - totalTrips += currentTime / t; - } - return totalTrips; - } } From 96d75c9a8bb926acb97af2756b5224458fe5cdba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Mar 2023 08:19:27 -0800 Subject: [PATCH 1035/1640] Create Split With Minimum Sum.java --- Easy/Split With Minimum Sum.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Split With Minimum Sum.java diff --git a/Easy/Split With Minimum Sum.java b/Easy/Split With Minimum Sum.java new file mode 100644 index 00000000..3f816605 --- /dev/null +++ b/Easy/Split With Minimum Sum.java @@ -0,0 +1,22 @@ +class Solution { + public int splitNum(int num) { + List digits = new ArrayList<>(); + while (num > 0) { + digits.add(num % 10); + num /= 10; + } + Collections.sort(digits); + int numOne = 0; + int numTwo = 0; + boolean flag = true; + for (int digit : digits) { + if (flag) { + numOne = numOne * 10 + digit; + } else { + numTwo = numTwo * 10 + digit; + } + flag = !flag; + } + return numOne + numTwo; + } +} From bef17f87c83f6c619b1c1c8b4240994015640712 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 7 Mar 2023 15:45:06 -0800 Subject: [PATCH 1036/1640] Create Kth Largest Sum in a Binary Tree.java --- Medium/Kth Largest Sum in a Binary Tree.java | 41 ++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Medium/Kth Largest Sum in a Binary Tree.java diff --git a/Medium/Kth Largest Sum in a Binary Tree.java b/Medium/Kth Largest Sum in a Binary Tree.java new file mode 100644 index 00000000..01955179 --- /dev/null +++ b/Medium/Kth Largest Sum in a Binary Tree.java @@ -0,0 +1,41 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public long kthLargestLevelSum(TreeNode root, int k) { + PriorityQueue pq = new PriorityQueue<>(); + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + long sum = 0l; + while (size-- > 0) { + TreeNode removed = queue.remove(); + sum += removed.val; + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + pq.add(sum); + if (pq.size() > k) { + pq.poll(); + } + } + return pq.size() < k ? -1 : pq.poll(); + } +} From 139f4792b78f4d940221ab535201178cc92bacec Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 8 Mar 2023 17:47:09 -0800 Subject: [PATCH 1037/1640] Updated Linked List Cycle II --- Medium/Linked List Cycle II.java | 38 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Medium/Linked List Cycle II.java b/Medium/Linked List Cycle II.java index 42ba6ee8..2a88b1b4 100644 --- a/Medium/Linked List Cycle II.java +++ b/Medium/Linked List Cycle II.java @@ -10,24 +10,24 @@ * } */ public class Solution { - public ListNode detectCycle(ListNode head) { - ListNode fast = head; - ListNode slow = head; - while (fast != null && fast.next != null) { - slow = slow.next; - fast = fast.next.next; - if (slow == fast) { - break; - } + public ListNode detectCycle(ListNode head) { + ListNode slow = head; + ListNode fast = head; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + if (slow == fast) { + break; + } + } + if (fast == null || fast.next == null) { + return null; + } + ListNode curr = head; + while (curr != slow) { + curr = curr.next; + slow = slow.next; + } + return curr; } - if (fast == null || fast.next == null) { - return null; - } - slow = head; - while (slow != fast) { - slow = slow.next; - fast = fast.next; - } - return slow; - } } From 57b4c08942fa7fb65979824c8a345ea1bd62e5f4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Mar 2023 16:58:48 -0800 Subject: [PATCH 1038/1640] Update Shortest Way to Form String.java --- Medium/Shortest Way to Form String.java | 43 +++++++++++-------------- 1 file changed, 19 insertions(+), 24 deletions(-) diff --git a/Medium/Shortest Way to Form String.java b/Medium/Shortest Way to Form String.java index c5f28f1f..e87eaf33 100644 --- a/Medium/Shortest Way to Form String.java +++ b/Medium/Shortest Way to Form String.java @@ -1,28 +1,23 @@ class Solution { - public int shortestWay(String source, String target) { - int count = 1; - int idx = 0; - int n = target.length(); - int sourceIdx = 0; - boolean match = false; - while (idx < n) { - if (source.charAt(sourceIdx) == target.charAt(idx)) { - idx++; - sourceIdx++; - match = true; - } - else { - sourceIdx++; - } - if (sourceIdx == source.length() && idx != n) { - if (!match) { - return -1; + public int shortestWay(String source, String target) { + Set letters = source.chars().mapToObj(c -> (char) c).collect(Collectors.toSet()); + int count = 0; + int sourceIdx = 0; + int targetIdx = 0; + while (targetIdx < target.length()) { + char targetLetter = target.charAt(targetIdx); + if (!letters.contains(targetLetter)) { + return -1; + } + if (targetLetter == source.charAt(sourceIdx)) { + targetIdx++; + } + sourceIdx++; + if (sourceIdx == source.length()) { + sourceIdx = 0; + count++; + } } - count++; - sourceIdx = 0; - match = false; - } + return count + (sourceIdx == 0 ? 0 : 1); } - return count; - } } From 7e3c64027a5d9b029e5569631270eca184beafbb Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 11 Mar 2023 07:46:43 -0800 Subject: [PATCH 1039/1640] Updated Convert Sorted List to Binary Search Tree.java --- ...ert Sorted List to Binary Search Tree.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Medium/Convert Sorted List to Binary Search Tree.java b/Medium/Convert Sorted List to Binary Search Tree.java index 5b49c0f3..c1258059 100644 --- a/Medium/Convert Sorted List to Binary Search Tree.java +++ b/Medium/Convert Sorted List to Binary Search Tree.java @@ -3,7 +3,9 @@ * public class ListNode { * int val; * ListNode next; - * ListNode(int x) { val = x; } + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ /** @@ -12,35 +14,33 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - ListNode curr; - - public TreeNode sortedListToBST(ListNode head) { - curr = head; - return generate(count(head)); - } - - public int count(ListNode node) { - int n = 0; - while (node != null) { - node = node.next; - ++n; + public TreeNode sortedListToBST(ListNode head) { + List list = new ArrayList<>(); + while (head != null) { + list.add(head.val); + head = head.next; } - return n; + return helper(list, 0, list.size() - 1); } - public TreeNode generate(int n) { - if (n==0) return null; - - TreeNode node = new TreeNode(0); - node.left = generate(n/2); - node.val = curr.val; - curr = curr.next; - node.right = generate(n-(n/2)-1); - - return node; + private TreeNode helper(List list, int start, int end) { + if (start > end) { + return null; + } + int mid = (start + end) / 2; + TreeNode root = new TreeNode(list.get(mid)); + root.left = helper(list, start, mid - 1); + root.right = helper(list, mid + 1, end); + return root; } } From a62cb373579970d281b2d14f377a9b14300ebd25 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 12 Mar 2023 07:58:56 -0700 Subject: [PATCH 1040/1640] Added Count the Number of Vowel Strings in Range.java --- Easy/Count the Number of Vowel Strings in Range.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/Count the Number of Vowel Strings in Range.java diff --git a/Easy/Count the Number of Vowel Strings in Range.java b/Easy/Count the Number of Vowel Strings in Range.java new file mode 100644 index 00000000..38eeb76e --- /dev/null +++ b/Easy/Count the Number of Vowel Strings in Range.java @@ -0,0 +1,10 @@ +class Solution { + public int vowelStrings(String[] words, int left, int right) { + Set vowels = Set.of('a', 'e', 'i', 'o', 'u'); + return (int) Arrays.stream(words) + .skip(left) + .limit(right - left + 1) + .filter(word -> vowels.contains(word.charAt(0)) && vowels.contains(word.charAt(word.length() - 1))) + .count(); + } +} From 5f47791115ab26d68bb2b7909a9c60124f709afc Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 12 Mar 2023 18:19:12 -0700 Subject: [PATCH 1041/1640] Updated README --- Easy/README.md | 895 ++++++++++++++++++++-------------------- Hard/README.md | 171 ++++---- Medium/README.md | 1024 +++++++++++++++++++++++----------------------- 3 files changed, 1051 insertions(+), 1039 deletions(-) diff --git a/Easy/README.md b/Easy/README.md index 63afc542..23f8ec11 100644 --- a/Easy/README.md +++ b/Easy/README.md @@ -113,448 +113,453 @@ S.no | Coding Problem 110 | [Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) 111 | [Count the Digits That Divide a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Digits%20That%20Divide%20a%20Number.java) 112 | [Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) -113 | [Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Bits.java) -114 | [Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) -115 | [Counting Words With a Given Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Words%20With%20a%20Given%20Prefix.java) -116 | [Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) -117 | [Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) -118 | [Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) -119 | [DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) -120 | [Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) -121 | [Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) -122 | [Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) -123 | [Decode the Message](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20the%20Message.java) -124 | [Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) -125 | [Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) -126 | [Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) -127 | [Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) -128 | [Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) -129 | [Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) -130 | [Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) -131 | [Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) -132 | [Delete Node in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Node%20in%20a%20Linked%20List.java) -133 | [Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) -134 | [Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) -135 | [Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) -136 | [Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) -137 | [Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) -138 | [Design an Ordered Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20Stream.java) -139 | [Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) -140 | [Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) -141 | [Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) -142 | [Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) -143 | [Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) -144 | [Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) -145 | [Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) -146 | [Determine if Two Events Have Conflict](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20Two%20Events%20Have%20Conflict.java) -147 | [Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) -148 | [Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) -149 | [Difference Between Element Sum and Digit Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Difference%20Between%20Element%20Sum%20and%20Digit%20Sum%20of%20an%20Array.java) -150 | [Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) -151 | [Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) -152 | [Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) -153 | [Divide Array Into Equal Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20Array%20Into%20Equal%20Pairs.java) -154 | [Divide a String Into Groups of Size k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20a%20String%20Into%20Groups%20of%20Size%20k.java) -155 | [Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) -156 | [Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) -157 | [Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) -158 | [Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) -159 | [Evaluate Boolean Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Evaluate%20Boolean%20Binary%20Tree.java) -160 | [Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) -161 | [Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) -162 | [Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) -163 | [Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) -164 | [Fibonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Number.java) -165 | [Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) -166 | [Final Value of Variable After Performing Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Value%20of%20Variable%20After%20Performing%20Operations.java) -167 | [Find All K-Distant Indices in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20K-Distant%20Indices%20in%20an%20Array.java) -168 | [Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) -169 | [Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) -170 | [Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) -171 | [Find Closest Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Closest%20Number%20to%20Zero.java) -172 | [Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) -173 | [Find First Palindromic String in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20First%20Palindromic%20String%20in%20the%20Array.java) -174 | [Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) -175 | [Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) -176 | [Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) -177 | [Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) -178 | [Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) -179 | [Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) -180 | [Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) -181 | [Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) -182 | [Find Resultant Array After Removing Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Resultant%20Array%20After%20Removing%20Anagrams.java) -183 | [Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) -184 | [Find Subarrays With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Subarrays%20With%20Equal%20Sum.java) -185 | [Find Target Indices After Sorting Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Target%20Indices%20After%20Sorting%20Array.java) -186 | [Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) -187 | [Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) -188 | [Find if Path Exists in Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20if%20Path%20Exists%20in%20Graph.java) -189 | [Find the Array Concatenation Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Array%20Concatenation%20Value.java) -190 | [Find the Difference of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Difference%20of%20Two%20Arrays.java) -191 | [Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) -192 | [Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) -193 | [Find the K-Beauty of a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20K-Beauty%20of%20a%20Number.java) -194 | [Find the Middle Index in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Middle%20Index%20in%20Array.java) -195 | [Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) -196 | [Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) -197 | [Finding 3-Digit Even Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Finding%203-Digit%20Even%20Numbers.java) -198 | [First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) -199 | [First Letter to Appear Twice](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Letter%20to%20Appear%20Twice.java) -200 | [First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) -201 | [Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) -202 | [Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) -203 | [Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) -204 | [Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) -205 | [Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) -206 | [Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) -207 | [Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) -208 | [Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) -209 | [Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) -210 | [Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) -211 | [Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) -212 | [Greatest English Letter in Upper and Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20English%20Letter%20in%20Upper%20and%20Lower%20Case.java) -213 | [Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) -214 | [Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) -215 | [Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) -216 | [Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) -217 | [Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) -218 | [Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) -219 | [Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) -220 | [High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) -221 | [How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) -222 | [How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) -223 | [Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) -224 | [Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) -225 | [Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) -226 | [Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) -227 | [Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) -228 | [Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) -229 | [Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) -230 | [Intersection of Multiple Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Multiple%20Arrays.java) -231 | [Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) -232 | [Intersection of Two Arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays%20II.java) -233 | [Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) -234 | [Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) -235 | [Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) -236 | [Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) -237 | [Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) -238 | [Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) -239 | [Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) -240 | [Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) -241 | [K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) -242 | [Keep Multiplying Found Values by Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keep%20Multiplying%20Found%20Values%20by%20Two.java) -243 | [Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) -244 | [Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) -245 | [Kth Distinct String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Distinct%20String%20in%20an%20Array.java) -246 | [Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) -247 | [Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) -248 | [Largest 3-Same-Digit Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%203-Same-Digit%20Number%20in%20String.java) -249 | [Largest Local Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Local%20Values%20in%20a%20Matrix.java) -250 | [Largest Number After Digit Swaps by Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20After%20Digit%20Swaps%20by%20Parity.java) -251 | [Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) -252 | [Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) -253 | [Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) -254 | [Largest Positive Integer That Exists With Its Negative](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Positive%20Integer%20That%20Exists%20With%20Its%20Negative.java) -255 | [Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) -256 | [Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) -257 | [Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) -258 | [Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) -259 | [Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) -260 | [Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) -261 | [Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) -262 | [Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) -263 | [Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) -264 | [License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) -265 | [Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) -266 | [Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) -267 | [Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) -268 | [Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) -269 | [Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) -270 | [Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) -271 | [Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) -272 | [Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) -273 | [Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) -274 | [Longest Subsequence With Limited Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Subsequence%20With%20Limited%20Sum.java) -275 | [Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) -276 | [Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) -277 | [Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) -278 | [Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) -279 | [Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) -280 | [Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) -281 | [Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) -282 | [Make Array Zero by Subtracting Equal Amounts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20Array%20Zero%20by%20Subtracting%20Equal%20Amounts.java) -283 | [Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) -284 | [Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) -285 | [Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) -286 | [Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) -287 | [Maximize Sum Of Array After K Negations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Sum%20Of%20Array%20After%20K%20Negations.java) -288 | [Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) -289 | [Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) -290 | [Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) -291 | [Maximum Count of Positive Integer and Negative Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Count%20of%20Positive%20Integer%20and%20Negative%20Integer.java) -292 | [Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) -293 | [Maximum Difference Between Increasing Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20Between%20Increasing%20Elements.java) -294 | [Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) -295 | [Maximum Enemy Forts That Can Be Captured](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Enemy%20Forts%20That%20Can%20Be%20Captured.java) -296 | [Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) -297 | [Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) -298 | [Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) -299 | [Maximum Number of Pairs in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Pairs%20in%20Array.java) -300 | [Maximum Number of Words Found in Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20Found%20in%20Sentences.java) -301 | [Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) -302 | [Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) -303 | [Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) -304 | [Maximum Product of Three Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Three%20Numbers.java) -305 | [Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) -306 | [Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) -307 | [Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) -308 | [Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray.java) -309 | [Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) -310 | [Maximum Value of a String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20a%20String%20in%20an%20Array.java) -311 | [Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) -312 | [Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) -313 | [Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) -314 | [Merge Similar Items](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Similar%20Items.java) -315 | [Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) -316 | [Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) -317 | [Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) -318 | [Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) -319 | [Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) -320 | [Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) -321 | [Min Max Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Max%20Game.java) -322 | [Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) -323 | [Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) -324 | [Minimum Amount of Time to Fill Cups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Amount%20of%20Time%20to%20Fill%20Cups.java) -325 | [Minimum Bit Flips to Convert Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Bit%20Flips%20to%20Convert%20Number.java) -326 | [Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) -327 | [Minimum Common Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Common%20Value.java) -328 | [Minimum Cost of Buying Candies With Discount](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20of%20Buying%20Candies%20With%20Discount.java) -329 | [Minimum Cost to Move Chips to The Same Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20to%20Move%20Chips%20to%20The%20Same%20Position.java) -330 | [Minimum Cuts to Divide a Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cuts%20to%20Divide%20a%20Circle.java) -331 | [Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) -332 | [Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) -333 | [Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) -334 | [Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) -335 | [Minimum Hours of Training to Win a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Hours%20of%20Training%20to%20Win%20a%20Competition.java) -336 | [Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) -337 | [Minimum Moves to Convert String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Convert%20String.java) -338 | [Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) -339 | [Minimum Number of Moves to Seat Everyone](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Moves%20to%20Seat%20Everyone.java) -340 | [Minimum Number of Operations to Convert Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Operations%20to%20Convert%20Time.java) -341 | [Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) -342 | [Minimum Recolors to Get K Consecutive Black Blocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Recolors%20to%20Get%20K%20Consecutive%20Black%20Blocks.java) -343 | [Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) -344 | [Minimum Sum of Four Digit Number After Splitting Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Sum%20of%20Four%20Digit%20Number%20After%20Splitting%20Digits.java) -345 | [Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) -346 | [Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) -347 | [Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) -348 | [Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) -349 | [Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) -350 | [Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) -351 | [Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Ranges.java) -352 | [Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) -353 | [Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) -354 | [Most Frequent Even Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Even%20Element.java) -355 | [Most Frequent Number Following Key In an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Number%20Following%20Key%20In%20an%20Array.java) -356 | [Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) -357 | [Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) -358 | [Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) -359 | [N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) -360 | [N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) -361 | [N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) -362 | [N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) -363 | [Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) -364 | [Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) -365 | [Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) -366 | [Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) -367 | [Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) -368 | [Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) -369 | [Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) -370 | [Number of Arithmetic Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Arithmetic%20Triplets.java) -371 | [Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) -372 | [Number of Common Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Common%20Factors.java) -373 | [Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) -374 | [Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) -375 | [Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) -376 | [Number of Distinct Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Distinct%20Averages.java) -377 | [Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) -378 | [Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) -379 | [Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) -380 | [Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) -381 | [Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) -382 | [Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) -383 | [Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) -384 | [Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) -385 | [Number of Unequal Triplets in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Unequal%20Triplets%20in%20Array.java) -386 | [Number of Valid Words in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Valid%20Words%20in%20a%20Sentence.java) -387 | [Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) -388 | [Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) -389 | [Odd String Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Odd%20String%20Difference.java) -390 | [Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) -391 | [Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) -392 | [Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) -393 | [Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) -394 | [Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) -395 | [Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) -396 | [Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) -397 | [Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) -398 | [Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) -399 | [Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) -400 | [Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) -401 | [Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) -402 | [Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) -403 | [Percentage of Letter in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Percentage%20of%20Letter%20in%20String.java) -404 | [Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) -405 | [Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) -406 | [Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) -407 | [Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) -408 | [Power of Four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Four.java) -409 | [Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) -410 | [Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) -411 | [Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) -412 | [Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) -413 | [Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) -414 | [Range Sum of BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20of%20BST.java) -415 | [Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) -416 | [Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) -417 | [Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) -418 | [Rearrange Characters to Make Target String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Characters%20to%20Make%20Target%20String.java) -419 | [Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) -420 | [Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rectangle%20Overlap.java) -421 | [Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) -422 | [Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) -423 | [Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) -424 | [Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) -425 | [Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) -426 | [Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) -427 | [Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) -428 | [Remove Digit From Number to Maximize Result](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Digit%20From%20Number%20to%20Maximize%20Result.java) -429 | [Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) -430 | [Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) -431 | [Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) -432 | [Remove Letter To Equalize Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Letter%20To%20Equalize%20Frequency.java) -433 | [Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) -434 | [Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) -435 | [Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) -436 | [Remove Palindromic Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Palindromic%20Subsequences.java) -437 | [Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) -438 | [Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) -439 | [Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) -440 | [Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) -441 | [Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) -442 | [Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) -443 | [Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) -444 | [Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) -445 | [Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) -446 | [Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) -447 | [Reverse Prefix of Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Prefix%20of%20Word.java) -448 | [Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) -449 | [Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) -450 | [Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) -451 | [Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) -452 | [Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) -453 | [Rings and Rods](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rings%20and%20Rods.java) -454 | [Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) -455 | [Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) -456 | [Root Equals Sum of Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Root%20Equals%20Sum%20of%20Children.java) -457 | [Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) -458 | [Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) -459 | [Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) -460 | [Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) -461 | [Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) -462 | [Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) -463 | [Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) -464 | [Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) -465 | [Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) -466 | [Separate the Digits in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Separate%20the%20Digits%20in%20an%20Array.java) -467 | [Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) -468 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) -469 | [Shortest Distance to Target String in a Circular Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20Target%20String%20in%20a%20Circular%20Array.java) -470 | [Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) -471 | [Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) -472 | [Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) -473 | [Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) -474 | [Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) -475 | [Similar RGB Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Similar%20RGB%20Color.java) -476 | [Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) -477 | [Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) -478 | [Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) -479 | [Smallest Even Multiple](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Even%20Multiple.java) -480 | [Smallest Index With Equal Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Index%20With%20Equal%20Value.java) -481 | [Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) -482 | [Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) -483 | [Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) -484 | [Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) -485 | [Sort Even and Odd Indices Independently](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Even%20and%20Odd%20Indices%20Independently.java) -486 | [Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) -487 | [Sort the People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20the%20People.java) -488 | [Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) -489 | [Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) -490 | [Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) -491 | [Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) -492 | [SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) -493 | [Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) -494 | [String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) -495 | [String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) -496 | [Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) -497 | [Strong Password Checker II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strong%20Password%20Checker%20II.java) -498 | [Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) -499 | [Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) -500 | [Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) -501 | [Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) -502 | [Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) -503 | [Sum Of Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20Of%20Two%20Integers.java) -504 | [Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) -505 | [Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) -506 | [Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) -507 | [Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) -508 | [Sum of Left Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Left%20Leaves.java) -509 | [Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) -510 | [Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) -511 | [Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) -512 | [Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) -513 | [Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) -514 | [Take Gifts From the Richest Pile](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Take%20Gifts%20From%20the%20Richest%20Pile.java) -515 | [Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teemo%20Attacking.java) -516 | [Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) -517 | [The Employee That Worked on the Longest Task](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20Employee%20That%20Worked%20on%20the%20Longest%20Task.java) -518 | [The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) -519 | [Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) -520 | [Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) -521 | [Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) -522 | [Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) -523 | [Time Needed to Buy Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Time%20Needed%20to%20Buy%20Tickets.java) -524 | [To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) -525 | [Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) -526 | [Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) -527 | [Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) -528 | [Two Furthest Houses With Different Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Furthest%20Houses%20With%20Different%20Colors.java) -529 | [Two Out of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Out%20of%20Three.java) -530 | [Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) -531 | [Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) -532 | [Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) -533 | [Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) -534 | [Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) -535 | [Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) -536 | [Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) -537 | [Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) -538 | [Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) -539 | [Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) -540 | [Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) -541 | [Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) -542 | [Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) -543 | [Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) -544 | [Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) -545 | [Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) -546 | [Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) -547 | [Valid Word Abbreviation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbreviation.java) -548 | [Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) -549 | [Valid Word Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Square.java) -550 | [Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) -551 | [Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) -552 | [Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) -553 | [X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) -554 | [XOR Operation in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/XOR%20Operation%20in%20an%20Array.java) -555 | [nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) -556 | [range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) -557 | [trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) +113 | [Count the Number of Vowel Strings in Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Vowel%20Strings%20in%20Range.java) +114 | [Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Bits.java) +115 | [Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) +116 | [Counting Words With a Given Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Words%20With%20a%20Given%20Prefix.java) +117 | [Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) +118 | [Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) +119 | [Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) +120 | [DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) +121 | [Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) +122 | [Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) +123 | [Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) +124 | [Decode the Message](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20the%20Message.java) +125 | [Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) +126 | [Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) +127 | [Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) +128 | [Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) +129 | [Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) +130 | [Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) +131 | [Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) +132 | [Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) +133 | [Delete Node in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Node%20in%20a%20Linked%20List.java) +134 | [Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) +135 | [Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) +136 | [Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) +137 | [Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) +138 | [Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) +139 | [Design an Ordered Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20Stream.java) +140 | [Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) +141 | [Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) +142 | [Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) +143 | [Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) +144 | [Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) +145 | [Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) +146 | [Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) +147 | [Determine if Two Events Have Conflict](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20Two%20Events%20Have%20Conflict.java) +148 | [Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) +149 | [Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) +150 | [Difference Between Element Sum and Digit Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Difference%20Between%20Element%20Sum%20and%20Digit%20Sum%20of%20an%20Array.java) +151 | [Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) +152 | [Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) +153 | [Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) +154 | [Divide Array Into Equal Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20Array%20Into%20Equal%20Pairs.java) +155 | [Divide a String Into Groups of Size k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20a%20String%20Into%20Groups%20of%20Size%20k.java) +156 | [Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) +157 | [Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) +158 | [Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) +159 | [Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) +160 | [Evaluate Boolean Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Evaluate%20Boolean%20Binary%20Tree.java) +161 | [Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) +162 | [Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) +163 | [Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) +164 | [Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) +165 | [Fibonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Number.java) +166 | [Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) +167 | [Final Value of Variable After Performing Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Value%20of%20Variable%20After%20Performing%20Operations.java) +168 | [Find All K-Distant Indices in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20K-Distant%20Indices%20in%20an%20Array.java) +169 | [Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) +170 | [Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) +171 | [Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) +172 | [Find Closest Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Closest%20Number%20to%20Zero.java) +173 | [Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) +174 | [Find First Palindromic String in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20First%20Palindromic%20String%20in%20the%20Array.java) +175 | [Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) +176 | [Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) +177 | [Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) +178 | [Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) +179 | [Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) +180 | [Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) +181 | [Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) +182 | [Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) +183 | [Find Resultant Array After Removing Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Resultant%20Array%20After%20Removing%20Anagrams.java) +184 | [Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) +185 | [Find Subarrays With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Subarrays%20With%20Equal%20Sum.java) +186 | [Find Target Indices After Sorting Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Target%20Indices%20After%20Sorting%20Array.java) +187 | [Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) +188 | [Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) +189 | [Find if Path Exists in Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20if%20Path%20Exists%20in%20Graph.java) +190 | [Find the Array Concatenation Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Array%20Concatenation%20Value.java) +191 | [Find the Difference of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Difference%20of%20Two%20Arrays.java) +192 | [Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) +193 | [Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) +194 | [Find the K-Beauty of a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20K-Beauty%20of%20a%20Number.java) +195 | [Find the Middle Index in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Middle%20Index%20in%20Array.java) +196 | [Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) +197 | [Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) +198 | [Finding 3-Digit Even Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Finding%203-Digit%20Even%20Numbers.java) +199 | [First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) +200 | [First Letter to Appear Twice](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Letter%20to%20Appear%20Twice.java) +201 | [First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) +202 | [Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) +203 | [Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) +204 | [Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) +205 | [Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) +206 | [Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) +207 | [Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) +208 | [Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) +209 | [Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) +210 | [Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) +211 | [Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) +212 | [Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) +213 | [Greatest English Letter in Upper and Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20English%20Letter%20in%20Upper%20and%20Lower%20Case.java) +214 | [Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) +215 | [Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) +216 | [Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) +217 | [Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) +218 | [Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) +219 | [Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) +220 | [Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) +221 | [High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) +222 | [How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) +223 | [How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) +224 | [Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) +225 | [Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) +226 | [Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) +227 | [Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) +228 | [Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) +229 | [Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) +230 | [Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) +231 | [Intersection of Multiple Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Multiple%20Arrays.java) +232 | [Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) +233 | [Intersection of Two Arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays%20II.java) +234 | [Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) +235 | [Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) +236 | [Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) +237 | [Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) +238 | [Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) +239 | [Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) +240 | [Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) +241 | [Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) +242 | [K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) +243 | [Keep Multiplying Found Values by Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keep%20Multiplying%20Found%20Values%20by%20Two.java) +244 | [Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) +245 | [Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) +246 | [Kth Distinct String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Distinct%20String%20in%20an%20Array.java) +247 | [Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) +248 | [Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) +249 | [Largest 3-Same-Digit Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%203-Same-Digit%20Number%20in%20String.java) +250 | [Largest Local Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Local%20Values%20in%20a%20Matrix.java) +251 | [Largest Number After Digit Swaps by Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20After%20Digit%20Swaps%20by%20Parity.java) +252 | [Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) +253 | [Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) +254 | [Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) +255 | [Largest Positive Integer That Exists With Its Negative](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Positive%20Integer%20That%20Exists%20With%20Its%20Negative.java) +256 | [Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) +257 | [Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) +258 | [Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) +259 | [Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) +260 | [Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) +261 | [Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) +262 | [Left and Right Sum Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Left%20and%20Right%20Sum%20Differences.java) +263 | [Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) +264 | [Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) +265 | [Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) +266 | [License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) +267 | [Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) +268 | [Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) +269 | [Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) +270 | [Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) +271 | [Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) +272 | [Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) +273 | [Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) +274 | [Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) +275 | [Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) +276 | [Longest Subsequence With Limited Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Subsequence%20With%20Limited%20Sum.java) +277 | [Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) +278 | [Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) +279 | [Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) +280 | [Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) +281 | [Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) +282 | [Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) +283 | [Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) +284 | [Make Array Zero by Subtracting Equal Amounts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20Array%20Zero%20by%20Subtracting%20Equal%20Amounts.java) +285 | [Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) +286 | [Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) +287 | [Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) +288 | [Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) +289 | [Maximize Sum Of Array After K Negations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Sum%20Of%20Array%20After%20K%20Negations.java) +290 | [Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) +291 | [Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) +292 | [Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) +293 | [Maximum Count of Positive Integer and Negative Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Count%20of%20Positive%20Integer%20and%20Negative%20Integer.java) +294 | [Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) +295 | [Maximum Difference Between Increasing Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20Between%20Increasing%20Elements.java) +296 | [Maximum Difference by Remapping a Digit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20by%20Remapping%20a%20Digit.java) +297 | [Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) +298 | [Maximum Enemy Forts That Can Be Captured](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Enemy%20Forts%20That%20Can%20Be%20Captured.java) +299 | [Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) +300 | [Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) +301 | [Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) +302 | [Maximum Number of Pairs in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Pairs%20in%20Array.java) +303 | [Maximum Number of Words Found in Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20Found%20in%20Sentences.java) +304 | [Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) +305 | [Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) +306 | [Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) +307 | [Maximum Product of Three Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Three%20Numbers.java) +308 | [Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) +309 | [Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) +310 | [Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) +311 | [Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) +312 | [Maximum Value of a String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20a%20String%20in%20an%20Array.java) +313 | [Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) +314 | [Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) +315 | [Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) +316 | [Merge Similar Items](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Similar%20Items.java) +317 | [Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) +318 | [Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) +319 | [Merge Two 2D Arrays by Summing Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%202D%20Arrays%20by%20Summing%20Values.java) +320 | [Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) +321 | [Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) +322 | [Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) +323 | [Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) +324 | [Min Max Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Max%20Game.java) +325 | [Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) +326 | [Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) +327 | [Minimum Amount of Time to Fill Cups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Amount%20of%20Time%20to%20Fill%20Cups.java) +328 | [Minimum Bit Flips to Convert Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Bit%20Flips%20to%20Convert%20Number.java) +329 | [Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) +330 | [Minimum Common Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Common%20Value.java) +331 | [Minimum Cost of Buying Candies With Discount](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20of%20Buying%20Candies%20With%20Discount.java) +332 | [Minimum Cost to Move Chips to The Same Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20to%20Move%20Chips%20to%20The%20Same%20Position.java) +333 | [Minimum Cuts to Divide a Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cuts%20to%20Divide%20a%20Circle.java) +334 | [Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) +335 | [Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) +336 | [Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) +337 | [Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) +338 | [Minimum Hours of Training to Win a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Hours%20of%20Training%20to%20Win%20a%20Competition.java) +339 | [Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) +340 | [Minimum Moves to Convert String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Convert%20String.java) +341 | [Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) +342 | [Minimum Number of Moves to Seat Everyone](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Moves%20to%20Seat%20Everyone.java) +343 | [Minimum Number of Operations to Convert Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Operations%20to%20Convert%20Time.java) +344 | [Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) +345 | [Minimum Recolors to Get K Consecutive Black Blocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Recolors%20to%20Get%20K%20Consecutive%20Black%20Blocks.java) +346 | [Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) +347 | [Minimum Sum of Four Digit Number After Splitting Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Sum%20of%20Four%20Digit%20Number%20After%20Splitting%20Digits.java) +348 | [Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) +349 | [Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) +350 | [Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) +351 | [Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) +352 | [Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) +353 | [Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) +354 | [Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Ranges.java) +355 | [Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) +356 | [Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) +357 | [Most Frequent Even Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Even%20Element.java) +358 | [Most Frequent Number Following Key In an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Number%20Following%20Key%20In%20an%20Array.java) +359 | [Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) +360 | [Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) +361 | [Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) +362 | [N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) +363 | [N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) +364 | [N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) +365 | [N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) +366 | [Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) +367 | [Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) +368 | [Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) +369 | [Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) +370 | [Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) +371 | [Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) +372 | [Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) +373 | [Number of Arithmetic Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Arithmetic%20Triplets.java) +374 | [Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) +375 | [Number of Common Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Common%20Factors.java) +376 | [Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) +377 | [Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) +378 | [Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) +379 | [Number of Distinct Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Distinct%20Averages.java) +380 | [Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) +381 | [Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) +382 | [Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) +383 | [Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) +384 | [Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) +385 | [Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) +386 | [Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) +387 | [Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) +388 | [Number of Unequal Triplets in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Unequal%20Triplets%20in%20Array.java) +389 | [Number of Valid Words in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Valid%20Words%20in%20a%20Sentence.java) +390 | [Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) +391 | [Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) +392 | [Odd String Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Odd%20String%20Difference.java) +393 | [Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) +394 | [Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) +395 | [Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) +396 | [Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) +397 | [Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) +398 | [Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) +399 | [Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) +400 | [Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) +401 | [Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) +402 | [Pass the Pillow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pass%20the%20Pillow.java) +403 | [Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) +404 | [Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) +405 | [Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) +406 | [Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) +407 | [Percentage of Letter in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Percentage%20of%20Letter%20in%20String.java) +408 | [Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) +409 | [Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) +410 | [Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) +411 | [Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) +412 | [Power of Four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Four.java) +413 | [Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) +414 | [Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) +415 | [Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) +416 | [Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) +417 | [Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) +418 | [Range Sum of BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20of%20BST.java) +419 | [Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) +420 | [Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) +421 | [Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) +422 | [Rearrange Characters to Make Target String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Characters%20to%20Make%20Target%20String.java) +423 | [Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) +424 | [Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rectangle%20Overlap.java) +425 | [Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) +426 | [Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) +427 | [Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) +428 | [Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) +429 | [Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) +430 | [Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) +431 | [Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) +432 | [Remove Digit From Number to Maximize Result](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Digit%20From%20Number%20to%20Maximize%20Result.java) +433 | [Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) +434 | [Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) +435 | [Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) +436 | [Remove Letter To Equalize Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Letter%20To%20Equalize%20Frequency.java) +437 | [Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) +438 | [Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) +439 | [Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) +440 | [Remove Palindromic Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Palindromic%20Subsequences.java) +441 | [Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) +442 | [Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) +443 | [Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) +444 | [Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) +445 | [Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) +446 | [Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) +447 | [Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) +448 | [Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) +449 | [Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) +450 | [Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) +451 | [Reverse Prefix of Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Prefix%20of%20Word.java) +452 | [Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) +453 | [Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) +454 | [Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) +455 | [Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) +456 | [Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) +457 | [Rings and Rods](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rings%20and%20Rods.java) +458 | [Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) +459 | [Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) +460 | [Root Equals Sum of Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Root%20Equals%20Sum%20of%20Children.java) +461 | [Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) +462 | [Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) +463 | [Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) +464 | [Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) +465 | [Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) +466 | [Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) +467 | [Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) +468 | [Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) +469 | [Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) +470 | [Separate the Digits in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Separate%20the%20Digits%20in%20an%20Array.java) +471 | [Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) +472 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) +473 | [Shortest Distance to Target String in a Circular Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20Target%20String%20in%20a%20Circular%20Array.java) +474 | [Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) +475 | [Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) +476 | [Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) +477 | [Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) +478 | [Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) +479 | [Similar RGB Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Similar%20RGB%20Color.java) +480 | [Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) +481 | [Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) +482 | [Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) +483 | [Smallest Even Multiple](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Even%20Multiple.java) +484 | [Smallest Index With Equal Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Index%20With%20Equal%20Value.java) +485 | [Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) +486 | [Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) +487 | [Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) +488 | [Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) +489 | [Sort Even and Odd Indices Independently](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Even%20and%20Odd%20Indices%20Independently.java) +490 | [Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) +491 | [Sort the People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20the%20People.java) +492 | [Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) +493 | [Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) +494 | [Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) +495 | [Split With Minimum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20With%20Minimum%20Sum.java) +496 | [Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) +497 | [SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) +498 | [Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) +499 | [String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) +500 | [String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) +501 | [Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) +502 | [Strong Password Checker II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strong%20Password%20Checker%20II.java) +503 | [Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) +504 | [Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) +505 | [Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) +506 | [Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) +507 | [Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) +508 | [Sum Of Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20Of%20Two%20Integers.java) +509 | [Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) +510 | [Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) +511 | [Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) +512 | [Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) +513 | [Sum of Left Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Left%20Leaves.java) +514 | [Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) +515 | [Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) +516 | [Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) +517 | [Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) +518 | [Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) +519 | [Take Gifts From the Richest Pile](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Take%20Gifts%20From%20the%20Richest%20Pile.java) +520 | [Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teemo%20Attacking.java) +521 | [Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) +522 | [The Employee That Worked on the Longest Task](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20Employee%20That%20Worked%20on%20the%20Longest%20Task.java) +523 | [The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) +524 | [Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) +525 | [Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) +526 | [Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) +527 | [Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) +528 | [Time Needed to Buy Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Time%20Needed%20to%20Buy%20Tickets.java) +529 | [To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) +530 | [Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) +531 | [Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) +532 | [Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) +533 | [Two Furthest Houses With Different Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Furthest%20Houses%20With%20Different%20Colors.java) +534 | [Two Out of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Out%20of%20Three.java) +535 | [Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) +536 | [Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) +537 | [Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) +538 | [Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) +539 | [Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) +540 | [Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) +541 | [Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) +542 | [Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) +543 | [Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) +544 | [Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) +545 | [Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) +546 | [Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) +547 | [Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) +548 | [Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) +549 | [Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) +550 | [Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) +551 | [Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) +552 | [Valid Word Abbreviation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbreviation.java) +553 | [Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) +554 | [Valid Word Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Square.java) +555 | [Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) +556 | [Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) +557 | [Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) +558 | [X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) +559 | [XOR Operation in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/XOR%20Operation%20in%20an%20Array.java) +560 | [nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) +561 | [range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) +562 | [trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) diff --git a/Hard/README.md b/Hard/README.md index 75b409d1..3ada6cad 100644 --- a/Hard/README.md +++ b/Hard/README.md @@ -11,87 +11,90 @@ S.no | Coding Problem 8 | [Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) 9 | [Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) 10 | [Construct Target Array With Multiple Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Construct%20Target%20Array%20With%20Multiple%20Sums.java) -11 | [Count Vowels Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Vowels%20Permutation.java) -12 | [Count of Smaller Numbers After Self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20of%20Smaller%20Numbers%20After%20Self.java) -13 | [Course Schedule III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Course%20Schedule%20III.java) -14 | [Critical Connections in a Network](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Critical%20Connections%20in%20a%20Network.java) -15 | [Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) -16 | [Design In-Memory File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20In-Memory%20File%20System.java) -17 | [Design Movie Rental System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Movie%20Rental%20System.java) -18 | [Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) -19 | [Design Skiplist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Skiplist.java) -20 | [Dice Roll Simulation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Dice%20Roll%20Simulation.java) -21 | [Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) -22 | [Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) -23 | [Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) -24 | [Expression Add Operators](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Expression%20Add%20Operators.java) -25 | [Find Median from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20from%20Data%20Stream.java) -26 | [Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) -27 | [Find the Kth Smallest Sum of a Matrix With Sorted Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Kth%20Smallest%20Sum%20of%20a%20Matrix%20With%20Sorted%20Rows.java) -28 | [First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) -29 | [Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) -30 | [Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) -31 | [Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) -32 | [K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) -33 | [K Inverse Pairs Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Inverse%20Pairs%20Array.java) -34 | [Kth Smallest Number in Multiplication Table](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Kth%20Smallest%20Number%20in%20Multiplication%20Table.java) -35 | [LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) -36 | [Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) -37 | [Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) -38 | [Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) -39 | [Longest Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Valid%20Parentheses.java) -40 | [Max Points on a Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Points%20on%20a%20Line.java) -41 | [Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Stack.java) -42 | [Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) -43 | [Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) -44 | [Maximum Performance of a Team](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Performance%20of%20a%20Team.java) -45 | [Maximum Profit in Job Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Profit%20in%20Job%20Scheduling.java) -46 | [Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) -47 | [Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) -48 | [Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) -49 | [Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) -50 | [Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) -51 | [Minimum Difficulty of a Job Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Difficulty%20of%20a%20Job%20Schedule.java) -52 | [Minimum Number of Refueling Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Number%20of%20Refueling%20Stops.java) -53 | [Minimum Window Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Subsequence.java) -54 | [Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) -55 | [My Calendar III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/My%20Calendar%20III.java) -56 | [N-Queens II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens%20II.java) -57 | [N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) -58 | [Naming a Company](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Naming%20a%20Company.java) -59 | [Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) -60 | [Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) -61 | [Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) -62 | [Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) -63 | [Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) -64 | [Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) -65 | [Paint House III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20III.java) -66 | [Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) -67 | [Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) -68 | [Perfect Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Perfect%20Rectangle.java) -69 | [Poor Pigs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Poor%20Pigs.java) -70 | [Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) -71 | [Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reconstruct%20Itinerary.java) -72 | [Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) -73 | [Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) -74 | [Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) -75 | [Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) -76 | [Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) -77 | [Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) -78 | [Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) -79 | [Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) -80 | [Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) -81 | [Stamping The Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stamping%20The%20Sequence.java) -82 | [Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) -83 | [String Compression II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/String%20Compression%20II.java) -84 | [Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) -85 | [Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) -86 | [Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) -87 | [The Skyline Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/The%20Skyline%20Problem.java) -88 | [Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) -89 | [Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) -90 | [Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) -91 | [Vertical Order Traversal Of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Vertical%20Order%20Traversal%20Of%20a%20Binary%20Tree.java) -92 | [Wildcard Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Wildcard%20Matching.java) -93 | [Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) -94 | [Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) +11 | [Count Subarrays With Fixed Bounds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Subarrays%20With%20Fixed%20Bounds.java) +12 | [Count Vowels Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Vowels%20Permutation.java) +13 | [Count of Smaller Numbers After Self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20of%20Smaller%20Numbers%20After%20Self.java) +14 | [Course Schedule III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Course%20Schedule%20III.java) +15 | [Critical Connections in a Network](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Critical%20Connections%20in%20a%20Network.java) +16 | [Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) +17 | [Design In-Memory File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20In-Memory%20File%20System.java) +18 | [Design Movie Rental System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Movie%20Rental%20System.java) +19 | [Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) +20 | [Design Skiplist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Skiplist.java) +21 | [Dice Roll Simulation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Dice%20Roll%20Simulation.java) +22 | [Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) +23 | [Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) +24 | [Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) +25 | [Expression Add Operators](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Expression%20Add%20Operators.java) +26 | [Find Median from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20from%20Data%20Stream.java) +27 | [Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) +28 | [Find the Kth Smallest Sum of a Matrix With Sorted Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Kth%20Smallest%20Sum%20of%20a%20Matrix%20With%20Sorted%20Rows.java) +29 | [First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) +30 | [Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) +31 | [IPO](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/IPO.java) +32 | [Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) +33 | [Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) +34 | [Jump Game IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Jump%20Game%20IV.java) +35 | [K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) +36 | [K Inverse Pairs Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Inverse%20Pairs%20Array.java) +37 | [Kth Smallest Number in Multiplication Table](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Kth%20Smallest%20Number%20in%20Multiplication%20Table.java) +38 | [LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) +39 | [Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) +40 | [Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) +41 | [Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) +42 | [Longest Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Valid%20Parentheses.java) +43 | [Max Points on a Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Points%20on%20a%20Line.java) +44 | [Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Stack.java) +45 | [Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) +46 | [Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) +47 | [Maximum Performance of a Team](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Performance%20of%20a%20Team.java) +48 | [Maximum Profit in Job Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Profit%20in%20Job%20Scheduling.java) +49 | [Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) +50 | [Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) +51 | [Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) +52 | [Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) +53 | [Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) +54 | [Minimum Difficulty of a Job Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Difficulty%20of%20a%20Job%20Schedule.java) +55 | [Minimum Number of Refueling Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Number%20of%20Refueling%20Stops.java) +56 | [Minimum Window Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Subsequence.java) +57 | [Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) +58 | [My Calendar III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/My%20Calendar%20III.java) +59 | [N-Queens II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens%20II.java) +60 | [N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) +61 | [Naming a Company](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Naming%20a%20Company.java) +62 | [Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) +63 | [Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) +64 | [Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) +65 | [Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) +66 | [Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) +67 | [Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) +68 | [Paint House III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20III.java) +69 | [Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) +70 | [Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) +71 | [Perfect Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Perfect%20Rectangle.java) +72 | [Poor Pigs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Poor%20Pigs.java) +73 | [Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) +74 | [Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reconstruct%20Itinerary.java) +75 | [Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) +76 | [Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) +77 | [Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) +78 | [Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) +79 | [Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) +80 | [Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) +81 | [Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) +82 | [Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) +83 | [Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) +84 | [Stamping The Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stamping%20The%20Sequence.java) +85 | [Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) +86 | [String Compression II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/String%20Compression%20II.java) +87 | [Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) +88 | [Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) +89 | [Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) +90 | [The Skyline Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/The%20Skyline%20Problem.java) +91 | [Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) +92 | [Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) +93 | [Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) +94 | [Vertical Order Traversal Of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Vertical%20Order%20Traversal%20Of%20a%20Binary%20Tree.java) +95 | [Wildcard Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Wildcard%20Matching.java) +96 | [Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) +97 | [Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) diff --git a/Medium/README.md b/Medium/README.md index afdf245d..cea9747e 100644 --- a/Medium/README.md +++ b/Medium/README.md @@ -229,513 +229,517 @@ S.no | Coding Problem 226 | [Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) 227 | [Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) 228 | [Find the Duplicate Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Duplicate%20Number.java) -229 | [Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) -230 | [Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) -231 | [Find the Minimum and Maximum Number of Nodes Between Critical Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Minimum%20and%20Maximum%20Number%20of%20Nodes%20Between%20Critical%20Points.java) -232 | [Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) -233 | [Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) -234 | [Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) -235 | [First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) -236 | [Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) -237 | [Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) -238 | [Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) -239 | [Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) -240 | [Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) -241 | [Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) -242 | [Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) -243 | [Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) -244 | [Friends Of Appropriate Ages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friends%20Of%20Appropriate%20Ages.java) -245 | [Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) -246 | [Furthest Building You Can Reach](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Furthest%20Building%20You%20Can%20Reach.java) -247 | [Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) -248 | [Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) -249 | [Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) -250 | [Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) -251 | [Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) -252 | [Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) -253 | [Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) -254 | [Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) -255 | [Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) -256 | [Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) -257 | [H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) -258 | [H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) -259 | [HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) -260 | [Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) -261 | [House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) -262 | [House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) -263 | [House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber.java) -264 | [Image Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Image%20Overlap.java) -265 | [Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) -266 | [Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) -267 | [Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) -268 | [Implement Trie II (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20II%20(Prefix%20Tree).java) -269 | [Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) -270 | [Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) -271 | [Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) -272 | [Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) -273 | [Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) -274 | [Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) -275 | [Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Interval.java) -276 | [Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) -277 | [Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) -278 | [Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) -279 | [Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) -280 | [Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) -281 | [Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) -282 | [Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interleaving%20String.java) -283 | [Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) -284 | [Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) -285 | [Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) -286 | [Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) -287 | [Jump Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20II.java) -288 | [Jump Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20III.java) -289 | [Jump Game VI](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20VI.java) -290 | [Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) -291 | [K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Closest%20Points%20to%20Origin.java) -292 | [K Radius Subarray Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Radius%20Subarray%20Averages.java) -293 | [Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) -294 | [Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) -295 | [Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) -296 | [Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) -297 | [Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) -298 | [Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) -299 | [Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) -300 | [Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) -301 | [LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/LRU%20Cache.java) -302 | [Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) -303 | [Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) -304 | [Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) -305 | [Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Time%20for%20Given%20Digits.java) -306 | [Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) -307 | [Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) -308 | [Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) -309 | [Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) -310 | [Length of the Longest Alphabetical Continuous Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Length%20of%20the%20Longest%20Alphabetical%20Continuous%20Substring.java) -311 | [Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) -312 | [Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) -313 | [Lexicographical Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographical%20Numbers.java) -314 | [Lexicographically Smallest Equivalent String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20Equivalent%20String.java) -315 | [Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) -316 | [Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) -317 | [Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) -318 | [Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) -319 | [Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) -320 | [Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) -321 | [Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) -322 | [Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) -323 | [Longest Arithmetic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence.java) -324 | [Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) -325 | [Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) -326 | [Longest Happy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Happy%20String.java) -327 | [Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) -328 | [Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) -329 | [Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) -330 | [Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) -331 | [Longest String Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20String%20Chain.java) -332 | [Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) -333 | [Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) -334 | [Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) -335 | [Longest Uploaded Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Uploaded%20Prefix.java) -336 | [Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) -337 | [Longest Word With All Prefixes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20With%20All%20Prefixes.java) -338 | [Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) -339 | [Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) -340 | [Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) -341 | [Lowest Common Ancestor of a Binary Tree III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20III.java) -342 | [Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) -343 | [Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) -344 | [Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) -345 | [Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) -346 | [Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) -347 | [Matchsticks to Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Matchsticks%20to%20Square.java) -348 | [Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Area%20of%20Island.java) -349 | [Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) -350 | [Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) -351 | [Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) -352 | [Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) -353 | [Max Sum of a Pair With Equal Sum of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Sum%20of%20a%20Pair%20With%20Equal%20Sum%20of%20Digits.java) -354 | [Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) -355 | [Maximal Score After Applying K Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Score%20After%20Applying%20K%20Operations.java) -356 | [Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) -357 | [Maximize Number of Subsequences in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Number%20of%20Subsequences%20in%20a%20String.java) -358 | [Maximize the Topmost Element After K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Topmost%20Element%20After%20K%20Moves.java) -359 | [Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) -360 | [Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Area%20of%20a%20Piece%20of%20Cake%20After%20Horizontal%20and%20Vertical%20Cuts.java) -361 | [Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) -362 | [Maximum Bags With Full Capacity of Rocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Bags%20With%20Full%20Capacity%20of%20Rocks.java) -363 | [Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) -364 | [Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) -365 | [Maximum Consecutive Floors Without Special Floors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Consecutive%20Floors%20Without%20Special%20Floors.java) -366 | [Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) -367 | [Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) -368 | [Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) -369 | [Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) -370 | [Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) -371 | [Maximum Length of Repeated Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Repeated%20Subarray.java) -372 | [Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) -373 | [Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) -374 | [Maximum Matching of Players With Trainers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Matching%20of%20Players%20With%20Trainers.java) -375 | [Maximum Nesting Depth of Two Valid Parentheses Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Nesting%20Depth%20of%20Two%20Valid%20Parentheses%20Strings.java) -376 | [Maximum Number of Coins You Can Get](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Coins%20You%20Can%20Get.java) -377 | [Maximum Number of Events That Can Be Attended](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Events%20That%20Can%20Be%20Attended.java) -378 | [Maximum Number of Groups Entering a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Groups%20Entering%20a%20Competition.java) -379 | [Maximum Number of Integers to Choose From a Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I.java) -380 | [Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) -381 | [Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) -382 | [Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) -383 | [Maximum Points You Can Obtain from Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Points%20You%20Can%20Obtain%20from%20Cards.java) -384 | [Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) -385 | [Maximum Product of Splitted Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Splitted%20Binary%20Tree.java) -386 | [Maximum Product of Word Lengths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Word%20Lengths.java) -387 | [Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) -388 | [Maximum Score from Performing Multiplication Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20from%20Performing%20Multiplication%20Operations.java) -389 | [Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) -390 | [Maximum Star Sum of a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Star%20Sum%20of%20a%20Graph.java) -391 | [Maximum Sum of Distinct Subarrays With Length K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Distinct%20Subarrays%20With%20Length%20K.java) -392 | [Maximum Sum of an Hourglass](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20an%20Hourglass.java) -393 | [Maximum Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Swap.java) -394 | [Maximum Total Importance of Roads](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Total%20Importance%20of%20Roads.java) -395 | [Maximum Twin Sum of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Twin%20Sum%20of%20a%20Linked%20List.java) -396 | [Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) -397 | [Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) -398 | [Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) -399 | [Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) -400 | [Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) -401 | [Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) -402 | [Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) -403 | [Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) -404 | [Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) -405 | [Merge Nodes in Between Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Nodes%20in%20Between%20Zeros.java) -406 | [Min Cost to Connect All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Cost%20to%20Connect%20All%20Points.java) -407 | [Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Stack.java) -408 | [Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) -409 | [Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) -410 | [Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) -411 | [Minimize Product Sum of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Product%20Sum%20of%20Two%20Arrays.java) -412 | [Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) -413 | [Minimum Amount of Time to Collect Garbage](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Amount%20of%20Time%20to%20Collect%20Garbage.java) -414 | [Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) -415 | [Minimum Average Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Average%20Difference.java) -416 | [Minimum Consecutive Cards to Pick Up](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Consecutive%20Cards%20to%20Pick%20Up.java) -417 | [Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) -418 | [Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) -419 | [Minimum Deletions to Make Array Beautiful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Array%20Beautiful.java) -420 | [Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) -421 | [Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) -422 | [Minimum Falling Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Falling%20Path%20Sum.java) -423 | [Minimum Fuel Cost to Report to the Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Fuel%20Cost%20to%20Report%20to%20the%20Capital.java) -424 | [Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) -425 | [Minimum Health to Beat Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Health%20to%20Beat%20Game.java) -426 | [Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) -427 | [Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) -428 | [Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) -429 | [Minimum Moves to Equal Array Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements.java) -430 | [Minimum Moves to Reach Target Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Reach%20Target%20Score.java) -431 | [Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) -432 | [Minimum Number of Steps to Make Two Strings Anagram II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram%20II.java) -433 | [Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) -434 | [Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) -435 | [Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) -436 | [Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) -437 | [Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) -438 | [Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) -439 | [Minimum Rounds to Complete All Tasks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Rounds%20to%20Complete%20All%20Tasks.java) -440 | [Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) -441 | [Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) -442 | [Minimum Swaps to Group All 1's Together](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Swaps%20to%20Group%20All%201's%20Together.java) -443 | [Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) -444 | [Minimum Time to Collect All Apples in a Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Collect%20All%20Apples%20in%20a%20Tree.java) -445 | [Minimum Time to Complete Trips](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Complete%20Trips.java) -446 | [Minimum Time to Make Rope Colorful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Make%20Rope%20Colorful.java) -447 | [Mirror Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mirror%20Reflection.java) -448 | [Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) -449 | [Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) -450 | [Most Popular Video Creator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Popular%20Video%20Creator.java) -451 | [Most Profit Assigning Work](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Profit%20Assigning%20Work.java) -452 | [Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) -453 | [Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) -454 | [My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) -455 | [My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) -456 | [N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/N-ary%20Tree%20Level%20Order%20Traversal.java) -457 | [Nearest Exit from Entrance in Maze](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nearest%20Exit%20from%20Entrance%20in%20Maze.java) -458 | [Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) -459 | [Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) -460 | [Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) -461 | [Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) -462 | [Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) -463 | [Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) -464 | [Next Greater Numerically Balanced Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Numerically%20Balanced%20Number.java) -465 | [Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) -466 | [Node With Highest Edge Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Node%20With%20Highest%20Edge%20Score.java) -467 | [Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) -468 | [Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-decreasing%20Array.java) -469 | [Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) -470 | [Number of Closed Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Closed%20Islands.java) -471 | [Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) -472 | [Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) -473 | [Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) -474 | [Number of Distinct Substrings in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Substrings%20in%20a%20String.java) -475 | [Number of Enclaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Enclaves.java) -476 | [Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) -477 | [Number of Laser Beams in a Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Laser%20Beams%20in%20a%20Bank.java) -478 | [Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) -479 | [Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) -480 | [Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) -481 | [Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) -482 | [Number of Pairs of Interchangeable Rectangles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Interchangeable%20Rectangles.java) -483 | [Number of Pairs of Strings With Concatenation Equal to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target.java) -484 | [Number of Provinces](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Provinces.java) -485 | [Number of Smooth Descent Periods of a Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock.java) -486 | [Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) -487 | [Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) -488 | [Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) -489 | [Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) -490 | [Number of Ways to Split Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Ways%20to%20Split%20Array.java) -491 | [Number of Zero-Filled Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Zero-Filled%20Subarrays.java) -492 | [Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) -493 | [Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) -494 | [One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) -495 | [Ones and Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ones%20and%20Zeroes.java) -496 | [Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) -497 | [Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) -498 | [Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) -499 | [Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) -500 | [Optimal Partition of String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Partition%20of%20String.java) -501 | [Out of Boundary Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Out%20of%20Boundary%20Paths.java) -502 | [Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) -503 | [Pacific Atlantic Water Flow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pacific%20Atlantic%20Water%20Flow.java) -504 | [Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) -505 | [Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) -506 | [Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) -507 | [Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Parallel%20Courses.java) -508 | [Partition Array According to Given Pivot](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Array%20According%20to%20Given%20Pivot.java) -509 | [Partition Equal Subset Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Equal%20Subset%20Sum.java) -510 | [Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) -511 | [Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) -512 | [Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) -513 | [Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) -514 | [Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20III.java) -515 | [Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) -516 | [Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) -517 | [Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) -518 | [Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) -519 | [Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) -520 | [People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) -521 | [Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) -522 | [Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) -523 | [Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) -524 | [Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) -525 | [Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) -526 | [Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) -527 | [Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) -528 | [Possible Bipartition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Possible%20Bipartition.java) -529 | [Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) -530 | [Pow(x, n)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow(x,%20n).java) -531 | [Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) -532 | [Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) -533 | [Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) -534 | [Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) -535 | [Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) -536 | [Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) -537 | [Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) -538 | [Product of Two Run-Length Encoded Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Two%20Run-Length%20Encoded%20Arrays.java) -539 | [Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) -540 | [Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) -541 | [Push Dominoes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Push%20Dominoes.java) -542 | [Put Boxes Into the Warehouse I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Put%20Boxes%20Into%20the%20Warehouse%20I.java) -543 | [Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) -544 | [Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) -545 | [RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) -546 | [Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) -547 | [Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) -548 | [Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) -549 | [Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) -550 | [Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) -551 | [Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) -552 | [Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) -553 | [Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) -554 | [Reachable Nodes With Restrictions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reachable%20Nodes%20With%20Restrictions.java) -555 | [Rearrange Array Elements by Sign](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20Elements%20by%20Sign.java) -556 | [Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) -557 | [Recover Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Recover%20Binary%20Search%20Tree.java) -558 | [Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) -559 | [Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) -560 | [Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) -561 | [Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) -562 | [Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) -563 | [Remove All Ones With Row and Column Flips II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Ones%20With%20Row%20and%20Column%20Flips%20II.java) -564 | [Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) -565 | [Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) -566 | [Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) -567 | [Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) -568 | [Remove Duplicates From an Unsorted Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20an%20Unsorted%20Linked%20List.java) -569 | [Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) -570 | [Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) -571 | [Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) -572 | [Remove Nodes From Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nodes%20From%20Linked%20List.java) -573 | [Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) -574 | [Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) -575 | [Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) -576 | [Removing Stars From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Removing%20Stars%20From%20a%20String.java) -577 | [Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Data%20in%20Log%20Files.java) -578 | [Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) -579 | [Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) -580 | [Reordered Power of 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reordered%20Power%20of%202.java) -581 | [Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) -582 | [Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) -583 | [Replace Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Elements%20in%20an%20Array.java) -584 | [Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) -585 | [Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) -586 | [Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) -587 | [Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Integer.java) -588 | [Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) -589 | [Reverse Nodes in Even Length Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20Even%20Length%20Groups.java) -590 | [Reverse Odd Levels of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Odd%20Levels%20of%20Binary%20Tree.java) -591 | [Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) -592 | [Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) -593 | [Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) -594 | [Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) -595 | [Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) -596 | [Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) -597 | [Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) -598 | [Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) -599 | [Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotated%20Digits.java) -600 | [Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) -601 | [Satisfiability of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfiability%20of%20Equality%20Equations.java) -602 | [Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) -603 | [Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) -604 | [Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) -605 | [Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) -606 | [Search a 2D Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix%20II.java) -607 | [Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) -608 | [Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) -609 | [Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) -610 | [Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) -611 | [Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) -612 | [Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) -613 | [Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) -614 | [Sender With Largest Word Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sender%20With%20Largest%20Word%20Count.java) -615 | [Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) -616 | [Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) -617 | [Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) -618 | [Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) -619 | [Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) -620 | [Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) -621 | [Short Encoding of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Short%20Encoding%20of%20Words.java) -622 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) -623 | [Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) -624 | [Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) -625 | [Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Unsorted%20Continuous%20Subarray.java) -626 | [Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) -627 | [Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) -628 | [Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) -629 | [Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) -630 | [Simple Bank System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simple%20Bank%20System.java) -631 | [Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) -632 | [Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) -633 | [Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) -634 | [Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) -635 | [Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) -636 | [Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) -637 | [Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) -638 | [Smallest String With Swaps](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20Swaps.java) -639 | [Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) -640 | [Smallest Value of the Rearranged Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Value%20of%20the%20Rearranged%20Number.java) -641 | [Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) -642 | [Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) -643 | [Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) -644 | [Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) -645 | [Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) -646 | [Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) -647 | [Sort Integers by The Power Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Integers%20by%20The%20Power%20Value.java) -648 | [Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) -649 | [Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) -650 | [Sort the Jumbled Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Jumbled%20Numbers.java) -651 | [Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) -652 | [Sort the Students by Their Kth Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Students%20by%20Their%20Kth%20Score.java) -653 | [Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) -654 | [Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) -655 | [Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) -656 | [Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) -657 | [Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) -658 | [Split Linked List in Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20in%20Parts.java) -659 | [Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) -660 | [Step-By-Step Directions From a Binary Tree Node to Another](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Step-By-Step%20Directions%20From%20a%20Binary%20Tree%20Node%20to%20Another.java) -661 | [Stock Price Fluctuation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stock%20Price%20Fluctuation.java) -662 | [Strictly Palindromic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Strictly%20Palindromic%20Number.java) -663 | [String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20Compression.java) -664 | [String to Integer (atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer%20(atoi).java) -665 | [Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) -666 | [Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) -667 | [Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) -668 | [Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subdomain%20Visit%20Count.java) -669 | [Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) -670 | [Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) -671 | [Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) -672 | [Successful Pairs of Spells and Potions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Successful%20Pairs%20of%20Spells%20and%20Potions.java) -673 | [Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) -674 | [Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) -675 | [Sum of Beauty of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Beauty%20of%20All%20Substrings.java) -676 | [Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Even%20Numbers%20After%20Queries.java) -677 | [Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) -678 | [Sum of Numbers With Units Digit K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Numbers%20With%20Units%20Digit%20K.java) -679 | [Sum of Subarray Minimums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Subarray%20Minimums.java) -680 | [Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) -681 | [Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) -682 | [Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) -683 | [Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) -684 | [Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) -685 | [Synonymous Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Synonymous%20Sentences.java) -686 | [Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) -687 | [Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) -688 | [Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) -689 | [The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) -690 | [The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) -691 | [The Number of Weak Characters in the Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Weak%20Characters%20in%20the%20Game.java) -692 | [The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) -693 | [The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) -694 | [Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) -695 | [Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) -696 | [Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) -697 | [Time Needed to Rearrange a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Rearrange%20a%20Binary%20String.java) -698 | [Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) -699 | [Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) -700 | [Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) -701 | [Tree Diameter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tree%20Diameter.java) -702 | [Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Triangle.java) -703 | [Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) -704 | [Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) -705 | [Tweet Counts Per Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tweet%20Counts%20Per%20Frequency.java) -706 | [Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20City%20Scheduling.java) -707 | [Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) -708 | [Two Sum II - Input Array Is Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20II%20-%20Input%20Array%20Is%20Sorted.java) -709 | [UTF-8 Validation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/UTF-8%20Validation.java) -710 | [Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) -711 | [Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) -712 | [Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) -713 | [Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) -714 | [Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) -715 | [Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) -716 | [Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) -717 | [Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) -718 | [Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) -719 | [Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) -720 | [Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) -721 | [Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) -722 | [Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) -723 | [Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) -724 | [Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) -725 | [Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) -726 | [Vowels of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowels%20of%20All%20Substrings.java) -727 | [Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) -728 | [Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) -729 | [Watering Plants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Watering%20Plants.java) -730 | [Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) -731 | [Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) -732 | [Wiggle Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Subsequence.java) -733 | [Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) -734 | [Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) -735 | [Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) -736 | [Word Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Subsets.java) -737 | [ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) -738 | [Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) +229 | [Find the Index of the First Occurrence in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20First%20Occurrence%20in%20a%20String.java) +230 | [Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) +231 | [Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) +232 | [Find the Minimum and Maximum Number of Nodes Between Critical Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Minimum%20and%20Maximum%20Number%20of%20Nodes%20Between%20Critical%20Points.java) +233 | [Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) +234 | [Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) +235 | [Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) +236 | [First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) +237 | [Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) +238 | [Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) +239 | [Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) +240 | [Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) +241 | [Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) +242 | [Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) +243 | [Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) +244 | [Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) +245 | [Friends Of Appropriate Ages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friends%20Of%20Appropriate%20Ages.java) +246 | [Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) +247 | [Furthest Building You Can Reach](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Furthest%20Building%20You%20Can%20Reach.java) +248 | [Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) +249 | [Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) +250 | [Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) +251 | [Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) +252 | [Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) +253 | [Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) +254 | [Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) +255 | [Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) +256 | [Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) +257 | [Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) +258 | [H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) +259 | [H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) +260 | [HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) +261 | [Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) +262 | [House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) +263 | [House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) +264 | [House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber.java) +265 | [Image Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Image%20Overlap.java) +266 | [Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) +267 | [Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) +268 | [Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) +269 | [Implement Trie II (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20II%20(Prefix%20Tree).java) +270 | [Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) +271 | [Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) +272 | [Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) +273 | [Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) +274 | [Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) +275 | [Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) +276 | [Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Interval.java) +277 | [Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) +278 | [Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) +279 | [Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) +280 | [Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) +281 | [Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) +282 | [Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) +283 | [Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interleaving%20String.java) +284 | [Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) +285 | [Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) +286 | [Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) +287 | [Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) +288 | [Jump Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20II.java) +289 | [Jump Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20III.java) +290 | [Jump Game VI](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20VI.java) +291 | [Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) +292 | [K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Closest%20Points%20to%20Origin.java) +293 | [K Radius Subarray Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Radius%20Subarray%20Averages.java) +294 | [Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) +295 | [Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) +296 | [Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) +297 | [Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) +298 | [Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) +299 | [Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) +300 | [Kth Largest Sum in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Sum%20in%20a%20Binary%20Tree.java) +301 | [Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) +302 | [Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) +303 | [LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/LRU%20Cache.java) +304 | [Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) +305 | [Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) +306 | [Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) +307 | [Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Time%20for%20Given%20Digits.java) +308 | [Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) +309 | [Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) +310 | [Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) +311 | [Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) +312 | [Length of the Longest Alphabetical Continuous Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Length%20of%20the%20Longest%20Alphabetical%20Continuous%20Substring.java) +313 | [Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) +314 | [Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) +315 | [Lexicographical Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographical%20Numbers.java) +316 | [Lexicographically Smallest Equivalent String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20Equivalent%20String.java) +317 | [Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) +318 | [Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) +319 | [Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) +320 | [Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) +321 | [Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) +322 | [Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) +323 | [Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) +324 | [Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) +325 | [Longest Arithmetic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence.java) +326 | [Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) +327 | [Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) +328 | [Longest Happy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Happy%20String.java) +329 | [Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) +330 | [Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) +331 | [Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) +332 | [Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) +333 | [Longest String Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20String%20Chain.java) +334 | [Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) +335 | [Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) +336 | [Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) +337 | [Longest Uploaded Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Uploaded%20Prefix.java) +338 | [Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) +339 | [Longest Word With All Prefixes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20With%20All%20Prefixes.java) +340 | [Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) +341 | [Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) +342 | [Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) +343 | [Lowest Common Ancestor of a Binary Tree III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20III.java) +344 | [Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) +345 | [Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) +346 | [Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) +347 | [Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) +348 | [Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) +349 | [Matchsticks to Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Matchsticks%20to%20Square.java) +350 | [Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Area%20of%20Island.java) +351 | [Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) +352 | [Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) +353 | [Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) +354 | [Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) +355 | [Max Sum of a Pair With Equal Sum of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Sum%20of%20a%20Pair%20With%20Equal%20Sum%20of%20Digits.java) +356 | [Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) +357 | [Maximal Score After Applying K Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Score%20After%20Applying%20K%20Operations.java) +358 | [Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) +359 | [Maximize Number of Subsequences in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Number%20of%20Subsequences%20in%20a%20String.java) +360 | [Maximize the Topmost Element After K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Topmost%20Element%20After%20K%20Moves.java) +361 | [Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) +362 | [Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Area%20of%20a%20Piece%20of%20Cake%20After%20Horizontal%20and%20Vertical%20Cuts.java) +363 | [Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) +364 | [Maximum Bags With Full Capacity of Rocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Bags%20With%20Full%20Capacity%20of%20Rocks.java) +365 | [Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) +366 | [Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) +367 | [Maximum Consecutive Floors Without Special Floors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Consecutive%20Floors%20Without%20Special%20Floors.java) +368 | [Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) +369 | [Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) +370 | [Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) +371 | [Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) +372 | [Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) +373 | [Maximum Length of Repeated Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Repeated%20Subarray.java) +374 | [Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) +375 | [Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) +376 | [Maximum Matching of Players With Trainers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Matching%20of%20Players%20With%20Trainers.java) +377 | [Maximum Nesting Depth of Two Valid Parentheses Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Nesting%20Depth%20of%20Two%20Valid%20Parentheses%20Strings.java) +378 | [Maximum Number of Coins You Can Get](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Coins%20You%20Can%20Get.java) +379 | [Maximum Number of Events That Can Be Attended](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Events%20That%20Can%20Be%20Attended.java) +380 | [Maximum Number of Groups Entering a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Groups%20Entering%20a%20Competition.java) +381 | [Maximum Number of Integers to Choose From a Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I.java) +382 | [Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) +383 | [Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) +384 | [Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) +385 | [Maximum Points You Can Obtain from Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Points%20You%20Can%20Obtain%20from%20Cards.java) +386 | [Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) +387 | [Maximum Product of Splitted Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Splitted%20Binary%20Tree.java) +388 | [Maximum Product of Word Lengths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Word%20Lengths.java) +389 | [Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) +390 | [Maximum Score from Performing Multiplication Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20from%20Performing%20Multiplication%20Operations.java) +391 | [Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) +392 | [Maximum Star Sum of a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Star%20Sum%20of%20a%20Graph.java) +393 | [Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Subarray.java) +394 | [Maximum Sum of Distinct Subarrays With Length K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Distinct%20Subarrays%20With%20Length%20K.java) +395 | [Maximum Sum of an Hourglass](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20an%20Hourglass.java) +396 | [Maximum Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Swap.java) +397 | [Maximum Total Importance of Roads](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Total%20Importance%20of%20Roads.java) +398 | [Maximum Twin Sum of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Twin%20Sum%20of%20a%20Linked%20List.java) +399 | [Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) +400 | [Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) +401 | [Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) +402 | [Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) +403 | [Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) +404 | [Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) +405 | [Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) +406 | [Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) +407 | [Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) +408 | [Merge Nodes in Between Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Nodes%20in%20Between%20Zeros.java) +409 | [Min Cost to Connect All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Cost%20to%20Connect%20All%20Points.java) +410 | [Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Stack.java) +411 | [Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) +412 | [Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) +413 | [Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) +414 | [Minimize Product Sum of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Product%20Sum%20of%20Two%20Arrays.java) +415 | [Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) +416 | [Minimum Amount of Time to Collect Garbage](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Amount%20of%20Time%20to%20Collect%20Garbage.java) +417 | [Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) +418 | [Minimum Average Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Average%20Difference.java) +419 | [Minimum Consecutive Cards to Pick Up](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Consecutive%20Cards%20to%20Pick%20Up.java) +420 | [Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) +421 | [Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) +422 | [Minimum Deletions to Make Array Beautiful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Array%20Beautiful.java) +423 | [Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) +424 | [Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) +425 | [Minimum Falling Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Falling%20Path%20Sum.java) +426 | [Minimum Fuel Cost to Report to the Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Fuel%20Cost%20to%20Report%20to%20the%20Capital.java) +427 | [Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) +428 | [Minimum Health to Beat Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Health%20to%20Beat%20Game.java) +429 | [Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) +430 | [Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) +431 | [Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) +432 | [Minimum Moves to Equal Array Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements.java) +433 | [Minimum Moves to Reach Target Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Reach%20Target%20Score.java) +434 | [Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) +435 | [Minimum Number of Steps to Make Two Strings Anagram II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram%20II.java) +436 | [Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) +437 | [Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) +438 | [Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) +439 | [Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) +440 | [Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) +441 | [Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) +442 | [Minimum Rounds to Complete All Tasks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Rounds%20to%20Complete%20All%20Tasks.java) +443 | [Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) +444 | [Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) +445 | [Minimum Swaps to Group All 1's Together](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Swaps%20to%20Group%20All%201's%20Together.java) +446 | [Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) +447 | [Minimum Time to Collect All Apples in a Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Collect%20All%20Apples%20in%20a%20Tree.java) +448 | [Minimum Time to Complete Trips](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Complete%20Trips.java) +449 | [Minimum Time to Make Rope Colorful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Make%20Rope%20Colorful.java) +450 | [Mirror Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mirror%20Reflection.java) +451 | [Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) +452 | [Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) +453 | [Most Popular Video Creator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Popular%20Video%20Creator.java) +454 | [Most Profit Assigning Work](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Profit%20Assigning%20Work.java) +455 | [Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) +456 | [Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) +457 | [My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) +458 | [My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) +459 | [N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/N-ary%20Tree%20Level%20Order%20Traversal.java) +460 | [Nearest Exit from Entrance in Maze](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nearest%20Exit%20from%20Entrance%20in%20Maze.java) +461 | [Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) +462 | [Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) +463 | [Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) +464 | [Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) +465 | [Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) +466 | [Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) +467 | [Next Greater Numerically Balanced Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Numerically%20Balanced%20Number.java) +468 | [Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) +469 | [Node With Highest Edge Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Node%20With%20Highest%20Edge%20Score.java) +470 | [Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) +471 | [Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-decreasing%20Array.java) +472 | [Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) +473 | [Number of Closed Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Closed%20Islands.java) +474 | [Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) +475 | [Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) +476 | [Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) +477 | [Number of Distinct Substrings in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Substrings%20in%20a%20String.java) +478 | [Number of Enclaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Enclaves.java) +479 | [Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) +480 | [Number of Laser Beams in a Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Laser%20Beams%20in%20a%20Bank.java) +481 | [Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) +482 | [Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) +483 | [Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) +484 | [Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) +485 | [Number of Pairs of Interchangeable Rectangles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Interchangeable%20Rectangles.java) +486 | [Number of Pairs of Strings With Concatenation Equal to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target.java) +487 | [Number of Provinces](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Provinces.java) +488 | [Number of Smooth Descent Periods of a Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock.java) +489 | [Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) +490 | [Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) +491 | [Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) +492 | [Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) +493 | [Number of Ways to Split Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Ways%20to%20Split%20Array.java) +494 | [Number of Zero-Filled Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Zero-Filled%20Subarrays.java) +495 | [Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) +496 | [Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) +497 | [One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) +498 | [Ones and Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ones%20and%20Zeroes.java) +499 | [Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) +500 | [Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) +501 | [Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) +502 | [Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) +503 | [Optimal Partition of String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Partition%20of%20String.java) +504 | [Out of Boundary Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Out%20of%20Boundary%20Paths.java) +505 | [Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) +506 | [Pacific Atlantic Water Flow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pacific%20Atlantic%20Water%20Flow.java) +507 | [Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) +508 | [Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) +509 | [Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) +510 | [Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Parallel%20Courses.java) +511 | [Partition Array According to Given Pivot](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Array%20According%20to%20Given%20Pivot.java) +512 | [Partition Equal Subset Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Equal%20Subset%20Sum.java) +513 | [Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) +514 | [Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) +515 | [Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) +516 | [Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) +517 | [Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20III.java) +518 | [Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) +519 | [Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) +520 | [Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) +521 | [Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) +522 | [Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) +523 | [People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) +524 | [Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) +525 | [Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) +526 | [Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) +527 | [Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) +528 | [Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) +529 | [Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) +530 | [Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) +531 | [Possible Bipartition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Possible%20Bipartition.java) +532 | [Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) +533 | [Pow(x, n)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow(x,%20n).java) +534 | [Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) +535 | [Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) +536 | [Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) +537 | [Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) +538 | [Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) +539 | [Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) +540 | [Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) +541 | [Product of Two Run-Length Encoded Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Two%20Run-Length%20Encoded%20Arrays.java) +542 | [Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) +543 | [Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) +544 | [Push Dominoes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Push%20Dominoes.java) +545 | [Put Boxes Into the Warehouse I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Put%20Boxes%20Into%20the%20Warehouse%20I.java) +546 | [Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) +547 | [Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) +548 | [RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) +549 | [Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) +550 | [Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) +551 | [Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) +552 | [Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) +553 | [Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) +554 | [Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) +555 | [Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) +556 | [Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) +557 | [Reachable Nodes With Restrictions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reachable%20Nodes%20With%20Restrictions.java) +558 | [Rearrange Array Elements by Sign](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20Elements%20by%20Sign.java) +559 | [Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) +560 | [Recover Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Recover%20Binary%20Search%20Tree.java) +561 | [Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) +562 | [Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) +563 | [Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) +564 | [Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) +565 | [Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) +566 | [Remove All Ones With Row and Column Flips II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Ones%20With%20Row%20and%20Column%20Flips%20II.java) +567 | [Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) +568 | [Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) +569 | [Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) +570 | [Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) +571 | [Remove Duplicates From an Unsorted Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20an%20Unsorted%20Linked%20List.java) +572 | [Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) +573 | [Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) +574 | [Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) +575 | [Remove Nodes From Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nodes%20From%20Linked%20List.java) +576 | [Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) +577 | [Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) +578 | [Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) +579 | [Removing Stars From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Removing%20Stars%20From%20a%20String.java) +580 | [Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Data%20in%20Log%20Files.java) +581 | [Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) +582 | [Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) +583 | [Reordered Power of 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reordered%20Power%20of%202.java) +584 | [Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) +585 | [Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) +586 | [Replace Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Elements%20in%20an%20Array.java) +587 | [Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) +588 | [Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) +589 | [Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) +590 | [Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Integer.java) +591 | [Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) +592 | [Reverse Nodes in Even Length Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20Even%20Length%20Groups.java) +593 | [Reverse Odd Levels of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Odd%20Levels%20of%20Binary%20Tree.java) +594 | [Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) +595 | [Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) +596 | [Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) +597 | [Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) +598 | [Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) +599 | [Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) +600 | [Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) +601 | [Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) +602 | [Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotated%20Digits.java) +603 | [Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) +604 | [Satisfiability of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfiability%20of%20Equality%20Equations.java) +605 | [Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) +606 | [Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) +607 | [Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) +608 | [Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) +609 | [Search a 2D Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix%20II.java) +610 | [Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) +611 | [Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) +612 | [Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) +613 | [Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) +614 | [Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) +615 | [Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) +616 | [Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) +617 | [Sender With Largest Word Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sender%20With%20Largest%20Word%20Count.java) +618 | [Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) +619 | [Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) +620 | [Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) +621 | [Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) +622 | [Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) +623 | [Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) +624 | [Short Encoding of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Short%20Encoding%20of%20Words.java) +625 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) +626 | [Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) +627 | [Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) +628 | [Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Unsorted%20Continuous%20Subarray.java) +629 | [Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) +630 | [Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) +631 | [Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) +632 | [Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) +633 | [Simple Bank System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simple%20Bank%20System.java) +634 | [Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) +635 | [Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) +636 | [Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) +637 | [Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) +638 | [Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) +639 | [Smallest Number in Infinite Set](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Number%20in%20Infinite%20Set.java) +640 | [Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) +641 | [Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) +642 | [Smallest String With Swaps](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20Swaps.java) +643 | [Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) +644 | [Smallest Value of the Rearranged Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Value%20of%20the%20Rearranged%20Number.java) +645 | [Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) +646 | [Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) +647 | [Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) +648 | [Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) +649 | [Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) +650 | [Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) +651 | [Sort Integers by The Power Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Integers%20by%20The%20Power%20Value.java) +652 | [Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) +653 | [Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) +654 | [Sort the Jumbled Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Jumbled%20Numbers.java) +655 | [Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) +656 | [Sort the Students by Their Kth Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Students%20by%20Their%20Kth%20Score.java) +657 | [Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) +658 | [Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) +659 | [Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) +660 | [Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) +661 | [Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) +662 | [Split Linked List in Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20in%20Parts.java) +663 | [Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) +664 | [Step-By-Step Directions From a Binary Tree Node to Another](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Step-By-Step%20Directions%20From%20a%20Binary%20Tree%20Node%20to%20Another.java) +665 | [Stock Price Fluctuation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stock%20Price%20Fluctuation.java) +666 | [Strictly Palindromic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Strictly%20Palindromic%20Number.java) +667 | [String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20Compression.java) +668 | [String to Integer (atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer%20(atoi).java) +669 | [Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) +670 | [Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) +671 | [Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) +672 | [Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subdomain%20Visit%20Count.java) +673 | [Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) +674 | [Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) +675 | [Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) +676 | [Successful Pairs of Spells and Potions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Successful%20Pairs%20of%20Spells%20and%20Potions.java) +677 | [Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) +678 | [Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) +679 | [Sum of Beauty of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Beauty%20of%20All%20Substrings.java) +680 | [Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Even%20Numbers%20After%20Queries.java) +681 | [Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) +682 | [Sum of Numbers With Units Digit K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Numbers%20With%20Units%20Digit%20K.java) +683 | [Sum of Subarray Minimums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Subarray%20Minimums.java) +684 | [Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) +685 | [Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) +686 | [Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) +687 | [Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) +688 | [Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) +689 | [Synonymous Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Synonymous%20Sentences.java) +690 | [Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) +691 | [Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) +692 | [Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) +693 | [The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) +694 | [The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) +695 | [The Number of Weak Characters in the Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Weak%20Characters%20in%20the%20Game.java) +696 | [The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) +697 | [The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) +698 | [Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) +699 | [Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) +700 | [Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) +701 | [Time Needed to Rearrange a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Rearrange%20a%20Binary%20String.java) +702 | [Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) +703 | [Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) +704 | [Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) +705 | [Tree Diameter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tree%20Diameter.java) +706 | [Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Triangle.java) +707 | [Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) +708 | [Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) +709 | [Tweet Counts Per Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tweet%20Counts%20Per%20Frequency.java) +710 | [Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20City%20Scheduling.java) +711 | [Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) +712 | [Two Sum II - Input Array Is Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20II%20-%20Input%20Array%20Is%20Sorted.java) +713 | [UTF-8 Validation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/UTF-8%20Validation.java) +714 | [Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) +715 | [Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) +716 | [Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) +717 | [Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) +718 | [Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) +719 | [Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) +720 | [Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) +721 | [Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) +722 | [Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) +723 | [Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) +724 | [Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) +725 | [Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) +726 | [Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) +727 | [Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) +728 | [Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) +729 | [Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) +730 | [Vowels of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowels%20of%20All%20Substrings.java) +731 | [Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) +732 | [Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) +733 | [Watering Plants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Watering%20Plants.java) +734 | [Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) +735 | [Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) +736 | [Wiggle Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Subsequence.java) +737 | [Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) +738 | [Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) +739 | [Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) +740 | [Word Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Subsets.java) +741 | [ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) +742 | [Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) From 4897731a79532937c7eb2b7dfdd580fc68330387 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 13 Mar 2023 09:39:10 -0700 Subject: [PATCH 1042/1640] Added Rearrange Array to Maximize Prefix Score.java --- .../Rearrange Array to Maximize Prefix Score.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Rearrange Array to Maximize Prefix Score.java diff --git a/Medium/Rearrange Array to Maximize Prefix Score.java b/Medium/Rearrange Array to Maximize Prefix Score.java new file mode 100644 index 00000000..6f52eda8 --- /dev/null +++ b/Medium/Rearrange Array to Maximize Prefix Score.java @@ -0,0 +1,15 @@ +class Solution { + public int maxScore(int[] nums) { + Arrays.sort(nums); + long currPrefixSum = 0; + int prefixScore = 0; + for (int i = nums.length - 1; i >= 0; i--) { + currPrefixSum += nums[i]; + if (currPrefixSum <= 0) { + break; + } + prefixScore++; + } + return prefixScore; + } +} From 463b06fa93ad0b6830fc0f3f1953109d3318cc08 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 Mar 2023 17:13:53 -0700 Subject: [PATCH 1043/1640] Update Sum Root to Leaf Numbers.java --- Medium/Sum Root to Leaf Numbers.java | 41 ++++++++++++++++------------ 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/Medium/Sum Root to Leaf Numbers.java b/Medium/Sum Root to Leaf Numbers.java index 63179830..0cad0868 100644 --- a/Medium/Sum Root to Leaf Numbers.java +++ b/Medium/Sum Root to Leaf Numbers.java @@ -14,22 +14,29 @@ * } */ class Solution { - public int sumNumbers(TreeNode root) { - int[] sum = {0}; - helper(root, 0, sum); - return sum[0]; - } - - private void helper(TreeNode root, int currValue, int[] sum) { - if (root == null) { - return; + public int sumNumbers(TreeNode root) { + if (root == null) { + return 0; + } + Queue queue = new LinkedList<>(); + queue.add(new NodeSumPair(root, 0)); + int totalSum = 0; + while (!queue.isEmpty()) { + NodeSumPair removed = queue.remove(); + TreeNode node = removed.node; + int currSum = removed.sum * 10 + node.val; + if (node.left == null && node.right == null) { + totalSum += currSum; + } + if (node.left != null) { + queue.add(new NodeSumPair(node.left, currSum)); + } + if (node.right != null) { + queue.add(new NodeSumPair(node.right, currSum)); + } + } + return totalSum; } - currValue = currValue * 10 + root.val; - if (root.left == null && root.right == null) { - sum[0] += currValue; - return; - } - helper(root.left, currValue, sum); - helper(root.right, currValue, sum); - } + + private static record NodeSumPair(TreeNode node, int sum) {} } From 6d9400d4e209d87775410b4180f8f13337f0a150 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 15 Mar 2023 07:15:25 -0700 Subject: [PATCH 1044/1640] Updated Check Completeness of a Binary Tree --- .../Check Completeness of a Binary Tree.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/Medium/Check Completeness of a Binary Tree.java b/Medium/Check Completeness of a Binary Tree.java index 30ee5adb..2d0c94f0 100644 --- a/Medium/Check Completeness of a Binary Tree.java +++ b/Medium/Check Completeness of a Binary Tree.java @@ -14,22 +14,23 @@ * } */ class Solution { - public boolean isCompleteTree(TreeNode root) { - Queue queue = new LinkedList<>(); - queue.add(root); - boolean end = false; - while (!queue.isEmpty()) { - TreeNode removed = queue.poll(); - if (removed == null) { - end = true; - } else { - if (end) { - return false; + public boolean isCompleteTree(TreeNode root) { + Queue queue = new LinkedList<>(); + boolean isEnd = false; + queue.add(root); + while (!queue.isEmpty()) { + TreeNode removed = queue.remove(); + if (removed == null) { + isEnd = true; + } + if (removed != null) { + if (isEnd) { + return false; + } + queue.add(removed.left); + queue.add(removed.right); + } } - queue.add(removed.left); - queue.add(removed.right); - } + return true; } - return true; - } } From b01c0ce5201c34b5c7d1d807be6ab26a9d23c4cc Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 15 Mar 2023 07:29:10 -0700 Subject: [PATCH 1045/1640] Updated Clone Binary Tree With Random Pointer --- ...Clone Binary Tree With Random Pointer.java | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/Medium/Clone Binary Tree With Random Pointer.java b/Medium/Clone Binary Tree With Random Pointer.java index 323b1b6e..cf43c71a 100644 --- a/Medium/Clone Binary Tree With Random Pointer.java +++ b/Medium/Clone Binary Tree With Random Pointer.java @@ -17,44 +17,43 @@ */ class Solution { - public NodeCopy copyRandomBinaryTree(Node root) { - if (root == null) { - return null; - } - Queue queue = new LinkedList<>(); - Map map = new HashMap<>(); - queue.add(root); - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - Node removed = queue.remove(); - map.put(removed, new NodeCopy(removed.val)); - if (removed.left != null) { - queue.add(removed.left); - } - if (removed.right != null) { - queue.add(removed.right); + public NodeCopy copyRandomBinaryTree(Node root) { + if (root == null) { + return null; } - } + Map map = new HashMap<>(); + copyOnlyNode(root, map); + copyNodePointers(root, map); + return map.get(root); } - queue.add(root); - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - Node removed = queue.remove(); - if (removed.left != null) { - queue.add(removed.left); - map.get(removed).left = map.get(removed.left); + + private void copyNodePointers(Node root, Map map) { + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + Node removed = queue.remove(); + NodeCopy copied = map.get(removed); + if (removed.left != null) { + queue.add(removed.left); + copied.left = map.get(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + copied.right = map.get(removed.right); + } + if (removed.random != null) { + copied.random = map.get(removed.random); + } } - if (removed.right != null) { - queue.add(removed.right); - map.get(removed).right = map.get(removed.right); - } - if (removed.random != null) { - map.get(removed).random = map.get(removed.random); + } + + private void copyOnlyNode(Node root, Map map) { + if (root == null) { + return; } - } + NodeCopy copiedNode = new NodeCopy(root.val); + map.put(root, copiedNode); + copyOnlyNode(root.left, map); + copyOnlyNode(root.right, map); } - return map.get(root); - } } From a0c9a40f466a65624dc80dc3e1b38d2c86444587 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 16 Mar 2023 19:56:58 -0700 Subject: [PATCH 1046/1640] Updated Implement Trie (Prefix Tree) --- Medium/Implement Trie (Prefix Tree).java | 101 ++++++++++++----------- 1 file changed, 53 insertions(+), 48 deletions(-) diff --git a/Medium/Implement Trie (Prefix Tree).java b/Medium/Implement Trie (Prefix Tree).java index 8df3049a..353634fd 100644 --- a/Medium/Implement Trie (Prefix Tree).java +++ b/Medium/Implement Trie (Prefix Tree).java @@ -1,56 +1,61 @@ +import java.util.Optional; + class Trie { - - private TrieNode root; - - public Trie() { - this.root = new TrieNode(); - } - - public void insert(String word) { - TrieNode curr = root; - for (char c : word.toCharArray()) { - if (!curr.children.containsKey(c)) { - curr.children.put(c, new TrieNode()); - } - curr = curr.children.get(c); + + private final TrieNode root; + + public Trie() { + root = new TrieNode(); } - curr.isWord = true; - } - - public boolean search(String word) { - TrieNode searchNode = searchHelper(word); - return searchNode != null && searchNode.isWord; - } - - public boolean startsWith(String prefix) { - return searchHelper(prefix) != null; - } - - private TrieNode searchHelper(String s) { - TrieNode curr = root; - for (char c : s.toCharArray()) { - if (!curr.children.containsKey(c)) { - return null; - } - curr = curr.children.get(c); + + public void insert(String word) { + TrieNode curr = root; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + curr.children.put(c, new TrieNode()); + } + curr = curr.children.get(c); + } + curr.isWord = true; + } + + public boolean search(String word) { + Optional node = searchHelper(word); + return node.isPresent() && node.get().isWord; + } + + public boolean startsWith(String prefix) { + Optional node = searchHelper(prefix); + return node.isPresent(); } - return curr; - } - - private class TrieNode { - Map children; - boolean isWord; - public TrieNode() { - this.children = new HashMap<>(); + public Optional searchHelper(String word) { + TrieNode curr = root; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + return Optional.empty(); + } + curr = curr.children.get(c); + } + return Optional.of(curr); + } + + private static class TrieNode { + + private final Map children; + private boolean isWord; + + private TrieNode() { + this.children = new HashMap<>(); + this.isWord = false; + } } - } } /** -* Your Trie object will be instantiated and called as such: -* Trie obj = new Trie(); -* obj.insert(word); -* boolean param_2 = obj.search(word); -* boolean param_3 = obj.startsWith(prefix); -*/ + * Your Trie object will be instantiated and called as such: + * Trie obj = new Trie(); + * obj.insert(word); + * boolean param_2 = obj.search(word); + * boolean param_3 = obj.startsWith(prefix); + */ From 9a1d2396465c3dc985c3859bb09f17bc8113aa48 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 18 Mar 2023 07:51:51 -0700 Subject: [PATCH 1047/1640] Updated Design Browser History --- Medium/Design Browser History.java | 50 +++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/Medium/Design Browser History.java b/Medium/Design Browser History.java index 8aa9f71f..63799e9d 100644 --- a/Medium/Design Browser History.java +++ b/Medium/Design Browser History.java @@ -1,32 +1,32 @@ class BrowserHistory { + + private final Stack history; + private final Stack future; - private Stack history; - private Stack future; - - public BrowserHistory(String homepage) { - this.history = new Stack<>(); - this.history.push(homepage); - this.future = new Stack<>(); - } - - public void visit(String url) { - this.future.removeAllElements(); - this.history.push(url); - } - - public String back(int steps) { - while (steps-- > 0 && this.history.size() > 1) { - this.future.push(this.history.pop()); + public BrowserHistory(String homepage) { + this.history = new Stack<>(); + this.future = new Stack<>(); + this.history.push(homepage); } - return this.history.peek(); - } - - public String forward(int steps) { - while (steps-- > 0 && !this.future.isEmpty()) { - this.history.push(this.future.pop()); + + public void visit(String url) { + future.removeAllElements(); + history.push(url); + } + + public String back(int steps) { + while (steps-- > 0 && history.size() > 1) { + future.push(history.pop()); + } + return history.peek(); + } + + public String forward(int steps) { + while (steps-- > 0 && !future.isEmpty()) { + history.push(future.pop()); + } + return history.peek(); } - return this.history.peek(); - } } /** From f3c457c2327a18ae71d84d0f21e14ab2aa2f13b0 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 18 Mar 2023 18:16:35 -0700 Subject: [PATCH 1048/1640] Updated Design Add and Search Words Data Structure --- ...n Add and Search Words Data Structure.java | 87 +++++++++---------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/Medium/Design Add and Search Words Data Structure.java b/Medium/Design Add and Search Words Data Structure.java index 45fc78fd..17814eb0 100644 --- a/Medium/Design Add and Search Words Data Structure.java +++ b/Medium/Design Add and Search Words Data Structure.java @@ -1,54 +1,53 @@ class WordDictionary { - - private Node root; - - public WordDictionary() { - this.root = new Node(); - } - - public void addWord(String word) { - Node curr = root; - for (char c : word.toCharArray()) { - if (curr.children[c - 'a'] == null) { - curr.children[c - 'a'] = new Node(); - } - curr = curr.children[c - 'a']; + + private final TrieNode root; + + public WordDictionary() { + this.root = new TrieNode(); } - curr.isWord = true; - } - - public boolean search(String word) { - Node curr = root; - return searchHelper(word, 0, curr); - } - - private boolean searchHelper(String word, int idx, Node curr) { - if (idx == word.length()) { - return curr.isWord; + + public void addWord(String word) { + TrieNode curr = root; + for (char c : word.toCharArray()) { + if (!curr.children.containsKey(c)) { + curr.children.put(c, new TrieNode()); + } + curr = curr.children.get(c); + } + curr.isWord = true; } - if (word.charAt(idx) != '.' && curr.children[word.charAt(idx) - 'a'] == null) { - return false; + + public boolean search(String word) { + return searchHelper(word, 0, root); } - if (word.charAt(idx) == '.') { - for (Node child : curr.children) { - if (child != null && searchHelper(word, idx + 1, child)) { - return true; + + private boolean searchHelper(String word, int idx, TrieNode node) { + if (idx == word.length()) { + return node.isWord; } - } - return false; + if (node.children.containsKey(word.charAt(idx))) { + return searchHelper(word, idx + 1, node.children.get(word.charAt(idx))); + } + if (word.charAt(idx) == '.') { + for (TrieNode child : node.children.values()) { + if (searchHelper(word, idx + 1, child)) { + return true; + } + } + } + return false; } - return searchHelper(word, idx + 1, curr.children[word.charAt(idx) - 'a']); - } - - private static class Node { - Node[] children; - boolean isWord; - - public Node() { - this.children = new Node[26]; - this.isWord = false; + + + static class TrieNode { + private final Map children; + private boolean isWord; + + public TrieNode() { + this.children = new HashMap<>(); + this.isWord = false; + } } - } } /** From 46b64faeb7fff2af2a3289934efbe1e82dee295b Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 19 Mar 2023 09:28:23 -0700 Subject: [PATCH 1049/1640] Added Distribute Money to Maximum Children.java --- Easy/Distribute Money to Maximum Children.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Distribute Money to Maximum Children.java diff --git a/Easy/Distribute Money to Maximum Children.java b/Easy/Distribute Money to Maximum Children.java new file mode 100644 index 00000000..06dd063f --- /dev/null +++ b/Easy/Distribute Money to Maximum Children.java @@ -0,0 +1,15 @@ +class Solution { + public int distMoney(int money, int children) { + money -= children; + if (money < 0) { + return -1; + } + if (money / 7 == children && money % 7 == 0) { + return children; + } + if (money / 7 == children - 1 && money % 7 == 3) { + return children - 2; + } + return Math.min(children - 1, money / 7); + } +} From a06b0d228c3383537c9367b3641f0115fc82e66d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 19 Mar 2023 17:26:33 -0700 Subject: [PATCH 1050/1640] Updated Can Place Flowers --- Easy/Can Place Flowers.java | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Easy/Can Place Flowers.java b/Easy/Can Place Flowers.java index c5b9df5d..eb2a21fb 100644 --- a/Easy/Can Place Flowers.java +++ b/Easy/Can Place Flowers.java @@ -1,19 +1,19 @@ class Solution { - public boolean canPlaceFlowers(int[] flowerbed, int n) { - for (int i = 0; i < flowerbed.length && n > 0; i++) { - if (flowerbed[i] == 0) { - if (i == 0 && (flowerbed.length == 1 || flowerbed[i + 1] == 0)) { - flowerbed[i] = 1; - n--; - } else if (i == flowerbed.length - 1 && flowerbed[i - 1] == 0) { - flowerbed[i] = 1; - n--; - } else if (i + 1 < flowerbed.length && flowerbed[i + 1] == 0 && i - 1 >= 0 && flowerbed[i - 1] == 0) { - flowerbed[i] = 1; - n--; + public boolean canPlaceFlowers(int[] flowerbed, int n) { + for (int i = 0; i < flowerbed.length && n > 0; i++) { + if (canPlaceCheck(i, flowerbed)) { + flowerbed[i] = 1; + n--; + } } - } + return n == 0; + } + + private boolean canPlaceCheck(int i, int[] flowerbed) { + return flowerbed[i] == 0 && ( + (i == 0 && (i + 1 == flowerbed.length || flowerbed[i + 1] == 0)) || + (i == flowerbed.length - 1 && (i - 1 == -1 || flowerbed[i - 1] == 0)) || + (i != 0 && i != flowerbed.length - 1 && flowerbed[i - 1] == 0 && flowerbed[i + 1] == 0) + ); } - return n == 0; - } } From 20bbc5734700a3266fae95108e90d68ee333d2ba Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 20 Mar 2023 18:15:55 -0700 Subject: [PATCH 1051/1640] Updated Number of Zero-Filled Subarrays --- Medium/Number of Zero-Filled Subarrays.java | 24 +++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/Medium/Number of Zero-Filled Subarrays.java b/Medium/Number of Zero-Filled Subarrays.java index af77e188..b7c17309 100644 --- a/Medium/Number of Zero-Filled Subarrays.java +++ b/Medium/Number of Zero-Filled Subarrays.java @@ -1,14 +1,16 @@ class Solution { - public long zeroFilledSubarray(int[] nums) { - long count = 0; - long subarrayLength = 0; - for (int i = 0; i < nums.length; i++) { - if (nums[i] == 0) { - count += ++subarrayLength; - } else { - subarrayLength = 0; - } + public long zeroFilledSubarray(int[] nums) { + long subarrayCount = 0L; + int idx = 0; + while (idx < nums.length) { + long count = 0L; + while (idx < nums.length && nums[idx] == 0) { + idx++; + count++; + } + subarrayCount += (count * (count + 1)) / 2; + idx++; + } + return subarrayCount; } - return count; - } } From e3ef07b08ef612eb6e846d3e7000784d4b51c382 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 21 Mar 2023 09:29:47 -0700 Subject: [PATCH 1052/1640] Updated Median of Two Sorted Arrays --- Hard/Median of Two Sorted Arrays.java | 53 +++++++++------------------ 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/Hard/Median of Two Sorted Arrays.java b/Hard/Median of Two Sorted Arrays.java index 375c07fa..33ec700b 100644 --- a/Hard/Median of Two Sorted Arrays.java +++ b/Hard/Median of Two Sorted Arrays.java @@ -1,42 +1,25 @@ class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { - int n = nums1.length + nums2.length; - ArrayList arr = new ArrayList<>(); - - int i = 0; - int j = 0; - int k = 0; - int limit = (n)/2 + 1; - - while (i < nums1.length && j < nums2.length && k < limit) { - if (nums1[i] < nums2[j]) { - arr.add(nums1[i]); - i++; - } - else { - arr.add(nums2[j]); - j++; - } - k++; - } - - if (i < nums1.length) { - while (i < nums1.length && k < limit) { - arr.add(nums1[i]); - i++; - k++; - } + if (nums1.length < nums2.length) { + return findMedianSortedArrays(nums2, nums1); } - else { - while (j < nums2.length && k < limit) { - arr.add (nums2[j]); - j++; - k++; + int low = 0; + int high = nums2.length * 2; + while (low <= high) { + int midTwo = (low + high) / 2; + int midOne = nums1.length + nums2.length - midTwo; + double leftOne = (midOne == 0) ? Integer.MIN_VALUE : nums1[(midOne - 1) / 2]; + double leftTwo = (midTwo == 0) ? Integer.MIN_VALUE : nums2[(midTwo - 1) / 2]; + double rightOne = (midOne == nums1.length * 2) ? Integer.MAX_VALUE : nums1[(midOne) / 2]; + double rightTwo = (midTwo == nums2.length * 2) ? Integer.MAX_VALUE : nums2[(midTwo) / 2]; + if (leftOne > rightTwo) { + low = midTwo + 1; + } else if (leftTwo > rightOne) { + high = midTwo - 1; + } else { + return (Math.max(leftOne, leftTwo) + Math.min(rightOne, rightTwo)) / 2; } } - - k--; - - return n%2 == 0 ? (double) (arr.get(k - 1) + arr.get(k)) / 2.0 : (double) arr.get(k); + return -1; } } From 1f2797f276f1f7ae119bf6e70d69a7baa7a94fce Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 21 Mar 2023 18:27:46 -0700 Subject: [PATCH 1053/1640] Added Minimum Score of a Path Between Two Cities --- ...um Score of a Path Between Two Cities.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/Minimum Score of a Path Between Two Cities.java diff --git a/Medium/Minimum Score of a Path Between Two Cities.java b/Medium/Minimum Score of a Path Between Two Cities.java new file mode 100644 index 00000000..28b7ed1b --- /dev/null +++ b/Medium/Minimum Score of a Path Between Two Cities.java @@ -0,0 +1,31 @@ +class Solution { + public int minScore(int n, int[][] roads) { + Map>> graph = new HashMap<>(); + for (int[] road : roads) { + graph.computeIfAbsent(road[0], k -> new ArrayList<>()) + .add(List.of(road[1], road[2])); + graph.computeIfAbsent(road[1], k -> new ArrayList<>()) + .add(List.of(road[0], road[2])); + } + return bfs(n, graph); + } + + private int bfs(int n , Map>> graph) { + boolean[] visited = new boolean[n + 1]; + Queue queue = new LinkedList<>(); + int result = Integer.MAX_VALUE; + queue.add(1); + visited[1] = true; + while (!queue.isEmpty()) { + int node = queue.remove(); + for (List edge : graph.getOrDefault(node, new ArrayList<>())) { + result = Math.min(result, edge.get(1)); + if (!visited[edge.get(0)]) { + visited[edge.get(0)] = true; + queue.add(edge.get(0)); + } + } + } + return result; + } +} From f2c2a47849c1e6465dc82eaa611cbf6de07bf6f4 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 23 Mar 2023 07:09:40 -0700 Subject: [PATCH 1054/1640] Added Number of Operations to Make Network Connected --- ... Operations to Make Network Connected.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Medium/Number of Operations to Make Network Connected.java diff --git a/Medium/Number of Operations to Make Network Connected.java b/Medium/Number of Operations to Make Network Connected.java new file mode 100644 index 00000000..c44c17d8 --- /dev/null +++ b/Medium/Number of Operations to Make Network Connected.java @@ -0,0 +1,36 @@ +class Solution { + public int makeConnected(int n, int[][] connections) { + if (connections.length < n - 1) { + return -1; + } + Map> graph = new HashMap<>(); + for (int[] conn : connections) { + graph.computeIfAbsent(conn[0], k -> new HashSet<>()).add(conn[1]); + graph.computeIfAbsent(conn[1], k -> new HashSet<>()).add(conn[0]); + } + int count = 0; + boolean[] visited = new boolean[n]; + for (int i = 0; i < n; i++) { + if (!visited[i]) { + bfs(graph, i, visited); + count++; + } + } + return count - 1; + } + + private void bfs(Map> graph, int start, boolean[] visited) { + Queue queue = new LinkedList<>(); + queue.add(start); + visited[start] = true; + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (Integer node : graph.getOrDefault(removed, new HashSet<>())) { + if (!visited[node]) { + visited[node] = true; + queue.add(node); + } + } + } + } +} From d1591f889482881c72b7d4ae3ef9960b1dba015a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 Mar 2023 17:42:49 -0700 Subject: [PATCH 1055/1640] Update Reorder Routes to Make All Paths Lead to the City Zero.java --- ... Make All Paths Lead to the City Zero.java | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/Medium/Reorder Routes to Make All Paths Lead to the City Zero.java b/Medium/Reorder Routes to Make All Paths Lead to the City Zero.java index 121798de..78f7e54f 100644 --- a/Medium/Reorder Routes to Make All Paths Lead to the City Zero.java +++ b/Medium/Reorder Routes to Make All Paths Lead to the City Zero.java @@ -1,30 +1,31 @@ class Solution { - public int minReorder(int n, int[][] connections) { - Map> map = new HashMap<>(); - Set set = new HashSet<>(); - for (int[] connection : connections) { - map.computeIfAbsent(connection[0], k -> new HashSet<>()).add(connection[1]); - map.computeIfAbsent(connection[1], k -> new HashSet<>()).add(connection[0]); - set.add(connection[0] + "->" + connection[1]); - } - Queue queue = new LinkedList<>(); - queue.add(0); - int numOfReorders = 0; - boolean[] visited = new boolean[n]; - visited[0] = true; - while (!queue.isEmpty()) { - int removed = queue.remove(); - for (int connection : map.getOrDefault(removed, new HashSet<>())) { - if (visited[connection]) { - continue; + public int minReorder(int n, int[][] connections) { + Map>> graph = new HashMap<>(); + for (int[] conn : connections) { + graph.computeIfAbsent(conn[0], k -> new ArrayList<>()).add(List.of(conn[1], 1)); + graph.computeIfAbsent(conn[1], k -> new ArrayList<>()).add(List.of(conn[0], 0)); } - visited[connection] = true; - if (!set.contains(connection + "->" + removed)) { - numOfReorders++; + int[] count = {0}; + bfs(0, n, graph, count); + return count[0]; + } + + private void bfs(int node, int n, Map>> graph, int[] count) { + Queue queue = new LinkedList<>(); + boolean[] visited = new boolean[n]; + visited[node] = true; + queue.add(node); + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (List conn : graph.getOrDefault(removed, new ArrayList<>())) { + int neighbor = conn.get(0); + int direction = conn.get(1); + if (!visited[neighbor]) { + count[0] += direction; + visited[neighbor] = true; + queue.add(neighbor); + } + } } - queue.add(connection); - } } - return numOfReorders; - } } From ea605a4299846f3f1929e17a4c219c293cd3bf28 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 24 Mar 2023 19:27:03 -0700 Subject: [PATCH 1056/1640] Updated Count Unreachable Pairs of Nodes in an Undirected Graph --- ...Pairs of Nodes in an Undirected Graph.java | 57 +++++++++++-------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java b/Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java index b8f9bb09..4b927bce 100644 --- a/Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java +++ b/Medium/Count Unreachable Pairs of Nodes in an Undirected Graph.java @@ -1,29 +1,36 @@ class Solution { - public long countPairs(int n, int[][] edges) { - Map> graph = new HashMap<>(); - for (int[] edge : edges) { - graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); - graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + public long countPairs(int n, int[][] edges) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); + graph.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); + } + boolean[] visited = new boolean[n]; + long unreachableNodeCount = (((long) n) * (n - 1)) / 2; + for (int i = 0; i < n; i++) { + if (!visited[i]) { + long reachCount = traverseHelper(i, graph, visited); + unreachableNodeCount -= (reachCount * (reachCount - 1)) / 2; + } + } + return unreachableNodeCount; } - long unreachableNodes = (((long) n) * (n - 1)) / 2; - boolean[] visited = new boolean[n]; - for (int i = 0; i < n; i++) { - if (!visited[i]) { - long[] reachCount = {0}; - dfs(graph, i, reachCount, visited); - unreachableNodes -= (reachCount[0] * (reachCount[0] - 1)) / 2; - } + + private long traverseHelper(int node, Map> graph, boolean[] visited) { + Queue queue = new LinkedList<>(); + long count = 0; + queue.add(node); + visited[node] = true; + while (!queue.isEmpty()) { + int removed = queue.remove(); + count++; + for (Integer conn : graph.getOrDefault(removed, new HashSet<>())) { + if (!visited[conn]) { + visited[conn] = true; + queue.add(conn); + } + } + } + return count; } - return unreachableNodes; - } - - private void dfs(Map> graph, int node, long[] reachCount, boolean[] visited) { - visited[node] = true; - reachCount[0]++; - for (Integer conn : graph.getOrDefault(node, new ArrayList<>())) { - if (!visited[conn]) { - dfs(graph, conn, reachCount, visited); - } - } - } } From 01571afd10df1f1b4d1b6008d8d4024a36d20684 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 26 Mar 2023 09:18:56 -0700 Subject: [PATCH 1057/1640] Added Longest Cycle in a Graph --- Hard/Longest Cycle in a Graph.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/Longest Cycle in a Graph.java diff --git a/Hard/Longest Cycle in a Graph.java b/Hard/Longest Cycle in a Graph.java new file mode 100644 index 00000000..6405e016 --- /dev/null +++ b/Hard/Longest Cycle in a Graph.java @@ -0,0 +1,26 @@ +class Solution { + public int longestCycle(int[] edges) { + int n = edges.length; + boolean[] visited = new boolean[n]; + int[] result = {-1}; + for (int i = 0; i < n; i++) { + if (!visited[i]) { + Map map = new HashMap<>(); + map.put(i, 1); + dfs(i, edges, map, visited, result); + } + } + return result[0]; + } + + private void dfs(int node, int[] edges, Map map, boolean[] visited, int[] result) { + visited[node] = true; + int neighbor = edges[node]; + if (neighbor != -1 && !visited[neighbor]) { + map.put(neighbor, map.get(node) + 1); + dfs(neighbor, edges, map, visited, result); + } else if (neighbor != -1 && map.containsKey(neighbor)) { + result[0] = Math.max(result[0], map.get(node) - map.get(neighbor) + 1); + } + } +} From 8c6f7851a76308b2e3c3d34aaaa513ab3c8af150 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 26 Mar 2023 10:43:33 -0700 Subject: [PATCH 1058/1640] Added K Items With the Maximum Sum --- Easy/K Items With the Maximum Sum.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/K Items With the Maximum Sum.java diff --git a/Easy/K Items With the Maximum Sum.java b/Easy/K Items With the Maximum Sum.java new file mode 100644 index 00000000..01d51965 --- /dev/null +++ b/Easy/K Items With the Maximum Sum.java @@ -0,0 +1,11 @@ +class Solution { + public int kItemsWithMaximumSum(int numOnes, int numZeros, int numNegOnes, int k) { + int sum = 0; + sum += Math.min(numOnes, k) * 1; + k -= Math.min(numOnes, k); + sum += Math.min(numZeros, k) * 0; + k -= Math.min(numZeros, k); + sum += Math.min(numNegOnes, k) * -1; + return sum; + } +} From 96e0ff49797fef67f902553c610928e8459b5e03 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 26 Mar 2023 17:40:14 -0700 Subject: [PATCH 1059/1640] Updated Minimum Path Sum --- Medium/Minimum Path Sum.java | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Medium/Minimum Path Sum.java b/Medium/Minimum Path Sum.java index 2100ec3a..0565b7b0 100644 --- a/Medium/Minimum Path Sum.java +++ b/Medium/Minimum Path Sum.java @@ -1,18 +1,18 @@ class Solution { - public int minPathSum(int[][] grid) { - int[][] dp = new int[grid.length][grid[0].length]; - for (int i = 0; i < dp.length; i++) { - for (int j = 0; j < dp[i].length; j++) { - dp[i][j] += grid[i][j]; - if (i > 0 && j > 0) { - dp[i][j] += Math.min(dp[i - 1][j], dp[i][j - 1]); - } else if (i > 0) { - dp[i][j] += dp[i - 1][j]; - } else if (j > 0) { - dp[i][j] += dp[i][j - 1]; + public int minPathSum(int[][] grid) { + int[][] dp = new int[grid.length][grid[0].length]; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + dp[i][j] = grid[i][j]; + if (i > 0 && j > 0) { + dp[i][j] += Math.min(dp[i - 1][j], dp[i][j - 1]); + } else if (i > 0) { + dp[i][j] += dp[i - 1][j]; + } else if (j > 0) { + dp[i][j] += dp[i][j - 1]; + } + } } - } + return dp[grid.length - 1][grid[0].length - 1]; } - return dp[grid.length - 1][grid[0].length - 1]; - } } From a5baef0a157d3aefe256a41c495928cd2d3e2c64 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 28 Mar 2023 08:08:49 -0700 Subject: [PATCH 1060/1640] Added Minimum Cost For Tickets --- Medium/Minimum Cost For Tickets.java | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Minimum Cost For Tickets.java diff --git a/Medium/Minimum Cost For Tickets.java b/Medium/Minimum Cost For Tickets.java new file mode 100644 index 00000000..8867660b --- /dev/null +++ b/Medium/Minimum Cost For Tickets.java @@ -0,0 +1,29 @@ +class Solution { + public int mincostTickets(int[] days, int[] costs) { + Set daySet = new HashSet<>(); + for (int day : days) { + daySet.add(day); + } + int[] dp = new int[days[days.length - 1]]; + return helper(days[days.length - 1], daySet, costs, dp); + } + + private int helper(int currDay, Set daySet, int[] costs, int[] dp) { + if (currDay <= 0) { + return 0; + } + if (dp[currDay - 1] != 0) { + return dp[currDay - 1]; + } + int result = 0; + if (daySet.contains(currDay)) { + int one = helper(currDay - 1, daySet, costs, dp) + costs[0]; + int seven = helper(currDay - 7, daySet, costs, dp) + costs[1]; + int thirty = helper(currDay - 30, daySet, costs, dp) + costs[2]; + result = Math.min(one, Math.min(seven, thirty)); + } else { + result = helper(currDay - 1, daySet, costs, dp); + } + return dp[currDay - 1] = result; + } +} From b60c6d76e839dd78f8b1a0853a6ded43486a5cb7 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 28 Mar 2023 18:39:07 -0700 Subject: [PATCH 1061/1640] Added Reducing Dishes --- Hard/Reducing Dishes.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Hard/Reducing Dishes.java diff --git a/Hard/Reducing Dishes.java b/Hard/Reducing Dishes.java new file mode 100644 index 00000000..2a69540e --- /dev/null +++ b/Hard/Reducing Dishes.java @@ -0,0 +1,20 @@ +class Solution { + public int maxSatisfaction(int[] satisfaction) { + Arrays.sort(satisfaction); + int n = satisfaction.length; + Integer[][] dp = new Integer[n + 1][n + 1]; + return helper(satisfaction, 0, 1, dp); + } + + private int helper(int[] satisfaction, int idx, int time, Integer[][] dp) { + if (idx == satisfaction.length) { + return 0; + } + if (dp[idx][time] != null) { + return dp[idx][time]; + } + dp[idx][time] = Math.max(satisfaction[idx] * time + helper(satisfaction, idx + 1, time + 1, dp), + helper(satisfaction, idx + 1, time, dp)); + return dp[idx][time]; + } +} From f35c580ea510cb5d4153da0631d6d3c61da25b6d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 30 Mar 2023 06:52:38 -0700 Subject: [PATCH 1062/1640] Added Scramble String --- Hard/Scramble String.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Hard/Scramble String.java diff --git a/Hard/Scramble String.java b/Hard/Scramble String.java new file mode 100644 index 00000000..ac35d39c --- /dev/null +++ b/Hard/Scramble String.java @@ -0,0 +1,25 @@ +class Solution { + public boolean isScramble(String s1, String s2) { + int n = s1.length(); + Boolean[][][] dp = new Boolean[n][n][n + 1]; + return helper(s1, s2, 0, 0, n, dp); + } + + private boolean helper(String s1, String s2, int idxOne, int idxTwo, int n, Boolean[][][] dp) { + if (dp[idxOne][idxTwo][n] != null) { + return dp[idxOne][idxTwo][n]; + } + if (n == 1) { + return dp[idxOne][idxTwo][n] = s1.charAt(idxOne) == s2.charAt(idxTwo); + } + for (int l = 1; l < n; l++) { + if (helper(s1, s2, idxOne, idxTwo, l, dp) && helper(s1, s2, idxOne + l, idxTwo + l, n - l, dp)) { + return dp[idxOne][idxTwo][n] = true; + } + if (helper(s1, s2, idxOne, idxTwo + n - l, l, dp) && helper(s1, s2, idxOne + l, idxTwo, n - l, dp)) { + return dp[idxOne][idxTwo][n] = true; + } + } + return dp[idxOne][idxTwo][n] = false; + } +} From aa0b930116863355cddaa45fe226d63f7fe16021 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 30 Mar 2023 19:49:42 -0700 Subject: [PATCH 1063/1640] Added Number of Ways of Cutting a Pizza --- Hard/Number of Ways of Cutting a Pizza.java | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Hard/Number of Ways of Cutting a Pizza.java diff --git a/Hard/Number of Ways of Cutting a Pizza.java b/Hard/Number of Ways of Cutting a Pizza.java new file mode 100644 index 00000000..a96b2064 --- /dev/null +++ b/Hard/Number of Ways of Cutting a Pizza.java @@ -0,0 +1,37 @@ +class Solution { + + private static final int MOD = 1000_000_007; + + public int ways(String[] pizza, int k) { + int rows = pizza.length; + int cols = pizza[0].length(); + int[][] apples = new int[rows + 1][cols + 1]; + int[][][] dp = new int[k][rows][cols]; + for (int row = rows - 1; row >= 0; row--) { + for (int col = cols - 1; col >= 0; col--) { + apples[row][col] = (pizza[row].charAt(col) == 'A' ? 1 : 0) + apples[row + 1][col] + apples[row][col + 1] - apples[row + 1][col + 1]; + dp[0][row][col] = apples[row][col] > 0 ? 1 : 0; + } + } + + for (int i = 1; i < k; i++) { + for (int row = 0; row < rows; row++) { + for (int col = 0; col < cols; col++) { + for (int nextRow = row + 1; nextRow < rows; nextRow++) { + if (apples[row][col] - apples[nextRow][col] > 0) { + dp[i][row][col] += dp[i - 1][nextRow][col]; + dp[i][row][col] %= MOD; + } + } + for (int nextCol = col + 1; nextCol < cols; nextCol++) { + if (apples[row][col] - apples[row][nextCol] > 0) { + dp[i][row][col] += dp[i - 1][row][nextCol]; + dp[i][row][col] %= MOD; + } + } + } + } + } + return dp[k - 1][0][0]; + } +} From 93de89d96da86beb4d51d2f67ac261cd7b762adc Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 31 Mar 2023 06:43:54 -0700 Subject: [PATCH 1064/1640] Added 4 Keys Keyboard --- Medium/4 Keys Keyboard.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/4 Keys Keyboard.java diff --git a/Medium/4 Keys Keyboard.java b/Medium/4 Keys Keyboard.java new file mode 100644 index 00000000..2ca4bb8e --- /dev/null +++ b/Medium/4 Keys Keyboard.java @@ -0,0 +1,14 @@ +class Solution { + public int maxA(int n) { + int[] dp = new int[n + 1]; + for (int i = 0; i <= n; i++) { + dp[i] = i; + } + for (int i = 0; i <= n - 3; i++) { + for (int j = i + 3; j <= Math.min(n, i + 6); j++) { + dp[j] = Math.max(dp[j], (j - i - 1) * dp[i]); + } + } + return dp[n]; + } +} From 2cf3328da7d6fd6e6d57a127dcc7ea16d36fc436 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 1 Apr 2023 14:56:24 -0700 Subject: [PATCH 1065/1640] Added Form Smallest Number From Two Digit Arrays --- ...Smallest Number From Two Digit Arrays.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Easy/Form Smallest Number From Two Digit Arrays.java diff --git a/Easy/Form Smallest Number From Two Digit Arrays.java b/Easy/Form Smallest Number From Two Digit Arrays.java new file mode 100644 index 00000000..5ae6bd94 --- /dev/null +++ b/Easy/Form Smallest Number From Two Digit Arrays.java @@ -0,0 +1,21 @@ +class Solution { + public int minNumber(int[] nums1, int[] nums2) { + int[] counter = new int[10]; + int smallestOne = nums1[0]; + int smallestTwo = nums2[0]; + for (int num : nums1) { + counter[num]++; + smallestOne = Math.min(smallestOne, num); + } + for (int num : nums2) { + counter[num]++; + smallestTwo = Math.min(smallestTwo, num); + } + for (int i = 1; i < counter.length; i++) { + if (counter[i] == 2) { + return i; + } + } + return Math.min(smallestOne, smallestTwo) * 10 + Math.max(smallestOne, smallestTwo); + } +} From 2755705abf32b39d6cd207f162dbed899830ab95 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 1 Apr 2023 15:34:33 -0700 Subject: [PATCH 1066/1640] Added Find the Substring With Maximum Cost.java --- Medium/Find the Substring With Maximum Cost.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Find the Substring With Maximum Cost.java diff --git a/Medium/Find the Substring With Maximum Cost.java b/Medium/Find the Substring With Maximum Cost.java new file mode 100644 index 00000000..24e00548 --- /dev/null +++ b/Medium/Find the Substring With Maximum Cost.java @@ -0,0 +1,16 @@ +class Solution { + public int maximumCostSubstring(String s, String chars, int[] vals) { + Map valueMap = new HashMap<>(); + for (int i = 0; i < chars.length(); i++) { + valueMap.put(chars.charAt(i), vals[i]); + } + int maxCost = 0; + int currCost = 0; + for (char c : s.toCharArray()) { + int currCharCost = valueMap.containsKey(c) ? valueMap.get(c) : (c - 'a' + 1); + currCost = Math.max(currCharCost, currCost + currCharCost); + maxCost = Math.max(currCost, maxCost); + } + return maxCost; + } +} From 273c1f2c71f649579d5312294b8f4e586a509aac Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 1 Apr 2023 15:40:42 -0700 Subject: [PATCH 1067/1640] Added commit-script.sh --- commit-script.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 commit-script.sh diff --git a/commit-script.sh b/commit-script.sh new file mode 100755 index 00000000..90a4f404 --- /dev/null +++ b/commit-script.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +git add . + +if git status | grep -q 'modified'; then + status=$(git status | grep 'modified') + modified_file=${status##*/} + git commit -m "Updated ${modified_file}" +elif git status | grep -q 'new file:'; then + status=$(git status | grep 'new file:') + added_file=${status##*/} + git commit -m "Added ${added_file}" +fi + +git push From f2c68be5498d5e5723f1e0ff2892b175f3fa382e Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 1 Apr 2023 17:22:58 -0700 Subject: [PATCH 1068/1640] Updated Successful Pairs of Spells and Potions.java --- ...uccessful Pairs of Spells and Potions.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Medium/Successful Pairs of Spells and Potions.java b/Medium/Successful Pairs of Spells and Potions.java index 40c459c7..8a8e6886 100644 --- a/Medium/Successful Pairs of Spells and Potions.java +++ b/Medium/Successful Pairs of Spells and Potions.java @@ -1,26 +1,26 @@ class Solution { - public int[] successfulPairs(int[] spells, int[] potions, long success) { - int[] result = new int[spells.length]; - Arrays.sort(potions); - for (int i = 0; i < spells.length; i++) { - int idx = getSuccessIdx(potions, spells[i], success); - result[i] = potions.length - idx; + public int[] successfulPairs(int[] spells, int[] potions, long success) { + Arrays.sort(potions); + int[] result = new int[spells.length]; + for (int i = 0; i < spells.length; i++) { + result[i] = findCountOfSuccessfulPotion(potions, success, (long) spells[i]); + } + return result; } - return result; - } - - private int getSuccessIdx(int[] potions, int spell, long success) { - int left = 0; - int right = potions.length; - while (left < right) { - int mid = (left + right) / 2; - long currSuccess = ((long) potions[mid]) * spell; - if (currSuccess >= success) { - right = mid; - } else { - left = mid + 1; - } + + private int findCountOfSuccessfulPotion(int[] potions, long success, long spell) { + int left = 0; + int right = potions.length - 1; + int minIdx = Integer.MAX_VALUE; + while (left <= right) { + int mid = (left + right) / 2; + if (potions[mid] * spell >= success) { + minIdx = Math.min(minIdx, mid); + right = mid - 1; + } else { + left = mid + 1; + } + } + return minIdx == Integer.MAX_VALUE ? 0 : (potions.length - minIdx); } - return left; - } } From fa1372856b855ae761eb4ce732004b9e07a6d864 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 2 Apr 2023 06:41:44 -0700 Subject: [PATCH 1069/1640] Added Find the Longest Balanced Substring of a Binary String.java --- ...Balanced Substring of a Binary String.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Easy/Find the Longest Balanced Substring of a Binary String.java diff --git a/Easy/Find the Longest Balanced Substring of a Binary String.java b/Easy/Find the Longest Balanced Substring of a Binary String.java new file mode 100644 index 00000000..2b1d3f2a --- /dev/null +++ b/Easy/Find the Longest Balanced Substring of a Binary String.java @@ -0,0 +1,25 @@ +class Solution { + public int findTheLongestBalancedSubstring(String s) { + int maxLength = 0; + int idx = 0; + while (idx < s.length()) { + if (s.charAt(idx) != '0') { + idx++; + continue; + } + int zeroCount = 0; + while (idx < s.length() && s.charAt(idx) == '0') { + idx++; + zeroCount++; + } + int oneCount = 0; + while (idx < s.length() && s.charAt(idx) == '1') { + idx++; + oneCount++; + } + maxLength = Math.max(maxLength, 2 * Math.min(zeroCount, oneCount)); + + } + return maxLength; + } +} From 3c1247f87aa3f6a704c27682363ad70ded0c696c Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 2 Apr 2023 06:48:32 -0700 Subject: [PATCH 1070/1640] Added Convert an Array Into a 2D Array With Conditions.java --- ...Array Into a 2D Array With Conditions.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Convert an Array Into a 2D Array With Conditions.java diff --git a/Medium/Convert an Array Into a 2D Array With Conditions.java b/Medium/Convert an Array Into a 2D Array With Conditions.java new file mode 100644 index 00000000..c774bda6 --- /dev/null +++ b/Medium/Convert an Array Into a 2D Array With Conditions.java @@ -0,0 +1,25 @@ +class Solution { + public List> findMatrix(int[] nums) { + Map frequencyMap = new HashMap<>(); + for (int num : nums) { + frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1); + } + Queue queue = new LinkedList<>(); + queue.addAll(frequencyMap.keySet()); + List> result = new ArrayList<>(); + while (!queue.isEmpty()) { + int size = queue.size(); + List row = new ArrayList<>(); + while (size-- > 0) { + int removed = queue.remove(); + row.add(removed); + if (frequencyMap.get(removed) > 1) { + frequencyMap.put(removed, frequencyMap.get(removed) - 1); + queue.add(removed); + } + } + result.add(row); + } + return result; + } +} From 1f4411567a5ab8fe45d883cf8d7c2ddc25dd25b8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 3 Apr 2023 06:40:07 -0700 Subject: [PATCH 1071/1640] Updated Boats to Save People.java --- Medium/Boats to Save People.java | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Medium/Boats to Save People.java b/Medium/Boats to Save People.java index 725f18c7..dab79035 100644 --- a/Medium/Boats to Save People.java +++ b/Medium/Boats to Save People.java @@ -1,16 +1,16 @@ class Solution { - public int numRescueBoats(int[] people, int limit) { - Arrays.sort(people); - int startIdx = 0; - int endIdx = people.length - 1; - int count = 0; - while (startIdx <= endIdx) { - int currWeight = people[endIdx--]; - if (startIdx <= endIdx && currWeight + people[startIdx] <= limit) { - currWeight += people[startIdx++]; - } - count++; - } - return count; - } + public int numRescueBoats(int[] people, int limit) { + Arrays.sort(people); + int left = 0; + int right = people.length - 1; + int count = 0; + while (left <= right) { + int capacity = people[right--]; + if (left <= right && capacity + people[left] <= limit) { + left++; + } + count++; + } + return count; + } } From 3492e1be759604c0f3b28209b92a742c81368132 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 3 Apr 2023 06:52:29 -0700 Subject: [PATCH 1072/1640] Updated Shortest Word Distance III.java --- Medium/Shortest Word Distance III.java | 31 +++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/Medium/Shortest Word Distance III.java b/Medium/Shortest Word Distance III.java index ba7216c1..fba93082 100644 --- a/Medium/Shortest Word Distance III.java +++ b/Medium/Shortest Word Distance III.java @@ -1,15 +1,24 @@ class Solution { - public int shortestWordDistance(String[] wordsDict, String word1, String word2) { - int minIdxDiff = wordsDict.length; - int prevIdx = -1; - for (int i = 0; i < wordsDict.length; i++) { - if (wordsDict[i].equals(word1) || wordsDict[i].equals(word2)) { - if (prevIdx != -1 && (word1.equals(word2) || !wordsDict[prevIdx].equals(wordsDict[i]))) { - minIdxDiff = Math.min(minIdxDiff, Math.abs(prevIdx - i)); + public int shortestWordDistance(String[] wordsDict, String word1, String word2) { + int idxOne = -1; + int idxTwo = -1; + int minDistance = Integer.MAX_VALUE; + boolean sameWord = word1.equals(word2); + for (int i = 0; i < wordsDict.length; i++) { + if (wordsDict[i].equals(word1)) { + idxOne = sameWord ? (idxOne == -1 ? i : idxOne) : i; + } + if (wordsDict[i].equals(word2)) { + idxTwo = sameWord ? (idxOne != i ? i : idxTwo) : i; + } + if (idxOne != -1 && idxTwo != -1) { + minDistance = Math.min(minDistance, Math.abs(idxOne - idxTwo)); + if (sameWord) { + idxOne = idxTwo; + idxTwo = -1; + } + } } - prevIdx = i; - } + return minDistance; } - return minIdxDiff; - } } From 004d680823e9846a78ec8afbe2915bb678c6fa35 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 3 Apr 2023 17:22:55 -0700 Subject: [PATCH 1073/1640] Updated Optimal Partition of String.java --- Medium/Optimal Partition of String.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Medium/Optimal Partition of String.java b/Medium/Optimal Partition of String.java index 2c42afa6..68b01d59 100644 --- a/Medium/Optimal Partition of String.java +++ b/Medium/Optimal Partition of String.java @@ -1,14 +1,14 @@ class Solution { - public int partitionString(String s) { - int idx = 0; - int count = 0; - while (idx < s.length()) { - Set set = new HashSet<>(); - while (idx < s.length() && set.add(s.charAt(idx))) { - idx++; - } - count++; + public int partitionString(String s) { + int count = 0; + int idx = 0; + while (idx < s.length()) { + Set set = new HashSet<>(); + while (idx < s.length() && set.add(s.charAt(idx))) { + idx++; + } + count++; + } + return count; } - return count; - } } From 59c5848f72b9f9104b88f60d5a04b8c06fa36412 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 4 Apr 2023 17:42:29 -0700 Subject: [PATCH 1074/1640] Added Minimize Maximum of Array.java --- Medium/Minimize Maximum of Array.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Minimize Maximum of Array.java diff --git a/Medium/Minimize Maximum of Array.java b/Medium/Minimize Maximum of Array.java new file mode 100644 index 00000000..79d5ee9b --- /dev/null +++ b/Medium/Minimize Maximum of Array.java @@ -0,0 +1,11 @@ +class Solution { + public int minimizeArrayValue(int[] nums) { + long prefixSum = 0L; + long result = 0L; + for (int i = 0; i < nums.length; i++) { + prefixSum += nums[i]; + result = Math.max(result, (prefixSum + i) / (i + 1)); + } + return (int) result; + } +} From 563b41ea825069d095fd01527b23781d69529d08 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 5 Apr 2023 17:31:05 -0700 Subject: [PATCH 1075/1640] Updated Number of Closed Islands.java --- Medium/Number of Closed Islands.java | 68 ++++++++++++++-------------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/Medium/Number of Closed Islands.java b/Medium/Number of Closed Islands.java index 201b30a3..bc8a9a9e 100644 --- a/Medium/Number of Closed Islands.java +++ b/Medium/Number of Closed Islands.java @@ -1,40 +1,38 @@ class Solution { - private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - - public int closedIsland(int[][] grid) { - int closedIslandCount = 0; - for (int i = 0; i < grid.length; i++) { - for (int j = 0; j < grid[0].length; j++) { - if (grid[i][j] == 0 && isSurroundedSuccessfully(grid, i, j)) { - closedIslandCount++; + + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int closedIsland(int[][] grid) { + int count = 0; + boolean[][] visited = new boolean[grid.length][grid[0].length]; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + if (grid[i][j] == 0 && !visited[i][j] && isClosed(grid, i, j, visited)) { + count++; + } + } } - } + return count; } - return closedIslandCount; - } - - private boolean isSurroundedSuccessfully(int[][] grid, int i, int j) { - Queue queue = new LinkedList<>(); - queue.add(new int[]{i, j}); - boolean surroundingCheck = true; - while (!queue.isEmpty()) { - int[] removed = queue.remove(); - int x = removed[0]; - int y = removed[1]; - if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length) { - surroundingCheck = false; - continue; - } - if (grid[x][y] == 1) { - continue; - } - grid[x][y] = 1; - for (int[] dir : DIRS) { - int newX = x + dir[0]; - int newY = y + dir[1]; - queue.add(new int[]{newX, newY}); - } + + private boolean isClosed(int[][] grid, int i, int j, boolean[][] visited) { + Queue queue = new LinkedList<>(); + queue.add(new int[]{i, j}); + visited[i][j] = true; + boolean closed = true; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + for (int[] dir : DIRS) { + int newX = removed[0] + dir[0]; + int newY = removed[1] + dir[1]; + if (newX < 0 || newY < 0 || newX >= grid.length || newY >= grid[0].length) { + closed = false; + } else if (grid[newX][newY] == 0 && !visited[newX][newY]) { + queue.add(new int[]{newX, newY}); + visited[newX][newY] = true; + } + } + } + return closed; } - return surroundingCheck; - } } From a51ef04068f7a284bb74b5a41aeffb4c3c5c81a3 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 6 Apr 2023 17:34:58 -0700 Subject: [PATCH 1076/1640] Updated Number of Enclaves.java --- Medium/Number of Enclaves.java | 60 ++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/Medium/Number of Enclaves.java b/Medium/Number of Enclaves.java index 105942a1..afacc77a 100644 --- a/Medium/Number of Enclaves.java +++ b/Medium/Number of Enclaves.java @@ -1,30 +1,40 @@ class Solution { - private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; - - public int numEnclaves(int[][] grid) { - Queue queue = new LinkedList<>(); - int result = 0; - for (int i = 0; i < grid.length; i++) { - for (int j = 0; j < grid[0].length; j++) { - result += grid[i][j]; - if (i * j == 0 || i == grid.length - 1 || j == grid[i].length - 1) { - queue.add(new int[]{i, j}); + + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int numEnclaves(int[][] grid) { + int count = 0; + boolean[][] visited = new boolean[grid.length][grid[0].length]; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + if (grid[i][j] == 1 && !visited[i][j]) { + count += getClosedEnclaveCount(grid, i, j, visited); + } + } } - } + return count; } - while (!queue.isEmpty()) { - int[] removed = queue.remove(); - int x = removed[0]; - int y = removed[1]; - if (x < 0 || y < 0 || x == grid.length || y == grid[0].length || grid[x][y] != 1) { - continue; - } - grid[x][y] = 0; - result--; - for (int[] dir : DIRS) { - queue.add(new int[]{x + dir[0], y + dir[1]}); - } + + private int getClosedEnclaveCount(int[][] grid, int i, int j, boolean[][] visited) { + boolean isClosed = true; + int enclaveCount = 0; + Queue queue = new LinkedList<>(); + queue.add(new int[]{i, j}); + visited[i][j] = true; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + enclaveCount++; + for (int[] dir : DIRS) { + int newX = removed[0] + dir[0]; + int newY = removed[1] + dir[1]; + if (newX < 0 || newY < 0 || newX >= grid.length || newY >= grid[0].length) { + isClosed = false; + } else if (grid[newX][newY] == 1 && !visited[newX][newY]) { + visited[newX][newY] = true; + queue.add(new int[]{newX, newY}); + } + } + } + return isClosed ? enclaveCount : 0; } - return result; - } } From dce1f7776febe51afbd62b42e3ceb65683d8aeb4 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 7 Apr 2023 17:05:27 -0700 Subject: [PATCH 1077/1640] Updated Clone Graph.java --- Medium/Clone Graph.java | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Medium/Clone Graph.java b/Medium/Clone Graph.java index 47a4ba95..cddb7b81 100644 --- a/Medium/Clone Graph.java +++ b/Medium/Clone Graph.java @@ -3,17 +3,14 @@ class Node { public int val; public List neighbors; - public Node() { val = 0; neighbors = new ArrayList(); } - public Node(int _val) { val = _val; neighbors = new ArrayList(); } - public Node(int _val, ArrayList _neighbors) { val = _val; neighbors = _neighbors; @@ -22,24 +19,24 @@ public Node(int _val, ArrayList _neighbors) { */ class Solution { - public Node cloneGraph(Node node) { - if (node == null) { - return null; - } - Map map = new HashMap<>(); - Queue queue = new LinkedList<>(); - queue.add(node); - map.put(node, new Node(node.val)); - while (!queue.isEmpty()) { - Node removed = queue.remove(); - for (Node neighbor : removed.neighbors) { - if (!map.containsKey(neighbor)) { - map.put(neighbor, new Node(neighbor.val)); - queue.add(neighbor); + public Node cloneGraph(Node node) { + if (node == null) { + return null; + } + Map map = new HashMap(); + Queue queue = new LinkedList<>(); + queue.add(node); + map.put(node, new Node(node.val)); + while (!queue.isEmpty()) { + Node removed = queue.remove(); + for (Node neighbor : removed.neighbors) { + if (!map.containsKey(neighbor)) { + map.put(neighbor, new Node(neighbor.val)); + queue.add(neighbor); + } + map.get(removed).neighbors.add(map.get(neighbor)); + } } - map.get(removed).neighbors.add(map.get(neighbor)); - } + return map.get(node); } - return map.get(node); - } } From cb72a61686b69ac51ca4359093e9f288d07e0305 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 7 Apr 2023 17:09:44 -0700 Subject: [PATCH 1078/1640] Updated Find Anagram Mappings.java --- Easy/Find Anagram Mappings.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Easy/Find Anagram Mappings.java b/Easy/Find Anagram Mappings.java index 2a7c34e3..3650db78 100644 --- a/Easy/Find Anagram Mappings.java +++ b/Easy/Find Anagram Mappings.java @@ -1,12 +1,13 @@ class Solution { - public int[] anagramMappings(int[] nums1, int[] nums2) { - Map indexMapping = new HashMap<>(); - for (int i = 0; i < nums2.length; i++) { - indexMapping.put(nums2[i], i); + public int[] anagramMappings(int[] nums1, int[] nums2) { + Map indexMap = new HashMap<>(); + for (int i = 0; i < nums2.length; i++) { + indexMap.putIfAbsent(nums2[i], i); + } + int[] result = new int[nums1.length]; + for (int i = 0; i < nums1.length; i++) { + result[i] = indexMap.get(nums1[i]); + } + return result; } - for (int i = 0; i < nums1.length; i++) { - nums1[i] = indexMapping.get(nums1[i]); - } - return nums1; - } } From 7b11656984c2ed24185dccf802063f1286e5f1c8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 9 Apr 2023 09:21:10 -0700 Subject: [PATCH 1079/1640] Added Largest Color Value in a Directed Graph.java --- ...rgest Color Value in a Directed Graph.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Hard/Largest Color Value in a Directed Graph.java diff --git a/Hard/Largest Color Value in a Directed Graph.java b/Hard/Largest Color Value in a Directed Graph.java new file mode 100644 index 00000000..2d2fe6d5 --- /dev/null +++ b/Hard/Largest Color Value in a Directed Graph.java @@ -0,0 +1,39 @@ +class Solution { + public int largestPathValue(String colors, int[][] edges) { + int n = colors.length(); + Map> graph = new HashMap<>(); + int[] indegree = new int[n]; + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()) + .add(edge[1]); + indegree[edge[1]]++; + } + int[][] count = new int[n][26]; + Queue queue = new LinkedList<>(); + for (int i = 0; i < n; i++) { + if (indegree[i] == 0) { + queue.add(i); + } + } + int result = 1; + int seen = 0; + while (!queue.isEmpty()) { + int node = queue.remove(); + result = Math.max(result, ++count[node][colors.charAt(node) - 'a']); + seen++; + if (!graph.containsKey(node)) { + continue; + } + for (int neighbor : graph.get(node)) { + for (int i = 0; i < 26; i++) { + count[neighbor][i] = Math.max(count[neighbor][i], count[node][i]); + } + indegree[neighbor]--; + if (indegree[neighbor] == 0) { + queue.add(neighbor); + } + } + } + return seen < n ? -1 : result; + } +} From b9add47cbe0e3be8dac61e3cf12402cfda6754ae Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 9 Apr 2023 09:28:45 -0700 Subject: [PATCH 1080/1640] Added Prime In Diagonal.java --- Easy/Prime In Diagonal.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Easy/Prime In Diagonal.java diff --git a/Easy/Prime In Diagonal.java b/Easy/Prime In Diagonal.java new file mode 100644 index 00000000..16b34fda --- /dev/null +++ b/Easy/Prime In Diagonal.java @@ -0,0 +1,30 @@ +class Solution { + public int diagonalPrime(int[][] nums) { + int n = nums.length; + int maxPrime = 0; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if ((i == j || i + j == n - 1) && isPrime(nums[i][j])) { + maxPrime = Math.max(maxPrime, nums[i][j]); + } + } + } + return maxPrime; + } + + private static boolean isPrime(int n) { + if (n <= 1) { + return false; + } + if (n == 2) { + return true; + } + int midPoint = ((int) Math.sqrt(n)) + 1; + for (int i = 2; i <= midPoint; i++) { + if (n % i == 0) { + return false; + } + } + return true; + } +} From 342118382d4ce4c5cca25587e1efce1fa1dca3ed Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 10 Apr 2023 17:43:08 -0700 Subject: [PATCH 1081/1640] Update Removing Stars From a String.java --- Medium/Removing Stars From a String.java | 28 ++++++++++++------------ 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Medium/Removing Stars From a String.java b/Medium/Removing Stars From a String.java index 0cb79bea..9278128a 100644 --- a/Medium/Removing Stars From a String.java +++ b/Medium/Removing Stars From a String.java @@ -1,17 +1,17 @@ class Solution { - public String removeStars(String s) { - Stack stack = new Stack<>(); - for (char c : s.toCharArray()) { - if (c == '*') { - stack.pop(); - } else { - stack.push(c); - } + public String removeStars(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (c == '*') { + stack.pop(); + } else { + stack.push(c); + } + } + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.reverse().toString(); } - StringBuilder sb = new StringBuilder(); - while (!stack.isEmpty()) { - sb.append(stack.pop()); - } - return sb.reverse().toString(); - } } From f2e1d1fe4f8c7f95f38292280ee6f59b3de0565a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 11 Apr 2023 17:24:14 -0700 Subject: [PATCH 1082/1640] Update Simplify Path.java --- Medium/Simplify Path.java | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/Medium/Simplify Path.java b/Medium/Simplify Path.java index 51c19971..b04ccd5e 100644 --- a/Medium/Simplify Path.java +++ b/Medium/Simplify Path.java @@ -1,22 +1,23 @@ class Solution { - public String simplifyPath(String path) { - Stack stack = new Stack<>(); - String[] splits = path.split("/"); - for (String split : splits) { - if (split.equals("") || split.equals(".")) { - continue; - } else if (split.equals("..")) { - if (!stack.isEmpty()) { - stack.pop(); + public String simplifyPath(String path) { + Stack stack = new Stack<>(); + String[] splits = path.split("\\/"); + for (String split : splits) { + if (split.equals(".") || split.equals("/") || split.isBlank()) { + continue; + } + if (split.equals("..")) { + if (!stack.isEmpty()) { + stack.pop(); + } + } else { + stack.push(split); + } } - } else { - stack.push(split); - } - } - StringBuilder resultingPath = new StringBuilder(); - while (!stack.isEmpty()) { - resultingPath.insert(0, stack.pop()).insert(0, "/"); + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.insert(0, stack.pop()).insert(0, "/"); + } + return sb.length() == 0 ? "/" : sb.toString(); } - return resultingPath.length() == 0 ? "/" : resultingPath.toString(); - } } From 2b4883da7ff2d566271460143c1dda5bea817f04 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 12 Apr 2023 17:16:48 -0700 Subject: [PATCH 1083/1640] Updated Validate Stack Sequences.java --- Medium/Validate Stack Sequences.java | 36 +++++++++++++--------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/Medium/Validate Stack Sequences.java b/Medium/Validate Stack Sequences.java index 87d61d31..64ae1452 100644 --- a/Medium/Validate Stack Sequences.java +++ b/Medium/Validate Stack Sequences.java @@ -1,22 +1,20 @@ class Solution { - public boolean validateStackSequences(int[] pushed, int[] popped) { - Stack stack = new Stack<>(); - int pushIdx = 0; - int popIdx = 0; - while (pushIdx < pushed.length) { - while (!stack.isEmpty() && popped[popIdx] == stack.peek()) { - stack.pop(); - popIdx++; - } - stack.push(pushed[pushIdx++]); + public boolean validateStackSequences(int[] pushed, int[] popped) { + Stack stack = new Stack<>(); + int pushedIdx = 0; + int poppedIdx = 0; + while (pushedIdx < pushed.length && poppedIdx < popped.length) { + if (!stack.isEmpty() && stack.peek() == popped[poppedIdx]) { + stack.pop(); + poppedIdx++; + } else { + stack.push(pushed[pushedIdx++]); + } + } + while (poppedIdx < popped.length && !stack.isEmpty() && stack.peek() == popped[poppedIdx]) { + stack.pop(); + poppedIdx++; + } + return pushedIdx == pushed.length && poppedIdx == popped.length; } - while (popIdx < popped.length) { - if (stack.isEmpty() || stack.peek() != popped[popIdx]) { - return false; - } - stack.pop(); - popIdx++; - } - return true; - } } From c1335270bf916fa7deab3b7e5f260e23ee3433bf Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 13 Apr 2023 17:56:14 -0700 Subject: [PATCH 1084/1640] Updated Longest Palindromic Subsequence.java --- Medium/Longest Palindromic Subsequence.java | 47 +++++++++------------ 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/Medium/Longest Palindromic Subsequence.java b/Medium/Longest Palindromic Subsequence.java index 5d9d4dfd..85c6c5e7 100644 --- a/Medium/Longest Palindromic Subsequence.java +++ b/Medium/Longest Palindromic Subsequence.java @@ -1,34 +1,25 @@ class Solution { public int longestPalindromeSubseq(String s) { - int[][] temp = new int[s.length()][s.length()]; - for(int i=0;i endIdx) { + return 0; } - - int j; - - for (int cl=2;cl <= s.length();cl++) { - for (int i=0;i Date: Sat, 15 Apr 2023 07:38:01 -0700 Subject: [PATCH 1085/1640] Added Maximum Value of K Coins From Piles.java --- Hard/Maximum Value of K Coins From Piles.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Hard/Maximum Value of K Coins From Piles.java diff --git a/Hard/Maximum Value of K Coins From Piles.java b/Hard/Maximum Value of K Coins From Piles.java new file mode 100644 index 00000000..08fbc802 --- /dev/null +++ b/Hard/Maximum Value of K Coins From Piles.java @@ -0,0 +1,20 @@ +class Solution { + public int maxValueOfCoins(List> piles, int k) { + int n = piles.size(); + int[][] dp = new int[n + 1][k + 1]; + for (int i = 1; i <= n; i++) { + for (int coins = 0; coins <= k; coins++) { + int currSum = 0; + for (int currCoins = 0; + currCoins <= Math.min((int) piles.get(i - 1).size(), coins); + currCoins++) { + if (currCoins > 0) { + currSum += piles.get(i - 1).get(currCoins - 1); + } + dp[i][coins] = Math.max(dp[i][coins], dp[i - 1][coins - currCoins] + currSum); + } + } + } + return dp[n][k]; + } +} From 3dce5914f8a2e6d0ea088801e34c7c1ea4991679 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 16 Apr 2023 08:17:40 -0700 Subject: [PATCH 1086/1640] Added Number of Ways to Form a Target String Given a Dictionary.java --- ...rm a Target String Given a Dictionary.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Hard/Number of Ways to Form a Target String Given a Dictionary.java diff --git a/Hard/Number of Ways to Form a Target String Given a Dictionary.java b/Hard/Number of Ways to Form a Target String Given a Dictionary.java new file mode 100644 index 00000000..a6354f1f --- /dev/null +++ b/Hard/Number of Ways to Form a Target String Given a Dictionary.java @@ -0,0 +1,28 @@ +class Solution { + + private static final int MOD = 1000_000_007; + + public int numWays(String[] words, String target) { + int m = target.length(); + int k = words[0].length(); + int[][] count = new int[26][k]; + for (int i = 0; i < k; i++) { + for (String word : words) { + count[word.charAt(i) - 'a'][i]++; + } + } + long[][] dp = new long[m + 1][k + 1]; + dp[0][0] = 1l; + for (int i = 0; i <= m; i++) { + for (int j = 0; j < k; j++) { + if (i < m) { + dp[i + 1][j + 1] += count[target.charAt(i) - 'a'][j] * dp[i][j]; + dp[i + 1][j + 1] %= MOD; + } + dp[i][j + 1] += dp[i][j]; + dp[i][j + 1] %= MOD; + } + } + return (int) dp[m][k]; + } +} From a102b912bc5ea4825ae8304e207846e6b6ff3982 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 16 Apr 2023 08:26:36 -0700 Subject: [PATCH 1087/1640] Added Find the Width of Columns of a Grid.java --- Easy/Find the Width of Columns of a Grid.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Find the Width of Columns of a Grid.java diff --git a/Easy/Find the Width of Columns of a Grid.java b/Easy/Find the Width of Columns of a Grid.java new file mode 100644 index 00000000..843813b9 --- /dev/null +++ b/Easy/Find the Width of Columns of a Grid.java @@ -0,0 +1,13 @@ +class Solution { + public int[] findColumnWidth(int[][] grid) { + int[] result = new int[grid[0].length]; + for (int i = 0; i < grid[0].length; i++) { + int maxLength = 0; + for (int j = 0; j < grid.length; j++) { + maxLength = Math.max(maxLength, String.valueOf(grid[j][i]).length()); + } + result[i] = maxLength; + } + return result; + } +} From 5201ec217eae6affc0e683fd8c66370f5c03ecbb Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 16 Apr 2023 17:14:52 -0700 Subject: [PATCH 1088/1640] Updated Kids With the Greatest Number of Candies.java --- ...ids With the Greatest Number of Candies.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/Easy/Kids With the Greatest Number of Candies.java b/Easy/Kids With the Greatest Number of Candies.java index 79789d90..67e2441d 100644 --- a/Easy/Kids With the Greatest Number of Candies.java +++ b/Easy/Kids With the Greatest Number of Candies.java @@ -1,13 +1,10 @@ class Solution { - public List kidsWithCandies(int[] candies, int extraCandies) { - int maxCandyCount = 0; - for (int candy : candies) { - maxCandyCount = Math.max(maxCandyCount, candy); + public List kidsWithCandies(int[] candies, int extraCandies) { + final int maxCandy = Arrays.stream(candies) + .max() + .orElse(0); + return Arrays.stream(candies) + .mapToObj(candy -> candy + extraCandies >= maxCandy) + .collect(Collectors.toList()); } - List result = new ArrayList<>(); - for (int candy : candies) { - result.add((candy + extraCandies) >= maxCandyCount); - } - return result; - } } From 73f6e1580b295618a806697790dbae7c6c32b500 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 17 Apr 2023 10:19:07 -0700 Subject: [PATCH 1089/1640] Create Row With Maximum Ones.java --- Easy/Row With Maximum Ones.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Row With Maximum Ones.java diff --git a/Easy/Row With Maximum Ones.java b/Easy/Row With Maximum Ones.java new file mode 100644 index 00000000..e1d32424 --- /dev/null +++ b/Easy/Row With Maximum Ones.java @@ -0,0 +1,17 @@ +class Solution { + public int[] rowAndMaximumOnes(int[][] mat) { + int maxOnes = 0; + int maxOnesRow = 0; + for (int i = 0; i < mat.length; i++) { + int oneCount = 0; + for (int num : mat[i]) { + oneCount += num == 1 ? 1 : 0; + } + if (oneCount > maxOnes) { + maxOnes = oneCount; + maxOnesRow = i; + } + } + return new int[]{maxOnesRow, maxOnes}; + } +} From a43654c560890c4c0ee66780a7c1da9a56389303 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 17 Apr 2023 10:24:42 -0700 Subject: [PATCH 1090/1640] Create Find the Score of All Prefixes of an Array.java --- ...d the Score of All Prefixes of an Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Find the Score of All Prefixes of an Array.java diff --git a/Medium/Find the Score of All Prefixes of an Array.java b/Medium/Find the Score of All Prefixes of an Array.java new file mode 100644 index 00000000..ff88ca98 --- /dev/null +++ b/Medium/Find the Score of All Prefixes of an Array.java @@ -0,0 +1,17 @@ +class Solution { + public long[] findPrefixScore(int[] nums) { + int[] conver = new int[nums.length]; + int max = nums[0]; + for (int i = 0; i < nums.length; i++) { + max = Math.max(max, nums[i]); + conver[i] = nums[i] + max; + } + long[] result = new long[nums.length]; + long score = 0; + for (int i = 0; i < nums.length; i++) { + score += conver[i]; + result[i] = score; + } + return result; + } +} From 2239630cc15d051a58ff0fba730d329607fa909b Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 17 Apr 2023 17:22:14 -0700 Subject: [PATCH 1091/1640] Updated Merge Strings Alternately.java --- Easy/Merge Strings Alternately.java | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/Easy/Merge Strings Alternately.java b/Easy/Merge Strings Alternately.java index 65fb9904..7b851597 100644 --- a/Easy/Merge Strings Alternately.java +++ b/Easy/Merge Strings Alternately.java @@ -1,19 +1,16 @@ class Solution { - public String mergeAlternately(String word1, String word2) { - int idx1 = 0; - int idx2 = 0; - StringBuilder sb = new StringBuilder(); - boolean first = true; - while (idx1 < word1.length() && idx2 < word2.length()) { - sb.append(first ? word1.charAt(idx1++) : word2.charAt(idx2++)); - first = !first; + public String mergeAlternately(String word1, String word2) { + StringBuilder sb = new StringBuilder(); + int idxOne = 0; + int idxTwo = 0; + while (idxOne < word1.length() || idxTwo < word2.length()) { + if (idxOne < word1.length()) { + sb.append(word1.charAt(idxOne++)); + } + if (idxTwo < word2.length()) { + sb.append(word2.charAt(idxTwo++)); + } + } + return sb.toString(); } - while (idx1 < word1.length()) { - sb.append(word1.charAt(idx1++)); - } - while (idx2 < word2.length()) { - sb.append(word2.charAt(idx2++)); - } - return sb.toString(); - } } From fbc0111a75d33ae06cebb128620d24e609a778f7 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 18 Apr 2023 17:22:15 -0700 Subject: [PATCH 1092/1640] Updated Longest ZigZag Path in a Binary Tree.java --- .../Longest ZigZag Path in a Binary Tree.java | 52 +++++++++++-------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/Medium/Longest ZigZag Path in a Binary Tree.java b/Medium/Longest ZigZag Path in a Binary Tree.java index bdc3e8f9..71e32231 100644 --- a/Medium/Longest ZigZag Path in a Binary Tree.java +++ b/Medium/Longest ZigZag Path in a Binary Tree.java @@ -4,33 +4,39 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - int max; - public int longestZigZag(TreeNode root) { - if (root == null) { - return -1; + + private enum DIRECTION { + LEFT, RIGHT; } - max = 0; - helper(root.right, 1, true); - helper(root.left, 1, false); - return max; - } - - private void helper(TreeNode root, int step, boolean isRight) { - if (root == null) { - return; + + public int longestZigZag(TreeNode root) { + int[] pathLength = {0}; + dfs(root, DIRECTION.LEFT, 0, pathLength); + dfs(root, DIRECTION.RIGHT, 0, pathLength); + return pathLength[0]; } - max = Math.max(max, step); - if (isRight) { - helper(root.left, step + 1, false); - helper(root.right, 1, true); + + private void dfs(TreeNode node, DIRECTION direction, int steps, int[] pathLength) { + if (node == null) { + return; + } + pathLength[0] = Math.max(pathLength[0], steps); + if (direction == DIRECTION.LEFT) { + dfs(node.left, DIRECTION.RIGHT, steps + 1, pathLength); + dfs(node.right, DIRECTION.LEFT, 1, pathLength); + } else { + dfs(node.left, DIRECTION.RIGHT, 1, pathLength); + dfs(node.right, DIRECTION.LEFT, steps + 1, pathLength); + } } - else { - helper(root.right, step + 1, true); - helper(root.left, 1, false); - } - } } From 3e4377a9e34ebf03aedda62a6af92ee7ad4b4e89 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 20 Apr 2023 07:51:31 -0700 Subject: [PATCH 1093/1640] Updated Maximum Width of Binary Tree.java --- Medium/Maximum Width of Binary Tree.java | 51 +++++++++++------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/Medium/Maximum Width of Binary Tree.java b/Medium/Maximum Width of Binary Tree.java index 3610e37d..d5edef7e 100644 --- a/Medium/Maximum Width of Binary Tree.java +++ b/Medium/Maximum Width of Binary Tree.java @@ -14,35 +14,30 @@ * } */ class Solution { - public int widthOfBinaryTree(TreeNode root) { - int maxWidth = 0; - Queue queue = new LinkedList<>(); - Map map = new HashMap<>(); - map.put(root, 1); - queue.add(root); - while (!queue.isEmpty()) { - int size = queue.size(); - int start = 0; - int end = 0; - for (int i = 0; i < size; i++) { - TreeNode node = queue.poll(); - if (i == 0) { - start = map.get(node); + public int widthOfBinaryTree(TreeNode root) { + if (root == null) { + return 0; } - if (i == size - 1) { - end = map.get(node); + Queue queue = new LinkedList<>(); + queue.add(new NodeColIndex(root, 0)); + int maxWidth = 0; + while (!queue.isEmpty()) { + NodeColIndex head = queue.peek(); + int levelSize = queue.size(); + for (int i = 0; i < levelSize; i++) { + NodeColIndex removed = queue.remove(); + TreeNode node = removed.node; + if (node.left != null) { + queue.add(new NodeColIndex(node.left, 2 * removed.colIdx)); + } + if (node.right != null) { + queue.add(new NodeColIndex(node.right, 2 * removed.colIdx + 1)); + } + maxWidth = Math.max(maxWidth, removed.colIdx - head.colIdx + 1); + } } - if (node.left != null) { - map.put(node.left, map.get(node) * 2); - queue.add(node.left); - } - if (node.right != null) { - map.put(node.right, map.get(node) * 2 + 1); - queue.add(node.right); - } - } - maxWidth = Math.max(maxWidth, end - start + 1); + return maxWidth; } - return maxWidth; - } + + private record NodeColIndex(TreeNode node, int colIdx) {} } From 699c847f02b498efa1696178f758e9b5db9fdaa5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 20 Apr 2023 17:13:32 -0700 Subject: [PATCH 1094/1640] Create Profitable Schemes.java --- Hard/Profitable Schemes.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Hard/Profitable Schemes.java diff --git a/Hard/Profitable Schemes.java b/Hard/Profitable Schemes.java new file mode 100644 index 00000000..7a1cabc4 --- /dev/null +++ b/Hard/Profitable Schemes.java @@ -0,0 +1,23 @@ +class Solution { + + private static final int MOD = 1000_000_007; + + public int profitableSchemes(int n, int minProfit, int[] group, int[] profit) { + Integer[][][] dp = new Integer[101][101][101]; + return helper(0, 0, 0, n, minProfit, group, profit, dp); + } + + private int helper(int pos, int count, int profit, int n, int minProfit, int[] group, int[] profits, Integer[][][] dp) { + if (pos == group.length) { + return profit >= minProfit ? 1 : 0; + } + if (dp[pos][count][profit] != null) { + return dp[pos][count][profit]; + } + int totalWays = helper(pos + 1, count, profit, n, minProfit, group, profits, dp); + if (count + group[pos] <= n) { + totalWays += helper(pos + 1, count + group[pos], Math.min(minProfit, profit + profits[pos]), n, minProfit, group, profits, dp); + } + return dp[pos][count][profit] = totalWays % MOD; + } +} From 2b7e3f0123b892d91688ef9ee93d84f84276e373 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 21 Apr 2023 06:16:26 -0700 Subject: [PATCH 1095/1640] Added Find the Maximum Divisibility Score.java --- .../Find the Maximum Divisibility Score.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Find the Maximum Divisibility Score.java diff --git a/Medium/Find the Maximum Divisibility Score.java b/Medium/Find the Maximum Divisibility Score.java new file mode 100644 index 00000000..2e33ee9a --- /dev/null +++ b/Medium/Find the Maximum Divisibility Score.java @@ -0,0 +1,19 @@ +class Solution { + public int maxDivScore(int[] nums, int[] divisors) { + int maxScore = -1; + int maxScoreCandidate = -1; + for (int divisor : divisors) { + int currScore = 0; + for (int num : nums) { + currScore += num % divisor == 0 ? 1 : 0; + } + if (currScore > maxScore) { + maxScore = currScore; + maxScoreCandidate = divisor; + } else if (currScore == maxScore) { + maxScoreCandidate = Math.min(maxScoreCandidate, divisor); + } + } + return maxScoreCandidate; + } +} From f2304067c2c542b3e3bdb519f6d2a62705cc9c2b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 21 Apr 2023 14:23:14 -0700 Subject: [PATCH 1096/1640] Update Trapping Rain Water.java --- Hard/Trapping Rain Water.java | 40 ++++++++++++++++------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/Hard/Trapping Rain Water.java b/Hard/Trapping Rain Water.java index 8747d76b..263ab08a 100644 --- a/Hard/Trapping Rain Water.java +++ b/Hard/Trapping Rain Water.java @@ -1,27 +1,23 @@ class Solution { - public int trap(int[] height) { - int leftIdx = 0; - int rightIdx = height.length - 1; - int leftMax = 0; - int rightMax = 0; - int result = 0; - while (leftIdx < rightIdx) { - if (height[leftIdx] < height[rightIdx]) { - if (height[leftIdx] >= leftMax) { - leftMax = height[leftIdx]; - } else { - result += leftMax - height[leftIdx]; + public int trap(int[] height) { + if (height.length == 0) { + return 0; } - leftIdx++; - } else { - if (height[rightIdx] >= rightMax) { - rightMax = height[rightIdx]; - } else { - result += rightMax - height[rightIdx]; + int n = height.length; + int[] leftMax = new int[n]; + leftMax[0] = height[0]; + for (int i = 1; i < n; i++) { + leftMax[i] = Math.max(height[i], leftMax[i - 1]); } - rightIdx--; - } + int[] rightMax = new int[n]; + rightMax[n - 1] = height[n - 1]; + for (int i = n - 2; i >= 0; i--) { + rightMax[i] = Math.max(rightMax[i + 1], height[i]); + } + int result = 0; + for (int i = 1; i < n - 1; i++) { + result += Math.min(leftMax[i], rightMax[i]) - height[i]; + } + return result; } - return result; - } } From 5b31e8013879b0630a52847fde34409d4b492e6d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Apr 2023 07:45:07 -0700 Subject: [PATCH 1097/1640] Create Minimum Insertion Steps to Make a String Palindrome.java --- ...ion Steps to Make a String Palindrome.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Hard/Minimum Insertion Steps to Make a String Palindrome.java diff --git a/Hard/Minimum Insertion Steps to Make a String Palindrome.java b/Hard/Minimum Insertion Steps to Make a String Palindrome.java new file mode 100644 index 00000000..3ffd2f07 --- /dev/null +++ b/Hard/Minimum Insertion Steps to Make a String Palindrome.java @@ -0,0 +1,22 @@ +class Solution { + public int minInsertions(String s) { + int n = s.length(); + return n - lcs(s, new StringBuilder(s).reverse().toString(), n, n); + } + + private int lcs(String s1, String s2, int m, int n) { + int[][] dp = new int[m + 1][n + 1]; + for (int i = 0; i <= m; i++) { + for (int j = 0; j <= n; j++) { + if (i == 0 || j == 0) { + dp[i][j] = 0; + } else if (s1.charAt(i - 1) == s2.charAt(j - 1)) { + dp[i][j] = dp[i - 1][j - 1] + 1; + } else { + dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]); + } + } + } + return dp[m][n]; + } +} From f3ffae5aa4cca3fefe4579592443150be48f6ab1 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 23 Apr 2023 06:49:51 -0700 Subject: [PATCH 1098/1640] Added Restore The Array.java --- Hard/Restore The Array.java | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Hard/Restore The Array.java diff --git a/Hard/Restore The Array.java b/Hard/Restore The Array.java new file mode 100644 index 00000000..9b6ffc76 --- /dev/null +++ b/Hard/Restore The Array.java @@ -0,0 +1,31 @@ +class Solution { + + private static final int MOD = 1000_000_007; + + public int numberOfArrays(String s, int k) { + int n = s.length(); + int[] dp = new int[n + 1]; + return dfs(dp, 0, s, k); + } + + private int dfs(int[] dp, int start, String s, int k) { + if (dp[start] != 0) { + return dp[start]; + } + if (start == s.length()) { + return 1; + } + if (s.charAt(start) == '0') { + return 0; + } + int count = 0; + for (int end = start; end < s.length(); end++) { + String currNum = s.substring(start, end + 1); + if (Long.parseLong(currNum) > k) { + break; + } + count = (count + dfs(dp, end + 1, s, k)) % MOD; + } + return dp[start] = count; + } +} From db9a788061764ae30471659808fd59af3d03c475 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 23 Apr 2023 06:53:00 -0700 Subject: [PATCH 1099/1640] Added Calculate Delayed Arrival Time.java --- Easy/Calculate Delayed Arrival Time.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Easy/Calculate Delayed Arrival Time.java diff --git a/Easy/Calculate Delayed Arrival Time.java b/Easy/Calculate Delayed Arrival Time.java new file mode 100644 index 00000000..47367e00 --- /dev/null +++ b/Easy/Calculate Delayed Arrival Time.java @@ -0,0 +1,6 @@ +class Solution { + public int findDelayedArrivalTime(int arrivalTime, int delayedTime) { + int newTime = arrivalTime + delayedTime; + return newTime - (newTime >= 24 ? 24 : 0); + } +} From 2e0f4ff134aceb372482c1382790b1b9c405468c Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 23 Apr 2023 06:56:58 -0700 Subject: [PATCH 1100/1640] Added Sum Multiples.java --- Medium/Sum Multiples.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Medium/Sum Multiples.java diff --git a/Medium/Sum Multiples.java b/Medium/Sum Multiples.java new file mode 100644 index 00000000..59bfa012 --- /dev/null +++ b/Medium/Sum Multiples.java @@ -0,0 +1,7 @@ +class Solution { + public int sumOfMultiples(int n) { + return IntStream.rangeClosed(1, n) + .filter(value -> value % 3 == 0 || value % 5 == 0 || value % 7 == 0) + .sum(); + } +} From 9172a003269d65343caa90f3be7a5d10ba74a8f9 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 23 Apr 2023 17:36:37 -0700 Subject: [PATCH 1101/1640] Updated Last Stone Weight.java --- Easy/Last Stone Weight.java | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Easy/Last Stone Weight.java b/Easy/Last Stone Weight.java index 08f390b1..afb35b41 100644 --- a/Easy/Last Stone Weight.java +++ b/Easy/Last Stone Weight.java @@ -1,16 +1,16 @@ class Solution { - public int lastStoneWeight(int[] stones) { - PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o2 - o1); - for (int stone : stones) { - pq.add(stone); + public int lastStoneWeight(int[] stones) { + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + for (int stone : stones) { + pq.add(stone); + } + while (pq.size() > 1) { + int stoneOne = pq.poll(); + int stoneTwo = pq.poll(); + if (stoneOne != stoneTwo) { + pq.add(stoneOne - stoneTwo); + } + } + return pq.isEmpty() ? 0 : pq.poll(); } - while (pq.size() > 1) { - int firstStone = pq.poll(); - int secondStone = pq.poll(); - if (firstStone != secondStone) { - pq.add(firstStone - secondStone); - } - } - return pq.isEmpty() ? 0 : pq.poll(); - } } From ea4c113b8c98bdbb0310e2ae11f03a9e3a447451 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 24 Apr 2023 12:32:55 -0700 Subject: [PATCH 1102/1640] Updated Sliding Window Maximum.java --- Hard/Sliding Window Maximum.java | 43 +++++++++++++++++--------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/Hard/Sliding Window Maximum.java b/Hard/Sliding Window Maximum.java index c1ae146e..2aafc22d 100644 --- a/Hard/Sliding Window Maximum.java +++ b/Hard/Sliding Window Maximum.java @@ -1,23 +1,26 @@ class Solution { - public int[] maxSlidingWindow(int[] nums, int k) { - int n = nums.length; - if (n == 0 || k == 0) { - return new int[0]; + public int[] maxSlidingWindow(int[] nums, int k) { + int[] result = new int[nums.length - k + 1]; + int start = 0; + int end = 0; + Deque queue = new ArrayDeque<>(); + while (end < nums.length) { + // Remove elements from end of queue as long as the value at end of queue is less + // than the current value + while (!queue.isEmpty() && nums[queue.peekLast()] < nums[end]) { + queue.removeLast(); + } + queue.add(end); + // Remove the first element from the queue if we have already passed it in our range + if (start > queue.peekFirst()) { + queue.removeFirst(); + } + // Update result if our window is at least of size k + if (end + 1 >= k) { + result[start++] = nums[queue.peekFirst()]; + } + end++; + } + return result; } - int[] result = new int[n - k + 1]; - Deque deque = new ArrayDeque<>(); - for (int i = 0; i < n; i++) { - while (deque.size() > 0 && deque.peekFirst() <= i - k) { - deque.pollFirst(); - } - while (deque.size() > 0 && nums[deque.peekLast()] < nums[i]) { - deque.pollLast(); - } - deque.offerLast(i); - if (i >= k - 1) { - result[i -k + 1] = nums[deque.peekFirst()]; - } - } - return result; - } } From 48835931330cdefe460f8c8685c0a0d61384c4bc Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 24 Apr 2023 13:10:01 -0700 Subject: [PATCH 1103/1640] Updated Next Permutation.java --- Medium/Next Permutation.java | 54 ++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Medium/Next Permutation.java b/Medium/Next Permutation.java index 7b808969..b08a0001 100644 --- a/Medium/Next Permutation.java +++ b/Medium/Next Permutation.java @@ -1,31 +1,31 @@ class Solution { - public void nextPermutation(int[] nums) { - int idx = nums.length - 2; - while (idx >= 0 && nums[idx + 1] <= nums[idx]) { - idx--; + public void nextPermutation(int[] nums) { + int n = nums.length; + int pivot = n - 1; + // Find the first value where decreasing order doesn't holds + while (pivot > 0 && nums[pivot] <= nums[pivot - 1]) { + pivot--; + } + if (pivot != 0) { + int i = n - 1; + // Find the first value from right to left which is greater than element at + // pivot - 1 + while (nums[i] <= nums[pivot - 1]) { + i--; + } + swap(nums, pivot - 1, i); + } + // Reverse the complete array + int left = pivot; + int right = n - 1; + while (left < right) { + swap(nums, left++, right--); + } } - if (idx >= 0) { - int endIdx = nums.length - 1; - while (nums[endIdx] <= nums[idx]) { - endIdx--; - } - swap(nums, idx, endIdx); + + private void swap(int[] nums, int idxOne, int idxTwo) { + int temp = nums[idxOne]; + nums[idxOne] = nums[idxTwo]; + nums[idxTwo] = temp; } - reverse(nums, idx + 1); - } - - private void reverse(int[] nums, int startIdx) { - int endIdx = nums.length - 1; - while (startIdx < endIdx) { - swap(nums, startIdx, endIdx); - startIdx++; - endIdx--; - } - } - - private void swap(int[] nums, int i, int j) { - int temp = nums[i]; - nums[i] = nums[j]; - nums[j] = temp; - } } From 12612219c07351b29034b86190f1eff6c828e424 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 24 Apr 2023 13:28:46 -0700 Subject: [PATCH 1104/1640] Updated Task Scheduler.java --- Medium/Task Scheduler.java | 40 +++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/Medium/Task Scheduler.java b/Medium/Task Scheduler.java index 558e1f77..0023aa9d 100644 --- a/Medium/Task Scheduler.java +++ b/Medium/Task Scheduler.java @@ -1,16 +1,30 @@ class Solution { - public int leastInterval(char[] tasks, int n) { - int[] frequencies = new int[26]; - for (char task : tasks) { - frequencies[task - 'A']++; + public int leastInterval(char[] tasks, int n) { + Map map = new HashMap<>(); + for (char c : tasks) { + map.put(c, map.getOrDefault(c, 0) + 1); + } + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + pq.addAll(map.values()); + int cycles = 0; + while (!pq.isEmpty()) { + List temp = new ArrayList<>(); + // Wait for one cooldown period and process one occurrence of all remaining tasks + for (int i = 0; i < n + 1; i++) { + if (!pq.isEmpty()) { + temp.add(pq.remove()); + } + } + // If task has more occurrences left then add it back to heap + for (int task : temp) { + if (task > 1) { + pq.add(task - 1); + } + } + // If heap is empty that means we finished all tasks and don't need to wait for + // the whole cooldown to finish else add one complete cooldown period + cycles += pq.isEmpty() ? temp.size() : n + 1; + } + return cycles; } - Arrays.sort(frequencies); - int maxFrequency = frequencies[25]; - int idleTime = (maxFrequency - 1) * n; - for (int i = frequencies.length - 2; i >= 0 && idleTime > 0; i--) { - idleTime -= Math.min(maxFrequency - 1, frequencies[i]); - } - idleTime = Math.max(0, idleTime); - return idleTime + tasks.length; - } } From d9847ba15c92bfbe20e875e9447ec8d029361162 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 24 Apr 2023 14:26:46 -0700 Subject: [PATCH 1105/1640] Added Alien Dictionary.java --- Hard/Alien Dictionary.java | 48 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Hard/Alien Dictionary.java diff --git a/Hard/Alien Dictionary.java b/Hard/Alien Dictionary.java new file mode 100644 index 00000000..939de634 --- /dev/null +++ b/Hard/Alien Dictionary.java @@ -0,0 +1,48 @@ +class Solution { + public String alienOrder(String[] words) { + Map> graph = new HashMap<>(); + for (String word : words) { + for (char c : word.toCharArray()) { + graph.computeIfAbsent(c, k -> new HashSet<>()); + } + } + for (int i = 0; i < words.length - 1; i++) { + String word1 = words[i]; + String word2 = words[i + 1]; + int minLength = Math.min(word1.length(), word2.length()); + if (word1.length() > word2.length() && word1.startsWith(word2)) { + return ""; + } + for (int j = 0; j < minLength; j++) { + if (word1.charAt(j) != word2.charAt(j)) { + graph.get(word1.charAt(j)).add(word2.charAt(j)); + break; + } + } + } + StringBuilder sb = new StringBuilder(); + Map visited = new HashMap<>(); + for (Character c : graph.keySet()) { + if (dfs(c, graph, sb, visited)) { + return ""; + } + } + return sb.reverse().toString(); + } + + private boolean dfs(Character c, Map> graph, + StringBuilder sb, Map visited) { + if (visited.containsKey(c)) { + return visited.get(c); + } + visited.put(c, true); + for (Character neighbor : graph.getOrDefault(c, new HashSet<>())) { + if (dfs(neighbor, graph, sb, visited)) { + return true; + } + } + visited.put(c, false); + sb.append(c); + return false; + } +} From 86947527a7e06fe4c34a556fc2d2a3365647cfa3 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 27 Apr 2023 06:49:48 -0700 Subject: [PATCH 1106/1640] Updated Minimum Window Subsequence.java --- Hard/Minimum Window Subsequence.java | 58 ++++++++++++++++------------ 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/Hard/Minimum Window Subsequence.java b/Hard/Minimum Window Subsequence.java index 88c2a006..d1a9b971 100644 --- a/Hard/Minimum Window Subsequence.java +++ b/Hard/Minimum Window Subsequence.java @@ -1,29 +1,39 @@ class Solution { - public String minWindow(String s1, String s2) { - String window = ""; - int j = 0; - int minLength = s1.length() + 1; - for (int i = 0; i < s1.length(); i++) { - if (s1.charAt(i) == s2.charAt(j)) { - j++; - if (j == s2.length()) { - int end = i + 1; - j--; - while (j >= 0) { - if (s1.charAt(i) == s2.charAt(j)) { - j--; + public String minWindow(String s1, String s2) { + int right = 0; + int minWindowLength = Integer.MAX_VALUE; + String result = ""; + while (right < s1.length()) { + int s2Idx = 0; + while (right < s1.length()) { + if (s1.charAt(right) == s2.charAt(s2Idx)) { + s2Idx++; + } + if (s2Idx == s2.length()) { + break; + } + right++; } - i--; - } - j++; - i++; - if (end - i < minLength) { - minLength = end - i; - window = s1.substring(i, end); - } + if (right == s1.length()) { + break; + } + int s1EndIdx = right; + int s2EndIdx = s2.length() - 1; + while (s1EndIdx >= 0) { + if (s1.charAt(s1EndIdx) == s2.charAt(s2EndIdx)) { + s2EndIdx--; + } + if (s2EndIdx < 0) { + break; + } + s1EndIdx--; + } + if (right - s1EndIdx + 1 < minWindowLength) { + minWindowLength = right - s1EndIdx + 1; + result = s1.substring(s1EndIdx, right + 1); + } + right = s1EndIdx + 1; } - } + return result; } - return window; - } } From 82b09798ab699ee6781d5f0e9fa55513a8a0942a Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 27 Apr 2023 18:09:01 -0700 Subject: [PATCH 1107/1640] Added Similar String Groups.java --- Hard/Similar String Groups.java | 51 +++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Hard/Similar String Groups.java diff --git a/Hard/Similar String Groups.java b/Hard/Similar String Groups.java new file mode 100644 index 00000000..50eb13d2 --- /dev/null +++ b/Hard/Similar String Groups.java @@ -0,0 +1,51 @@ +class Solution { + public int numSimilarGroups(String[] strs) { + int n = strs.length; + Map> graph = new HashMap<>(); + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + if (isSimilar(strs[i], strs[j])) { + graph.computeIfAbsent(i, k -> new ArrayList<>()).add(j); + graph.computeIfAbsent(j, k -> new ArrayList<>()).add(i); + } + } + } + boolean[] visited = new boolean[n]; + int count = 0; + for (int i = 0; i < n; i++) { + if (!visited[i]) { + bfs(i, graph, visited); + count++; + } + } + return count; + } + + private boolean isSimilar(String s1, String s2) { + int diff = 0; + for (int i = 0; i < s1.length(); i++) { + if (s1.charAt(i) != s2.charAt(i)) { + diff++; + } + } + return diff == 0 || diff == 2; + } + + private void bfs(int node, Map> graph, boolean[] visited) { + Queue queue = new LinkedList<>(); + queue.add(node); + visited[node] = true; + while (!queue.isEmpty()) { + node = queue.poll(); + if (!graph.containsKey(node)) { + continue; + } + for (int neighbor : graph.get(node)) { + if (!visited[neighbor]) { + visited[neighbor] = true; + queue.add(neighbor); + } + } + } + } +} From 23d28abb51e5417318918d1b10bfbd8aab3f59d8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 29 Apr 2023 07:32:47 -0700 Subject: [PATCH 1108/1640] Added Checking Existence of Edge Length Limited Paths.java --- ...xistence of Edge Length Limited Paths.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Hard/Checking Existence of Edge Length Limited Paths.java diff --git a/Hard/Checking Existence of Edge Length Limited Paths.java b/Hard/Checking Existence of Edge Length Limited Paths.java new file mode 100644 index 00000000..d03848ef --- /dev/null +++ b/Hard/Checking Existence of Edge Length Limited Paths.java @@ -0,0 +1,41 @@ +class Solution { + public boolean[] distanceLimitedPathsExist(int n, int[][] edgeList, int[][] queries) { + UnionFind unionFind = new UnionFind(n); + for (int i = 0; i < queries.length; i++) { + queries[i] = new int[]{queries[i][0], queries[i][1], queries[i][2], i}; + } + Arrays.sort(queries, Comparator.comparingInt(a -> a[2])); + Arrays.sort(edgeList, Comparator.comparingInt(a -> a[2])); + boolean[] result = new boolean[queries.length]; + for (int i = 0, j = 0; i < queries.length; i++) { + int[] query = queries[i]; + while (j < edgeList.length && edgeList[j][2] < query[2]) { + unionFind.union(edgeList[j][0], edgeList[j++][1]); + } + result[query[3]] = unionFind.find(query[0]) == unionFind.find(query[1]); + } + return result; + } + + private static class UnionFind { + private final int[] parent; + + public UnionFind(int n) { + this.parent = new int[n]; + for (int i = 0; i < n; i++) { + parent[i] = i; + } + } + + public int find(int node) { + if (parent[node] != node) { + parent[node] = find(parent[node]); + } + return parent[node]; + } + + public void union(int x, int y) { + parent[find(x)] = parent[find(y)]; + } + } +} From 0b1e882294cac31192762809e1c1c723d6475416 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 29 Apr 2023 10:25:32 -0700 Subject: [PATCH 1109/1640] Added Maximum Sum With Exactly K Elements.java --- Easy/Maximum Sum With Exactly K Elements.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Maximum Sum With Exactly K Elements.java diff --git a/Easy/Maximum Sum With Exactly K Elements.java b/Easy/Maximum Sum With Exactly K Elements.java new file mode 100644 index 00000000..ad738207 --- /dev/null +++ b/Easy/Maximum Sum With Exactly K Elements.java @@ -0,0 +1,13 @@ +class Solution { + public int maximizeSum(int[] nums, int k) { + int maxNum = 0; + for (int num : nums) { + maxNum = Math.max(num, maxNum); + } + int score = 0; + while (k-- > 0) { + score += maxNum++; + } + return score; + } +} From ece65cc705adc2f8c63839d22f8e29d26941b85f Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 29 Apr 2023 10:28:31 -0700 Subject: [PATCH 1110/1640] Updated stats --- Easy/README.md | 1057 +++++++++++++++++---------------- Hard/README.md | 205 ++++--- Medium/README.md | 1483 +++++++++++++++++++++++----------------------- README.md | 8 +- 4 files changed, 1393 insertions(+), 1360 deletions(-) diff --git a/Easy/README.md b/Easy/README.md index 23f8ec11..d3b1e72e 100644 --- a/Easy/README.md +++ b/Easy/README.md @@ -39,527 +39,536 @@ S.no | Coding Problem 36 | [Build an Array With Stack Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20an%20Array%20With%20Stack%20Operations.java) 37 | [Bulls and Cows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bulls%20and%20Cows.java) 38 | [Calculate Amount Paid in Taxes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Amount%20Paid%20in%20Taxes.java) -39 | [Calculate Digit Sum of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Digit%20Sum%20of%20a%20String.java) -40 | [Calculate Money in Leetcode Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Money%20in%20Leetcode%20Bank.java) -41 | [Can Make Arithmetic Progression From Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Make%20Arithmetic%20Progression%20From%20Sequence.java) -42 | [Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) -43 | [Capitalize the Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Capitalize%20the%20Title.java) -44 | [Categorize Box According to Criteria](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Categorize%20Box%20According%20to%20Criteria.java) -45 | [Cells in a Range on an Excel Sheet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20in%20a%20Range%20on%20an%20Excel%20Sheet.java) -46 | [Cells with Odd Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20with%20Odd%20Values%20in%20a%20Matrix.java) -47 | [Check Array Formation Through Concatenation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Array%20Formation%20Through%20Concatenation.java) -48 | [Check Distances Between Same Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Distances%20Between%20Same%20Letters.java) -49 | [Check If It Is a Straight Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20It%20Is%20a%20Straight%20Line.java) -50 | [Check If N and Its Double Exist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20N%20and%20Its%20Double%20Exist.java) -51 | [Check If String Is a Prefix of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20String%20Is%20a%20Prefix%20of%20Array.java) -52 | [Check If Two String Arrays are Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20Two%20String%20Arrays%20are%20Equivalent.java) -53 | [Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) -54 | [Check If a Word Occurs As a Prefix of Any Word in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Word%20Occurs%20As%20a%20Prefix%20of%20Any%20Word%20in%20a%20Sentence.java) -55 | [Check Whether Two Strings are Almost Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Whether%20Two%20Strings%20are%20Almost%20Equivalent.java) -56 | [Check if All A's Appears Before All B's](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20A's%20Appears%20Before%20All%20B's.java) -57 | [Check if All Characters Have Equal Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20Characters%20Have%20Equal%20Number%20of%20Occurrences.java) -58 | [Check if All the Integers in a Range Are Covered](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered.java) -59 | [Check if Array Is Sorted and Rotated](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20Is%20Sorted%20and%20Rotated.java) -60 | [Check if Binary String Has at Most One Segment of Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Binary%20String%20Has%20at%20Most%20One%20Segment%20of%20Ones.java) -61 | [Check if Every Row and Column Contains All Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Every%20Row%20and%20Column%20Contains%20All%20Numbers.java) -62 | [Check if Matrix Is X-Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Matrix%20Is%20X-Matrix.java) -63 | [Check if Number Has Equal Digit Count and Digit Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Number%20Has%20Equal%20Digit%20Count%20and%20Digit%20Value.java) -64 | [Check if Numbers Are Ascending in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Numbers%20Are%20Ascending%20in%20a%20Sentence.java) -65 | [Check if One String Swap Can Make Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20One%20String%20Swap%20Can%20Make%20Strings%20Equal.java) -66 | [Check if String Is Decomposable Into Value-Equal Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20String%20Is%20Decomposable%20Into%20Value-Equal%20Substrings.java) -67 | [Check if Word Equals Summation of Two Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Word%20Equals%20Summation%20of%20Two%20Words.java) -68 | [Check if an Array Is Consecutive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20an%20Array%20Is%20Consecutive.java) -69 | [Check if the Sentence Is Pangram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20the%20Sentence%20Is%20Pangram.java) -70 | [Circular Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Circular%20Sentence.java) -71 | [Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) -72 | [Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) -73 | [Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) -74 | [Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) -75 | [Concatenation of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Concatenation%20of%20Array.java) -76 | [Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) -77 | [Consecutive Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Consecutive%20Characters.java) -78 | [Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) -79 | [Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) -80 | [Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) -81 | [Contains Duplicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate.java) -82 | [Convert 1D Array Into 2D Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%201D%20Array%20Into%202D%20Array.java) -83 | [Convert BST to Greater Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20Greater%20Tree.java) -84 | [Convert Binary Number in a Linked List to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Binary%20Number%20in%20a%20Linked%20List%20to%20Integer.java) -85 | [Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) -86 | [Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) -87 | [Convert the Temperature](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20the%20Temperature.java) -88 | [Count Asterisks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Asterisks.java) -89 | [Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) -90 | [Count Common Words With One Occurrence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Common%20Words%20With%20One%20Occurrence.java) -91 | [Count Distinct Numbers on Board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Distinct%20Numbers%20on%20Board.java) -92 | [Count Elements With Strictly Smaller and Greater Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Elements%20With%20Strictly%20Smaller%20and%20Greater%20Elements.java) -93 | [Count Equal and Divisible Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Equal%20and%20Divisible%20Pairs%20in%20an%20Array.java) -94 | [Count Good Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Good%20Triplets.java) -95 | [Count Hills and Valleys in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Hills%20and%20Valleys%20in%20an%20Array.java) -96 | [Count Integers With Even Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Integers%20With%20Even%20Digit%20Sum.java) -97 | [Count Items Matching a Rule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Items%20Matching%20a%20Rule.java) -98 | [Count Largest Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Largest%20Group.java) -99 | [Count Negative Numbers in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Negative%20Numbers%20in%20a%20Sorted%20Matrix.java) -100 | [Count Number of Pairs With Absolute Difference K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Number%20of%20Pairs%20With%20Absolute%20Difference%20K.java) -101 | [Count Odd Numbers in an Interval Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Odd%20Numbers%20in%20an%20Interval%20Range.java) -102 | [Count Operations to Obtain Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Operations%20to%20Obtain%20Zero.java) -103 | [Count Pairs Of Similar Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Pairs%20Of%20Similar%20Strings.java) -104 | [Count Prefixes of a Given String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Prefixes%20of%20a%20Given%20String.java) -105 | [Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) -106 | [Count Special Quadruplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Special%20Quadruplets.java) -107 | [Count Square Sum Triples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Square%20Sum%20Triples.java) -108 | [Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) -109 | [Count Vowel Substrings of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Vowel%20Substrings%20of%20a%20String.java) -110 | [Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) -111 | [Count the Digits That Divide a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Digits%20That%20Divide%20a%20Number.java) -112 | [Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) -113 | [Count the Number of Vowel Strings in Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Vowel%20Strings%20in%20Range.java) -114 | [Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Bits.java) -115 | [Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) -116 | [Counting Words With a Given Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Words%20With%20a%20Given%20Prefix.java) -117 | [Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) -118 | [Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) -119 | [Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) -120 | [DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) -121 | [Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) -122 | [Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) -123 | [Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) -124 | [Decode the Message](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20the%20Message.java) -125 | [Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) -126 | [Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) -127 | [Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) -128 | [Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) -129 | [Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) -130 | [Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) -131 | [Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) -132 | [Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) -133 | [Delete Node in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Node%20in%20a%20Linked%20List.java) -134 | [Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) -135 | [Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) -136 | [Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) -137 | [Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) -138 | [Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) -139 | [Design an Ordered Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20Stream.java) -140 | [Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) -141 | [Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) -142 | [Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) -143 | [Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) -144 | [Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) -145 | [Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) -146 | [Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) -147 | [Determine if Two Events Have Conflict](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20Two%20Events%20Have%20Conflict.java) -148 | [Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) -149 | [Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) -150 | [Difference Between Element Sum and Digit Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Difference%20Between%20Element%20Sum%20and%20Digit%20Sum%20of%20an%20Array.java) -151 | [Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) -152 | [Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) -153 | [Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) -154 | [Divide Array Into Equal Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20Array%20Into%20Equal%20Pairs.java) -155 | [Divide a String Into Groups of Size k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20a%20String%20Into%20Groups%20of%20Size%20k.java) -156 | [Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) -157 | [Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) -158 | [Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) -159 | [Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) -160 | [Evaluate Boolean Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Evaluate%20Boolean%20Binary%20Tree.java) -161 | [Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) -162 | [Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) -163 | [Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) -164 | [Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) -165 | [Fibonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Number.java) -166 | [Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) -167 | [Final Value of Variable After Performing Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Value%20of%20Variable%20After%20Performing%20Operations.java) -168 | [Find All K-Distant Indices in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20K-Distant%20Indices%20in%20an%20Array.java) -169 | [Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) -170 | [Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) -171 | [Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) -172 | [Find Closest Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Closest%20Number%20to%20Zero.java) -173 | [Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) -174 | [Find First Palindromic String in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20First%20Palindromic%20String%20in%20the%20Array.java) -175 | [Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) -176 | [Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) -177 | [Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) -178 | [Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) -179 | [Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) -180 | [Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) -181 | [Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) -182 | [Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) -183 | [Find Resultant Array After Removing Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Resultant%20Array%20After%20Removing%20Anagrams.java) -184 | [Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) -185 | [Find Subarrays With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Subarrays%20With%20Equal%20Sum.java) -186 | [Find Target Indices After Sorting Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Target%20Indices%20After%20Sorting%20Array.java) -187 | [Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) -188 | [Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) -189 | [Find if Path Exists in Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20if%20Path%20Exists%20in%20Graph.java) -190 | [Find the Array Concatenation Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Array%20Concatenation%20Value.java) -191 | [Find the Difference of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Difference%20of%20Two%20Arrays.java) -192 | [Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) -193 | [Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) -194 | [Find the K-Beauty of a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20K-Beauty%20of%20a%20Number.java) -195 | [Find the Middle Index in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Middle%20Index%20in%20Array.java) -196 | [Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) -197 | [Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) -198 | [Finding 3-Digit Even Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Finding%203-Digit%20Even%20Numbers.java) -199 | [First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) -200 | [First Letter to Appear Twice](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Letter%20to%20Appear%20Twice.java) -201 | [First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) -202 | [Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) -203 | [Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) -204 | [Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) -205 | [Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) -206 | [Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) -207 | [Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) -208 | [Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) -209 | [Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) -210 | [Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) -211 | [Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) -212 | [Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) -213 | [Greatest English Letter in Upper and Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20English%20Letter%20in%20Upper%20and%20Lower%20Case.java) -214 | [Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) -215 | [Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) -216 | [Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) -217 | [Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) -218 | [Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) -219 | [Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) -220 | [Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) -221 | [High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) -222 | [How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) -223 | [How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) -224 | [Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) -225 | [Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) -226 | [Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) -227 | [Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) -228 | [Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) -229 | [Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) -230 | [Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) -231 | [Intersection of Multiple Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Multiple%20Arrays.java) -232 | [Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) -233 | [Intersection of Two Arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays%20II.java) -234 | [Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) -235 | [Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) -236 | [Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) -237 | [Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) -238 | [Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) -239 | [Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) -240 | [Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) -241 | [Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) -242 | [K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) -243 | [Keep Multiplying Found Values by Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keep%20Multiplying%20Found%20Values%20by%20Two.java) -244 | [Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) -245 | [Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) -246 | [Kth Distinct String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Distinct%20String%20in%20an%20Array.java) -247 | [Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) -248 | [Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) -249 | [Largest 3-Same-Digit Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%203-Same-Digit%20Number%20in%20String.java) -250 | [Largest Local Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Local%20Values%20in%20a%20Matrix.java) -251 | [Largest Number After Digit Swaps by Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20After%20Digit%20Swaps%20by%20Parity.java) -252 | [Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) -253 | [Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) -254 | [Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) -255 | [Largest Positive Integer That Exists With Its Negative](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Positive%20Integer%20That%20Exists%20With%20Its%20Negative.java) -256 | [Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) -257 | [Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) -258 | [Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) -259 | [Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) -260 | [Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) -261 | [Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) -262 | [Left and Right Sum Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Left%20and%20Right%20Sum%20Differences.java) -263 | [Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) -264 | [Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) -265 | [Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) -266 | [License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) -267 | [Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) -268 | [Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) -269 | [Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) -270 | [Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) -271 | [Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) -272 | [Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) -273 | [Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) -274 | [Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) -275 | [Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) -276 | [Longest Subsequence With Limited Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Subsequence%20With%20Limited%20Sum.java) -277 | [Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) -278 | [Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) -279 | [Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) -280 | [Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) -281 | [Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) -282 | [Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) -283 | [Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) -284 | [Make Array Zero by Subtracting Equal Amounts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20Array%20Zero%20by%20Subtracting%20Equal%20Amounts.java) -285 | [Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) -286 | [Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) -287 | [Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) -288 | [Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) -289 | [Maximize Sum Of Array After K Negations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Sum%20Of%20Array%20After%20K%20Negations.java) -290 | [Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) -291 | [Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) -292 | [Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) -293 | [Maximum Count of Positive Integer and Negative Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Count%20of%20Positive%20Integer%20and%20Negative%20Integer.java) -294 | [Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) -295 | [Maximum Difference Between Increasing Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20Between%20Increasing%20Elements.java) -296 | [Maximum Difference by Remapping a Digit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20by%20Remapping%20a%20Digit.java) -297 | [Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) -298 | [Maximum Enemy Forts That Can Be Captured](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Enemy%20Forts%20That%20Can%20Be%20Captured.java) -299 | [Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) -300 | [Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) -301 | [Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) -302 | [Maximum Number of Pairs in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Pairs%20in%20Array.java) -303 | [Maximum Number of Words Found in Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20Found%20in%20Sentences.java) -304 | [Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) -305 | [Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) -306 | [Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) -307 | [Maximum Product of Three Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Three%20Numbers.java) -308 | [Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) -309 | [Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) -310 | [Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) -311 | [Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) -312 | [Maximum Value of a String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20a%20String%20in%20an%20Array.java) -313 | [Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) -314 | [Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) -315 | [Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) -316 | [Merge Similar Items](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Similar%20Items.java) -317 | [Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) -318 | [Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) -319 | [Merge Two 2D Arrays by Summing Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%202D%20Arrays%20by%20Summing%20Values.java) -320 | [Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) -321 | [Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) -322 | [Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) -323 | [Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) -324 | [Min Max Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Max%20Game.java) -325 | [Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) -326 | [Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) -327 | [Minimum Amount of Time to Fill Cups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Amount%20of%20Time%20to%20Fill%20Cups.java) -328 | [Minimum Bit Flips to Convert Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Bit%20Flips%20to%20Convert%20Number.java) -329 | [Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) -330 | [Minimum Common Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Common%20Value.java) -331 | [Minimum Cost of Buying Candies With Discount](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20of%20Buying%20Candies%20With%20Discount.java) -332 | [Minimum Cost to Move Chips to The Same Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20to%20Move%20Chips%20to%20The%20Same%20Position.java) -333 | [Minimum Cuts to Divide a Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cuts%20to%20Divide%20a%20Circle.java) -334 | [Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) -335 | [Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) -336 | [Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) -337 | [Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) -338 | [Minimum Hours of Training to Win a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Hours%20of%20Training%20to%20Win%20a%20Competition.java) -339 | [Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) -340 | [Minimum Moves to Convert String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Convert%20String.java) -341 | [Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) -342 | [Minimum Number of Moves to Seat Everyone](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Moves%20to%20Seat%20Everyone.java) -343 | [Minimum Number of Operations to Convert Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Operations%20to%20Convert%20Time.java) -344 | [Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) -345 | [Minimum Recolors to Get K Consecutive Black Blocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Recolors%20to%20Get%20K%20Consecutive%20Black%20Blocks.java) -346 | [Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) -347 | [Minimum Sum of Four Digit Number After Splitting Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Sum%20of%20Four%20Digit%20Number%20After%20Splitting%20Digits.java) -348 | [Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) -349 | [Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) -350 | [Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) -351 | [Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) -352 | [Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) -353 | [Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) -354 | [Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Ranges.java) -355 | [Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) -356 | [Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) -357 | [Most Frequent Even Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Even%20Element.java) -358 | [Most Frequent Number Following Key In an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Number%20Following%20Key%20In%20an%20Array.java) -359 | [Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) -360 | [Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) -361 | [Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) -362 | [N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) -363 | [N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) -364 | [N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) -365 | [N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) -366 | [Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) -367 | [Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) -368 | [Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) -369 | [Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) -370 | [Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) -371 | [Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) -372 | [Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) -373 | [Number of Arithmetic Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Arithmetic%20Triplets.java) -374 | [Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) -375 | [Number of Common Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Common%20Factors.java) -376 | [Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) -377 | [Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) -378 | [Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) -379 | [Number of Distinct Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Distinct%20Averages.java) -380 | [Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) -381 | [Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) -382 | [Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) -383 | [Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) -384 | [Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) -385 | [Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) -386 | [Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) -387 | [Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) -388 | [Number of Unequal Triplets in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Unequal%20Triplets%20in%20Array.java) -389 | [Number of Valid Words in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Valid%20Words%20in%20a%20Sentence.java) -390 | [Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) -391 | [Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) -392 | [Odd String Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Odd%20String%20Difference.java) -393 | [Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) -394 | [Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) -395 | [Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) -396 | [Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) -397 | [Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) -398 | [Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) -399 | [Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) -400 | [Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) -401 | [Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) -402 | [Pass the Pillow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pass%20the%20Pillow.java) -403 | [Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) -404 | [Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) -405 | [Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) -406 | [Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) -407 | [Percentage of Letter in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Percentage%20of%20Letter%20in%20String.java) -408 | [Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) -409 | [Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) -410 | [Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) -411 | [Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) -412 | [Power of Four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Four.java) -413 | [Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) -414 | [Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) -415 | [Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) -416 | [Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) -417 | [Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) -418 | [Range Sum of BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20of%20BST.java) -419 | [Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) -420 | [Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) -421 | [Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) -422 | [Rearrange Characters to Make Target String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Characters%20to%20Make%20Target%20String.java) -423 | [Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) -424 | [Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rectangle%20Overlap.java) -425 | [Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) -426 | [Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) -427 | [Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) -428 | [Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) -429 | [Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) -430 | [Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) -431 | [Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) -432 | [Remove Digit From Number to Maximize Result](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Digit%20From%20Number%20to%20Maximize%20Result.java) -433 | [Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) -434 | [Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) -435 | [Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) -436 | [Remove Letter To Equalize Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Letter%20To%20Equalize%20Frequency.java) -437 | [Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) -438 | [Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) -439 | [Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) -440 | [Remove Palindromic Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Palindromic%20Subsequences.java) -441 | [Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) -442 | [Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) -443 | [Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) -444 | [Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) -445 | [Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) -446 | [Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) -447 | [Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) -448 | [Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) -449 | [Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) -450 | [Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) -451 | [Reverse Prefix of Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Prefix%20of%20Word.java) -452 | [Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) -453 | [Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) -454 | [Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) -455 | [Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) -456 | [Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) -457 | [Rings and Rods](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rings%20and%20Rods.java) -458 | [Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) -459 | [Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) -460 | [Root Equals Sum of Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Root%20Equals%20Sum%20of%20Children.java) -461 | [Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) -462 | [Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) -463 | [Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) -464 | [Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) -465 | [Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) -466 | [Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) -467 | [Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) -468 | [Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) -469 | [Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) -470 | [Separate the Digits in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Separate%20the%20Digits%20in%20an%20Array.java) -471 | [Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) -472 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) -473 | [Shortest Distance to Target String in a Circular Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20Target%20String%20in%20a%20Circular%20Array.java) -474 | [Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) -475 | [Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) -476 | [Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) -477 | [Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) -478 | [Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) -479 | [Similar RGB Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Similar%20RGB%20Color.java) -480 | [Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) -481 | [Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) -482 | [Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) -483 | [Smallest Even Multiple](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Even%20Multiple.java) -484 | [Smallest Index With Equal Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Index%20With%20Equal%20Value.java) -485 | [Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) -486 | [Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) -487 | [Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) -488 | [Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) -489 | [Sort Even and Odd Indices Independently](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Even%20and%20Odd%20Indices%20Independently.java) -490 | [Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) -491 | [Sort the People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20the%20People.java) -492 | [Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) -493 | [Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) -494 | [Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) -495 | [Split With Minimum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20With%20Minimum%20Sum.java) -496 | [Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) -497 | [SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) -498 | [Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) -499 | [String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) -500 | [String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) -501 | [Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) -502 | [Strong Password Checker II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strong%20Password%20Checker%20II.java) -503 | [Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) -504 | [Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) -505 | [Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) -506 | [Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) -507 | [Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) -508 | [Sum Of Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20Of%20Two%20Integers.java) -509 | [Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) -510 | [Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) -511 | [Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) -512 | [Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) -513 | [Sum of Left Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Left%20Leaves.java) -514 | [Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) -515 | [Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) -516 | [Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) -517 | [Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) -518 | [Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) -519 | [Take Gifts From the Richest Pile](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Take%20Gifts%20From%20the%20Richest%20Pile.java) -520 | [Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teemo%20Attacking.java) -521 | [Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) -522 | [The Employee That Worked on the Longest Task](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20Employee%20That%20Worked%20on%20the%20Longest%20Task.java) -523 | [The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) -524 | [Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) -525 | [Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) -526 | [Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) -527 | [Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) -528 | [Time Needed to Buy Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Time%20Needed%20to%20Buy%20Tickets.java) -529 | [To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) -530 | [Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) -531 | [Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) -532 | [Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) -533 | [Two Furthest Houses With Different Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Furthest%20Houses%20With%20Different%20Colors.java) -534 | [Two Out of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Out%20of%20Three.java) -535 | [Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) -536 | [Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) -537 | [Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) -538 | [Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) -539 | [Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) -540 | [Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) -541 | [Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) -542 | [Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) -543 | [Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) -544 | [Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) -545 | [Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) -546 | [Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) -547 | [Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) -548 | [Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) -549 | [Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) -550 | [Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) -551 | [Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) -552 | [Valid Word Abbreviation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbreviation.java) -553 | [Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) -554 | [Valid Word Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Square.java) -555 | [Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) -556 | [Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) -557 | [Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) -558 | [X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) -559 | [XOR Operation in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/XOR%20Operation%20in%20an%20Array.java) -560 | [nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) -561 | [range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) -562 | [trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) +39 | [Calculate Delayed Arrival Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Delayed%20Arrival%20Time.java) +40 | [Calculate Digit Sum of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Digit%20Sum%20of%20a%20String.java) +41 | [Calculate Money in Leetcode Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Money%20in%20Leetcode%20Bank.java) +42 | [Can Make Arithmetic Progression From Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Make%20Arithmetic%20Progression%20From%20Sequence.java) +43 | [Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) +44 | [Capitalize the Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Capitalize%20the%20Title.java) +45 | [Categorize Box According to Criteria](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Categorize%20Box%20According%20to%20Criteria.java) +46 | [Cells in a Range on an Excel Sheet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20in%20a%20Range%20on%20an%20Excel%20Sheet.java) +47 | [Cells with Odd Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20with%20Odd%20Values%20in%20a%20Matrix.java) +48 | [Check Array Formation Through Concatenation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Array%20Formation%20Through%20Concatenation.java) +49 | [Check Distances Between Same Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Distances%20Between%20Same%20Letters.java) +50 | [Check If It Is a Straight Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20It%20Is%20a%20Straight%20Line.java) +51 | [Check If N and Its Double Exist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20N%20and%20Its%20Double%20Exist.java) +52 | [Check If String Is a Prefix of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20String%20Is%20a%20Prefix%20of%20Array.java) +53 | [Check If Two String Arrays are Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20Two%20String%20Arrays%20are%20Equivalent.java) +54 | [Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) +55 | [Check If a Word Occurs As a Prefix of Any Word in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Word%20Occurs%20As%20a%20Prefix%20of%20Any%20Word%20in%20a%20Sentence.java) +56 | [Check Whether Two Strings are Almost Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Whether%20Two%20Strings%20are%20Almost%20Equivalent.java) +57 | [Check if All A's Appears Before All B's](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20A's%20Appears%20Before%20All%20B's.java) +58 | [Check if All Characters Have Equal Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20Characters%20Have%20Equal%20Number%20of%20Occurrences.java) +59 | [Check if All the Integers in a Range Are Covered](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered.java) +60 | [Check if Array Is Sorted and Rotated](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20Is%20Sorted%20and%20Rotated.java) +61 | [Check if Binary String Has at Most One Segment of Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Binary%20String%20Has%20at%20Most%20One%20Segment%20of%20Ones.java) +62 | [Check if Every Row and Column Contains All Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Every%20Row%20and%20Column%20Contains%20All%20Numbers.java) +63 | [Check if Matrix Is X-Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Matrix%20Is%20X-Matrix.java) +64 | [Check if Number Has Equal Digit Count and Digit Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Number%20Has%20Equal%20Digit%20Count%20and%20Digit%20Value.java) +65 | [Check if Numbers Are Ascending in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Numbers%20Are%20Ascending%20in%20a%20Sentence.java) +66 | [Check if One String Swap Can Make Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20One%20String%20Swap%20Can%20Make%20Strings%20Equal.java) +67 | [Check if String Is Decomposable Into Value-Equal Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20String%20Is%20Decomposable%20Into%20Value-Equal%20Substrings.java) +68 | [Check if Word Equals Summation of Two Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Word%20Equals%20Summation%20of%20Two%20Words.java) +69 | [Check if an Array Is Consecutive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20an%20Array%20Is%20Consecutive.java) +70 | [Check if the Sentence Is Pangram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20the%20Sentence%20Is%20Pangram.java) +71 | [Circular Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Circular%20Sentence.java) +72 | [Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) +73 | [Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) +74 | [Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) +75 | [Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) +76 | [Concatenation of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Concatenation%20of%20Array.java) +77 | [Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) +78 | [Consecutive Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Consecutive%20Characters.java) +79 | [Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) +80 | [Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) +81 | [Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) +82 | [Contains Duplicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate.java) +83 | [Convert 1D Array Into 2D Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%201D%20Array%20Into%202D%20Array.java) +84 | [Convert BST to Greater Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20Greater%20Tree.java) +85 | [Convert Binary Number in a Linked List to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Binary%20Number%20in%20a%20Linked%20List%20to%20Integer.java) +86 | [Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) +87 | [Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) +88 | [Convert the Temperature](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20the%20Temperature.java) +89 | [Count Asterisks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Asterisks.java) +90 | [Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) +91 | [Count Common Words With One Occurrence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Common%20Words%20With%20One%20Occurrence.java) +92 | [Count Distinct Numbers on Board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Distinct%20Numbers%20on%20Board.java) +93 | [Count Elements With Strictly Smaller and Greater Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Elements%20With%20Strictly%20Smaller%20and%20Greater%20Elements.java) +94 | [Count Equal and Divisible Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Equal%20and%20Divisible%20Pairs%20in%20an%20Array.java) +95 | [Count Good Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Good%20Triplets.java) +96 | [Count Hills and Valleys in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Hills%20and%20Valleys%20in%20an%20Array.java) +97 | [Count Integers With Even Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Integers%20With%20Even%20Digit%20Sum.java) +98 | [Count Items Matching a Rule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Items%20Matching%20a%20Rule.java) +99 | [Count Largest Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Largest%20Group.java) +100 | [Count Negative Numbers in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Negative%20Numbers%20in%20a%20Sorted%20Matrix.java) +101 | [Count Number of Pairs With Absolute Difference K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Number%20of%20Pairs%20With%20Absolute%20Difference%20K.java) +102 | [Count Odd Numbers in an Interval Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Odd%20Numbers%20in%20an%20Interval%20Range.java) +103 | [Count Operations to Obtain Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Operations%20to%20Obtain%20Zero.java) +104 | [Count Pairs Of Similar Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Pairs%20Of%20Similar%20Strings.java) +105 | [Count Prefixes of a Given String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Prefixes%20of%20a%20Given%20String.java) +106 | [Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) +107 | [Count Special Quadruplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Special%20Quadruplets.java) +108 | [Count Square Sum Triples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Square%20Sum%20Triples.java) +109 | [Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) +110 | [Count Vowel Substrings of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Vowel%20Substrings%20of%20a%20String.java) +111 | [Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) +112 | [Count the Digits That Divide a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Digits%20That%20Divide%20a%20Number.java) +113 | [Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) +114 | [Count the Number of Vowel Strings in Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Vowel%20Strings%20in%20Range.java) +115 | [Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Bits.java) +116 | [Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) +117 | [Counting Words With a Given Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Words%20With%20a%20Given%20Prefix.java) +118 | [Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) +119 | [Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) +120 | [Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) +121 | [DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) +122 | [Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) +123 | [Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) +124 | [Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) +125 | [Decode the Message](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20the%20Message.java) +126 | [Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) +127 | [Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) +128 | [Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) +129 | [Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) +130 | [Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) +131 | [Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) +132 | [Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) +133 | [Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) +134 | [Delete Node in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Node%20in%20a%20Linked%20List.java) +135 | [Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) +136 | [Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) +137 | [Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) +138 | [Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) +139 | [Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) +140 | [Design an Ordered Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20Stream.java) +141 | [Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) +142 | [Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) +143 | [Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) +144 | [Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) +145 | [Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) +146 | [Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) +147 | [Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) +148 | [Determine if Two Events Have Conflict](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20Two%20Events%20Have%20Conflict.java) +149 | [Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) +150 | [Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) +151 | [Difference Between Element Sum and Digit Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Difference%20Between%20Element%20Sum%20and%20Digit%20Sum%20of%20an%20Array.java) +152 | [Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) +153 | [Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) +154 | [Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) +155 | [Distribute Money to Maximum Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Money%20to%20Maximum%20Children.java) +156 | [Divide Array Into Equal Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20Array%20Into%20Equal%20Pairs.java) +157 | [Divide a String Into Groups of Size k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20a%20String%20Into%20Groups%20of%20Size%20k.java) +158 | [Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) +159 | [Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) +160 | [Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) +161 | [Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) +162 | [Evaluate Boolean Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Evaluate%20Boolean%20Binary%20Tree.java) +163 | [Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) +164 | [Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) +165 | [Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) +166 | [Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) +167 | [Fibonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Number.java) +168 | [Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) +169 | [Final Value of Variable After Performing Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Value%20of%20Variable%20After%20Performing%20Operations.java) +170 | [Find All K-Distant Indices in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20K-Distant%20Indices%20in%20an%20Array.java) +171 | [Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) +172 | [Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) +173 | [Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) +174 | [Find Closest Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Closest%20Number%20to%20Zero.java) +175 | [Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) +176 | [Find First Palindromic String in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20First%20Palindromic%20String%20in%20the%20Array.java) +177 | [Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) +178 | [Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) +179 | [Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) +180 | [Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) +181 | [Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) +182 | [Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) +183 | [Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) +184 | [Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) +185 | [Find Resultant Array After Removing Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Resultant%20Array%20After%20Removing%20Anagrams.java) +186 | [Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) +187 | [Find Subarrays With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Subarrays%20With%20Equal%20Sum.java) +188 | [Find Target Indices After Sorting Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Target%20Indices%20After%20Sorting%20Array.java) +189 | [Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) +190 | [Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) +191 | [Find if Path Exists in Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20if%20Path%20Exists%20in%20Graph.java) +192 | [Find the Array Concatenation Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Array%20Concatenation%20Value.java) +193 | [Find the Difference of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Difference%20of%20Two%20Arrays.java) +194 | [Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) +195 | [Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) +196 | [Find the K-Beauty of a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20K-Beauty%20of%20a%20Number.java) +197 | [Find the Longest Balanced Substring of a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Longest%20Balanced%20Substring%20of%20a%20Binary%20String.java) +198 | [Find the Middle Index in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Middle%20Index%20in%20Array.java) +199 | [Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) +200 | [Find the Width of Columns of a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Width%20of%20Columns%20of%20a%20Grid.java) +201 | [Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) +202 | [Finding 3-Digit Even Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Finding%203-Digit%20Even%20Numbers.java) +203 | [First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) +204 | [First Letter to Appear Twice](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Letter%20to%20Appear%20Twice.java) +205 | [First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) +206 | [Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) +207 | [Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) +208 | [Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) +209 | [Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) +210 | [Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) +211 | [Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) +212 | [Form Smallest Number From Two Digit Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Form%20Smallest%20Number%20From%20Two%20Digit%20Arrays.java) +213 | [Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) +214 | [Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) +215 | [Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) +216 | [Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) +217 | [Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) +218 | [Greatest English Letter in Upper and Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20English%20Letter%20in%20Upper%20and%20Lower%20Case.java) +219 | [Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) +220 | [Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) +221 | [Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) +222 | [Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) +223 | [Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) +224 | [Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) +225 | [Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) +226 | [High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) +227 | [How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) +228 | [How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) +229 | [Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) +230 | [Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) +231 | [Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) +232 | [Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) +233 | [Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) +234 | [Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) +235 | [Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) +236 | [Intersection of Multiple Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Multiple%20Arrays.java) +237 | [Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) +238 | [Intersection of Two Arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays%20II.java) +239 | [Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) +240 | [Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) +241 | [Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) +242 | [Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) +243 | [Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) +244 | [Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) +245 | [Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) +246 | [Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) +247 | [K Items With the Maximum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K%20Items%20With%20the%20Maximum%20Sum.java) +248 | [K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) +249 | [Keep Multiplying Found Values by Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keep%20Multiplying%20Found%20Values%20by%20Two.java) +250 | [Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) +251 | [Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) +252 | [Kth Distinct String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Distinct%20String%20in%20an%20Array.java) +253 | [Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) +254 | [Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) +255 | [Largest 3-Same-Digit Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%203-Same-Digit%20Number%20in%20String.java) +256 | [Largest Local Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Local%20Values%20in%20a%20Matrix.java) +257 | [Largest Number After Digit Swaps by Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20After%20Digit%20Swaps%20by%20Parity.java) +258 | [Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) +259 | [Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) +260 | [Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) +261 | [Largest Positive Integer That Exists With Its Negative](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Positive%20Integer%20That%20Exists%20With%20Its%20Negative.java) +262 | [Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) +263 | [Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) +264 | [Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) +265 | [Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) +266 | [Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) +267 | [Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) +268 | [Left and Right Sum Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Left%20and%20Right%20Sum%20Differences.java) +269 | [Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) +270 | [Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) +271 | [Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) +272 | [License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) +273 | [Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) +274 | [Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) +275 | [Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) +276 | [Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) +277 | [Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) +278 | [Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) +279 | [Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) +280 | [Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) +281 | [Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) +282 | [Longest Subsequence With Limited Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Subsequence%20With%20Limited%20Sum.java) +283 | [Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) +284 | [Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) +285 | [Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) +286 | [Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) +287 | [Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) +288 | [Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) +289 | [Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) +290 | [Make Array Zero by Subtracting Equal Amounts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20Array%20Zero%20by%20Subtracting%20Equal%20Amounts.java) +291 | [Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) +292 | [Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) +293 | [Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) +294 | [Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) +295 | [Maximize Sum Of Array After K Negations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Sum%20Of%20Array%20After%20K%20Negations.java) +296 | [Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) +297 | [Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) +298 | [Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) +299 | [Maximum Count of Positive Integer and Negative Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Count%20of%20Positive%20Integer%20and%20Negative%20Integer.java) +300 | [Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) +301 | [Maximum Difference Between Increasing Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20Between%20Increasing%20Elements.java) +302 | [Maximum Difference by Remapping a Digit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20by%20Remapping%20a%20Digit.java) +303 | [Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) +304 | [Maximum Enemy Forts That Can Be Captured](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Enemy%20Forts%20That%20Can%20Be%20Captured.java) +305 | [Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) +306 | [Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) +307 | [Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) +308 | [Maximum Number of Pairs in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Pairs%20in%20Array.java) +309 | [Maximum Number of Words Found in Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20Found%20in%20Sentences.java) +310 | [Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) +311 | [Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) +312 | [Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) +313 | [Maximum Product of Three Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Three%20Numbers.java) +314 | [Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) +315 | [Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) +316 | [Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) +317 | [Maximum Sum With Exactly K Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Sum%20With%20Exactly%20K%20Elements.java) +318 | [Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) +319 | [Maximum Value of a String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20a%20String%20in%20an%20Array.java) +320 | [Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) +321 | [Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) +322 | [Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) +323 | [Merge Similar Items](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Similar%20Items.java) +324 | [Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) +325 | [Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) +326 | [Merge Two 2D Arrays by Summing Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%202D%20Arrays%20by%20Summing%20Values.java) +327 | [Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) +328 | [Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) +329 | [Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) +330 | [Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) +331 | [Min Max Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Max%20Game.java) +332 | [Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) +333 | [Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) +334 | [Minimum Amount of Time to Fill Cups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Amount%20of%20Time%20to%20Fill%20Cups.java) +335 | [Minimum Bit Flips to Convert Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Bit%20Flips%20to%20Convert%20Number.java) +336 | [Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) +337 | [Minimum Common Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Common%20Value.java) +338 | [Minimum Cost of Buying Candies With Discount](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20of%20Buying%20Candies%20With%20Discount.java) +339 | [Minimum Cost to Move Chips to The Same Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20to%20Move%20Chips%20to%20The%20Same%20Position.java) +340 | [Minimum Cuts to Divide a Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cuts%20to%20Divide%20a%20Circle.java) +341 | [Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) +342 | [Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) +343 | [Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) +344 | [Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) +345 | [Minimum Hours of Training to Win a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Hours%20of%20Training%20to%20Win%20a%20Competition.java) +346 | [Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) +347 | [Minimum Moves to Convert String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Convert%20String.java) +348 | [Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) +349 | [Minimum Number of Moves to Seat Everyone](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Moves%20to%20Seat%20Everyone.java) +350 | [Minimum Number of Operations to Convert Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Operations%20to%20Convert%20Time.java) +351 | [Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) +352 | [Minimum Recolors to Get K Consecutive Black Blocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Recolors%20to%20Get%20K%20Consecutive%20Black%20Blocks.java) +353 | [Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) +354 | [Minimum Sum of Four Digit Number After Splitting Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Sum%20of%20Four%20Digit%20Number%20After%20Splitting%20Digits.java) +355 | [Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) +356 | [Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) +357 | [Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) +358 | [Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) +359 | [Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) +360 | [Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) +361 | [Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Ranges.java) +362 | [Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) +363 | [Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) +364 | [Most Frequent Even Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Even%20Element.java) +365 | [Most Frequent Number Following Key In an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Number%20Following%20Key%20In%20an%20Array.java) +366 | [Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) +367 | [Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) +368 | [Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) +369 | [N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) +370 | [N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) +371 | [N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) +372 | [N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) +373 | [Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) +374 | [Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) +375 | [Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) +376 | [Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) +377 | [Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) +378 | [Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) +379 | [Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) +380 | [Number of Arithmetic Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Arithmetic%20Triplets.java) +381 | [Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) +382 | [Number of Common Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Common%20Factors.java) +383 | [Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) +384 | [Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) +385 | [Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) +386 | [Number of Distinct Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Distinct%20Averages.java) +387 | [Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) +388 | [Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) +389 | [Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) +390 | [Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) +391 | [Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) +392 | [Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) +393 | [Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) +394 | [Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) +395 | [Number of Unequal Triplets in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Unequal%20Triplets%20in%20Array.java) +396 | [Number of Valid Words in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Valid%20Words%20in%20a%20Sentence.java) +397 | [Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) +398 | [Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) +399 | [Odd String Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Odd%20String%20Difference.java) +400 | [Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) +401 | [Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) +402 | [Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) +403 | [Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) +404 | [Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) +405 | [Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) +406 | [Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) +407 | [Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) +408 | [Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) +409 | [Pass the Pillow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pass%20the%20Pillow.java) +410 | [Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) +411 | [Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) +412 | [Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) +413 | [Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) +414 | [Percentage of Letter in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Percentage%20of%20Letter%20in%20String.java) +415 | [Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) +416 | [Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) +417 | [Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) +418 | [Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) +419 | [Power of Four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Four.java) +420 | [Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) +421 | [Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) +422 | [Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) +423 | [Prime In Diagonal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Prime%20In%20Diagonal.java) +424 | [Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) +425 | [Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) +426 | [Range Sum of BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20of%20BST.java) +427 | [Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) +428 | [Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) +429 | [Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) +430 | [Rearrange Characters to Make Target String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Characters%20to%20Make%20Target%20String.java) +431 | [Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) +432 | [Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rectangle%20Overlap.java) +433 | [Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) +434 | [Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) +435 | [Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) +436 | [Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) +437 | [Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) +438 | [Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) +439 | [Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) +440 | [Remove Digit From Number to Maximize Result](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Digit%20From%20Number%20to%20Maximize%20Result.java) +441 | [Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) +442 | [Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) +443 | [Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) +444 | [Remove Letter To Equalize Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Letter%20To%20Equalize%20Frequency.java) +445 | [Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) +446 | [Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) +447 | [Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) +448 | [Remove Palindromic Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Palindromic%20Subsequences.java) +449 | [Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) +450 | [Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) +451 | [Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) +452 | [Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) +453 | [Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) +454 | [Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) +455 | [Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) +456 | [Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) +457 | [Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) +458 | [Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) +459 | [Reverse Prefix of Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Prefix%20of%20Word.java) +460 | [Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) +461 | [Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) +462 | [Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) +463 | [Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) +464 | [Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) +465 | [Rings and Rods](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rings%20and%20Rods.java) +466 | [Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) +467 | [Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) +468 | [Root Equals Sum of Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Root%20Equals%20Sum%20of%20Children.java) +469 | [Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) +470 | [Row With Maximum Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Row%20With%20Maximum%20Ones.java) +471 | [Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) +472 | [Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) +473 | [Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) +474 | [Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) +475 | [Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) +476 | [Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) +477 | [Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) +478 | [Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) +479 | [Separate the Digits in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Separate%20the%20Digits%20in%20an%20Array.java) +480 | [Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) +481 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) +482 | [Shortest Distance to Target String in a Circular Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20Target%20String%20in%20a%20Circular%20Array.java) +483 | [Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) +484 | [Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) +485 | [Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) +486 | [Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) +487 | [Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) +488 | [Similar RGB Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Similar%20RGB%20Color.java) +489 | [Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) +490 | [Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) +491 | [Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) +492 | [Smallest Even Multiple](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Even%20Multiple.java) +493 | [Smallest Index With Equal Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Index%20With%20Equal%20Value.java) +494 | [Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) +495 | [Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) +496 | [Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) +497 | [Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) +498 | [Sort Even and Odd Indices Independently](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Even%20and%20Odd%20Indices%20Independently.java) +499 | [Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) +500 | [Sort the People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20the%20People.java) +501 | [Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) +502 | [Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) +503 | [Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) +504 | [Split With Minimum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20With%20Minimum%20Sum.java) +505 | [Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) +506 | [SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) +507 | [Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) +508 | [String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) +509 | [String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) +510 | [Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) +511 | [Strong Password Checker II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strong%20Password%20Checker%20II.java) +512 | [Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) +513 | [Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) +514 | [Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) +515 | [Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) +516 | [Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) +517 | [Sum Of Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20Of%20Two%20Integers.java) +518 | [Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) +519 | [Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) +520 | [Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) +521 | [Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) +522 | [Sum of Left Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Left%20Leaves.java) +523 | [Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) +524 | [Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) +525 | [Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) +526 | [Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) +527 | [Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) +528 | [Take Gifts From the Richest Pile](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Take%20Gifts%20From%20the%20Richest%20Pile.java) +529 | [Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teemo%20Attacking.java) +530 | [Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) +531 | [The Employee That Worked on the Longest Task](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20Employee%20That%20Worked%20on%20the%20Longest%20Task.java) +532 | [The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) +533 | [Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) +534 | [Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) +535 | [Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) +536 | [Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) +537 | [Time Needed to Buy Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Time%20Needed%20to%20Buy%20Tickets.java) +538 | [To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) +539 | [Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) +540 | [Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) +541 | [Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) +542 | [Two Furthest Houses With Different Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Furthest%20Houses%20With%20Different%20Colors.java) +543 | [Two Out of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Out%20of%20Three.java) +544 | [Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) +545 | [Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) +546 | [Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) +547 | [Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) +548 | [Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) +549 | [Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) +550 | [Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) +551 | [Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) +552 | [Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) +553 | [Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) +554 | [Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) +555 | [Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) +556 | [Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) +557 | [Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) +558 | [Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) +559 | [Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) +560 | [Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) +561 | [Valid Word Abbreviation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbreviation.java) +562 | [Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) +563 | [Valid Word Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Square.java) +564 | [Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) +565 | [Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) +566 | [Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) +567 | [X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) +568 | [XOR Operation in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/XOR%20Operation%20in%20an%20Array.java) +569 | [nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) +570 | [range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) +571 | [trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) diff --git a/Hard/README.md b/Hard/README.md index 3ada6cad..e97d573a 100644 --- a/Hard/README.md +++ b/Hard/README.md @@ -2,99 +2,112 @@ S.no | Coding Problem --- | --- 1 | [Add Edges to Make Degrees of All Nodes Even](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Add%20Edges%20to%20Make%20Degrees%20of%20All%20Nodes%20Even.java) -2 | [Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) -3 | [Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) -4 | [Best Time to Buy and Sell Stock IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20IV.java) -5 | [Binary Tree Cameras](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Cameras.java) -6 | [Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) -7 | [Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) -8 | [Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) -9 | [Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) -10 | [Construct Target Array With Multiple Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Construct%20Target%20Array%20With%20Multiple%20Sums.java) -11 | [Count Subarrays With Fixed Bounds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Subarrays%20With%20Fixed%20Bounds.java) -12 | [Count Vowels Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Vowels%20Permutation.java) -13 | [Count of Smaller Numbers After Self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20of%20Smaller%20Numbers%20After%20Self.java) -14 | [Course Schedule III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Course%20Schedule%20III.java) -15 | [Critical Connections in a Network](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Critical%20Connections%20in%20a%20Network.java) -16 | [Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) -17 | [Design In-Memory File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20In-Memory%20File%20System.java) -18 | [Design Movie Rental System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Movie%20Rental%20System.java) -19 | [Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) -20 | [Design Skiplist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Skiplist.java) -21 | [Dice Roll Simulation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Dice%20Roll%20Simulation.java) -22 | [Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) -23 | [Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) -24 | [Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) -25 | [Expression Add Operators](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Expression%20Add%20Operators.java) -26 | [Find Median from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20from%20Data%20Stream.java) -27 | [Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) -28 | [Find the Kth Smallest Sum of a Matrix With Sorted Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Kth%20Smallest%20Sum%20of%20a%20Matrix%20With%20Sorted%20Rows.java) -29 | [First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) -30 | [Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) -31 | [IPO](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/IPO.java) -32 | [Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) -33 | [Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) -34 | [Jump Game IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Jump%20Game%20IV.java) -35 | [K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) -36 | [K Inverse Pairs Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Inverse%20Pairs%20Array.java) -37 | [Kth Smallest Number in Multiplication Table](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Kth%20Smallest%20Number%20in%20Multiplication%20Table.java) -38 | [LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) -39 | [Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) -40 | [Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) -41 | [Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) -42 | [Longest Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Valid%20Parentheses.java) -43 | [Max Points on a Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Points%20on%20a%20Line.java) -44 | [Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Stack.java) -45 | [Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) -46 | [Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) -47 | [Maximum Performance of a Team](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Performance%20of%20a%20Team.java) -48 | [Maximum Profit in Job Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Profit%20in%20Job%20Scheduling.java) -49 | [Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) -50 | [Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) -51 | [Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) -52 | [Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) -53 | [Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) -54 | [Minimum Difficulty of a Job Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Difficulty%20of%20a%20Job%20Schedule.java) -55 | [Minimum Number of Refueling Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Number%20of%20Refueling%20Stops.java) -56 | [Minimum Window Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Subsequence.java) -57 | [Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) -58 | [My Calendar III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/My%20Calendar%20III.java) -59 | [N-Queens II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens%20II.java) -60 | [N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) -61 | [Naming a Company](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Naming%20a%20Company.java) -62 | [Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) -63 | [Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) -64 | [Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) -65 | [Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) -66 | [Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) -67 | [Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) -68 | [Paint House III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20III.java) -69 | [Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) -70 | [Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) -71 | [Perfect Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Perfect%20Rectangle.java) -72 | [Poor Pigs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Poor%20Pigs.java) -73 | [Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) -74 | [Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reconstruct%20Itinerary.java) -75 | [Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) -76 | [Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) -77 | [Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) -78 | [Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) -79 | [Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) -80 | [Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) -81 | [Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) -82 | [Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) -83 | [Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) -84 | [Stamping The Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stamping%20The%20Sequence.java) -85 | [Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) -86 | [String Compression II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/String%20Compression%20II.java) -87 | [Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) -88 | [Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) -89 | [Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) -90 | [The Skyline Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/The%20Skyline%20Problem.java) -91 | [Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) -92 | [Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) -93 | [Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) -94 | [Vertical Order Traversal Of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Vertical%20Order%20Traversal%20Of%20a%20Binary%20Tree.java) -95 | [Wildcard Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Wildcard%20Matching.java) -96 | [Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) -97 | [Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) +2 | [Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Alien%20Dictionary.java) +3 | [Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) +4 | [Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) +5 | [Best Time to Buy and Sell Stock IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20IV.java) +6 | [Binary Tree Cameras](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Cameras.java) +7 | [Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) +8 | [Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) +9 | [Checking Existence of Edge Length Limited Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Checking%20Existence%20of%20Edge%20Length%20Limited%20Paths.java) +10 | [Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) +11 | [Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) +12 | [Construct Target Array With Multiple Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Construct%20Target%20Array%20With%20Multiple%20Sums.java) +13 | [Count Subarrays With Fixed Bounds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Subarrays%20With%20Fixed%20Bounds.java) +14 | [Count Vowels Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Vowels%20Permutation.java) +15 | [Count of Smaller Numbers After Self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20of%20Smaller%20Numbers%20After%20Self.java) +16 | [Course Schedule III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Course%20Schedule%20III.java) +17 | [Critical Connections in a Network](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Critical%20Connections%20in%20a%20Network.java) +18 | [Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) +19 | [Design In-Memory File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20In-Memory%20File%20System.java) +20 | [Design Movie Rental System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Movie%20Rental%20System.java) +21 | [Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) +22 | [Design Skiplist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Skiplist.java) +23 | [Dice Roll Simulation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Dice%20Roll%20Simulation.java) +24 | [Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) +25 | [Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) +26 | [Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) +27 | [Expression Add Operators](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Expression%20Add%20Operators.java) +28 | [Find Median from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20from%20Data%20Stream.java) +29 | [Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) +30 | [Find the Kth Smallest Sum of a Matrix With Sorted Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Kth%20Smallest%20Sum%20of%20a%20Matrix%20With%20Sorted%20Rows.java) +31 | [First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) +32 | [Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) +33 | [IPO](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/IPO.java) +34 | [Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) +35 | [Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) +36 | [Jump Game IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Jump%20Game%20IV.java) +37 | [K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) +38 | [K Inverse Pairs Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Inverse%20Pairs%20Array.java) +39 | [Kth Smallest Number in Multiplication Table](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Kth%20Smallest%20Number%20in%20Multiplication%20Table.java) +40 | [LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) +41 | [Largest Color Value in a Directed Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Color%20Value%20in%20a%20Directed%20Graph.java) +42 | [Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) +43 | [Longest Cycle in a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Cycle%20in%20a%20Graph.java) +44 | [Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) +45 | [Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) +46 | [Longest Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Valid%20Parentheses.java) +47 | [Max Points on a Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Points%20on%20a%20Line.java) +48 | [Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Stack.java) +49 | [Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) +50 | [Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) +51 | [Maximum Performance of a Team](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Performance%20of%20a%20Team.java) +52 | [Maximum Profit in Job Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Profit%20in%20Job%20Scheduling.java) +53 | [Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) +54 | [Maximum Value of K Coins From Piles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Value%20of%20K%20Coins%20From%20Piles.java) +55 | [Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) +56 | [Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) +57 | [Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) +58 | [Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) +59 | [Minimum Difficulty of a Job Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Difficulty%20of%20a%20Job%20Schedule.java) +60 | [Minimum Insertion Steps to Make a String Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Insertion%20Steps%20to%20Make%20a%20String%20Palindrome.java) +61 | [Minimum Number of Refueling Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Number%20of%20Refueling%20Stops.java) +62 | [Minimum Window Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Subsequence.java) +63 | [Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) +64 | [My Calendar III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/My%20Calendar%20III.java) +65 | [N-Queens II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens%20II.java) +66 | [N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) +67 | [Naming a Company](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Naming%20a%20Company.java) +68 | [Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) +69 | [Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) +70 | [Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) +71 | [Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) +72 | [Number of Ways of Cutting a Pizza](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Ways%20of%20Cutting%20a%20Pizza.java) +73 | [Number of Ways to Form a Target String Given a Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Ways%20to%20Form%20a%20Target%20String%20Given%20a%20Dictionary.java) +74 | [Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) +75 | [Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) +76 | [Paint House III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20III.java) +77 | [Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) +78 | [Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) +79 | [Perfect Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Perfect%20Rectangle.java) +80 | [Poor Pigs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Poor%20Pigs.java) +81 | [Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) +82 | [Profitable Schemes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Profitable%20Schemes.java) +83 | [Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reconstruct%20Itinerary.java) +84 | [Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) +85 | [Reducing Dishes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reducing%20Dishes.java) +86 | [Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) +87 | [Restore The Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Restore%20The%20Array.java) +88 | [Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) +89 | [Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) +90 | [Scramble String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Scramble%20String.java) +91 | [Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) +92 | [Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) +93 | [Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) +94 | [Similar String Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Similar%20String%20Groups.java) +95 | [Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) +96 | [Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) +97 | [Stamping The Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stamping%20The%20Sequence.java) +98 | [Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) +99 | [String Compression II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/String%20Compression%20II.java) +100 | [Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) +101 | [Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) +102 | [Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) +103 | [The Skyline Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/The%20Skyline%20Problem.java) +104 | [Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) +105 | [Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) +106 | [Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) +107 | [Vertical Order Traversal Of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Vertical%20Order%20Traversal%20Of%20a%20Binary%20Tree.java) +108 | [Wildcard Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Wildcard%20Matching.java) +109 | [Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) +110 | [Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) diff --git a/Medium/README.md b/Medium/README.md index cea9747e..0d6a9299 100644 --- a/Medium/README.md +++ b/Medium/README.md @@ -7,739 +7,750 @@ S.no | Coding Problem 4 | [3Sum Smaller](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Smaller.java) 5 | [3Sum With Multiplicity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20With%20Multiplicity.java) 6 | [3Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum.java) -7 | [4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) -8 | [4Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum%20II.java) -9 | [4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) -10 | [Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) -11 | [Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) -12 | [Add Minimum Number of Rungs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Minimum%20Number%20of%20Rungs.java) -13 | [Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) -14 | [Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) -15 | [Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) -16 | [Adding Spaces to a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Spaces%20to%20a%20String.java) -17 | [Adding Two Negabinary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Two%20Negabinary%20Numbers.java) -18 | [Advantage Shuffle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Advantage%20Shuffle.java) -19 | [Alert Using Same Key-Card Three or More Times in a One Hour Period](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Alert%20Using%20Same%20Key-Card%20Three%20or%20More%20Times%20in%20a%20One%20Hour%20Period.java) -20 | [All Ancestors of a Node in a Directed Acyclic Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Ancestors%20of%20a%20Node%20in%20a%20Directed%20Acyclic%20Graph.java) -21 | [All Divisions With the Highest Score of a Binary Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Divisions%20With%20the%20Highest%20Score%20of%20a%20Binary%20Array.java) -22 | [All Elements in Two Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Elements%20in%20Two%20Binary%20Search%20Trees.java) -23 | [All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) -24 | [All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) -25 | [All Paths from Source Lead to Destination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20from%20Source%20Lead%20to%20Destination.java) -26 | [All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) -27 | [Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) -28 | [Angle Between Hands of a Clock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Angle%20Between%20Hands%20of%20a%20Clock.java) -29 | [Append Characters to String to Make Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20Characters%20to%20String%20to%20Make%20Subsequence.java) -30 | [Append K Integers With Minimal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20K%20Integers%20With%20Minimal%20Sum.java) -31 | [Apply Discount Every n Orders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20Every%20n%20Orders.java) -32 | [Apply Discount to Prices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20to%20Prices.java) -33 | [Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) -34 | [Arithmetic Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Subarrays.java) -35 | [Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) -36 | [Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) -37 | [As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) -38 | [Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) -39 | [Average Waiting Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Average%20Waiting%20Time.java) -40 | [Bag of Tokens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bag%20of%20Tokens.java) -41 | [Balance a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Balance%20a%20Binary%20Search%20Tree.java) -42 | [Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) -43 | [Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) -44 | [Best Time to Buy and Sell Stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20II.java) -45 | [Best Time to Buy and Sell Stock with Cooldown](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Cooldown.java) -46 | [Binary Search Tree Iterator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator%20II.java) -47 | [Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) -48 | [Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) -49 | [Binary Tree Coloring Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Coloring%20Game.java) -50 | [Binary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Level%20Order%20Traversal.java) -51 | [Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) -52 | [Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) -53 | [Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) -54 | [Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) -55 | [Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) -56 | [Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) -57 | [Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) -58 | [Binary Tree Zigzag Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Zigzag%20Level%20Order%20Traversal.java) -59 | [Binary Trees With Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Trees%20With%20Factors.java) -60 | [Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) -61 | [Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) -62 | [Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bold%20Words%20in%20String.java) -63 | [Bomb Enemy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bomb%20Enemy.java) -64 | [Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) -65 | [Brace Expansion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Brace%20Expansion.java) -66 | [Break a Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Break%20a%20Palindrome.java) -67 | [Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) -68 | [Buildings With an Ocean View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Buildings%20With%20an%20Ocean%20View.java) -69 | [Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) -70 | [Camelcase Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Camelcase%20Matching.java) -71 | [Campus Bikes II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes%20II.java) -72 | [Campus Bikes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes.java) -73 | [Can Convert String in K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Convert%20String%20in%20K%20Moves.java) -74 | [Can Make Palindrome from Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Make%20Palindrome%20from%20Substring.java) -75 | [Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) -76 | [Capacity To Ship Packages Within D Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Capacity%20To%20Ship%20Packages%20Within%20D%20Days.java) -77 | [Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) -78 | [Champagne Tower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Champagne%20Tower.java) -79 | [Cheapest Flights Within K Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cheapest%20Flights%20Within%20K%20Stops.java) -80 | [Check Completeness of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20Completeness%20of%20a%20Binary%20Tree.java) -81 | [Check If All 1's Are at Least Length K Places Away](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20All%201's%20Are%20at%20Least%20Length%20K%20Places%20Away.java) -82 | [Check If a String Can Break Another String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Can%20Break%20Another%20String.java) -83 | [Check If a String Contains All Binary Codes of Size K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Contains%20All%20Binary%20Codes%20of%20Size%20K.java) -84 | [Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Is%20a%20Valid%20Sequence%20from%20Root%20to%20Leaves%20Path%20in%20a%20Binary%20Tree.java) -85 | [Check if There is a Valid Path in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20There%20is%20a%20Valid%20Path%20in%20a%20Grid.java) -86 | [Cinema Seat Allocation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cinema%20Seat%20Allocation.java) -87 | [Clone Binary Tree With Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Binary%20Tree%20With%20Random%20Pointer.java) -88 | [Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) -89 | [Clone N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20N-ary%20Tree.java) -90 | [Closest Nodes Queries in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Closest%20Nodes%20Queries%20in%20a%20Binary%20Search%20Tree.java) -91 | [Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) -92 | [Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) -93 | [Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) -94 | [Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) -95 | [Combination Sum IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20IV.java) -96 | [Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) -97 | [Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) -98 | [Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) -99 | [Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) -100 | [Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) -101 | [Concatenation of Consecutive Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Concatenation%20of%20Consecutive%20Binary%20Numbers.java) -102 | [Connecting Cities With Minimum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Connecting%20Cities%20With%20Minimum%20Cost.java) -103 | [Construct Binary Search Tree from Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Search%20Tree%20from%20Preorder%20Traversal.java) -104 | [Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) -105 | [Construct Binary Tree from Preorder and Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Preorder%20and%20Inorder%20Traversal.java) -106 | [Construct K Palindrome Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20K%20Palindrome%20Strings.java) -107 | [Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) -108 | [Construct String With Repeat Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20String%20With%20Repeat%20Limit.java) -109 | [Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) -110 | [Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) -111 | [Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) -112 | [Continuous Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Continuous%20Subarray%20Sum.java) -113 | [Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) -114 | [Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) -115 | [Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) -116 | [Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) -117 | [Count Collisions on a Road](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Collisions%20on%20a%20Road.java) -118 | [Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) -119 | [Count Good Nodes in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Good%20Nodes%20in%20Binary%20Tree.java) -120 | [Count Nodes Equal to Average of Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Average%20of%20Subtree.java) -121 | [Count Nodes Equal to Sum of Descendants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Sum%20of%20Descendants.java) -122 | [Count Number of Bad Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Bad%20Pairs.java) -123 | [Count Number of Distinct Integers After Reverse Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Distinct%20Integers%20After%20Reverse%20Operations.java) -124 | [Count Number of Homogenous Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Homogenous%20Substrings.java) -125 | [Count Number of Teams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Teams.java) -126 | [Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) -127 | [Count Servers That Communicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Servers%20That%20Communicate.java) -128 | [Count Sorted Vowel Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sorted%20Vowel%20Strings.java) -129 | [Count Square Submatrices with All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Square%20Submatrices%20with%20All%20Ones.java) -130 | [Count Sub Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sub%20Islands.java) -131 | [Count Submatrices With All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Submatrices%20With%20All%20Ones.java) -132 | [Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) -133 | [Count Unreachable Pairs of Nodes in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Unreachable%20Pairs%20of%20Nodes%20in%20an%20Undirected%20Graph.java) -134 | [Count Vowel Strings in Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Vowel%20Strings%20in%20Ranges.java) -135 | [Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20and%20Say.java) -136 | [Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) -137 | [Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) -138 | [Create Binary Tree From Descriptions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Create%20Binary%20Tree%20From%20Descriptions.java) -139 | [Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) -140 | [Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) -141 | [Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) -142 | [Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) -143 | [Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) -144 | [Deepest Leaves Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Deepest%20Leaves%20Sum.java) -145 | [Delete Leaves With a Given Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Leaves%20With%20a%20Given%20Value.java) -146 | [Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) -147 | [Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) -148 | [Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) -149 | [Delete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Tree%20Nodes.java) -150 | [Delete the Middle Node of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20the%20Middle%20Node%20of%20a%20Linked%20List.java) -151 | [Design A Leaderboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20A%20Leaderboard.java) -152 | [Design Add and Search Words Data Structure](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Add%20and%20Search%20Words%20Data%20Structure.java) -153 | [Design Authentication Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Authentication%20Manager.java) -154 | [Design Browser History](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Browser%20History.java) -155 | [Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) -156 | [Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) -157 | [Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) -158 | [Design Front Middle Back Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Front%20Middle%20Back%20Queue.java) -159 | [Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) -160 | [Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) -161 | [Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) -162 | [Design SQL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20SQL.java) -163 | [Design Snake Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Snake%20Game.java) -164 | [Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) -165 | [Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) -166 | [Design Underground System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Underground%20System.java) -167 | [Design a File Sharing System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20File%20Sharing%20System.java) -168 | [Design a Stack With Increment Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20Stack%20With%20Increment%20Operation.java) -169 | [Design an ATM Machine](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20ATM%20Machine.java) -170 | [Design an Expression Tree With Evaluate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20Expression%20Tree%20With%20Evaluate%20Function.java) -171 | [Determine if Two Strings Are Close](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20Two%20Strings%20Are%20Close.java) -172 | [Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) -173 | [Diameter of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diameter%20of%20N-ary%20Tree.java) -174 | [Display Table of Food Orders in a Restaurant](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Display%20Table%20of%20Food%20Orders%20in%20a%20Restaurant.java) -175 | [Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) -176 | [Divide Array in Sets of K Consecutive Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Array%20in%20Sets%20of%20K%20Consecutive%20Numbers.java) -177 | [Divide Players Into Teams of Equal Skill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Players%20Into%20Teams%20of%20Equal%20Skill.java) -178 | [Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) -179 | [Dot Product of Two Sparse Vectors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dot%20Product%20of%20Two%20Sparse%20Vectors.java) -180 | [Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) -181 | [Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) -182 | [Equal Row and Column Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Equal%20Row%20and%20Column%20Pairs.java) -183 | [Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) -184 | [Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) -185 | [Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) -186 | [Evaluate the Bracket Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20the%20Bracket%20Pairs%20of%20a%20String.java) -187 | [Even Odd Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Even%20Odd%20Tree.java) -188 | [Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) -189 | [Execution of All Suffix Instructions Staying in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid.java) -190 | [Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) -191 | [Fair Distribution of Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fair%20Distribution%20of%20Cookies.java) -192 | [Filter Restaurants by Vegan-Friendly, Price and Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Filter%20Restaurants%20by%20Vegan-Friendly,%20Price%20and%20Distance.java) -193 | [Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Anagrams%20in%20a%20String.java) -194 | [Find All Lonely Numbers in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Lonely%20Numbers%20in%20the%20Array.java) -195 | [Find All Possible Recipes from Given Supplies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Possible%20Recipes%20from%20Given%20Supplies.java) -196 | [Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) -197 | [Find Center of Star Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Center%20of%20Star%20Graph.java) -198 | [Find Closest Node to Given Two Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Closest%20Node%20to%20Given%20Two%20Nodes.java) -199 | [Find Consecutive Integers from a Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Consecutive%20Integers%20from%20a%20Data%20Stream.java) -200 | [Find Distance in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Distance%20in%20a%20Binary%20Tree.java) -201 | [Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) -202 | [Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) -203 | [Find Elements in a Contaminated Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Elements%20in%20a%20Contaminated%20Binary%20Tree.java) -204 | [Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) -205 | [Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) -206 | [Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) -207 | [Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) -208 | [Find Largest Value in Each Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Each%20Tree%20Row.java) -209 | [Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) -210 | [Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) -211 | [Find Missing Observations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Missing%20Observations.java) -212 | [Find Nearest Right Node in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Nearest%20Right%20Node%20in%20Binary%20Tree.java) -213 | [Find Original Array From Doubled Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Original%20Array%20From%20Doubled%20Array.java) -214 | [Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) -215 | [Find Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Permutation.java) -216 | [Find Players With Zero or One Losses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Players%20With%20Zero%20or%20One%20Losses.java) -217 | [Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) -218 | [Find Root of N-Ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Root%20of%20N-Ary%20Tree.java) -219 | [Find Smallest Common Element in All Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Smallest%20Common%20Element%20in%20All%20Rows.java) -220 | [Find The Original Array of Prefix Xor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20The%20Original%20Array%20of%20Prefix%20Xor.java) -221 | [Find Triangular Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Triangular%20Sum%20of%20an%20Array.java) -222 | [Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20a%20Corresponding%20Node%20of%20a%20Binary%20Tree%20in%20a%20Clone%20of%20That%20Tree.java) -223 | [Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) -224 | [Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) -225 | [Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) -226 | [Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) -227 | [Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) -228 | [Find the Duplicate Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Duplicate%20Number.java) -229 | [Find the Index of the First Occurrence in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20First%20Occurrence%20in%20a%20String.java) -230 | [Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) -231 | [Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) -232 | [Find the Minimum and Maximum Number of Nodes Between Critical Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Minimum%20and%20Maximum%20Number%20of%20Nodes%20Between%20Critical%20Points.java) -233 | [Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) -234 | [Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) -235 | [Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) -236 | [First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) -237 | [Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) -238 | [Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) -239 | [Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) -240 | [Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) -241 | [Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) -242 | [Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) -243 | [Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) -244 | [Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) -245 | [Friends Of Appropriate Ages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friends%20Of%20Appropriate%20Ages.java) -246 | [Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) -247 | [Furthest Building You Can Reach](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Furthest%20Building%20You%20Can%20Reach.java) -248 | [Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) -249 | [Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) -250 | [Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) -251 | [Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) -252 | [Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) -253 | [Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) -254 | [Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) -255 | [Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) -256 | [Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) -257 | [Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) -258 | [H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) -259 | [H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) -260 | [HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) -261 | [Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) -262 | [House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) -263 | [House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) -264 | [House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber.java) -265 | [Image Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Image%20Overlap.java) -266 | [Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) -267 | [Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) -268 | [Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) -269 | [Implement Trie II (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20II%20(Prefix%20Tree).java) -270 | [Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) -271 | [Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) -272 | [Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) -273 | [Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) -274 | [Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) -275 | [Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) -276 | [Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Interval.java) -277 | [Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) -278 | [Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) -279 | [Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) -280 | [Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) -281 | [Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) -282 | [Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) -283 | [Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interleaving%20String.java) -284 | [Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) -285 | [Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) -286 | [Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) -287 | [Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) -288 | [Jump Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20II.java) -289 | [Jump Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20III.java) -290 | [Jump Game VI](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20VI.java) -291 | [Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) -292 | [K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Closest%20Points%20to%20Origin.java) -293 | [K Radius Subarray Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Radius%20Subarray%20Averages.java) -294 | [Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) -295 | [Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) -296 | [Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) -297 | [Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) -298 | [Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) -299 | [Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) -300 | [Kth Largest Sum in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Sum%20in%20a%20Binary%20Tree.java) -301 | [Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) -302 | [Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) -303 | [LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/LRU%20Cache.java) -304 | [Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) -305 | [Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) -306 | [Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) -307 | [Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Time%20for%20Given%20Digits.java) -308 | [Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) -309 | [Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) -310 | [Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) -311 | [Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) -312 | [Length of the Longest Alphabetical Continuous Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Length%20of%20the%20Longest%20Alphabetical%20Continuous%20Substring.java) -313 | [Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) -314 | [Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) -315 | [Lexicographical Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographical%20Numbers.java) -316 | [Lexicographically Smallest Equivalent String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20Equivalent%20String.java) -317 | [Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) -318 | [Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) -319 | [Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) -320 | [Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) -321 | [Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) -322 | [Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) -323 | [Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) -324 | [Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) -325 | [Longest Arithmetic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence.java) -326 | [Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) -327 | [Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) -328 | [Longest Happy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Happy%20String.java) -329 | [Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) -330 | [Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) -331 | [Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) -332 | [Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) -333 | [Longest String Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20String%20Chain.java) -334 | [Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) -335 | [Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) -336 | [Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) -337 | [Longest Uploaded Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Uploaded%20Prefix.java) -338 | [Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) -339 | [Longest Word With All Prefixes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20With%20All%20Prefixes.java) -340 | [Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) -341 | [Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) -342 | [Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) -343 | [Lowest Common Ancestor of a Binary Tree III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20III.java) -344 | [Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) -345 | [Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) -346 | [Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) -347 | [Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) -348 | [Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) -349 | [Matchsticks to Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Matchsticks%20to%20Square.java) -350 | [Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Area%20of%20Island.java) -351 | [Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) -352 | [Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) -353 | [Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) -354 | [Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) -355 | [Max Sum of a Pair With Equal Sum of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Sum%20of%20a%20Pair%20With%20Equal%20Sum%20of%20Digits.java) -356 | [Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) -357 | [Maximal Score After Applying K Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Score%20After%20Applying%20K%20Operations.java) -358 | [Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) -359 | [Maximize Number of Subsequences in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Number%20of%20Subsequences%20in%20a%20String.java) -360 | [Maximize the Topmost Element After K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Topmost%20Element%20After%20K%20Moves.java) -361 | [Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) -362 | [Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Area%20of%20a%20Piece%20of%20Cake%20After%20Horizontal%20and%20Vertical%20Cuts.java) -363 | [Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) -364 | [Maximum Bags With Full Capacity of Rocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Bags%20With%20Full%20Capacity%20of%20Rocks.java) -365 | [Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) -366 | [Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) -367 | [Maximum Consecutive Floors Without Special Floors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Consecutive%20Floors%20Without%20Special%20Floors.java) -368 | [Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) -369 | [Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) -370 | [Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) -371 | [Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) -372 | [Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) -373 | [Maximum Length of Repeated Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Repeated%20Subarray.java) -374 | [Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) -375 | [Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) -376 | [Maximum Matching of Players With Trainers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Matching%20of%20Players%20With%20Trainers.java) -377 | [Maximum Nesting Depth of Two Valid Parentheses Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Nesting%20Depth%20of%20Two%20Valid%20Parentheses%20Strings.java) -378 | [Maximum Number of Coins You Can Get](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Coins%20You%20Can%20Get.java) -379 | [Maximum Number of Events That Can Be Attended](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Events%20That%20Can%20Be%20Attended.java) -380 | [Maximum Number of Groups Entering a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Groups%20Entering%20a%20Competition.java) -381 | [Maximum Number of Integers to Choose From a Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I.java) -382 | [Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) -383 | [Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) -384 | [Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) -385 | [Maximum Points You Can Obtain from Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Points%20You%20Can%20Obtain%20from%20Cards.java) -386 | [Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) -387 | [Maximum Product of Splitted Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Splitted%20Binary%20Tree.java) -388 | [Maximum Product of Word Lengths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Word%20Lengths.java) -389 | [Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) -390 | [Maximum Score from Performing Multiplication Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20from%20Performing%20Multiplication%20Operations.java) -391 | [Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) -392 | [Maximum Star Sum of a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Star%20Sum%20of%20a%20Graph.java) -393 | [Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Subarray.java) -394 | [Maximum Sum of Distinct Subarrays With Length K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Distinct%20Subarrays%20With%20Length%20K.java) -395 | [Maximum Sum of an Hourglass](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20an%20Hourglass.java) -396 | [Maximum Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Swap.java) -397 | [Maximum Total Importance of Roads](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Total%20Importance%20of%20Roads.java) -398 | [Maximum Twin Sum of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Twin%20Sum%20of%20a%20Linked%20List.java) -399 | [Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) -400 | [Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) -401 | [Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) -402 | [Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) -403 | [Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) -404 | [Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) -405 | [Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) -406 | [Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) -407 | [Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) -408 | [Merge Nodes in Between Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Nodes%20in%20Between%20Zeros.java) -409 | [Min Cost to Connect All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Cost%20to%20Connect%20All%20Points.java) -410 | [Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Stack.java) -411 | [Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) -412 | [Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) -413 | [Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) -414 | [Minimize Product Sum of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Product%20Sum%20of%20Two%20Arrays.java) -415 | [Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) -416 | [Minimum Amount of Time to Collect Garbage](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Amount%20of%20Time%20to%20Collect%20Garbage.java) -417 | [Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) -418 | [Minimum Average Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Average%20Difference.java) -419 | [Minimum Consecutive Cards to Pick Up](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Consecutive%20Cards%20to%20Pick%20Up.java) -420 | [Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) -421 | [Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) -422 | [Minimum Deletions to Make Array Beautiful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Array%20Beautiful.java) -423 | [Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) -424 | [Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) -425 | [Minimum Falling Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Falling%20Path%20Sum.java) -426 | [Minimum Fuel Cost to Report to the Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Fuel%20Cost%20to%20Report%20to%20the%20Capital.java) -427 | [Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) -428 | [Minimum Health to Beat Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Health%20to%20Beat%20Game.java) -429 | [Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) -430 | [Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) -431 | [Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) -432 | [Minimum Moves to Equal Array Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements.java) -433 | [Minimum Moves to Reach Target Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Reach%20Target%20Score.java) -434 | [Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) -435 | [Minimum Number of Steps to Make Two Strings Anagram II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram%20II.java) -436 | [Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) -437 | [Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) -438 | [Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) -439 | [Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) -440 | [Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) -441 | [Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) -442 | [Minimum Rounds to Complete All Tasks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Rounds%20to%20Complete%20All%20Tasks.java) -443 | [Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) -444 | [Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) -445 | [Minimum Swaps to Group All 1's Together](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Swaps%20to%20Group%20All%201's%20Together.java) -446 | [Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) -447 | [Minimum Time to Collect All Apples in a Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Collect%20All%20Apples%20in%20a%20Tree.java) -448 | [Minimum Time to Complete Trips](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Complete%20Trips.java) -449 | [Minimum Time to Make Rope Colorful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Make%20Rope%20Colorful.java) -450 | [Mirror Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mirror%20Reflection.java) -451 | [Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) -452 | [Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) -453 | [Most Popular Video Creator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Popular%20Video%20Creator.java) -454 | [Most Profit Assigning Work](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Profit%20Assigning%20Work.java) -455 | [Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) -456 | [Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) -457 | [My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) -458 | [My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) -459 | [N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/N-ary%20Tree%20Level%20Order%20Traversal.java) -460 | [Nearest Exit from Entrance in Maze](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nearest%20Exit%20from%20Entrance%20in%20Maze.java) -461 | [Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) -462 | [Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) -463 | [Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) -464 | [Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) -465 | [Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) -466 | [Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) -467 | [Next Greater Numerically Balanced Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Numerically%20Balanced%20Number.java) -468 | [Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) -469 | [Node With Highest Edge Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Node%20With%20Highest%20Edge%20Score.java) -470 | [Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) -471 | [Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-decreasing%20Array.java) -472 | [Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) -473 | [Number of Closed Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Closed%20Islands.java) -474 | [Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) -475 | [Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) -476 | [Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) -477 | [Number of Distinct Substrings in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Substrings%20in%20a%20String.java) -478 | [Number of Enclaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Enclaves.java) -479 | [Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) -480 | [Number of Laser Beams in a Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Laser%20Beams%20in%20a%20Bank.java) -481 | [Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) -482 | [Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) -483 | [Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) -484 | [Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) -485 | [Number of Pairs of Interchangeable Rectangles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Interchangeable%20Rectangles.java) -486 | [Number of Pairs of Strings With Concatenation Equal to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target.java) -487 | [Number of Provinces](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Provinces.java) -488 | [Number of Smooth Descent Periods of a Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock.java) -489 | [Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) -490 | [Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) -491 | [Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) -492 | [Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) -493 | [Number of Ways to Split Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Ways%20to%20Split%20Array.java) -494 | [Number of Zero-Filled Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Zero-Filled%20Subarrays.java) -495 | [Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) -496 | [Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) -497 | [One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) -498 | [Ones and Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ones%20and%20Zeroes.java) -499 | [Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) -500 | [Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) -501 | [Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) -502 | [Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) -503 | [Optimal Partition of String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Partition%20of%20String.java) -504 | [Out of Boundary Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Out%20of%20Boundary%20Paths.java) -505 | [Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) -506 | [Pacific Atlantic Water Flow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pacific%20Atlantic%20Water%20Flow.java) -507 | [Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) -508 | [Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) -509 | [Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) -510 | [Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Parallel%20Courses.java) -511 | [Partition Array According to Given Pivot](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Array%20According%20to%20Given%20Pivot.java) -512 | [Partition Equal Subset Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Equal%20Subset%20Sum.java) -513 | [Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) -514 | [Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) -515 | [Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) -516 | [Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) -517 | [Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20III.java) -518 | [Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) -519 | [Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) -520 | [Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) -521 | [Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) -522 | [Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) -523 | [People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) -524 | [Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) -525 | [Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) -526 | [Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) -527 | [Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) -528 | [Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) -529 | [Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) -530 | [Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) -531 | [Possible Bipartition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Possible%20Bipartition.java) -532 | [Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) -533 | [Pow(x, n)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow(x,%20n).java) -534 | [Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) -535 | [Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) -536 | [Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) -537 | [Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) -538 | [Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) -539 | [Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) -540 | [Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) -541 | [Product of Two Run-Length Encoded Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Two%20Run-Length%20Encoded%20Arrays.java) -542 | [Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) -543 | [Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) -544 | [Push Dominoes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Push%20Dominoes.java) -545 | [Put Boxes Into the Warehouse I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Put%20Boxes%20Into%20the%20Warehouse%20I.java) -546 | [Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) -547 | [Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) -548 | [RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) -549 | [Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) -550 | [Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) -551 | [Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) -552 | [Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) -553 | [Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) -554 | [Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) -555 | [Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) -556 | [Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) -557 | [Reachable Nodes With Restrictions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reachable%20Nodes%20With%20Restrictions.java) -558 | [Rearrange Array Elements by Sign](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20Elements%20by%20Sign.java) -559 | [Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) -560 | [Recover Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Recover%20Binary%20Search%20Tree.java) -561 | [Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) -562 | [Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) -563 | [Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) -564 | [Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) -565 | [Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) -566 | [Remove All Ones With Row and Column Flips II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Ones%20With%20Row%20and%20Column%20Flips%20II.java) -567 | [Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) -568 | [Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) -569 | [Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) -570 | [Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) -571 | [Remove Duplicates From an Unsorted Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20an%20Unsorted%20Linked%20List.java) -572 | [Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) -573 | [Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) -574 | [Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) -575 | [Remove Nodes From Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nodes%20From%20Linked%20List.java) -576 | [Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) -577 | [Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) -578 | [Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) -579 | [Removing Stars From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Removing%20Stars%20From%20a%20String.java) -580 | [Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Data%20in%20Log%20Files.java) -581 | [Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) -582 | [Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) -583 | [Reordered Power of 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reordered%20Power%20of%202.java) -584 | [Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) -585 | [Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) -586 | [Replace Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Elements%20in%20an%20Array.java) -587 | [Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) -588 | [Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) -589 | [Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) -590 | [Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Integer.java) -591 | [Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) -592 | [Reverse Nodes in Even Length Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20Even%20Length%20Groups.java) -593 | [Reverse Odd Levels of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Odd%20Levels%20of%20Binary%20Tree.java) -594 | [Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) -595 | [Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) -596 | [Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) -597 | [Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) -598 | [Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) -599 | [Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) -600 | [Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) -601 | [Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) -602 | [Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotated%20Digits.java) -603 | [Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) -604 | [Satisfiability of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfiability%20of%20Equality%20Equations.java) -605 | [Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) -606 | [Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) -607 | [Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) -608 | [Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) -609 | [Search a 2D Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix%20II.java) -610 | [Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) -611 | [Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) -612 | [Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) -613 | [Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) -614 | [Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) -615 | [Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) -616 | [Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) -617 | [Sender With Largest Word Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sender%20With%20Largest%20Word%20Count.java) -618 | [Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) -619 | [Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) -620 | [Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) -621 | [Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) -622 | [Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) -623 | [Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) -624 | [Short Encoding of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Short%20Encoding%20of%20Words.java) -625 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) -626 | [Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) -627 | [Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) -628 | [Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Unsorted%20Continuous%20Subarray.java) -629 | [Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) -630 | [Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) -631 | [Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) -632 | [Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) -633 | [Simple Bank System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simple%20Bank%20System.java) -634 | [Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) -635 | [Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) -636 | [Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) -637 | [Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) -638 | [Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) -639 | [Smallest Number in Infinite Set](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Number%20in%20Infinite%20Set.java) -640 | [Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) -641 | [Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) -642 | [Smallest String With Swaps](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20Swaps.java) -643 | [Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) -644 | [Smallest Value of the Rearranged Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Value%20of%20the%20Rearranged%20Number.java) -645 | [Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) -646 | [Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) -647 | [Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) -648 | [Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) -649 | [Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) -650 | [Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) -651 | [Sort Integers by The Power Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Integers%20by%20The%20Power%20Value.java) -652 | [Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) -653 | [Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) -654 | [Sort the Jumbled Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Jumbled%20Numbers.java) -655 | [Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) -656 | [Sort the Students by Their Kth Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Students%20by%20Their%20Kth%20Score.java) -657 | [Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) -658 | [Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) -659 | [Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) -660 | [Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) -661 | [Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) -662 | [Split Linked List in Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20in%20Parts.java) -663 | [Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) -664 | [Step-By-Step Directions From a Binary Tree Node to Another](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Step-By-Step%20Directions%20From%20a%20Binary%20Tree%20Node%20to%20Another.java) -665 | [Stock Price Fluctuation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stock%20Price%20Fluctuation.java) -666 | [Strictly Palindromic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Strictly%20Palindromic%20Number.java) -667 | [String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20Compression.java) -668 | [String to Integer (atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer%20(atoi).java) -669 | [Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) -670 | [Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) -671 | [Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) -672 | [Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subdomain%20Visit%20Count.java) -673 | [Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) -674 | [Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) -675 | [Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) -676 | [Successful Pairs of Spells and Potions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Successful%20Pairs%20of%20Spells%20and%20Potions.java) -677 | [Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) -678 | [Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) -679 | [Sum of Beauty of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Beauty%20of%20All%20Substrings.java) -680 | [Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Even%20Numbers%20After%20Queries.java) -681 | [Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) -682 | [Sum of Numbers With Units Digit K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Numbers%20With%20Units%20Digit%20K.java) -683 | [Sum of Subarray Minimums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Subarray%20Minimums.java) -684 | [Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) -685 | [Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) -686 | [Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) -687 | [Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) -688 | [Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) -689 | [Synonymous Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Synonymous%20Sentences.java) -690 | [Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) -691 | [Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) -692 | [Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) -693 | [The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) -694 | [The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) -695 | [The Number of Weak Characters in the Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Weak%20Characters%20in%20the%20Game.java) -696 | [The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) -697 | [The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) -698 | [Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) -699 | [Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) -700 | [Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) -701 | [Time Needed to Rearrange a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Rearrange%20a%20Binary%20String.java) -702 | [Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) -703 | [Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) -704 | [Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) -705 | [Tree Diameter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tree%20Diameter.java) -706 | [Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Triangle.java) -707 | [Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) -708 | [Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) -709 | [Tweet Counts Per Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tweet%20Counts%20Per%20Frequency.java) -710 | [Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20City%20Scheduling.java) -711 | [Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) -712 | [Two Sum II - Input Array Is Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20II%20-%20Input%20Array%20Is%20Sorted.java) -713 | [UTF-8 Validation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/UTF-8%20Validation.java) -714 | [Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) -715 | [Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) -716 | [Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) -717 | [Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) -718 | [Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) -719 | [Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) -720 | [Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) -721 | [Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) -722 | [Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) -723 | [Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) -724 | [Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) -725 | [Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) -726 | [Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) -727 | [Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) -728 | [Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) -729 | [Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) -730 | [Vowels of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowels%20of%20All%20Substrings.java) -731 | [Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) -732 | [Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) -733 | [Watering Plants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Watering%20Plants.java) -734 | [Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) -735 | [Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) -736 | [Wiggle Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Subsequence.java) -737 | [Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) -738 | [Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) -739 | [Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) -740 | [Word Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Subsets.java) -741 | [ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) -742 | [Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) +7 | [4 Keys Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Keys%20Keyboard.java) +8 | [4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) +9 | [4Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum%20II.java) +10 | [4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) +11 | [Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) +12 | [Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) +13 | [Add Minimum Number of Rungs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Minimum%20Number%20of%20Rungs.java) +14 | [Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) +15 | [Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) +16 | [Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) +17 | [Adding Spaces to a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Spaces%20to%20a%20String.java) +18 | [Adding Two Negabinary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Two%20Negabinary%20Numbers.java) +19 | [Advantage Shuffle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Advantage%20Shuffle.java) +20 | [Alert Using Same Key-Card Three or More Times in a One Hour Period](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Alert%20Using%20Same%20Key-Card%20Three%20or%20More%20Times%20in%20a%20One%20Hour%20Period.java) +21 | [All Ancestors of a Node in a Directed Acyclic Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Ancestors%20of%20a%20Node%20in%20a%20Directed%20Acyclic%20Graph.java) +22 | [All Divisions With the Highest Score of a Binary Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Divisions%20With%20the%20Highest%20Score%20of%20a%20Binary%20Array.java) +23 | [All Elements in Two Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Elements%20in%20Two%20Binary%20Search%20Trees.java) +24 | [All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) +25 | [All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) +26 | [All Paths from Source Lead to Destination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20from%20Source%20Lead%20to%20Destination.java) +27 | [All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) +28 | [Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) +29 | [Angle Between Hands of a Clock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Angle%20Between%20Hands%20of%20a%20Clock.java) +30 | [Append Characters to String to Make Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20Characters%20to%20String%20to%20Make%20Subsequence.java) +31 | [Append K Integers With Minimal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20K%20Integers%20With%20Minimal%20Sum.java) +32 | [Apply Discount Every n Orders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20Every%20n%20Orders.java) +33 | [Apply Discount to Prices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20to%20Prices.java) +34 | [Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) +35 | [Arithmetic Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Subarrays.java) +36 | [Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) +37 | [Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) +38 | [As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) +39 | [Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) +40 | [Average Waiting Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Average%20Waiting%20Time.java) +41 | [Bag of Tokens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bag%20of%20Tokens.java) +42 | [Balance a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Balance%20a%20Binary%20Search%20Tree.java) +43 | [Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) +44 | [Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) +45 | [Best Time to Buy and Sell Stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20II.java) +46 | [Best Time to Buy and Sell Stock with Cooldown](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Cooldown.java) +47 | [Binary Search Tree Iterator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator%20II.java) +48 | [Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) +49 | [Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) +50 | [Binary Tree Coloring Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Coloring%20Game.java) +51 | [Binary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Level%20Order%20Traversal.java) +52 | [Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) +53 | [Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) +54 | [Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) +55 | [Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) +56 | [Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) +57 | [Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) +58 | [Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) +59 | [Binary Tree Zigzag Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Zigzag%20Level%20Order%20Traversal.java) +60 | [Binary Trees With Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Trees%20With%20Factors.java) +61 | [Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) +62 | [Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) +63 | [Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bold%20Words%20in%20String.java) +64 | [Bomb Enemy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bomb%20Enemy.java) +65 | [Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) +66 | [Brace Expansion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Brace%20Expansion.java) +67 | [Break a Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Break%20a%20Palindrome.java) +68 | [Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) +69 | [Buildings With an Ocean View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Buildings%20With%20an%20Ocean%20View.java) +70 | [Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) +71 | [Camelcase Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Camelcase%20Matching.java) +72 | [Campus Bikes II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes%20II.java) +73 | [Campus Bikes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes.java) +74 | [Can Convert String in K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Convert%20String%20in%20K%20Moves.java) +75 | [Can Make Palindrome from Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Make%20Palindrome%20from%20Substring.java) +76 | [Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) +77 | [Capacity To Ship Packages Within D Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Capacity%20To%20Ship%20Packages%20Within%20D%20Days.java) +78 | [Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) +79 | [Champagne Tower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Champagne%20Tower.java) +80 | [Cheapest Flights Within K Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cheapest%20Flights%20Within%20K%20Stops.java) +81 | [Check Completeness of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20Completeness%20of%20a%20Binary%20Tree.java) +82 | [Check If All 1's Are at Least Length K Places Away](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20All%201's%20Are%20at%20Least%20Length%20K%20Places%20Away.java) +83 | [Check If a String Can Break Another String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Can%20Break%20Another%20String.java) +84 | [Check If a String Contains All Binary Codes of Size K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Contains%20All%20Binary%20Codes%20of%20Size%20K.java) +85 | [Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Is%20a%20Valid%20Sequence%20from%20Root%20to%20Leaves%20Path%20in%20a%20Binary%20Tree.java) +86 | [Check if There is a Valid Path in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20There%20is%20a%20Valid%20Path%20in%20a%20Grid.java) +87 | [Cinema Seat Allocation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cinema%20Seat%20Allocation.java) +88 | [Clone Binary Tree With Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Binary%20Tree%20With%20Random%20Pointer.java) +89 | [Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) +90 | [Clone N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20N-ary%20Tree.java) +91 | [Closest Nodes Queries in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Closest%20Nodes%20Queries%20in%20a%20Binary%20Search%20Tree.java) +92 | [Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) +93 | [Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) +94 | [Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) +95 | [Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) +96 | [Combination Sum IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20IV.java) +97 | [Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) +98 | [Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) +99 | [Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) +100 | [Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) +101 | [Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) +102 | [Concatenation of Consecutive Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Concatenation%20of%20Consecutive%20Binary%20Numbers.java) +103 | [Connecting Cities With Minimum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Connecting%20Cities%20With%20Minimum%20Cost.java) +104 | [Construct Binary Search Tree from Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Search%20Tree%20from%20Preorder%20Traversal.java) +105 | [Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) +106 | [Construct Binary Tree from Preorder and Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Preorder%20and%20Inorder%20Traversal.java) +107 | [Construct K Palindrome Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20K%20Palindrome%20Strings.java) +108 | [Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) +109 | [Construct String With Repeat Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20String%20With%20Repeat%20Limit.java) +110 | [Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) +111 | [Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) +112 | [Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) +113 | [Continuous Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Continuous%20Subarray%20Sum.java) +114 | [Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) +115 | [Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) +116 | [Convert an Array Into a 2D Array With Conditions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20an%20Array%20Into%20a%202D%20Array%20With%20Conditions.java) +117 | [Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) +118 | [Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) +119 | [Count Collisions on a Road](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Collisions%20on%20a%20Road.java) +120 | [Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) +121 | [Count Good Nodes in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Good%20Nodes%20in%20Binary%20Tree.java) +122 | [Count Nodes Equal to Average of Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Average%20of%20Subtree.java) +123 | [Count Nodes Equal to Sum of Descendants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Sum%20of%20Descendants.java) +124 | [Count Number of Bad Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Bad%20Pairs.java) +125 | [Count Number of Distinct Integers After Reverse Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Distinct%20Integers%20After%20Reverse%20Operations.java) +126 | [Count Number of Homogenous Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Homogenous%20Substrings.java) +127 | [Count Number of Teams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Teams.java) +128 | [Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) +129 | [Count Servers That Communicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Servers%20That%20Communicate.java) +130 | [Count Sorted Vowel Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sorted%20Vowel%20Strings.java) +131 | [Count Square Submatrices with All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Square%20Submatrices%20with%20All%20Ones.java) +132 | [Count Sub Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sub%20Islands.java) +133 | [Count Submatrices With All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Submatrices%20With%20All%20Ones.java) +134 | [Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) +135 | [Count Unreachable Pairs of Nodes in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Unreachable%20Pairs%20of%20Nodes%20in%20an%20Undirected%20Graph.java) +136 | [Count Vowel Strings in Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Vowel%20Strings%20in%20Ranges.java) +137 | [Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20and%20Say.java) +138 | [Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) +139 | [Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) +140 | [Create Binary Tree From Descriptions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Create%20Binary%20Tree%20From%20Descriptions.java) +141 | [Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) +142 | [Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) +143 | [Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) +144 | [Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) +145 | [Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) +146 | [Deepest Leaves Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Deepest%20Leaves%20Sum.java) +147 | [Delete Leaves With a Given Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Leaves%20With%20a%20Given%20Value.java) +148 | [Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) +149 | [Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) +150 | [Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) +151 | [Delete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Tree%20Nodes.java) +152 | [Delete the Middle Node of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20the%20Middle%20Node%20of%20a%20Linked%20List.java) +153 | [Design A Leaderboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20A%20Leaderboard.java) +154 | [Design Add and Search Words Data Structure](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Add%20and%20Search%20Words%20Data%20Structure.java) +155 | [Design Authentication Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Authentication%20Manager.java) +156 | [Design Browser History](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Browser%20History.java) +157 | [Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) +158 | [Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) +159 | [Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) +160 | [Design Front Middle Back Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Front%20Middle%20Back%20Queue.java) +161 | [Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) +162 | [Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) +163 | [Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) +164 | [Design SQL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20SQL.java) +165 | [Design Snake Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Snake%20Game.java) +166 | [Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) +167 | [Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) +168 | [Design Underground System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Underground%20System.java) +169 | [Design a File Sharing System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20File%20Sharing%20System.java) +170 | [Design a Stack With Increment Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20Stack%20With%20Increment%20Operation.java) +171 | [Design an ATM Machine](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20ATM%20Machine.java) +172 | [Design an Expression Tree With Evaluate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20Expression%20Tree%20With%20Evaluate%20Function.java) +173 | [Determine if Two Strings Are Close](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20Two%20Strings%20Are%20Close.java) +174 | [Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) +175 | [Diameter of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diameter%20of%20N-ary%20Tree.java) +176 | [Display Table of Food Orders in a Restaurant](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Display%20Table%20of%20Food%20Orders%20in%20a%20Restaurant.java) +177 | [Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) +178 | [Divide Array in Sets of K Consecutive Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Array%20in%20Sets%20of%20K%20Consecutive%20Numbers.java) +179 | [Divide Players Into Teams of Equal Skill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Players%20Into%20Teams%20of%20Equal%20Skill.java) +180 | [Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) +181 | [Dot Product of Two Sparse Vectors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dot%20Product%20of%20Two%20Sparse%20Vectors.java) +182 | [Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) +183 | [Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) +184 | [Equal Row and Column Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Equal%20Row%20and%20Column%20Pairs.java) +185 | [Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) +186 | [Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) +187 | [Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) +188 | [Evaluate the Bracket Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20the%20Bracket%20Pairs%20of%20a%20String.java) +189 | [Even Odd Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Even%20Odd%20Tree.java) +190 | [Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) +191 | [Execution of All Suffix Instructions Staying in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid.java) +192 | [Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) +193 | [Fair Distribution of Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fair%20Distribution%20of%20Cookies.java) +194 | [Filter Restaurants by Vegan-Friendly, Price and Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Filter%20Restaurants%20by%20Vegan-Friendly,%20Price%20and%20Distance.java) +195 | [Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Anagrams%20in%20a%20String.java) +196 | [Find All Lonely Numbers in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Lonely%20Numbers%20in%20the%20Array.java) +197 | [Find All Possible Recipes from Given Supplies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Possible%20Recipes%20from%20Given%20Supplies.java) +198 | [Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) +199 | [Find Center of Star Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Center%20of%20Star%20Graph.java) +200 | [Find Closest Node to Given Two Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Closest%20Node%20to%20Given%20Two%20Nodes.java) +201 | [Find Consecutive Integers from a Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Consecutive%20Integers%20from%20a%20Data%20Stream.java) +202 | [Find Distance in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Distance%20in%20a%20Binary%20Tree.java) +203 | [Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) +204 | [Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) +205 | [Find Elements in a Contaminated Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Elements%20in%20a%20Contaminated%20Binary%20Tree.java) +206 | [Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) +207 | [Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) +208 | [Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) +209 | [Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) +210 | [Find Largest Value in Each Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Each%20Tree%20Row.java) +211 | [Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) +212 | [Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) +213 | [Find Missing Observations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Missing%20Observations.java) +214 | [Find Nearest Right Node in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Nearest%20Right%20Node%20in%20Binary%20Tree.java) +215 | [Find Original Array From Doubled Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Original%20Array%20From%20Doubled%20Array.java) +216 | [Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) +217 | [Find Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Permutation.java) +218 | [Find Players With Zero or One Losses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Players%20With%20Zero%20or%20One%20Losses.java) +219 | [Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) +220 | [Find Root of N-Ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Root%20of%20N-Ary%20Tree.java) +221 | [Find Smallest Common Element in All Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Smallest%20Common%20Element%20in%20All%20Rows.java) +222 | [Find The Original Array of Prefix Xor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20The%20Original%20Array%20of%20Prefix%20Xor.java) +223 | [Find Triangular Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Triangular%20Sum%20of%20an%20Array.java) +224 | [Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20a%20Corresponding%20Node%20of%20a%20Binary%20Tree%20in%20a%20Clone%20of%20That%20Tree.java) +225 | [Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) +226 | [Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) +227 | [Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) +228 | [Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) +229 | [Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) +230 | [Find the Duplicate Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Duplicate%20Number.java) +231 | [Find the Index of the First Occurrence in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20First%20Occurrence%20in%20a%20String.java) +232 | [Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) +233 | [Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) +234 | [Find the Maximum Divisibility Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Maximum%20Divisibility%20Score.java) +235 | [Find the Minimum and Maximum Number of Nodes Between Critical Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Minimum%20and%20Maximum%20Number%20of%20Nodes%20Between%20Critical%20Points.java) +236 | [Find the Score of All Prefixes of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Score%20of%20All%20Prefixes%20of%20an%20Array.java) +237 | [Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) +238 | [Find the Substring With Maximum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Substring%20With%20Maximum%20Cost.java) +239 | [Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) +240 | [Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) +241 | [First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) +242 | [Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) +243 | [Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) +244 | [Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) +245 | [Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) +246 | [Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) +247 | [Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) +248 | [Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) +249 | [Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) +250 | [Friends Of Appropriate Ages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friends%20Of%20Appropriate%20Ages.java) +251 | [Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) +252 | [Furthest Building You Can Reach](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Furthest%20Building%20You%20Can%20Reach.java) +253 | [Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) +254 | [Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) +255 | [Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) +256 | [Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) +257 | [Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) +258 | [Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) +259 | [Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) +260 | [Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) +261 | [Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) +262 | [Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) +263 | [H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) +264 | [H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) +265 | [HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) +266 | [Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) +267 | [House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) +268 | [House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) +269 | [House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber.java) +270 | [Image Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Image%20Overlap.java) +271 | [Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) +272 | [Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) +273 | [Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) +274 | [Implement Trie II (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20II%20(Prefix%20Tree).java) +275 | [Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) +276 | [Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) +277 | [Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) +278 | [Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) +279 | [Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) +280 | [Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) +281 | [Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Interval.java) +282 | [Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) +283 | [Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) +284 | [Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) +285 | [Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) +286 | [Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) +287 | [Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) +288 | [Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interleaving%20String.java) +289 | [Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) +290 | [Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) +291 | [Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) +292 | [Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) +293 | [Jump Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20II.java) +294 | [Jump Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20III.java) +295 | [Jump Game VI](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20VI.java) +296 | [Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) +297 | [K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Closest%20Points%20to%20Origin.java) +298 | [K Radius Subarray Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Radius%20Subarray%20Averages.java) +299 | [Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) +300 | [Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) +301 | [Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) +302 | [Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) +303 | [Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) +304 | [Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) +305 | [Kth Largest Sum in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Sum%20in%20a%20Binary%20Tree.java) +306 | [Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) +307 | [Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) +308 | [LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/LRU%20Cache.java) +309 | [Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) +310 | [Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) +311 | [Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) +312 | [Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Time%20for%20Given%20Digits.java) +313 | [Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) +314 | [Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) +315 | [Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) +316 | [Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) +317 | [Length of the Longest Alphabetical Continuous Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Length%20of%20the%20Longest%20Alphabetical%20Continuous%20Substring.java) +318 | [Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) +319 | [Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) +320 | [Lexicographical Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographical%20Numbers.java) +321 | [Lexicographically Smallest Equivalent String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20Equivalent%20String.java) +322 | [Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) +323 | [Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) +324 | [Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) +325 | [Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) +326 | [Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) +327 | [Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) +328 | [Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) +329 | [Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) +330 | [Longest Arithmetic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence.java) +331 | [Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) +332 | [Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) +333 | [Longest Happy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Happy%20String.java) +334 | [Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) +335 | [Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) +336 | [Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) +337 | [Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) +338 | [Longest String Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20String%20Chain.java) +339 | [Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) +340 | [Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) +341 | [Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) +342 | [Longest Uploaded Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Uploaded%20Prefix.java) +343 | [Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) +344 | [Longest Word With All Prefixes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20With%20All%20Prefixes.java) +345 | [Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) +346 | [Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) +347 | [Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) +348 | [Lowest Common Ancestor of a Binary Tree III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20III.java) +349 | [Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) +350 | [Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) +351 | [Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) +352 | [Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) +353 | [Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) +354 | [Matchsticks to Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Matchsticks%20to%20Square.java) +355 | [Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Area%20of%20Island.java) +356 | [Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) +357 | [Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) +358 | [Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) +359 | [Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) +360 | [Max Sum of a Pair With Equal Sum of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Sum%20of%20a%20Pair%20With%20Equal%20Sum%20of%20Digits.java) +361 | [Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) +362 | [Maximal Score After Applying K Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Score%20After%20Applying%20K%20Operations.java) +363 | [Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) +364 | [Maximize Number of Subsequences in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Number%20of%20Subsequences%20in%20a%20String.java) +365 | [Maximize the Topmost Element After K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Topmost%20Element%20After%20K%20Moves.java) +366 | [Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) +367 | [Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Area%20of%20a%20Piece%20of%20Cake%20After%20Horizontal%20and%20Vertical%20Cuts.java) +368 | [Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) +369 | [Maximum Bags With Full Capacity of Rocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Bags%20With%20Full%20Capacity%20of%20Rocks.java) +370 | [Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) +371 | [Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) +372 | [Maximum Consecutive Floors Without Special Floors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Consecutive%20Floors%20Without%20Special%20Floors.java) +373 | [Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) +374 | [Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) +375 | [Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) +376 | [Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) +377 | [Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) +378 | [Maximum Length of Repeated Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Repeated%20Subarray.java) +379 | [Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) +380 | [Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) +381 | [Maximum Matching of Players With Trainers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Matching%20of%20Players%20With%20Trainers.java) +382 | [Maximum Nesting Depth of Two Valid Parentheses Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Nesting%20Depth%20of%20Two%20Valid%20Parentheses%20Strings.java) +383 | [Maximum Number of Coins You Can Get](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Coins%20You%20Can%20Get.java) +384 | [Maximum Number of Events That Can Be Attended](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Events%20That%20Can%20Be%20Attended.java) +385 | [Maximum Number of Groups Entering a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Groups%20Entering%20a%20Competition.java) +386 | [Maximum Number of Integers to Choose From a Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I.java) +387 | [Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) +388 | [Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) +389 | [Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) +390 | [Maximum Points You Can Obtain from Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Points%20You%20Can%20Obtain%20from%20Cards.java) +391 | [Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) +392 | [Maximum Product of Splitted Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Splitted%20Binary%20Tree.java) +393 | [Maximum Product of Word Lengths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Word%20Lengths.java) +394 | [Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) +395 | [Maximum Score from Performing Multiplication Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20from%20Performing%20Multiplication%20Operations.java) +396 | [Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) +397 | [Maximum Star Sum of a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Star%20Sum%20of%20a%20Graph.java) +398 | [Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Subarray.java) +399 | [Maximum Sum of Distinct Subarrays With Length K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Distinct%20Subarrays%20With%20Length%20K.java) +400 | [Maximum Sum of an Hourglass](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20an%20Hourglass.java) +401 | [Maximum Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Swap.java) +402 | [Maximum Total Importance of Roads](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Total%20Importance%20of%20Roads.java) +403 | [Maximum Twin Sum of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Twin%20Sum%20of%20a%20Linked%20List.java) +404 | [Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) +405 | [Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) +406 | [Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) +407 | [Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) +408 | [Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) +409 | [Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) +410 | [Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) +411 | [Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) +412 | [Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) +413 | [Merge Nodes in Between Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Nodes%20in%20Between%20Zeros.java) +414 | [Min Cost to Connect All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Cost%20to%20Connect%20All%20Points.java) +415 | [Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Stack.java) +416 | [Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) +417 | [Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) +418 | [Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) +419 | [Minimize Maximum of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20of%20Array.java) +420 | [Minimize Product Sum of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Product%20Sum%20of%20Two%20Arrays.java) +421 | [Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) +422 | [Minimum Amount of Time to Collect Garbage](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Amount%20of%20Time%20to%20Collect%20Garbage.java) +423 | [Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) +424 | [Minimum Average Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Average%20Difference.java) +425 | [Minimum Consecutive Cards to Pick Up](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Consecutive%20Cards%20to%20Pick%20Up.java) +426 | [Minimum Cost For Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20For%20Tickets.java) +427 | [Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) +428 | [Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) +429 | [Minimum Deletions to Make Array Beautiful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Array%20Beautiful.java) +430 | [Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) +431 | [Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) +432 | [Minimum Falling Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Falling%20Path%20Sum.java) +433 | [Minimum Fuel Cost to Report to the Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Fuel%20Cost%20to%20Report%20to%20the%20Capital.java) +434 | [Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) +435 | [Minimum Health to Beat Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Health%20to%20Beat%20Game.java) +436 | [Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) +437 | [Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) +438 | [Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) +439 | [Minimum Moves to Equal Array Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements.java) +440 | [Minimum Moves to Reach Target Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Reach%20Target%20Score.java) +441 | [Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) +442 | [Minimum Number of Steps to Make Two Strings Anagram II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram%20II.java) +443 | [Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) +444 | [Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) +445 | [Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) +446 | [Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) +447 | [Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) +448 | [Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) +449 | [Minimum Rounds to Complete All Tasks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Rounds%20to%20Complete%20All%20Tasks.java) +450 | [Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) +451 | [Minimum Score of a Path Between Two Cities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20of%20a%20Path%20Between%20Two%20Cities.java) +452 | [Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) +453 | [Minimum Swaps to Group All 1's Together](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Swaps%20to%20Group%20All%201's%20Together.java) +454 | [Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) +455 | [Minimum Time to Collect All Apples in a Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Collect%20All%20Apples%20in%20a%20Tree.java) +456 | [Minimum Time to Complete Trips](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Complete%20Trips.java) +457 | [Minimum Time to Make Rope Colorful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Make%20Rope%20Colorful.java) +458 | [Mirror Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mirror%20Reflection.java) +459 | [Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) +460 | [Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) +461 | [Most Popular Video Creator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Popular%20Video%20Creator.java) +462 | [Most Profit Assigning Work](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Profit%20Assigning%20Work.java) +463 | [Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) +464 | [Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) +465 | [My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) +466 | [My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) +467 | [N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/N-ary%20Tree%20Level%20Order%20Traversal.java) +468 | [Nearest Exit from Entrance in Maze](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nearest%20Exit%20from%20Entrance%20in%20Maze.java) +469 | [Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) +470 | [Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) +471 | [Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) +472 | [Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) +473 | [Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) +474 | [Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) +475 | [Next Greater Numerically Balanced Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Numerically%20Balanced%20Number.java) +476 | [Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) +477 | [Node With Highest Edge Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Node%20With%20Highest%20Edge%20Score.java) +478 | [Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) +479 | [Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-decreasing%20Array.java) +480 | [Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) +481 | [Number of Closed Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Closed%20Islands.java) +482 | [Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) +483 | [Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) +484 | [Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) +485 | [Number of Distinct Substrings in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Substrings%20in%20a%20String.java) +486 | [Number of Enclaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Enclaves.java) +487 | [Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) +488 | [Number of Laser Beams in a Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Laser%20Beams%20in%20a%20Bank.java) +489 | [Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) +490 | [Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) +491 | [Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) +492 | [Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) +493 | [Number of Operations to Make Network Connected](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Operations%20to%20Make%20Network%20Connected.java) +494 | [Number of Pairs of Interchangeable Rectangles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Interchangeable%20Rectangles.java) +495 | [Number of Pairs of Strings With Concatenation Equal to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target.java) +496 | [Number of Provinces](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Provinces.java) +497 | [Number of Smooth Descent Periods of a Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock.java) +498 | [Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) +499 | [Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) +500 | [Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) +501 | [Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) +502 | [Number of Ways to Split Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Ways%20to%20Split%20Array.java) +503 | [Number of Zero-Filled Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Zero-Filled%20Subarrays.java) +504 | [Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) +505 | [Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) +506 | [One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) +507 | [Ones and Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ones%20and%20Zeroes.java) +508 | [Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) +509 | [Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) +510 | [Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) +511 | [Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) +512 | [Optimal Partition of String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Partition%20of%20String.java) +513 | [Out of Boundary Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Out%20of%20Boundary%20Paths.java) +514 | [Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) +515 | [Pacific Atlantic Water Flow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pacific%20Atlantic%20Water%20Flow.java) +516 | [Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) +517 | [Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) +518 | [Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) +519 | [Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Parallel%20Courses.java) +520 | [Partition Array According to Given Pivot](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Array%20According%20to%20Given%20Pivot.java) +521 | [Partition Equal Subset Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Equal%20Subset%20Sum.java) +522 | [Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) +523 | [Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) +524 | [Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) +525 | [Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) +526 | [Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20III.java) +527 | [Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) +528 | [Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) +529 | [Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) +530 | [Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) +531 | [Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) +532 | [People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) +533 | [Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) +534 | [Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) +535 | [Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) +536 | [Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) +537 | [Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) +538 | [Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) +539 | [Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) +540 | [Possible Bipartition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Possible%20Bipartition.java) +541 | [Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) +542 | [Pow(x, n)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow(x,%20n).java) +543 | [Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) +544 | [Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) +545 | [Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) +546 | [Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) +547 | [Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) +548 | [Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) +549 | [Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) +550 | [Product of Two Run-Length Encoded Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Two%20Run-Length%20Encoded%20Arrays.java) +551 | [Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) +552 | [Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) +553 | [Push Dominoes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Push%20Dominoes.java) +554 | [Put Boxes Into the Warehouse I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Put%20Boxes%20Into%20the%20Warehouse%20I.java) +555 | [Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) +556 | [Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) +557 | [RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) +558 | [Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) +559 | [Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) +560 | [Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) +561 | [Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) +562 | [Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) +563 | [Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) +564 | [Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) +565 | [Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) +566 | [Reachable Nodes With Restrictions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reachable%20Nodes%20With%20Restrictions.java) +567 | [Rearrange Array Elements by Sign](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20Elements%20by%20Sign.java) +568 | [Rearrange Array to Maximize Prefix Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20to%20Maximize%20Prefix%20Score.java) +569 | [Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) +570 | [Recover Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Recover%20Binary%20Search%20Tree.java) +571 | [Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) +572 | [Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) +573 | [Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) +574 | [Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) +575 | [Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) +576 | [Remove All Ones With Row and Column Flips II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Ones%20With%20Row%20and%20Column%20Flips%20II.java) +577 | [Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) +578 | [Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) +579 | [Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) +580 | [Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) +581 | [Remove Duplicates From an Unsorted Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20an%20Unsorted%20Linked%20List.java) +582 | [Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) +583 | [Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) +584 | [Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) +585 | [Remove Nodes From Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nodes%20From%20Linked%20List.java) +586 | [Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) +587 | [Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) +588 | [Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) +589 | [Removing Stars From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Removing%20Stars%20From%20a%20String.java) +590 | [Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Data%20in%20Log%20Files.java) +591 | [Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) +592 | [Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) +593 | [Reordered Power of 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reordered%20Power%20of%202.java) +594 | [Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) +595 | [Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) +596 | [Replace Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Elements%20in%20an%20Array.java) +597 | [Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) +598 | [Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) +599 | [Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) +600 | [Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Integer.java) +601 | [Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) +602 | [Reverse Nodes in Even Length Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20Even%20Length%20Groups.java) +603 | [Reverse Odd Levels of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Odd%20Levels%20of%20Binary%20Tree.java) +604 | [Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) +605 | [Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) +606 | [Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) +607 | [Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) +608 | [Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) +609 | [Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) +610 | [Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) +611 | [Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) +612 | [Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotated%20Digits.java) +613 | [Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) +614 | [Satisfiability of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfiability%20of%20Equality%20Equations.java) +615 | [Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) +616 | [Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) +617 | [Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) +618 | [Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) +619 | [Search a 2D Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix%20II.java) +620 | [Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) +621 | [Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) +622 | [Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) +623 | [Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) +624 | [Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) +625 | [Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) +626 | [Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) +627 | [Sender With Largest Word Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sender%20With%20Largest%20Word%20Count.java) +628 | [Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) +629 | [Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) +630 | [Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) +631 | [Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) +632 | [Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) +633 | [Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) +634 | [Short Encoding of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Short%20Encoding%20of%20Words.java) +635 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) +636 | [Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) +637 | [Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) +638 | [Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Unsorted%20Continuous%20Subarray.java) +639 | [Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) +640 | [Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) +641 | [Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) +642 | [Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) +643 | [Simple Bank System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simple%20Bank%20System.java) +644 | [Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) +645 | [Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) +646 | [Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) +647 | [Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) +648 | [Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) +649 | [Smallest Number in Infinite Set](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Number%20in%20Infinite%20Set.java) +650 | [Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) +651 | [Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) +652 | [Smallest String With Swaps](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20Swaps.java) +653 | [Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) +654 | [Smallest Value of the Rearranged Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Value%20of%20the%20Rearranged%20Number.java) +655 | [Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) +656 | [Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) +657 | [Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) +658 | [Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) +659 | [Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) +660 | [Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) +661 | [Sort Integers by The Power Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Integers%20by%20The%20Power%20Value.java) +662 | [Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) +663 | [Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) +664 | [Sort the Jumbled Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Jumbled%20Numbers.java) +665 | [Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) +666 | [Sort the Students by Their Kth Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Students%20by%20Their%20Kth%20Score.java) +667 | [Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) +668 | [Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) +669 | [Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) +670 | [Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) +671 | [Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) +672 | [Split Linked List in Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20in%20Parts.java) +673 | [Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) +674 | [Step-By-Step Directions From a Binary Tree Node to Another](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Step-By-Step%20Directions%20From%20a%20Binary%20Tree%20Node%20to%20Another.java) +675 | [Stock Price Fluctuation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stock%20Price%20Fluctuation.java) +676 | [Strictly Palindromic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Strictly%20Palindromic%20Number.java) +677 | [String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20Compression.java) +678 | [String to Integer (atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer%20(atoi).java) +679 | [Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) +680 | [Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) +681 | [Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) +682 | [Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subdomain%20Visit%20Count.java) +683 | [Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) +684 | [Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) +685 | [Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) +686 | [Successful Pairs of Spells and Potions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Successful%20Pairs%20of%20Spells%20and%20Potions.java) +687 | [Sum Multiples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Multiples.java) +688 | [Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) +689 | [Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) +690 | [Sum of Beauty of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Beauty%20of%20All%20Substrings.java) +691 | [Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Even%20Numbers%20After%20Queries.java) +692 | [Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) +693 | [Sum of Numbers With Units Digit K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Numbers%20With%20Units%20Digit%20K.java) +694 | [Sum of Subarray Minimums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Subarray%20Minimums.java) +695 | [Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) +696 | [Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) +697 | [Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) +698 | [Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) +699 | [Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) +700 | [Synonymous Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Synonymous%20Sentences.java) +701 | [Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) +702 | [Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) +703 | [Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) +704 | [The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) +705 | [The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) +706 | [The Number of Weak Characters in the Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Weak%20Characters%20in%20the%20Game.java) +707 | [The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) +708 | [The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) +709 | [Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) +710 | [Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) +711 | [Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) +712 | [Time Needed to Rearrange a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Rearrange%20a%20Binary%20String.java) +713 | [Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) +714 | [Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) +715 | [Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) +716 | [Tree Diameter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tree%20Diameter.java) +717 | [Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Triangle.java) +718 | [Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) +719 | [Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) +720 | [Tweet Counts Per Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tweet%20Counts%20Per%20Frequency.java) +721 | [Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20City%20Scheduling.java) +722 | [Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) +723 | [Two Sum II - Input Array Is Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20II%20-%20Input%20Array%20Is%20Sorted.java) +724 | [UTF-8 Validation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/UTF-8%20Validation.java) +725 | [Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) +726 | [Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) +727 | [Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) +728 | [Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) +729 | [Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) +730 | [Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) +731 | [Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) +732 | [Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) +733 | [Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) +734 | [Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) +735 | [Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) +736 | [Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) +737 | [Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) +738 | [Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) +739 | [Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) +740 | [Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) +741 | [Vowels of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowels%20of%20All%20Substrings.java) +742 | [Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) +743 | [Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) +744 | [Watering Plants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Watering%20Plants.java) +745 | [Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) +746 | [Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) +747 | [Wiggle Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Subsequence.java) +748 | [Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) +749 | [Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) +750 | [Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) +751 | [Word Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Subsets.java) +752 | [ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) +753 | [Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) diff --git a/README.md b/README.md index e264f9eb..dd9ecf17 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 1200+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1300+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count --- | --- -[Easy](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Easy/README.md) | 558 -[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/README.md) | 739 -[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Hard/README.md) | 95 +[Easy](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Easy/README.md) | 572 +[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/README.md) | 754 +[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Hard/README.md) | 111 [Concurrency](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Concurrency/README.md) | 9 From 55c8a9b396780f5817aec3b36db8648a1df6e1e8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 29 Apr 2023 19:02:30 -0700 Subject: [PATCH 1111/1640] Added Find the Prefix Common Array of Two Arrays.java --- ...d the Prefix Common Array of Two Arrays.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Find the Prefix Common Array of Two Arrays.java diff --git a/Medium/Find the Prefix Common Array of Two Arrays.java b/Medium/Find the Prefix Common Array of Two Arrays.java new file mode 100644 index 00000000..bd747227 --- /dev/null +++ b/Medium/Find the Prefix Common Array of Two Arrays.java @@ -0,0 +1,17 @@ +class Solution { + public int[] findThePrefixCommonArray(int[] A, int[] B) { + Map map = new HashMap<>(); + int count = 0; + int[] result = new int[A.length]; + for (int i = 0; i < A.length; i++) { + map.put(A[i], map.getOrDefault(A[i], 0) + 1); + map.put(B[i], map.getOrDefault(B[i], 0) + 1); + count += map.get(A[i]) == 2 ? 1 : 0; + if (A[i] != B[i]) { + count += map.get(B[i]) == 2 ? 1 : 0; + } + result[i] = count; + } + return result; + } +} From 391f217baa1c169f95dde4176cd3ca3e52bcbacc Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 30 Apr 2023 10:32:51 -0700 Subject: [PATCH 1112/1640] Added Determine the Winner of a Bowling Game.java --- ...etermine the Winner of a Bowling Game.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Easy/Determine the Winner of a Bowling Game.java diff --git a/Easy/Determine the Winner of a Bowling Game.java b/Easy/Determine the Winner of a Bowling Game.java new file mode 100644 index 00000000..0b64db30 --- /dev/null +++ b/Easy/Determine the Winner of a Bowling Game.java @@ -0,0 +1,25 @@ +class Solution { + public int isWinner(int[] player1, int[] player2) { + int score1 = 0; + int score2 = 0; + int tenIndex1 = -1; + int tenIndex2 = -1; + for (int i = 0; i < player1.length; i++) { + score1 += player1[i]; + score2 += player2[i]; + if (tenIndex1 != -1 && i - tenIndex1 <= 2) { + score1 += player1[i]; + } + if (tenIndex2 != -1 && i - tenIndex2 <= 2) { + score2 += player2[i]; + } + if (player1[i] == 10) { + tenIndex1 = i; + } + if (player2[i] == 10) { + tenIndex2 = i; + } + } + return score1 > score2 ? 1 : (score1 == score2 ? 0 : 2); + } +} From f348fed45d237066c75b1aae9784c346ce853cb2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Apr 2023 13:56:37 -0700 Subject: [PATCH 1113/1640] Create Remove Max Number of Edges to Keep Graph Fully Traversable.java --- ...Edges to Keep Graph Fully Traversable.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 Hard/Remove Max Number of Edges to Keep Graph Fully Traversable.java diff --git a/Hard/Remove Max Number of Edges to Keep Graph Fully Traversable.java b/Hard/Remove Max Number of Edges to Keep Graph Fully Traversable.java new file mode 100644 index 00000000..152ab81b --- /dev/null +++ b/Hard/Remove Max Number of Edges to Keep Graph Fully Traversable.java @@ -0,0 +1,67 @@ +class Solution { + public int maxNumEdgesToRemove(int n, int[][] edges) { + UnionFind alice = new UnionFind(n); + UnionFind bob = new UnionFind(n); + int requiredEdges = 0; + for (int[] edge : edges) { + if (edge[0] == 3) { + requiredEdges += (alice.union(edge[1], edge[2]) | bob.union(edge[1], edge[2])); + } + } + for (int[] edge : edges) { + if (edge[0] == 1) { + requiredEdges += alice.union(edge[1], edge[2]); + } else if (edge[0] == 2) { + requiredEdges += bob.union(edge[1], edge[2]); + } + } + if (alice.isConnected() && bob.isConnected()) { + return edges.length - requiredEdges; + } + return -1; + } + + private class UnionFind { + private final int[] representatives; + private final int[] componentSize; + private int components; + + public UnionFind(int n) { + this.representatives = new int[n + 1]; + this.componentSize = new int[n + 1]; + this.components = n; + for (int i = 0; i <= n; i++) { + componentSize[i] = 1; + representatives[i] = i; + } + } + + public int find(int x) { + if (representatives[x] == x) { + return x; + } + return representatives[x] = find(representatives[x]); + } + + public int union(int x, int y) { + x = find(x); + y = find(y); + if (x == y) { + return 0; + } + if (componentSize[x] > componentSize[y]) { + componentSize[x] += componentSize[y]; + representatives[y] = x; + } else { + componentSize[y] += componentSize[x]; + representatives[x] = y; + } + components--; + return 1; + } + + public boolean isConnected() { + return components == 1; + } + } +} From fef17fd274e589de7b4986fe89d487fbe3f96393 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 30 Apr 2023 18:38:33 -0700 Subject: [PATCH 1114/1640] Updated Average Salary Excluding the Minimum and Maximum Salary.java --- ...luding the Minimum and Maximum Salary.java | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Easy/Average Salary Excluding the Minimum and Maximum Salary.java b/Easy/Average Salary Excluding the Minimum and Maximum Salary.java index 08d8663e..1d4d872c 100644 --- a/Easy/Average Salary Excluding the Minimum and Maximum Salary.java +++ b/Easy/Average Salary Excluding the Minimum and Maximum Salary.java @@ -1,15 +1,13 @@ class Solution { - public double average(int[] salary) { - int minSalary = salary[0]; - int maxSalary = salary[0]; - int n = salary.length; - int sum = 0; - for (int i = 0; i < n; i++) { - sum += salary[i]; - minSalary = Math.min(minSalary, salary[i]); - maxSalary = Math.max(maxSalary, salary[i]); + public double average(int[] salary) { + int minSalary = salary[0]; + int maxSalary = salary[0]; + double totalSalary = 0; + for (int s : salary) { + minSalary = Math.min(minSalary, s); + maxSalary = Math.max(maxSalary, s); + totalSalary += s; + } + return (totalSalary - minSalary - maxSalary) / (salary.length - 2); } - sum -= (maxSalary + minSalary); - return ((double) sum) / (n - 2); - } } From 1b421f46b4e527373527938d5a12473f6fd8eb2f Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 30 Apr 2023 18:47:16 -0700 Subject: [PATCH 1115/1640] Updated Index Pairs of a String.java --- Easy/Index Pairs of a String.java | 56 ++++++------------------------- 1 file changed, 10 insertions(+), 46 deletions(-) diff --git a/Easy/Index Pairs of a String.java b/Easy/Index Pairs of a String.java index 97d590ce..5fd32b1e 100644 --- a/Easy/Index Pairs of a String.java +++ b/Easy/Index Pairs of a String.java @@ -1,50 +1,14 @@ class Solution { - public int[][] indexPairs(String text, String[] words) { - TrieNode root = new TrieNode('-'); - for (String word : words) { - addWord(word, root); - } - List list = new ArrayList<>(); - for (int i = 0; i < text.length(); i++) { - int j = i; - TrieNode curr = root; - while (j < text.length() && curr.childrens.containsKey(text.charAt(j))) { - curr = curr.childrens.get(text.charAt(j)); - if (curr.isWord) { - list.add(new int[]{i, j}); + public int[][] indexPairs(String text, String[] words) { + List pairs = new ArrayList<>(); + for (String word : words) { + for (int i = 0; i < text.length() - word.length() + 1; i++) { + if (text.startsWith(word, i)) { + pairs.add(new int[]{i, i + word.length() - 1}); + } + } } - j++; - } - } - int[][] ans = new int[list.size()][2]; - for (int i = 0; i < list.size(); i++) { - ans[i] = list.get(i); + pairs.sort(Comparator.comparingInt((int[] o) -> o[0]).thenComparingInt(o -> o[1])); + return pairs.toArray(new int[0][]); } - return ans; - } - - private void addWord(String s, TrieNode root) { - for (int i = 0; i < s.length(); i++) { - if (!root.childrens.containsKey(s.charAt(i))) { - root.childrens.put(s.charAt(i), new TrieNode(s.charAt(i))); - } - root = root.childrens.get(s.charAt(i)); - if (i == s.length() - 1) { - root.isWord = true; - } - } - } -} - - -class TrieNode { - char c; - Map childrens; - boolean isWord; - - public TrieNode(char c) { - this.c = c; - childrens = new HashMap<>(); - isWord = false; - } } From 0edbde0debe23895091975afc288ab1b264e0eb4 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 1 May 2023 17:36:26 -0700 Subject: [PATCH 1116/1640] Updated Sign of the Product of an Array.java --- Easy/Sign of the Product of an Array.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Easy/Sign of the Product of an Array.java b/Easy/Sign of the Product of an Array.java index 8f286c24..b4f1172c 100644 --- a/Easy/Sign of the Product of an Array.java +++ b/Easy/Sign of the Product of an Array.java @@ -1,12 +1,12 @@ class Solution { - public int arraySign(int[] nums) { - int negativeCount = 0; - for (int num : nums) { - if (num == 0) { - return 0; - } - negativeCount += num < 0 ? 1 : 0; + public int arraySign(int[] nums) { + int negCount = 0; + for (int num : nums) { + if (num == 0) { + return 0; + } + negCount += num > 0 ? 0 : 1; + } + return negCount % 2 == 0 ? 1 : -1; } - return negativeCount % 2 == 0 ? 1 : -1; - } } From 757ae7369d60f144e74af0eed50057e078ea16fa Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 3 May 2023 06:48:54 -0700 Subject: [PATCH 1117/1640] Updated Building H2O.java --- Concurrency/Building H2O.java | 40 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/Concurrency/Building H2O.java b/Concurrency/Building H2O.java index 2d2dee57..04fda0bc 100644 --- a/Concurrency/Building H2O.java +++ b/Concurrency/Building H2O.java @@ -1,26 +1,24 @@ class H2O { - - private final Semaphore hydrogenSemaphore; - private final Semaphore oxygenSemaphore; + + private Semaphore hydrogenSemaphore; + private Semaphore oxygenSemaphore; - public H2O() { - this.hydrogenSemaphore = new Semaphore(2); - this.oxygenSemaphore = new Semaphore(0); - } + public H2O() { + this.hydrogenSemaphore = new Semaphore(2); + this.oxygenSemaphore = new Semaphore(0); + } - public void hydrogen(Runnable releaseHydrogen) throws InterruptedException { + public void hydrogen(Runnable releaseHydrogen) throws InterruptedException { + hydrogenSemaphore.acquire(); + // releaseHydrogen.run() outputs "H". Do not change or remove this line. + releaseHydrogen.run(); + this.oxygenSemaphore.release(); + } - this.hydrogenSemaphore.acquire(); - // releaseHydrogen.run() outputs "H". Do not change or remove this line. - releaseHydrogen.run(); - this.oxygenSemaphore.release(); - } - - public void oxygen(Runnable releaseOxygen) throws InterruptedException { - - this.oxygenSemaphore.acquire(2); - // releaseOxygen.run() outputs "O". Do not change or remove this line. - releaseOxygen.run(); - this.hydrogenSemaphore.release(2); - } + public void oxygen(Runnable releaseOxygen) throws InterruptedException { + this.oxygenSemaphore.acquire(2); + // releaseOxygen.run() outputs "O". Do not change or remove this line. + releaseOxygen.run(); + this.hydrogenSemaphore.release(2); + } } From 29c9d6db7191ab8082bf2d082ff75211a9b7f44d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 May 2023 06:17:28 -0700 Subject: [PATCH 1118/1640] Create Dota2 Senate.java --- Medium/Dota2 Senate.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Dota2 Senate.java diff --git a/Medium/Dota2 Senate.java b/Medium/Dota2 Senate.java new file mode 100644 index 00000000..56465cb4 --- /dev/null +++ b/Medium/Dota2 Senate.java @@ -0,0 +1,24 @@ +class Solution { + public String predictPartyVictory(String senate) { + int n = senate.length(); + Queue rValid = new LinkedList<>(); + Queue dValid = new LinkedList<>(); + for (int i = 0; i < n; i++) { + if (senate.charAt(i) == 'R') { + rValid.add(i); + } else { + dValid.add(i); + } + } + while (!rValid.isEmpty() && !dValid.isEmpty()) { + int rTurn = rValid.remove(); + int dTurn = dValid.remove(); + if (dTurn < rTurn) { + dValid.add(dTurn + n); + } else { + rValid.add(rTurn + n); + } + } + return rValid.isEmpty() ? "Dire" : "Radiant"; + } +} From 6eddbb3029c37553f7429a96a906fc8cc36394ed Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 May 2023 17:52:00 -0700 Subject: [PATCH 1119/1640] Update Maximum Number of Vowels in a Substring of Given Length.java --- ...Vowels in a Substring of Given Length.java | 49 ++++++++----------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/Medium/Maximum Number of Vowels in a Substring of Given Length.java b/Medium/Maximum Number of Vowels in a Substring of Given Length.java index 5af78c54..0b27eda9 100644 --- a/Medium/Maximum Number of Vowels in a Substring of Given Length.java +++ b/Medium/Maximum Number of Vowels in a Substring of Given Length.java @@ -1,32 +1,23 @@ class Solution { - public int maxVowels(String s, int k) { - Map map = new HashMap<>(); - String vowels = "aeiou"; - int count = 0; - int maxCount = 0; - int start = 0; - int end = 0; - int n = s.length(); - while (end < (k - 1)) { - if (vowels.indexOf(s.charAt(end)) != -1) { - map.put(s.charAt(end), map.getOrDefault(s.charAt(end), 0) + 1); - count++; - } - end++; + public int maxVowels(String s, int k) { + int currCount = 0; + Set vowels = Set.of('a', 'e', 'i', 'o', 'u'); + for (int i = 0; i < k - 1; i++) { + if (vowels.contains(s.charAt(i))) { + currCount++; + } + } + int maxCount = 0; + int start = 0; + for (int i = k - 1; i < s.length(); i++) { + if (vowels.contains(s.charAt(i))) { + currCount++; + } + maxCount = Math.max(maxCount, currCount); + if (vowels.contains(s.charAt(start++))) { + currCount--; + } + } + return maxCount; } - while (end < n) { - if (vowels.indexOf(s.charAt(end)) != -1) { - map.put(s.charAt(end), map.getOrDefault(s.charAt(end), 0) + 1); - count++; - } - end++; - maxCount = Math.max(maxCount, count); - if (vowels.indexOf(s.charAt(start)) != -1) { - map.put(s.charAt(start), map.getOrDefault(s.charAt(start), 0) - 1); - count--; - } - start++; - } - return maxCount; - } } From f22f7a0473ee59a43875dc1987e03d0dcf03367c Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 6 May 2023 07:27:19 -0700 Subject: [PATCH 1120/1640] Added Number of Subsequences That Satisfy the Given Sum Condition.java --- ... That Satisfy the Given Sum Condition.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Number of Subsequences That Satisfy the Given Sum Condition.java diff --git a/Medium/Number of Subsequences That Satisfy the Given Sum Condition.java b/Medium/Number of Subsequences That Satisfy the Given Sum Condition.java new file mode 100644 index 00000000..9a40ee6b --- /dev/null +++ b/Medium/Number of Subsequences That Satisfy the Given Sum Condition.java @@ -0,0 +1,26 @@ +class Solution { + + private static final int MOD = 1000_000_007; + + public int numSubseq(int[] nums, int target) { + int n = nums.length; + Arrays.sort(nums); + int[] power = new int[n]; + power[0] = 1; + for (int i = 1; i < n; i++) { + power[i] = (power[i - 1] * 2) % MOD; + } + int result = 0; + int left = 0; + int right = n - 1; + while (left <= right) { + if (nums[left] + nums[right] <= target) { + result = (result + power[right - left]) % MOD; + left++; + } else { + right--; + } + } + return result; + } +} From 50dee52b80df69c6bea25983c4830e5a8e5082b8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 7 May 2023 07:29:52 -0700 Subject: [PATCH 1121/1640] Added Find the Distinct Difference Array.java --- Easy/Find the Distinct Difference Array.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Find the Distinct Difference Array.java diff --git a/Easy/Find the Distinct Difference Array.java b/Easy/Find the Distinct Difference Array.java new file mode 100644 index 00000000..5578427f --- /dev/null +++ b/Easy/Find the Distinct Difference Array.java @@ -0,0 +1,17 @@ +class Solution { + public int[] distinctDifferenceArray(int[] nums) { + int[] rightToLeft = new int[nums.length]; + Set set = new HashSet<>(); + for (int i = nums.length - 1; i >= 0; i--) { + set.add(nums[i]); + rightToLeft[i] = set.size(); + } + int[] diff = new int[nums.length]; + set.clear(); + for (int i = 0; i < nums.length; i++) { + set.add(nums[i]); + diff[i] = set.size() - (i == nums.length - 1 ? 0 : rightToLeft[i + 1]); + } + return diff; + } +} From b1722b789cc13e48f6565ab9229e3e4de6df97f8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 7 May 2023 10:07:32 -0700 Subject: [PATCH 1122/1640] Added Find the Longest Valid Obstacle Course at Each Position.java --- ...alid Obstacle Course at Each Position.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Hard/Find the Longest Valid Obstacle Course at Each Position.java diff --git a/Hard/Find the Longest Valid Obstacle Course at Each Position.java b/Hard/Find the Longest Valid Obstacle Course at Each Position.java new file mode 100644 index 00000000..fcd272fb --- /dev/null +++ b/Hard/Find the Longest Valid Obstacle Course at Each Position.java @@ -0,0 +1,34 @@ +class Solution { + public int[] longestObstacleCourseAtEachPosition(int[] obstacles) { + int n = obstacles.length; + int lisLength = 0; + int[] result = new int[n]; + int[] lis = new int[n]; + for (int i = 0; i < n; i++) { + int height = obstacles[i]; + int idx = bisect(lis, height, lisLength); + if (idx == lisLength) { + lisLength++; + } + lis[idx] = height; + result[i] = idx + 1; + } + return result; + } + + private int bisect(int[] lis, int target, int right) { + if (right == 0) { + return 0; + } + int left = 0; + while (left < right) { + int mid = left + (right - left) / 2; + if (lis[mid] <= target) { + left = mid + 1; + } else { + right = mid; + } + } + return left; + } +} From bd776c303881b9f273ef41abf502586a59f5dc64 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 7 May 2023 10:19:42 -0700 Subject: [PATCH 1123/1640] Added Frequency Tracker.java --- Medium/Frequency Tracker.java | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Medium/Frequency Tracker.java diff --git a/Medium/Frequency Tracker.java b/Medium/Frequency Tracker.java new file mode 100644 index 00000000..e5e83453 --- /dev/null +++ b/Medium/Frequency Tracker.java @@ -0,0 +1,48 @@ +class FrequencyTracker { + + private final Map numToFrequencyMapping; + private final Map> frequencyToNumMapping; + + public FrequencyTracker() { + this.numToFrequencyMapping = new HashMap<>(); + this.frequencyToNumMapping = new HashMap<>(); + } + + public void add(int number) { + int prevFrequency = this.numToFrequencyMapping.getOrDefault(number, 0); + int newFrequency = prevFrequency + 1; + this.numToFrequencyMapping.put(number, newFrequency); + updateFreqToNumMapping(number, prevFrequency, newFrequency); + } + + public void deleteOne(int number) { + int prevFrequency = this.numToFrequencyMapping.getOrDefault(number, 0); + if (prevFrequency == 0) { + return; + } + int newFrequency = prevFrequency - 1; + this.numToFrequencyMapping.put(number, newFrequency); + updateFreqToNumMapping(number, prevFrequency, newFrequency); + } + + public boolean hasFrequency(int frequency) { + return this.frequencyToNumMapping.getOrDefault(frequency, new HashSet<>()).size() > 0; + } + + private void updateFreqToNumMapping(int number, int prevFrequency, int newFrequency) { + if (prevFrequency != 0) { + this.frequencyToNumMapping.get(prevFrequency).remove(number); + } + if (newFrequency != 0) { + this.frequencyToNumMapping.computeIfAbsent(newFrequency, k -> new HashSet<>()).add(number); + } + } +} + +/** + * Your FrequencyTracker object will be instantiated and called as such: + * FrequencyTracker obj = new FrequencyTracker(); + * obj.add(number); + * obj.deleteOne(number); + * boolean param_3 = obj.hasFrequency(frequency); + */ From 0b2f422764938ae75bbcc4cc4550e1940f99dce8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 8 May 2023 12:46:46 -0700 Subject: [PATCH 1124/1640] Update Find Minimum in Rotated Sorted Array.java --- .../Find Minimum in Rotated Sorted Array.java | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/Medium/Find Minimum in Rotated Sorted Array.java b/Medium/Find Minimum in Rotated Sorted Array.java index 8c18f17b..79ae6e51 100644 --- a/Medium/Find Minimum in Rotated Sorted Array.java +++ b/Medium/Find Minimum in Rotated Sorted Array.java @@ -1,30 +1,17 @@ class Solution { - public int findMin(int[] nums) { - if (nums.length == 1) { - return nums[0]; + public int findMin(int[] nums) { + int start = 0; + int end = nums.length - 1; + int minValue = 5001; + while (start <= end) { + int mid = (start + end) / 2; + minValue = Math.min(minValue, nums[mid]); + if (nums[end] > nums[mid]) { + end = mid - 1; + } else { + start = mid + 1; + } + } + return minValue; } - int left = 0; - int right = nums.length - 1; - // Sorted but not rotated - if (nums[right] > nums[left]) { - return nums[left]; - } - while (left <= right) { - int mid = (left + right) / 2; - // mid + 1 is point of rotation - if (nums[mid] > nums[mid + 1]) { - return nums[mid + 1]; - } - // mid is point of rotation - if (nums[mid - 1] > nums[mid]) { - return nums[mid]; - } - if (nums[mid] > nums[0]) { - left = mid + 1; - } else { - right = mid - 1; - } - } - return Integer.MAX_VALUE; - } } From 1bfdf2dbabea029b8826106b024e3b872002d2a6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 8 May 2023 17:33:46 -0700 Subject: [PATCH 1125/1640] Update Spiral Matrix.java --- Medium/Spiral Matrix.java | 56 +++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/Medium/Spiral Matrix.java b/Medium/Spiral Matrix.java index 6004fe4d..252374fb 100644 --- a/Medium/Spiral Matrix.java +++ b/Medium/Spiral Matrix.java @@ -1,32 +1,32 @@ class Solution { - public List spiralOrder(int[][] matrix) { - List list = new ArrayList<>(); - int rowStart = 0; - int rowEnd = matrix.length - 1; - int colStart = 0; - int colEnd = matrix[0].length - 1; - while (rowStart <= rowEnd && colStart <= colEnd) { - for (int i = colStart; i <= colEnd; i++) { - list.add(matrix[rowStart][i]); - } - rowStart++; - for (int i = rowStart; i <= rowEnd; i++) { - list.add(matrix[i][colEnd]); - } - colEnd--; - if (rowStart <= rowEnd) { - for (int i = colEnd; i >= colStart; i--) { - list.add(matrix[rowEnd][i]); + public List spiralOrder(int[][] matrix) { + List result = new ArrayList<>(); + int rowStart = 0; + int rowEnd = matrix.length - 1; + int colStart = 0; + int colEnd = matrix[0].length - 1; + while (rowStart <= rowEnd && colStart <= colEnd) { + for (int i = colStart; i <= colEnd; i++) { + result.add(matrix[rowStart][i]); + } + rowStart++; + for (int i = rowStart; i <= rowEnd; i++) { + result.add(matrix[i][colEnd]); + } + colEnd--; + if (rowStart <= rowEnd) { + for (int i = colEnd; i >= colStart; i--) { + result.add(matrix[rowEnd][i]); + } + rowEnd--; + } + if (colStart <= colEnd) { + for (int i = rowEnd; i >= rowStart; i--) { + result.add(matrix[i][colStart]); + } + colStart++; + } } - rowEnd--; - } - if (colStart <= colEnd) { - for (int i = rowEnd; i >= rowStart; i--) { - list.add(matrix[i][colStart]); - } - colStart++; - } + return result; } - return list; - } } From 74fc658d62e964a2272d7e76fc0aebec8fc92549 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 9 May 2023 07:20:28 -0700 Subject: [PATCH 1126/1640] Added Find the Pivot Integer.java --- Easy/Find the Pivot Integer.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Find the Pivot Integer.java diff --git a/Easy/Find the Pivot Integer.java b/Easy/Find the Pivot Integer.java new file mode 100644 index 00000000..3cad5e0b --- /dev/null +++ b/Easy/Find the Pivot Integer.java @@ -0,0 +1,18 @@ +class Solution { + public int pivotInteger(int n) { + int[] leftToRightSum = new int[n]; + int currSum = 0; + for (int i = 0; i < n; i++) { + currSum += i + 1; + leftToRightSum[i] = currSum; + } + int rightToLeftSum = 0; + for (int i = n - 1; i >= 0; i--) { + rightToLeftSum += i + 1; + if (leftToRightSum[i] == rightToLeftSum) { + return i + 1; + } + } + return -1; + } +} From ba891a7557b17607eff32ffc242b162afc81a62b Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 9 May 2023 07:22:40 -0700 Subject: [PATCH 1127/1640] Added Delete Greatest Value in Each Row.java --- Easy/Delete Greatest Value in Each Row.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Delete Greatest Value in Each Row.java diff --git a/Easy/Delete Greatest Value in Each Row.java b/Easy/Delete Greatest Value in Each Row.java new file mode 100644 index 00000000..ca6794aa --- /dev/null +++ b/Easy/Delete Greatest Value in Each Row.java @@ -0,0 +1,16 @@ +class Solution { + public int deleteGreatestValue(int[][] grid) { + for (int[] g : grid) { + Arrays.sort(g); + } + int result = 0; + for (int i = grid[0].length - 1; i >= 0; i--) { + int maxValue = Integer.MIN_VALUE; + for (int[] g : grid) { + maxValue = Math.max(maxValue, g[i]); + } + result += maxValue; + } + return result; + } +} From ad7a72e85ed501b25be5277c7bca459f96c2c083 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 May 2023 17:34:01 -0700 Subject: [PATCH 1128/1640] Update Spiral Matrix II.java --- Medium/Spiral Matrix II.java | 56 +++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/Medium/Spiral Matrix II.java b/Medium/Spiral Matrix II.java index ffa09b62..636fbb69 100644 --- a/Medium/Spiral Matrix II.java +++ b/Medium/Spiral Matrix II.java @@ -1,29 +1,33 @@ class Solution { - public int[][] generateMatrix(int n) { - int[][] ans = new int[n][n]; - int left = 0; - int top = 0; - int right = n -1; - int down = n - 1; - int count = 1; - while (left <= right) { - for (int j = left; j <= right; j ++) { - ans[top][j] = count++; - } - top++; - for (int i = top; i <= down; i ++) { - ans[i][right] = count ++; - } - right--; - for (int j = right; j >= left; j --) { - ans[down][j] = count ++; - } - down--; - for (int i = down; i >= top; i --) { - ans[i][left] = count ++; - } - left++; + public int[][] generateMatrix(int n) { + int[][] result = new int[n][n]; + int rowStart = 0; + int rowEnd = n - 1; + int colStart = 0; + int colEnd = n - 1; + int value = 1; + while (rowStart <= rowEnd && colStart <= colEnd) { + for (int i = colStart; i <= colEnd; i++) { + result[rowStart][i] = value++; + } + rowStart++; + for (int i = rowStart; i <= rowEnd; i++) { + result[i][colEnd] = value++; + } + colEnd--; + if (rowStart <= rowEnd) { + for (int i = colEnd; i >= colStart; i--) { + result[rowEnd][i] = value++; + } + rowEnd--; + } + if (colStart <= colEnd) { + for (int i = rowEnd; i >= rowStart; i--) { + result[i][colStart] = value++; + } + colStart++; + } + } + return result; } - return ans; - } } From b3241878560e55031415baa1d6b4b473fb7d8a9e Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 10 May 2023 17:09:27 -0700 Subject: [PATCH 1129/1640] Updated Uncrossed Lines.java --- Medium/Uncrossed Lines.java | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/Medium/Uncrossed Lines.java b/Medium/Uncrossed Lines.java index 6a923dfa..729da13d 100644 --- a/Medium/Uncrossed Lines.java +++ b/Medium/Uncrossed Lines.java @@ -1,23 +1,21 @@ class Solution { - Integer[][] dp; - public int maxUncrossedLines(int[] A, int[] B) { - dp = new Integer[A.length][B.length]; - return helper(A, 0, B, 0); - } - - private int helper(int[] A, int idxA, int[] B, int idxB) { - if (idxA == A.length || idxB == B.length) { - return 0; - } - if (dp[idxA][idxB] != null) { - return dp[idxA][idxB]; + public int maxUncrossedLines(int[] nums1, int[] nums2) { + Integer[][] dp = new Integer[nums1.length][nums2.length]; + return helper(nums1, 0, nums2, 0, dp); } - if (A[idxA] == B[idxB]) { - dp[idxA][idxB] = 1 + helper(A, idxA + 1, B, idxB + 1); + + private int helper(int[] nums1, int idxOne, int[] nums2, int idxTwo, Integer[][] dp) { + if (idxOne == nums1.length || idxTwo == nums2.length) { + return 0; + } + if (dp[idxOne][idxTwo] != null) { + return dp[idxOne][idxTwo]; + } + if (nums1[idxOne] == nums2[idxTwo]) { + return dp[idxOne][idxTwo] = 1 + helper(nums1, idxOne + 1, nums2, idxTwo + 1, dp); + } + return dp[idxOne][idxTwo] = Math.max( + helper(nums1, idxOne, nums2, idxTwo + 1, dp), + helper(nums1, idxOne + 1, nums2, idxTwo, dp)); } - else { - dp[idxA][idxB] = Math.max(helper(A, idxA + 1, B, idxB), helper(A, idxA, B, idxB + 1)); - } - return dp[idxA][idxB]; - } } From a7228134a9273e85572939de02ac80e2fdc2b56e Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 12 May 2023 06:33:01 -0700 Subject: [PATCH 1130/1640] Added Solving Questions With Brainpower.java --- Medium/Solving Questions With Brainpower.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Solving Questions With Brainpower.java diff --git a/Medium/Solving Questions With Brainpower.java b/Medium/Solving Questions With Brainpower.java new file mode 100644 index 00000000..76e640d1 --- /dev/null +++ b/Medium/Solving Questions With Brainpower.java @@ -0,0 +1,19 @@ +class Solution { + public long mostPoints(int[][] questions) { + Long[] dp = new Long[questions.length]; + return helper(questions, 0, dp); + } + + private long helper(int[][] questions, int idx, Long[] dp) { + if (idx >= questions.length) { + return 0; + } + if (dp[idx] != null) { + return dp[idx]; + } + return dp[idx] = Math.max( + questions[idx][0] + helper(questions, idx + questions[idx][1] + 1, dp), + helper(questions, idx + 1, dp) + ); + } +} From 8d15a6b1d68e6d7df9ca39ea79f7b95a8264447a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 13 May 2023 14:28:40 -0700 Subject: [PATCH 1131/1640] Create Count Ways To Build Good Strings.java --- Medium/Count Ways To Build Good Strings.java | 23 ++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Count Ways To Build Good Strings.java diff --git a/Medium/Count Ways To Build Good Strings.java b/Medium/Count Ways To Build Good Strings.java new file mode 100644 index 00000000..16991f0c --- /dev/null +++ b/Medium/Count Ways To Build Good Strings.java @@ -0,0 +1,23 @@ +class Solution { + + private static final int MOD = 1000_000_007; + + public int countGoodStrings(int low, int high, int zero, int one) { + int[] dp = new int[high + 1]; + dp[0] = 1; + for (int i = 1; i <= high; i++) { + if (i >= zero) { + dp[i] += dp[i - zero]; + } + if (i >= one) { + dp[i] += dp[i - one]; + } + dp[i] %= MOD; + } + int result = 0; + for (int i = low; i <= high; i++) { + result = (result + dp[i]) % MOD; + } + return result; + } +} From e1b690f7c5b690385c2d1c558e929a27c3545ab6 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 13 May 2023 16:10:56 -0700 Subject: [PATCH 1132/1640] Added Number of Senior Citizens.java --- Easy/Number of Senior Citizens.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Number of Senior Citizens.java diff --git a/Easy/Number of Senior Citizens.java b/Easy/Number of Senior Citizens.java new file mode 100644 index 00000000..cb658ee0 --- /dev/null +++ b/Easy/Number of Senior Citizens.java @@ -0,0 +1,8 @@ +class Solution { + public int countSeniors(String[] details) { + return (int) Arrays.stream(details) + .map(s -> Integer.parseInt(s.substring(11, 13))) + .filter(age -> age > 60) + .count(); + } +} From f9e9563598991ee9e7cb14272da3b20d67c7a9ca Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 14 May 2023 06:14:49 -0700 Subject: [PATCH 1133/1640] Added Maximize Score After N Operations.java --- Hard/Maximize Score After N Operations.java | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Hard/Maximize Score After N Operations.java diff --git a/Hard/Maximize Score After N Operations.java b/Hard/Maximize Score After N Operations.java new file mode 100644 index 00000000..2ed4f892 --- /dev/null +++ b/Hard/Maximize Score After N Operations.java @@ -0,0 +1,37 @@ +class Solution { + public int maxScore(int[] nums) { + int dpSize = 1 << nums.length; + int[] dp = new int[dpSize]; + Arrays.fill(dp, -1); + return backtrack(nums, 0, 0, dp); + } + + private int backtrack(int[] nums, int mask, int pickCount, int[] dp) { + if (2 * pickCount == nums.length) { + return 0; + } + if (dp[mask] != -1) { + return dp[mask]; + } + int maxScore = 0; + for (int i = 0; i < nums.length; i++) { + for (int j = i + 1; j < nums.length; j++) { + if (((mask >> i) & 1) == 1 || ((mask >> j) & 1) == 1) { + continue; + } + int newMask = mask | (1 << i) | (1 << j); + int curr = (pickCount + 1) * gcd(nums[i], nums[j]); + int remaining = backtrack(nums, newMask, pickCount + 1, dp); + maxScore = Math.max(maxScore, curr + remaining); + } + } + return dp[mask] = maxScore; + } + + private int gcd(int a, int b) { + if (b == 0) { + return a; + } + return gcd(b, a % b); + } +} From 1e29e3ee9674379488ffc42f76324ec41fbf1e56 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 14 May 2023 06:25:15 -0700 Subject: [PATCH 1134/1640] Added Find the Losers of the Circular Game.java --- .../Find the Losers of the Circular Game.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Find the Losers of the Circular Game.java diff --git a/Easy/Find the Losers of the Circular Game.java b/Easy/Find the Losers of the Circular Game.java new file mode 100644 index 00000000..aaa8c059 --- /dev/null +++ b/Easy/Find the Losers of the Circular Game.java @@ -0,0 +1,19 @@ +class Solution { + public int[] circularGameLosers(int n, int k) { + Set set = new HashSet<>(); + int player = 1; + int multiple = k; + while (set.add(player)) { + player = (player + k) % n; + player = player == 0 ? n : player; + k += multiple; + } + int[] result = new int[n - set.size()]; + for (int i = 1, j = 0; i <= n; i++) { + if (!set.contains(i)) { + result[j++] = i; + } + } + return result; + } +} From 98e0c50250e0a49088c704bb0e13bb2ae4c843e7 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 14 May 2023 15:55:33 -0700 Subject: [PATCH 1135/1640] Added Sum in a Matrix.java --- Medium/Sum in a Matrix.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Sum in a Matrix.java diff --git a/Medium/Sum in a Matrix.java b/Medium/Sum in a Matrix.java new file mode 100644 index 00000000..0261f81b --- /dev/null +++ b/Medium/Sum in a Matrix.java @@ -0,0 +1,16 @@ +class Solution { + public int matrixSum(int[][] nums) { + for (int[] num : nums) { + Arrays.sort(num); + } + int score = 0; + for (int i = 0; i < nums[0].length; i++) { + int maxNum = 0; + for (int[] num : nums) { + maxNum = Math.max(maxNum, num[i]); + } + score += maxNum; + } + return score; + } +} From f9edb33c4e3f06aee3698697b55b6d1a769560ea Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 May 2023 17:43:15 -0700 Subject: [PATCH 1136/1640] Update Swap Nodes in Pairs.java --- Medium/Swap Nodes in Pairs.java | 35 +++++++++++++++++---------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/Medium/Swap Nodes in Pairs.java b/Medium/Swap Nodes in Pairs.java index 980e4356..505f7af0 100644 --- a/Medium/Swap Nodes in Pairs.java +++ b/Medium/Swap Nodes in Pairs.java @@ -9,22 +9,23 @@ * } */ class Solution { - public ListNode swapPairs(ListNode head) { - ListNode curr = head; - ListNode prev = null; - while (curr != null && curr.next != null) { - ListNode nextNode = curr.next; - if (curr == head) { - head = nextNode; - } - curr.next = nextNode.next; - nextNode.next = curr; - if (prev != null) { - prev.next = nextNode; - } - prev = curr; - curr = curr.next; + public ListNode swapPairs(ListNode head) { + ListNode curr = head; + ListNode prev = null; + while (curr != null && curr.next != null) { + ListNode nextNode = curr.next; + ListNode nextToNext = curr.next.next; + if (prev == null) { + head = nextNode; + } + if (prev != null) { + prev.next = nextNode; + } + nextNode.next = curr; + curr.next = nextToNext; + prev = curr; + curr = nextToNext; + } + return head; } - return head; - } } From 922c0b01e6afac116e9d8808dc9aac4e8a283738 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 15 May 2023 18:54:08 -0700 Subject: [PATCH 1137/1640] Added Paint House II.java --- Hard/Paint House II.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Hard/Paint House II.java diff --git a/Hard/Paint House II.java b/Hard/Paint House II.java new file mode 100644 index 00000000..23ac7a3d --- /dev/null +++ b/Hard/Paint House II.java @@ -0,0 +1,28 @@ +class Solution { + public int minCostII(int[][] costs) { + int n = costs.length; + int k = costs[0].length; + int[][] dp = new int[n][k]; + for (int i = 0; i < k; i++) { + dp[0][i] = costs[0][i]; + } + for (int i = 1; i < n; i++) { + for (int j = 0; j < k; j++) { + dp[i][j] = minCost(dp[i - 1], j) + costs[i][j]; + } + } + return minCost(dp[n - 1], -1); + } + + private int minCost(int[] dp, int currPaintIdx) { + int cost = Integer.MAX_VALUE; + int idx = 0; + while (idx < dp.length) { + if (!(currPaintIdx != -1 && idx == currPaintIdx)) { + cost = Math.min(cost, dp[idx]); + } + idx++; + } + return cost; + } +} From b1f564ccced0d69f86be6c20718f35463b6c620b Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 18 May 2023 06:29:09 -0700 Subject: [PATCH 1138/1640] Updated Minimum Number of Vertices to Reach All Nodes.java --- ...Number of Vertices to Reach All Nodes.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Medium/Minimum Number of Vertices to Reach All Nodes.java b/Medium/Minimum Number of Vertices to Reach All Nodes.java index 6c0688b6..6459877d 100644 --- a/Medium/Minimum Number of Vertices to Reach All Nodes.java +++ b/Medium/Minimum Number of Vertices to Reach All Nodes.java @@ -1,15 +1,15 @@ class Solution { - public List findSmallestSetOfVertices(int n, List> edges) { - int[] indegree = new int[n]; - for (List edge : edges) { - indegree[edge.get(1)]++; + public List findSmallestSetOfVertices(int n, List> edges) { + int[] indegree = new int[n]; + for (List edge : edges) { + indegree[edge.get(1)]++; + } + List zeroIndegree = new ArrayList<>(); + for (int i = 0; i < n; i++) { + if (indegree[i] == 0) { + zeroIndegree.add(i); + } + } + return zeroIndegree; } - List ans = new ArrayList<>(); - for (int i = 0; i < n; i++) { - if (indegree[i] == 0) { - ans.add(i); - } - } - return ans; - } } From 2773659c8c184371b3a38c632b750a9b8a995424 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 18 May 2023 18:10:31 -0700 Subject: [PATCH 1139/1640] Updated Is Graph Bipartite.java --- Medium/Is Graph Bipartite.java | 67 +++++++++++++++++----------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/Medium/Is Graph Bipartite.java b/Medium/Is Graph Bipartite.java index c77018dc..3a30604f 100644 --- a/Medium/Is Graph Bipartite.java +++ b/Medium/Is Graph Bipartite.java @@ -1,39 +1,38 @@ class Solution { - public boolean isBipartite(int[][] graph) { - int n = graph.length; - int[] color = new int[n]; - Arrays.fill(color, -1); - for (int i = 0; i < n; i++) { - if (color[i] == -1 && !bipartiteCheck(graph, i, color)) { - return false; - } - } - return true; - } - - private boolean bipartiteCheck(int[][] graph, int node, int[] color) { - Queue queue = new LinkedList<>(); - queue.add(node); - int currColor = 0; - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int removed = queue.remove(); - if (color[removed] != -1) { - if (color[removed] != currColor) { - return false; - } - continue; + public boolean isBipartite(int[][] graph) { + int n = graph.length; + int[] color = new int[n]; + for (int i = 0; i < n; i++) { + if (color[i] == 0 && !isBipartite(graph, i, color)) { + return false; + } } - color[removed] = currColor; - for (int conn : graph[removed]) { - if (color[conn] == -1) { - queue.add(conn); - } + return true; + } + + private boolean isBipartite(int[][] graph, int node, int[] color) { + Queue queue = new LinkedList<>(); + queue.add(node); + int currColor = 1; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int removed = queue.remove(); + if (color[removed] != 0) { + if (color[removed] != currColor) { + return false; + } + } else { + color[removed] = currColor; + for (int conn : graph[removed]) { + if (color[conn] == 0) { + queue.add(conn); + } + } + } + } + currColor = currColor == 1 ? 2 : 1; } - } - currColor = currColor == 1 ? 0 : 1; + return true; } - return true; - } } From b9301cf85ff6819780ed16c069eab7c4b2ebee9f Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 20 May 2023 16:26:13 -0700 Subject: [PATCH 1140/1640] Added Sort Linked List Already Sorted Using Absolute Values.java --- ... Already Sorted Using Absolute Values.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Sort Linked List Already Sorted Using Absolute Values.java diff --git a/Medium/Sort Linked List Already Sorted Using Absolute Values.java b/Medium/Sort Linked List Already Sorted Using Absolute Values.java new file mode 100644 index 00000000..fd43f251 --- /dev/null +++ b/Medium/Sort Linked List Already Sorted Using Absolute Values.java @@ -0,0 +1,25 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode sortLinkedList(ListNode head) { + ListNode curr = head; + while (curr != null && curr.next != null){ + if (curr.next.val < 0) { + // Make a new head with negative value and assign its next pointer to current head + head = new ListNode(curr.next.val,head); + curr.next = curr.next.next; + } else { + curr = curr.next; + } + } + return head; + } +} From 42d508fa5cdec44cdd6c1de5749bba29eb11470c Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 21 May 2023 06:57:45 -0700 Subject: [PATCH 1141/1640] Added Minimum String Length After Removing Substrings.java --- ...m String Length After Removing Substrings.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Minimum String Length After Removing Substrings.java diff --git a/Easy/Minimum String Length After Removing Substrings.java b/Easy/Minimum String Length After Removing Substrings.java new file mode 100644 index 00000000..606d3394 --- /dev/null +++ b/Easy/Minimum String Length After Removing Substrings.java @@ -0,0 +1,15 @@ +class Solution { + public int minLength(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (!stack.isEmpty() && c == 'B' && stack.peek() == 'A') { + stack.pop(); + } else if (!stack.isEmpty() && c == 'D' && stack.peek() == 'C') { + stack.pop(); + } else { + stack.push(c); + } + } + return stack.size(); + } +} From 92c2adb93fe20993119924badbe114874240168b Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 21 May 2023 11:43:16 -0700 Subject: [PATCH 1142/1640] Added Shortest Bridge.java --- Medium/Shortest Bridge.java | 65 +++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Medium/Shortest Bridge.java diff --git a/Medium/Shortest Bridge.java b/Medium/Shortest Bridge.java new file mode 100644 index 00000000..f5194373 --- /dev/null +++ b/Medium/Shortest Bridge.java @@ -0,0 +1,65 @@ +class Solution { + + private static final int[][] DIRS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + + public int shortestBridge(int[][] grid) { + int n = grid.length; + int x = -1; + int y = -1; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (grid[i][j] == 1) { + x = i; + y = j; + break; + } + } + } + List queueOne = new ArrayList<>(); + List queueTwo = new ArrayList<>(); + queueOne.add(new int[]{x, y}); + queueTwo.add(new int[]{x, y}); + grid[x][y] = 2; + while (!queueOne.isEmpty()) { + List bfs = new ArrayList<>(); + for (int[] cell : queueOne) { + int currX = cell[0]; + int currY = cell[1]; + for (int[] dir : DIRS) { + int newX = currX + dir[0]; + int newY = currY + dir[1]; + if (newX >= 0 && newX < n && newY >= 0 && newY < n && grid[newX][newY] == 1) { + bfs.add(new int[]{newX, newY}); + queueTwo.add(new int[]{newX, newY}); + grid[newX][newY] = 2; + } + } + } + queueOne = bfs; + } + int distance = 0; + while (!queueTwo.isEmpty()) { + List bfs = new ArrayList<>(); + for (int[] cell : queueTwo) { + int currX = cell[0]; + int currY = cell[1]; + for (int[] dir : DIRS) { + int newX = currX + dir[0]; + int newY = currY + dir[1]; + if (newX >= 0 && newX < n && newY >= 0 && newY < n) { + if (grid[newX][newY] == 1) { + return distance; + } else if (grid[newX][newY] == 0) { + bfs.add(new int[]{newX, newY}); + grid[newX][newY] = -1; + } + } + } + } + queueTwo = bfs; + distance++; + } + return distance; + } +} + From c47202023fca9448e8fb347e6f59cd9ede5ffc78 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 21 May 2023 15:41:19 -0700 Subject: [PATCH 1143/1640] Updated Minimum Size Subarray Sum.java --- Medium/Minimum Size Subarray Sum.java | 38 +++++++++------------------ 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/Medium/Minimum Size Subarray Sum.java b/Medium/Minimum Size Subarray Sum.java index 4d41780e..5bafe959 100644 --- a/Medium/Minimum Size Subarray Sum.java +++ b/Medium/Minimum Size Subarray Sum.java @@ -1,30 +1,18 @@ class Solution { - public int minSubArrayLen(int s, int[] nums) { - int sum = 0; - int slow = 0; - int fast = 0; - int n = nums.length; - int minLen = Integer.MAX_VALUE; - - while (fast < n) { - sum += nums[fast]; - - if (sum >= s) { - while (slow <= fast) { - minLen = Math.min(minLen, fast - slow + 1); - if (sum - nums[slow] >= s) { - sum -= nums[slow]; - slow++; - } - else { - break; - } - } + public int minSubArrayLen(int target, int[] nums) { + int start = 0; + int end = 0; + int currSum = 0; + int minLength = Integer.MAX_VALUE; + while (end < nums.length) { + currSum += nums[end++]; + while (start < end && currSum - nums[start] >= target) { + currSum -= nums[start++]; + } + if (currSum >= target) { + minLength = Math.min(minLength, end - start); } - - fast++; } - - return minLen == Integer.MAX_VALUE ? 0 : minLen; + return minLength == Integer.MAX_VALUE ? 0 : minLength; } } From f4227494b8ce834ed98bf5609f7a6b5f4e5bf721 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 22 May 2023 16:59:29 -0700 Subject: [PATCH 1144/1640] Updated Meeting Rooms II.java --- Medium/Meeting Rooms II.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Medium/Meeting Rooms II.java b/Medium/Meeting Rooms II.java index d43eab4e..ff594c8a 100644 --- a/Medium/Meeting Rooms II.java +++ b/Medium/Meeting Rooms II.java @@ -1,16 +1,15 @@ class Solution { - public int minMeetingRooms(int[][] intervals) { - Arrays.sort(intervals, Comparator.comparingInt((a) -> a[0])); - PriorityQueue meetingsInProgress = new PriorityQueue<>( - Comparator.comparingInt((a) -> a[1])); - int result = 0; - for (int[] interval : intervals) { - while (!meetingsInProgress.isEmpty() && meetingsInProgress.peek()[1] <= interval[0]) { - meetingsInProgress.poll(); - } - meetingsInProgress.add(interval); - result = Math.max(result, meetingsInProgress.size()); + public int minMeetingRooms(int[][] intervals) { + Arrays.sort(intervals, Comparator.comparingInt((int[] o) -> o[0])); + PriorityQueue pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1])); + int meetingRooms = 0; + for (int[] interval : intervals) { + while (!pq.isEmpty() && pq.peek()[1] <= interval[0]) { + pq.poll(); + } + pq.add(interval); + meetingRooms = Math.max(meetingRooms, pq.size()); + } + return meetingRooms; } - return result; - } } From 04bf94660422a50a0f22f94e325e2bc87630a7fb Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 22 May 2023 17:16:03 -0700 Subject: [PATCH 1145/1640] Updated Kth Largest Element in a Stream.java --- Easy/Kth Largest Element in a Stream.java | 39 ++++++++++++----------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/Easy/Kth Largest Element in a Stream.java b/Easy/Kth Largest Element in a Stream.java index 30bbc6f6..4b1868f3 100644 --- a/Easy/Kth Largest Element in a Stream.java +++ b/Easy/Kth Largest Element in a Stream.java @@ -1,25 +1,28 @@ class KthLargest { + + private final PriorityQueue pq; + private final int k; - private PriorityQueue pq; - private int k; - public KthLargest(int k, int[] nums) { - this.k = k; - this.pq = new PriorityQueue<>(); - for (int num : nums) { - pq.add(num); - if (pq.size() > k) { - pq.poll(); - } + public KthLargest(int k, int[] nums) { + this.k = k; + this.pq = new PriorityQueue<>((a, b) -> a - b); + for (int num : nums) { + pq.add(num); + checkLength(); + } } - } - - public int add(int val) { - pq.add(val); - if (pq.size() > k) { - pq.poll(); + + public int add(int val) { + pq.add(val); + checkLength(); + return pq.peek(); + } + + private void checkLength() { + if (pq.size() > k) { + pq.poll(); + } } - return pq.peek(); - } } /** From 3f9b65398725d12127e01070db7a674d5e0da1bb Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 23 May 2023 07:04:36 -0700 Subject: [PATCH 1146/1640] Updated Course Schedule II.java --- Medium/Course Schedule II.java | 54 ++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/Medium/Course Schedule II.java b/Medium/Course Schedule II.java index 78fb8e08..ce957faf 100644 --- a/Medium/Course Schedule II.java +++ b/Medium/Course Schedule II.java @@ -1,30 +1,32 @@ class Solution { - public int[] findOrder(int numCourses, int[][] prerequisites) { - Map> prerequisiteToCourseDependency = new HashMap<>(); - int[] prerequisiteCount = new int[numCourses]; - for (int[] prerequisite : prerequisites) { - prerequisiteToCourseDependency.computeIfAbsent(prerequisite[1], k -> new ArrayList<>()) - .add(prerequisite[0]); - prerequisiteCount[prerequisite[0]]++; - } - Queue queue = new LinkedList<>(); - for (int i = 0; i < numCourses; i++) { - if (prerequisiteCount[i] == 0) { - queue.add(i); - } - } - int[] courseOrder = new int[numCourses]; - int courseOrderIdx = 0; - while (!queue.isEmpty()) { - int course = queue.remove(); - courseOrder[courseOrderIdx++] = course; - for (Integer dependentCourse : prerequisiteToCourseDependency.getOrDefault(course, new ArrayList<>())) { - prerequisiteCount[dependentCourse]--; - if (prerequisiteCount[dependentCourse] == 0) { - queue.add(dependentCourse); + public int[] findOrder(int numCourses, int[][] prerequisites) { + Map> map = new HashMap<>(); + int[] indegree = new int[numCourses]; + for (int[] prerequisite : prerequisites) { + int course = prerequisite[0]; + int dependency = prerequisite[1]; + map.computeIfAbsent(dependency, k -> new HashSet<>()).add(course); + indegree[course]++; + } + Queue queue = new LinkedList<>(); + int[] result = new int[numCourses]; + int resultIdx = 0; + Set taken = new HashSet<>(); + for (int i = 0; i < numCourses; i++) { + if (indegree[i] == 0) { + queue.add(i); + } + } + while (!queue.isEmpty()) { + int removed = queue.remove(); + result[resultIdx++] = removed; + for (Integer dependent : map.getOrDefault(removed, new HashSet<>())) { + indegree[dependent]--; + if (indegree[dependent] == 0) { + queue.add(dependent); + } + } } - } + return resultIdx == numCourses ? result : new int[0]; } - return courseOrderIdx == numCourses ? courseOrder : new int[]{}; - } } From b96a91203e543980b50b519db48e1bbf338c1468 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 25 May 2023 07:35:50 -0700 Subject: [PATCH 1147/1640] Added Maximum Subsequence Score.java --- Medium/Maximum Subsequence Score.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Maximum Subsequence Score.java diff --git a/Medium/Maximum Subsequence Score.java b/Medium/Maximum Subsequence Score.java new file mode 100644 index 00000000..2598f5ed --- /dev/null +++ b/Medium/Maximum Subsequence Score.java @@ -0,0 +1,23 @@ +class Solution { + public long maxScore(int[] nums1, int[] nums2, int k) { + int[][] combined = new int[nums1.length][2]; + for (int i = 0; i < nums1.length; i++) { + combined[i] = new int[]{nums1[i], nums2[i]}; + } + Arrays.sort(combined, (o1, o2) -> o2[1] - o1[1]); + long result = 0; + long total = 0; + PriorityQueue pq = new PriorityQueue<>(); + for (int[] unit : combined) { + pq.add(unit[0]); + total += unit[0]; + if (pq.size() > k) { + total -= pq.poll(); + } + if (pq.size() == k) { + result = Math.max(result, total * unit[1]); + } + } + return result; + } +} From 2c2bcd54053b58915f0dd554a16ae02bc9888f51 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 25 May 2023 10:36:00 -0700 Subject: [PATCH 1148/1640] Create New 21 Game.java --- Medium/New 21 Game.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Medium/New 21 Game.java diff --git a/Medium/New 21 Game.java b/Medium/New 21 Game.java new file mode 100644 index 00000000..26c88d90 --- /dev/null +++ b/Medium/New 21 Game.java @@ -0,0 +1,21 @@ +class Solution { + public double new21Game(int n, int k, int maxPts) { + double[] dp = new double[n + 1]; + dp[0] = 1; + double s = k > 0 ? 1 : 0; + for (int i = 1; i <= n; i++) { + dp[i] = s / maxPts; + if (i < k) { + s += dp[i]; + } + if (i - maxPts >= 0 && i - maxPts < k) { + s -= dp[i - maxPts]; + } + } + double result = 0; + for (int i = k; i <= n; i++) { + result += dp[i]; + } + return result; + } +} From 395bd9cc3df7b83ea3dbbaf598255ae359de6db4 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 26 May 2023 07:22:44 -0700 Subject: [PATCH 1149/1640] Added Stone Game II.java --- Medium/Stone Game II.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Stone Game II.java diff --git a/Medium/Stone Game II.java b/Medium/Stone Game II.java new file mode 100644 index 00000000..c56cbd43 --- /dev/null +++ b/Medium/Stone Game II.java @@ -0,0 +1,26 @@ +class Solution { + public int stoneGameII(int[] piles) { + Integer[][][] dp = new Integer[2][piles.length + 1][piles.length + 1]; + return helper(piles, dp, 0, 0, 1); + } + + private int helper(int[] piles, Integer[][][] dp, int p, int i, int m) { + if (i == piles.length) { + return 0; + } + if (dp[p][i][m] != null) { + return dp[p][i][m]; + } + int result = p == 1 ? 1000_000 : -1; + int s = 0; + for (int j = 1; j <= Math.min(2 * m, piles.length - i); j++) { + s += piles[i + j - 1]; + if (p == 0) { + result = Math.max(result, s + helper(piles, dp, 1, i + j, Math.max(m, j))); + } else { + result = Math.min(result, helper(piles, dp, 0, i + j, Math.max(m, j))); + } + } + return dp[p][i][m] = result; + } +} From 1cdc4443724f72a5b10050f8ae84c76886313fb3 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 27 May 2023 05:51:36 -0700 Subject: [PATCH 1150/1640] Added Stone Game III.java --- Hard/Stone Game III.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Hard/Stone Game III.java diff --git a/Hard/Stone Game III.java b/Hard/Stone Game III.java new file mode 100644 index 00000000..0ee4e539 --- /dev/null +++ b/Hard/Stone Game III.java @@ -0,0 +1,16 @@ +class Solution { + public String stoneGameIII(int[] stoneValue) { + int n = stoneValue.length; + int[] dp = new int[n + 1]; + for (int i = n - 1; i >= 0; i--) { + dp[i] = stoneValue[i] - dp[i + 1]; + if (i + 2 <= n) { + dp[i] = Math.max(dp[i], stoneValue[i] + stoneValue[i + 1] - dp[i + 2]); + } + if (i + 3 <= n) { + dp[i] = Math.max(dp[i], stoneValue[i] + stoneValue[i + 1] + stoneValue[i + 2] - dp[i + 3]); + } + } + return dp[0] == 0 ? "Tie" : (dp[0] > 0 ? "Alice" : "Bob"); + } +} From 9d1391469d509648e44ac3b27eb4b3f98df0cac8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 29 May 2023 19:16:12 -0700 Subject: [PATCH 1151/1640] Added Buy Two Chocolates.java --- Easy/Buy Two Chocolates.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Buy Two Chocolates.java diff --git a/Easy/Buy Two Chocolates.java b/Easy/Buy Two Chocolates.java new file mode 100644 index 00000000..fac6699e --- /dev/null +++ b/Easy/Buy Two Chocolates.java @@ -0,0 +1,16 @@ +class Solution { + public int buyChoco(int[] prices, int money) { + int cheapestChocolate = Math.min(prices[0], prices[1]); + int secondCheapestChocolate = Math.max(prices[0], prices[1]); + for (int i = 2; i < prices.length; i++) { + if (prices[i] < cheapestChocolate) { + secondCheapestChocolate = cheapestChocolate; + cheapestChocolate = prices[i]; + } else if (prices[i] < secondCheapestChocolate) { + secondCheapestChocolate = prices[i]; + } + } + int totalCost = cheapestChocolate + secondCheapestChocolate; + return totalCost <= money ? (money - totalCost) : money; + } +} From 70fde968259d29eb444a7859b22e1d74bfc52214 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 29 May 2023 19:28:34 -0700 Subject: [PATCH 1152/1640] Added Remove Trailing Zeros From a String.java --- Easy/Remove Trailing Zeros From a String.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Remove Trailing Zeros From a String.java diff --git a/Easy/Remove Trailing Zeros From a String.java b/Easy/Remove Trailing Zeros From a String.java new file mode 100644 index 00000000..996c079e --- /dev/null +++ b/Easy/Remove Trailing Zeros From a String.java @@ -0,0 +1,9 @@ +class Solution { + public String removeTrailingZeros(String num) { + int idx = num.length() - 1; + while (idx >= 0 && num.charAt(idx) == '0') { + idx--; + } + return num.substring(0, idx + 1); + } +} From 87cf2a510fac5e0e5d929c35fadac7d2aa6b21c7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 30 May 2023 12:13:54 -0700 Subject: [PATCH 1153/1640] Create Extra Characters in a String.java --- Medium/Extra Characters in a String.java | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Extra Characters in a String.java diff --git a/Medium/Extra Characters in a String.java b/Medium/Extra Characters in a String.java new file mode 100644 index 00000000..4d43cc5c --- /dev/null +++ b/Medium/Extra Characters in a String.java @@ -0,0 +1,25 @@ +class Solution { + public int minExtraChar(String s, String[] dictionary) { + Integer[] dp = new Integer[s.length() + 1]; + return helper(0, s, Arrays.stream(dictionary).collect(Collectors.toSet()), dp); + } + + private int helper(int idx, String s, Set set, Integer[] dp) { + if (idx == s.length()) { + return 0; + } + if (dp[idx] != null) { + return dp[idx]; + } + int result = Integer.MAX_VALUE; + for (int i = idx; i < s.length(); i++) { + String sub = s.substring(idx, i + 1); + if (set.contains(sub)) { + result = Math.min(result, helper(i + 1, s, set, dp)); + } else { + result = Math.min(result, i - idx + 1 + helper(i + 1, s, set, dp)); + } + } + return dp[idx] = result; + } +} From 7f41c397e005be5d639158645155c2dadef587d1 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 30 May 2023 19:41:07 -0700 Subject: [PATCH 1154/1640] Updated Design Underground System.java --- Medium/Design Underground System.java | 60 ++++++++++++++------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/Medium/Design Underground System.java b/Medium/Design Underground System.java index 51aa492a..6297656a 100644 --- a/Medium/Design Underground System.java +++ b/Medium/Design Underground System.java @@ -1,33 +1,37 @@ class UndergroundSystem { - - private Map totalTimeFromStartToEndStation; - private Map numberOfCustomersFromStartToEndStation; - private Map customerIdToStartTime; - private Map customerIdToStartStation; - - public UndergroundSystem() { - this.totalTimeFromStartToEndStation = new HashMap<>(); - this.numberOfCustomersFromStartToEndStation = new HashMap<>(); - this.customerIdToStartTime = new HashMap<>(); - this.customerIdToStartStation = new HashMap<>(); - } + + private final Map customerToCheckInMapping; + private final Map startEndStationTotalTimeMapping; + private final Map startEndStationCountMapping; - public void checkIn(int id, String stationName, int t) { - this.customerIdToStartTime.put(id, t); - this.customerIdToStartStation.put(id, stationName); - } - - public void checkOut(int id, String stationName, int t) { - int totalTime = t - this.customerIdToStartTime.get(id); - String key = this.customerIdToStartStation.get(id) + "|" + stationName; - this.totalTimeFromStartToEndStation.put(key, this.totalTimeFromStartToEndStation.getOrDefault(key, 0) + totalTime); - this.numberOfCustomersFromStartToEndStation.put(key, this.numberOfCustomersFromStartToEndStation.getOrDefault(key, 0) + 1); - } - - public double getAverageTime(String startStation, String endStation) { - String key = startStation + "|" + endStation; - return this.totalTimeFromStartToEndStation.get(key) / (double) (this.numberOfCustomersFromStartToEndStation.get(key)); - } + public UndergroundSystem() { + this.customerToCheckInMapping = new HashMap<>(); + this.startEndStationTotalTimeMapping = new HashMap<>(); + this.startEndStationCountMapping = new HashMap<>(); + } + + public void checkIn(int id, String stationName, int t) { + StationTimePair pair = new StationTimePair(stationName, t); + customerToCheckInMapping.put(id, pair); + } + + public void checkOut(int id, String stationName, int t) { + StationTimePair pair = customerToCheckInMapping.get(id); + String key = pair.station() + "|" + stationName; + int totalTime = t - pair.time(); + startEndStationTotalTimeMapping.put(key, startEndStationTotalTimeMapping.getOrDefault(key, 0) + totalTime); + startEndStationCountMapping.put(key, startEndStationCountMapping.getOrDefault(key, 0) + 1); + } + + public double getAverageTime(String startStation, String endStation) { + String key = startStation + "|" + endStation; + if (!startEndStationTotalTimeMapping.containsKey(key)) { + return 0.0; + } + return ((double) startEndStationTotalTimeMapping.get(key)) / startEndStationCountMapping.get(key); + } + + static record StationTimePair(String station, int time) {} } /** From 07ed79c304efd4041119accd6c64368fae34f2f2 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 31 May 2023 15:19:50 -0700 Subject: [PATCH 1155/1640] Updated Design In-Memory File System.java --- Hard/Design In-Memory File System.java | 216 +++++++++++++++---------- 1 file changed, 130 insertions(+), 86 deletions(-) diff --git a/Hard/Design In-Memory File System.java b/Hard/Design In-Memory File System.java index 9bc2ba8e..9002c758 100644 --- a/Hard/Design In-Memory File System.java +++ b/Hard/Design In-Memory File System.java @@ -1,104 +1,148 @@ +import java.util.Optional; + class FileSystem { - private final FileNode root; - - public FileSystem() { - this.root = new FileNode("ROOT", FileType.FOLDER); - } - - /* - * If path is a file path, returns a list that only contains this file's name. - * If path is a directory path, returns the list of file and directory names in this directory. - * */ - public List ls(String path) { - String[] split = path.split("/"); - FileNode currNode = root; - for (int i = 1; i < split.length; i++) { - currNode = currNode.subFiles.get(split[i]); + private final Node root; + + public FileSystem() { + this.root = new DirectoryNode("/"); } - if (currNode.fileType.equals(FileType.FILE)) { - return List.of(currNode.value); - } else { - return currNode.subFiles.keySet().stream().sorted().collect(Collectors.toList()); + + public List ls(String path) { + String[] splits = path.split("/"); + if (splits.length == 0) { + return buildlsResult((DirectoryNode) root); + } + Node curr = root; + for (int i = 1; i < splits.length - 1; i++) { + curr = ((DirectoryNode) curr).getNode(splits[i]).get(); + } + Node lastNode = ((DirectoryNode) curr).getNode(splits[splits.length - 1]).get(); + if (lastNode.isFile()) { + return Collections.singletonList(lastNode.getName()); + } + return buildlsResult((DirectoryNode) lastNode); } - } - - /* - * Makes a new directory according to the given path. The given directory path does not exist. - * If the middle directories in the path do not exist, you should create them as well. - * */ - public void mkdir(String path) { - String[] splits = path.split("/"); - FileNode currNode = root; - for (int i = 1; i < splits.length; i++) { - String fileName = splits[i]; - if (!currNode.subFiles.containsKey(fileName)) { - currNode.subFiles.put(fileName, new FileNode(fileName, FileType.FOLDER)); - } - currNode = currNode.subFiles.get(fileName); + + public void mkdir(String path) { + String[] splits = path.split("/"); + createIfNotExists(splits); } - } - - /* - * If filePath does not exist, creates that file containing given content. - * If filePath already exists, appends the given content to original content. - * */ - public void addContentToFile(String filePath, String content) { - String[] splits = filePath.split("/"); - FileNode currNode = root; - for (int i = 1; i < splits.length - 1; i++) { - String folderName = splits[i]; - if (!currNode.subFiles.containsKey(folderName)) { - currNode.subFiles.put(folderName, new FileNode(folderName, FileType.FOLDER)); - } - currNode = currNode.subFiles.get(folderName); + + public void addContentToFile(String filePath, String content) { + String[] splits = filePath.split("/"); + DirectoryNode directoryNode = createIfNotExists(Arrays.copyOfRange(splits, 0, splits.length)); + String fileName = splits[splits.length - 1]; + if (directoryNode.getNode(fileName).isEmpty()) { + FileNode fileNode = new FileNode(fileName); + directoryNode.addContent(fileName, fileNode); + } + FileNode fileNode = (FileNode) directoryNode.getNode(fileName).get(); + fileNode.addContent(content); } - String fileName = splits[splits.length - 1]; - if (!currNode.subFiles.containsKey(fileName) || - !currNode.subFiles.get(fileName).fileType.equals(FileType.FILE)) { - currNode.subFiles.put(fileName, new FileNode(fileName, FileType.FILE)); + + public String readContentFromFile(String filePath) { + String[] splits = filePath.split("/"); + DirectoryNode directoryNode = createIfNotExists(Arrays.copyOfRange(splits, 0, splits.length)); + String fileName = splits[splits.length - 1]; + FileNode fileNode = (FileNode) directoryNode.getNode(fileName).get(); + return fileNode.getContents(); } - currNode = currNode.subFiles.get(fileName); - currNode.addContentToFile(content); - } - - /* - * Returns the content in the file at filePath. - * */ - public String readContentFromFile(String filePath) { - String[] splits = filePath.split("/"); - FileNode currNode = root; - for (int i = 1; i < splits.length; i++) { - String folderName = splits[i]; - currNode = currNode.subFiles.get(folderName); + + private static List buildlsResult(DirectoryNode curr) { + return curr + .getContents() + .stream() + .map(Node::getName) + .sorted() + .collect(Collectors.toList()); } - return currNode.fileContent.toString(); - } - enum FileType { - FILE, FOLDER - } + private DirectoryNode createIfNotExists(String[] splits) { + DirectoryNode curr = (DirectoryNode) root; + for (int i = 1; i < splits.length; i++) { + Optional nextDirectory = curr.getNode(splits[i]); + if (nextDirectory.isEmpty()) { + DirectoryNode node = new DirectoryNode(splits[i]); + curr.addContent(splits[i], node); + curr = node; + } else { + curr = (DirectoryNode) nextDirectory.get(); + } + } + return curr; + } + + private static class FileNode implements Node { + + private final String name; + + private final StringBuilder contents; + + public FileNode(String name) { + this.name = name; + this.contents = new StringBuilder(); + } + + public void addContent(String content) { + this.contents.append(content); + } - static class FileNode { + public String getContents() { + return contents.toString(); + } - private final String value; - private final Map subFiles; - private final FileType fileType; - private StringBuilder fileContent; + @Override + public String getName() { + return this.name; + } - public FileNode(String value, FileType fileType) { - this.value = value; - this.fileType = fileType; - this.subFiles = new HashMap<>(); + @Override + public boolean isFile() { + return true; + } } - public void addContentToFile(String content) { - if (fileContent == null) { - fileContent = new StringBuilder(); - } - fileContent.append(content); + private static class DirectoryNode implements Node { + + private String name; + + private final Map contents; + + public DirectoryNode(String name) { + this.name = name; + this.contents = new HashMap<>(); + } + + @Override + public String getName() { + return name; + } + + @Override + public boolean isFile() { + return false; + } + + public void addContent(String key, Node node) { + contents.put(key, node); + } + + public List getContents() { + return contents.values().stream().toList(); + } + + public Optional getNode(String nodeName) { + return Optional.ofNullable(contents.getOrDefault(nodeName, null)); + } + } + + private interface Node { + + String getName(); + + boolean isFile(); } - } } /** From 6ac31b58892d71863f583ab4808f7d5917cc1ce0 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 1 Jun 2023 10:30:41 -0700 Subject: [PATCH 1156/1640] Updated Shortest Path in Binary Matrix.java --- Medium/Shortest Path in Binary Matrix.java | 67 +++++++++++----------- 1 file changed, 35 insertions(+), 32 deletions(-) diff --git a/Medium/Shortest Path in Binary Matrix.java b/Medium/Shortest Path in Binary Matrix.java index 9977e11b..0be69c86 100644 --- a/Medium/Shortest Path in Binary Matrix.java +++ b/Medium/Shortest Path in Binary Matrix.java @@ -1,37 +1,40 @@ class Solution { - private final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}, {1, 1}, {-1, 1}, {1, -1}, {-1, -1}}; - - public int shortestPathBinaryMatrix(int[][] grid) { - if (grid[0][0] == 1) { - return -1; - } - int numRows = grid.length; - int numCols = grid[0].length; - boolean[][] visited = new boolean[numRows][numCols]; - Queue queue = new LinkedList<>(); - queue.add(new int[]{0, 0}); - visited[0][0] = true; - int numOfSteps = 0; - while (!queue.isEmpty()) { - numOfSteps++; - int size = queue.size(); - while (size-- > 0) { - int[] removed = queue.remove(); - int x = removed[0]; - int y = removed[1]; - if (x == numRows - 1 && y == numCols - 1) { - return numOfSteps; + + private static final int[][] DIRS = {{0,1},{0,-1},{1,0},{-1,0},{1,-1},{-1,1},{-1,-1},{1,1}}; + + public int shortestPathBinaryMatrix(int[][] grid) { + int numRows = grid.length; + int numCols = grid[0].length; + if (grid[0][0] == 1 || grid[numRows - 1][numCols - 1] == 1) { + return -1; } - for (int[] dir : DIRS) { - int newX = x + dir[0]; - int newY = y + dir[1]; - if (newX >= 0 && newY >= 0 && newX < numRows && newY < numCols && !visited[newX][newY] && grid[newX][newY] == 0) { - queue.add(new int[]{newX, newY}); - visited[newX][newY] = true; - } + int shortestDistance = 0; + Queue queue = new LinkedList<>(); + queue.add(new int[]{0, 0}); + boolean[][] visited = new boolean[numRows][numCols]; + visited[0][0] = true; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + if (removed[0] == (numRows - 1) && removed[1] == (numCols - 1)) { + return shortestDistance + 1; + } + for (int i = 0; i < DIRS.length; i++) { + int newX = removed[0] + DIRS[i][0]; + int newY = removed[1] + DIRS[i][1]; + if (isValidCoordinate(newX, newY, numRows, numCols, visited, grid)) { + queue.add(new int[]{newX, newY}); + visited[newX][newY] = true; + } + } + } + shortestDistance++; } - } + return -1; + } + + private static boolean isValidCoordinate(int x, int y, int rows, int cols, boolean[][] visited, int[][] grid) { + return x >= 0 && x < rows && y >= 0 && y < cols && !visited[x][y] && grid[x][y] == 0; } - return -1; - } } From c0d05f95cabf58da96bf3af333fd3e4b0a08b00a Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 1 Jun 2023 19:37:00 -0700 Subject: [PATCH 1157/1640] Added Detonate the Maximum Bombs.java --- Medium/Detonate the Maximum Bombs.java | 37 ++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/Detonate the Maximum Bombs.java diff --git a/Medium/Detonate the Maximum Bombs.java b/Medium/Detonate the Maximum Bombs.java new file mode 100644 index 00000000..2dbecdc0 --- /dev/null +++ b/Medium/Detonate the Maximum Bombs.java @@ -0,0 +1,37 @@ +class Solution { + public int maximumDetonation(int[][] bombs) { + Map> graph = new HashMap<>(); + int n = bombs.length; + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (i == j) { + continue; + } + int x1 = bombs[i][0]; + int y1 = bombs[i][1]; + int r = bombs[i][2]; + int x2 = bombs[j][0]; + int y2 = bombs[j][1]; + if ((long) r * r >= (long) (x1 - x2) * (x1 - x2) + (long) (y1 - y2) * (y1 - y2)) { + graph.computeIfAbsent(i, k -> new ArrayList<>()).add(j); + } + } + } + int result = 0; + for (int i = 0; i < n; i++) { + result = Math.max(result, dfs(i, new HashSet<>(), graph)); + } + return result; + } + + private int dfs(int curr, Set visited, Map> graph) { + visited.add(curr); + int count = 1; + for (Integer neighbor : graph.getOrDefault(curr, new ArrayList<>())) { + if (!visited.contains(neighbor)) { + count += dfs(neighbor, visited, graph); + } + } + return count; + } +} From e97550355a8734098472d08253d9a1c15a688452 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 2 Jun 2023 17:27:07 -0700 Subject: [PATCH 1158/1640] Updated Time Needed to Inform All Employees.java --- .../Time Needed to Inform All Employees.java | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/Medium/Time Needed to Inform All Employees.java b/Medium/Time Needed to Inform All Employees.java index 901f53b5..f8cc21ac 100644 --- a/Medium/Time Needed to Inform All Employees.java +++ b/Medium/Time Needed to Inform All Employees.java @@ -1,23 +1,24 @@ class Solution { - public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) { - Map> organization = new HashMap<>(); - for (int i = 0; i < manager.length; i++) { - if (manager[i] != -1) { - organization.computeIfAbsent(manager[i], k -> new ArrayList<>()).add(i); - } + public int numOfMinutes(int n, int headID, int[] manager, int[] informTime) { + Map> organization = new HashMap<>(); + for (int i = 0; i < manager.length; i++) { + if (manager[i] == -1) { + continue; + } + organization.computeIfAbsent(manager[i], k -> new ArrayList<>()).add(i); + } + int maxTime = 0; + Queue queue = new LinkedList<>(); + queue.add(new int[]{headID, 0}); + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int currManager = removed[0]; + int timeElapsed = removed[1]; + maxTime = Math.max(maxTime, timeElapsed); + for (Integer employee : organization.getOrDefault(currManager, new ArrayList<>())) { + queue.add(new int[]{employee, timeElapsed + informTime[currManager]}); + } + } + return maxTime; } - int totalTime = 0; - Queue queue = new LinkedList<>(); - queue.add(new int[]{headID, 0}); - while (!queue.isEmpty()) { - int[] removed = queue.remove(); - int id = removed[0]; - int time = removed[1]; - totalTime = Math.max(totalTime, time); - for (int associate : organization.getOrDefault(id, new ArrayList<>())) { - queue.add(new int[]{associate, time + informTime[id]}); - } - } - return totalTime; - } } From 41c51ea48837dff914deaad98223e924a2d9d81b Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 4 Jun 2023 09:00:55 -0700 Subject: [PATCH 1159/1640] Updated Number of Provinces.java --- Medium/Number of Provinces.java | 53 +++++++++++++++++---------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/Medium/Number of Provinces.java b/Medium/Number of Provinces.java index 4f485f0d..03338dd8 100644 --- a/Medium/Number of Provinces.java +++ b/Medium/Number of Provinces.java @@ -1,34 +1,37 @@ class Solution { - public int findCircleNum(int[][] isConnected) { - int n = isConnected.length; - Map> map = new HashMap<>(); - for (int i = 0; i < n; i++) { - for (int j = 0; j < n; j++) { - if (i != j && isConnected[i][j] == 1) { - map.computeIfAbsent(i, k -> new HashSet<>()).add(j); - map.computeIfAbsent(j, k -> new HashSet<>()).add(i); + public int findCircleNum(int[][] isConnected) { + Map> graph = new HashMap<>(); + for (int i = 0; i < isConnected.length; i++) { + for (int j = 0; j < isConnected[i].length; j++) { + if (i != j && isConnected[i][j] == 1) { + graph.computeIfAbsent(i, k -> new HashSet<>()).add(j); + graph.computeIfAbsent(j, k -> new HashSet<>()).add(i); + } + } + } + Set visited = new HashSet<>(); + int provinces = 0; + for (int i = 0; i < isConnected.length; i++) { + if (!visited.contains(i)) { + traverse(graph, i, visited); + provinces++; + } } - } + return provinces; } - Set visited = new HashSet<>(); - int provinceCount = 0; - for (int i = 0; i < n; i++) { - if (!visited.contains(i)) { + + private void traverse(Map> graph, int city, Set visited) { Queue queue = new LinkedList<>(); - queue.add(i); - visited.add(i); + queue.add(city); + visited.add(city); while (!queue.isEmpty()) { - int removed = queue.remove(); - for (Integer connection : map.getOrDefault(removed, new HashSet<>())) { - if (!visited.contains(connection)) { - queue.add(connection); - visited.add(connection); + int removed = queue.remove(); + for (Integer conn : graph.getOrDefault(removed, new HashSet<>())) { + if (!visited.contains(conn)) { + queue.add(conn); + visited.add(conn); + } } - } } - provinceCount++; - } } - return provinceCount; - } } From 53848d3486110031e8e5feb963e43fe47437c0f6 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 4 Jun 2023 09:05:04 -0700 Subject: [PATCH 1160/1640] Added Minimize String Length.java --- Easy/Minimize String Length.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Minimize String Length.java diff --git a/Easy/Minimize String Length.java b/Easy/Minimize String Length.java new file mode 100644 index 00000000..1cb68cf5 --- /dev/null +++ b/Easy/Minimize String Length.java @@ -0,0 +1,8 @@ +class Solution { + public int minimizedStringLength(String s) { + return s.chars() + .mapToObj(c -> (char) c) + .collect(Collectors.toSet()) + .size(); + } +} From 5bbc5c666894ea1f8dcfca0f076bee9a059b35a7 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 4 Jun 2023 09:06:05 -0700 Subject: [PATCH 1161/1640] Updated Minimize String Length.java --- Easy/Minimize String Length.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Easy/Minimize String Length.java b/Easy/Minimize String Length.java index 1cb68cf5..48d8ab26 100644 --- a/Easy/Minimize String Length.java +++ b/Easy/Minimize String Length.java @@ -1,8 +1,7 @@ class Solution { public int minimizedStringLength(String s) { - return s.chars() - .mapToObj(c -> (char) c) - .collect(Collectors.toSet()) - .size(); + return (int) s.chars() + .distinct() + .count(); } } From 22816322b7409e183ae7ff211e9f26b25dd57394 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 4 Jun 2023 17:37:24 -0700 Subject: [PATCH 1162/1640] Updated Check If It Is a Straight Line.java --- Easy/Check If It Is a Straight Line.java | 33 ++++++++++++++---------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/Easy/Check If It Is a Straight Line.java b/Easy/Check If It Is a Straight Line.java index 174053a3..407ed220 100644 --- a/Easy/Check If It Is a Straight Line.java +++ b/Easy/Check If It Is a Straight Line.java @@ -1,16 +1,21 @@ -class Solution { - public boolean checkStraightLine(int[][] coordinates) { - int xOne = coordinates[1][0]; - int yOne = coordinates[1][1]; - int dx = xOne - coordinates[0][0]; - int dy = yOne - coordinates[0][1]; - for (int[] coordinate : coordinates) { - int x = coordinate[0]; - int y = coordinate[1]; - if (dx * (y - yOne) != dy * (x - xOne)) { - return false; - } +class Solution { + public boolean checkStraightLine(int[][] coordinates) { + int deltaY = getYDiff(coordinates[1], coordinates[0]); + int deltaX = getXDiff(coordinates[1], coordinates[0]); + for (int i = 2; i < coordinates.length; i++) { + if (deltaY * getXDiff(coordinates[i], coordinates[0]) != deltaX * getYDiff(coordinates[i], coordinates[0])) { + return false; + } + } + return true; } - return true; - } + + private int getYDiff(int[] a, int[] b) { + return a[1] - b[1]; + } + + private int getXDiff(int[] a, int[] b) { + return a[0] - b[0]; + } + } From 7cf26a8577ef68df23c38a949b4b006cb630a76a Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 5 Jun 2023 18:01:50 -0700 Subject: [PATCH 1163/1640] Updated Can Make Arithmetic Progression From Sequence.java --- ...e Arithmetic Progression From Sequence.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Easy/Can Make Arithmetic Progression From Sequence.java b/Easy/Can Make Arithmetic Progression From Sequence.java index edc5b0db..fbd09e98 100644 --- a/Easy/Can Make Arithmetic Progression From Sequence.java +++ b/Easy/Can Make Arithmetic Progression From Sequence.java @@ -1,12 +1,12 @@ class Solution { - public boolean canMakeArithmeticProgression(int[] arr) { - Arrays.sort(arr); - int diff = arr[1] - arr[0]; - for (int i = 2; i < arr.length; i++) { - if (arr[i] - arr[i - 1] != diff) { - return false; - } + public boolean canMakeArithmeticProgression(int[] arr) { + Arrays.sort(arr); + int diff = arr[1] - arr[0]; + for (int i = 2; i < arr.length; i++) { + if (arr[i] - arr[i - 1] != diff) { + return false; + } + } + return true; } - return true; - } } From eeefb09a22ea781114971952f1e1108d6571ebc8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 6 Jun 2023 17:53:14 -0700 Subject: [PATCH 1164/1640] Added Minimum Flips to Make a OR b Equal to c.java --- Medium/Minimum Flips to Make a OR b Equal to c.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Medium/Minimum Flips to Make a OR b Equal to c.java diff --git a/Medium/Minimum Flips to Make a OR b Equal to c.java b/Medium/Minimum Flips to Make a OR b Equal to c.java new file mode 100644 index 00000000..91963256 --- /dev/null +++ b/Medium/Minimum Flips to Make a OR b Equal to c.java @@ -0,0 +1,5 @@ +class Solution { + public int minFlips(int a, int b, int c) { + return Integer.bitCount((a | b) ^ c) + Integer.bitCount(a & b & ((a | b) ^ c)); + } +} From c94158c3aa2b810811be68c90d1ea4fd3bce7271 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Jun 2023 17:30:39 -0700 Subject: [PATCH 1165/1640] Update Count Negative Numbers in a Sorted Matrix.java --- ...t Negative Numbers in a Sorted Matrix.java | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/Easy/Count Negative Numbers in a Sorted Matrix.java b/Easy/Count Negative Numbers in a Sorted Matrix.java index 96daf80b..af842b43 100644 --- a/Easy/Count Negative Numbers in a Sorted Matrix.java +++ b/Easy/Count Negative Numbers in a Sorted Matrix.java @@ -1,28 +1,26 @@ class Solution { - public int countNegatives(int[][] grid) { - int total = 0; - int n = grid[0].length; - for (int[] gr : grid) { - int negInd = binarySearchHelper(gr, 0, n - 1); - if (negInd != -1) { - total += n - negInd; - } + public int countNegatives(int[][] grid) { + int count = 0; + for (int[] row : grid) { + int idx = findFirstNonNegativeIndex(row); + count += idx == -1 ? 0 : (row.length - idx); + } + return count; } - return total; - } - - private int binarySearchHelper(int[] arr, int start, int end) { - int idx = -1; - while (start <= end) { - int mid = (start + end) / 2; - if (arr[mid] < 0) { - idx = idx == -1 ? mid : Math.min(idx, mid); - end = mid - 1; - } - if (arr[mid] >= 0) { - start = mid + 1; - } + + private int findFirstNonNegativeIndex(int[] row) { + int start = 0; + int end = row.length - 1; + int idx = -1; + while (start <= end) { + int mid = (start + end) / 2; + if (row[mid] < 0) { + idx = mid; + end = mid - 1; + } else { + start = mid + 1; + } + } + return idx; } - return idx; - } } From 92994b4fec8f27c58c77b21afd7272bcba76fa22 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 8 Jun 2023 07:40:52 -0700 Subject: [PATCH 1166/1640] Updated Check If a Number Is Majority Element in a Sorted Array.java --- ...Is Majority Element in a Sorted Array.java | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Easy/Check If a Number Is Majority Element in a Sorted Array.java b/Easy/Check If a Number Is Majority Element in a Sorted Array.java index 5913a03a..6491d715 100644 --- a/Easy/Check If a Number Is Majority Element in a Sorted Array.java +++ b/Easy/Check If a Number Is Majority Element in a Sorted Array.java @@ -1,38 +1,38 @@ class Solution { - - private static enum DIRECTION { - LEFT, RIGHT; - } - - public boolean isMajorityElement(int[] nums, int target) { - int rightIdx = getIndex(nums, target, DIRECTION.RIGHT); - int leftIdx = getIndex(nums, target, DIRECTION.LEFT); - if (leftIdx == -1 || rightIdx == -1) { - return false; + + private static enum Direction { + LEFT, RIGHT; } - int occurrences = rightIdx - leftIdx + 1; - return occurrences > nums.length / 2; - } - - private int getIndex(int[] nums, int target, DIRECTION direction) { - int resultIdx = -1; - int left = 0; - int right = nums.length - 1; - while (left <= right) { - int mid = (left + right) / 2; - if (nums[mid] == target) { - resultIdx = mid; - if (direction == DIRECTION.LEFT) { - right = mid - 1; - } else { - left = mid + 1; + + public boolean isMajorityElement(int[] nums, int target) { + int firstIndex = findIndex(nums, target, Direction.LEFT); + if (firstIndex == -1) { + return false; } - } else if (nums[mid] > target) { - right = mid - 1; - } else { - left = mid + 1; - } + int lastIndex = findIndex(nums, target, Direction.RIGHT); + int occurrences = lastIndex - firstIndex + 1; + return occurrences > nums.length / 2; + } + + private int findIndex(int[] nums, int target, Direction direction) { + int idx = -1; + int start = 0; + int end = nums.length - 1; + while (start <= end) { + int mid = (start + end) / 2; + if (nums[mid] == target) { + idx = mid; + if (direction == Direction.LEFT) { + end = mid - 1; + } else { + start = mid + 1; + } + } else if (nums[mid] > target) { + end = mid - 1; + } else { + start = mid + 1; + } + } + return idx; } - return resultIdx; - } } From 97c6f39986bab73e050b2e6db1acdba366adc65d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 8 Jun 2023 14:37:39 -0700 Subject: [PATCH 1167/1640] Updated Merge Intervals.java --- Medium/Merge Intervals.java | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/Medium/Merge Intervals.java b/Medium/Merge Intervals.java index c4b49872..cb0a90cf 100644 --- a/Medium/Merge Intervals.java +++ b/Medium/Merge Intervals.java @@ -1,22 +1,18 @@ class Solution { - public int[][] merge(int[][] intervals) { - Arrays.sort(intervals, Comparator.comparingInt((int[] o) -> o[0]).thenComparingInt(o -> o[1])); - List mergedIntervals = new ArrayList<>(); - int idx = 0; - while (idx < intervals.length) { - int currentStart = intervals[idx][0]; - int currentEnd = intervals[idx][1]; - idx++; - while (idx < intervals.length && intervals[idx][0] <= currentEnd) { - currentEnd = Math.max(intervals[idx][1], currentEnd); - idx++; - } - mergedIntervals.add(new int[]{currentStart, currentEnd}); + public int[][] merge(int[][] intervals) { + Arrays.sort(intervals, Comparator.comparingInt((int[] o) -> o[0]) + .thenComparingInt(o -> o[1])); + int idx = 0; + List result = new ArrayList<>(); + while (idx < intervals.length) { + int start = intervals[idx][0]; + int end = intervals[idx][1]; + idx++; + while (idx < intervals.length && intervals[idx][0] <= end) { + end = Math.max(end, intervals[idx++][1]); + } + result.add(new int[]{start, end}); + } + return result.toArray(new int[][]{}); } - int[][] result = new int[mergedIntervals.size()][2]; - for (int i = 0; i < mergedIntervals.size(); i++) { - result[i] = mergedIntervals.get(i); - } - return result; - } } From 0a29fb631d6454d8a29dbc42443b6f9449fe9eec Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 8 Jun 2023 18:56:07 -0700 Subject: [PATCH 1168/1640] Updated Find Smallest Letter Greater Than Target.java --- ...d Smallest Letter Greater Than Target.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Easy/Find Smallest Letter Greater Than Target.java b/Easy/Find Smallest Letter Greater Than Target.java index 62e6cf03..6cdfb73a 100644 --- a/Easy/Find Smallest Letter Greater Than Target.java +++ b/Easy/Find Smallest Letter Greater Than Target.java @@ -1,17 +1,17 @@ class Solution { - public char nextGreatestLetter(char[] letters, char target) { - int start = 0; - int end = letters.length - 1; - int minIdx = Integer.MAX_VALUE; - while (start <= end) { - int mid = (start + end) / 2; - if (letters[mid] > target) { - minIdx = mid; - end = mid - 1; - } else { - start = mid + 1; - } + public char nextGreatestLetter(char[] letters, char target) { + int start = 0; + int end = letters.length - 1; + int idx = -1; + while (start <= end) { + int mid = (start + end) / 2; + if (letters[mid] > target) { + idx = mid; + end = mid - 1; + } else { + start = mid + 1; + } + } + return idx == -1 ? letters[0] : letters[idx]; } - return minIdx == Integer.MAX_VALUE ? letters[0] : letters[minIdx]; - } } From 1a6187b29dc66de08415de45c9c945093c45d679 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 10 Jun 2023 12:23:32 -0700 Subject: [PATCH 1169/1640] Added Maximum Value at a Given Index in a Bounded Array.java --- ...e at a Given Index in a Bounded Array.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Medium/Maximum Value at a Given Index in a Bounded Array.java diff --git a/Medium/Maximum Value at a Given Index in a Bounded Array.java b/Medium/Maximum Value at a Given Index in a Bounded Array.java new file mode 100644 index 00000000..6a1a4966 --- /dev/null +++ b/Medium/Maximum Value at a Given Index in a Bounded Array.java @@ -0,0 +1,30 @@ +class Solution { + public int maxValue(int n, int index, int maxSum) { + int start = 1; + int end = maxSum; + while (start < end) { + int mid = (start + end + 1) / 2; + if (findSum(index, mid, n) <= maxSum) { + start = mid; + } else { + end = mid - 1; + } + } + return start; + } + + private long findSum(int index, int targetIndex, int n) { + long count = 0; + if (targetIndex > index) { + count += (long) (2 * targetIndex - index) * (index + 1) / 2; + } else { + count += (long) (targetIndex + 1) * targetIndex / 2 + index - targetIndex + 1; + } + if (targetIndex >= n - index) { + count += (long) (targetIndex + targetIndex - n + 1 + index) * (n - index) / 2; + } else { + count += (long) (targetIndex + 1) * targetIndex / 2 + n - index - targetIndex; + } + return count - targetIndex; + } +} From 4cad923b9990fcc55edc26e2a5dee70d6214fe39 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 10 Jun 2023 13:29:57 -0700 Subject: [PATCH 1170/1640] Added Check if The Number is Fascinating.java --- Easy/Check if The Number is Fascinating.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Check if The Number is Fascinating.java diff --git a/Easy/Check if The Number is Fascinating.java b/Easy/Check if The Number is Fascinating.java new file mode 100644 index 00000000..d5074568 --- /dev/null +++ b/Easy/Check if The Number is Fascinating.java @@ -0,0 +1,13 @@ +class Solution { + public boolean isFascinating(int n) { + return isFascinatingHelper(n + "" + 2 * n + "" + 3 * n); + } + + private boolean isFascinatingHelper(String s) { + return s.length() == 9 && s.chars() + .mapToObj(c -> (char) c) + .filter(c -> c != '0') + .collect(Collectors.toSet()) + .size() == 9; + } +} From a7951290fddcdf8dc5c911c6d3513d9c54abd1bd Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 10 Jun 2023 17:49:47 -0700 Subject: [PATCH 1171/1640] Added Find the Longest Semi-Repetitive Substring.java --- ...the Longest Semi-Repetitive Substring.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Medium/Find the Longest Semi-Repetitive Substring.java diff --git a/Medium/Find the Longest Semi-Repetitive Substring.java b/Medium/Find the Longest Semi-Repetitive Substring.java new file mode 100644 index 00000000..f6743a56 --- /dev/null +++ b/Medium/Find the Longest Semi-Repetitive Substring.java @@ -0,0 +1,22 @@ +class Solution { + public int longestSemiRepetitiveSubstring(String s) { + int start = 0; + int end = 0; + int maxLength = 1; + int consecutiveCount = 0; + while (end < s.length() - 1) { + if (s.charAt(end) == s.charAt(end + 1)) { + consecutiveCount++; + } + end++; + while (start < end && consecutiveCount > 1) { + if (s.charAt(start) == s.charAt(start + 1)) { + consecutiveCount--; + } + start++; + } + maxLength = Math.max(maxLength, end - start + 1); + } + return maxLength; + } +} From 220e3c191fe32bb28493aaabc9560ab2af7ebd19 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 11 Jun 2023 09:21:03 -0700 Subject: [PATCH 1172/1640] Added Neither Minimum nor Maximum.java --- Easy/Neither Minimum nor Maximum.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Neither Minimum nor Maximum.java diff --git a/Easy/Neither Minimum nor Maximum.java b/Easy/Neither Minimum nor Maximum.java new file mode 100644 index 00000000..b5d7a6d1 --- /dev/null +++ b/Easy/Neither Minimum nor Maximum.java @@ -0,0 +1,16 @@ +class Solution { + public int findNonMinOrMax(int[] nums) { + int min = nums[0]; + int max = nums[0]; + for (int num : nums) { + min = Math.min(num, min); + max = Math.max(num, max); + } + final int arrayMin = min; + final int arrayMax = max; + return Arrays.stream(nums) + .filter(num -> num != arrayMin && num != arrayMax) + .findFirst() + .orElse(-1); + } +} From c9e15169f169737873777053a1a78a7fc14395db Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 11 Jun 2023 09:30:22 -0700 Subject: [PATCH 1173/1640] Added Lexicographically Smallest String After Substring Operation.java --- ...lest String After Substring Operation.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Lexicographically Smallest String After Substring Operation.java diff --git a/Medium/Lexicographically Smallest String After Substring Operation.java b/Medium/Lexicographically Smallest String After Substring Operation.java new file mode 100644 index 00000000..e55990b7 --- /dev/null +++ b/Medium/Lexicographically Smallest String After Substring Operation.java @@ -0,0 +1,20 @@ +class Solution { + public String smallestString(String s) { + StringBuilder sb = new StringBuilder(); + int idx = 0; + while (idx < s.length() && s.charAt(idx) == 'a') { + sb.append(s.charAt(idx++)); + } + if (idx == s.length()) { + return s.substring(0, s.length() - 1) + 'z'; + } + while (idx < s.length() && s.charAt(idx) != 'a') { + sb.append(getPreviousChar(s.charAt(idx++))); + } + return sb.append(s.substring(idx)).toString(); + } + + private char getPreviousChar(char c) { + return (char) (c - 1); + } +} From e84f8856b088683a88b430fca9a548e927ae1fa2 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 11 Jun 2023 09:48:01 -0700 Subject: [PATCH 1174/1640] Updated Longest Palindromic Substring.java --- Medium/Longest Palindromic Substring.java | 46 ++++++++++++----------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/Medium/Longest Palindromic Substring.java b/Medium/Longest Palindromic Substring.java index c22fec2d..73732212 100644 --- a/Medium/Longest Palindromic Substring.java +++ b/Medium/Longest Palindromic Substring.java @@ -1,24 +1,28 @@ class Solution { - public String longestPalindrome(String s) { - int start = 0; - int end = 0; - for (int i = 0; i < s.length(); i++) { - int lenOne = helper(s, i, i); - int lenTwo = helper(s, i, i + 1); - int maxLength = Math.max(lenOne, lenTwo); - if (maxLength > end - start) { - start = i - (maxLength - 1) / 2; - end = i + maxLength / 2; - } + public String longestPalindrome(String s) { + int n = s.length(); + boolean[][] dp = new boolean[n][n]; + int[] result = new int[]{0, 0}; + for (int i = 0; i < n; i++) { + dp[i][i] = true; + } + for (int i = 0; i < n - 1; i++) { + if (s.charAt(i) == s.charAt(i + 1)) { + dp[i][i + 1] = true; + result[0] = i; + result[1] = i + 1; + } + } + for (int i = 2; i < n; i++) { + for (int j = 0; j < n - i; j++) { + int k = i + j; + if (s.charAt(j) == s.charAt(k) && dp[j + 1][k - 1]) { + dp[j][k] = true; + result[0] = j; + result[1] = k; + } + } + } + return s.substring(result[0], result[1] + 1); } - return s.substring(start, end + 1); - } - - private int helper(String s, int left, int right) { - while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) { - left--; - right++; - } - return right - left - 1; - } } From 87898047e5d7f922a44f6fe01f676ba49aa1fced Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 12 Jun 2023 06:41:03 -0700 Subject: [PATCH 1175/1640] Updated Summary Ranges.java --- Easy/Summary Ranges.java | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/Easy/Summary Ranges.java b/Easy/Summary Ranges.java index cf67a700..0de1dc7b 100644 --- a/Easy/Summary Ranges.java +++ b/Easy/Summary Ranges.java @@ -1,18 +1,16 @@ class Solution { - public List summaryRanges(int[] nums) { - List result = new ArrayList<>(); - int idx = 0; - int n = nums.length; - while (idx < n) { - int start = nums[idx]; - int end = start; - idx++; - while (idx < n && nums[idx] == end + 1) { - end = nums[idx]; - idx++; - } - result.add(start == end ? String.valueOf(start) : (start + "->" + end)); + public List summaryRanges(int[] nums) { + List result = new ArrayList<>(); + int idx = 0; + while (idx < nums.length) { + int startIdx = idx; + int endIdx = idx; + idx++; + while (idx < nums.length && nums[idx] - nums[idx - 1] == 1) { + endIdx = idx++; + } + result.add(startIdx == endIdx ? String.valueOf(nums[startIdx]) : nums[startIdx] + "->" + nums[endIdx]); + } + return result; } - return result; - } } From c2cd62e5dce249eb8126ff5fc47fd2eef8de1f37 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 12 Jun 2023 17:17:06 -0700 Subject: [PATCH 1176/1640] Updated Equal Row and Column Pairs.java --- Medium/Equal Row and Column Pairs.java | 42 ++++++++++++-------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/Medium/Equal Row and Column Pairs.java b/Medium/Equal Row and Column Pairs.java index 7c31eb66..515fb2db 100644 --- a/Medium/Equal Row and Column Pairs.java +++ b/Medium/Equal Row and Column Pairs.java @@ -1,25 +1,23 @@ class Solution { - public int equalPairs(int[][] grid) { - Map map = new HashMap<>(); - int rows = grid.length; - int cols = grid[0].length; - for (int i = 0; i < rows; i++) { - StringBuilder sb = new StringBuilder(); - for (int j = 0; j < cols; j++) { - sb.append(grid[i][j]).append("|"); - } - String key = sb.toString(); - map.put(key, map.getOrDefault(key, 0) + 1); + public int equalPairs(int[][] grid) { + Map rowMap = new HashMap<>(); + for (int[] value : grid) { + StringBuilder sb = new StringBuilder(); + for (int j = 0; j < grid[0].length; j++) { + sb.append(value[j]).append("|"); + } + String key = sb.toString(); + rowMap.put(key, rowMap.getOrDefault(key, 0) + 1); + } + int count = 0; + for (int i = 0; i < grid[0].length; i++) { + StringBuilder sb = new StringBuilder(); + for (int[] ints : grid) { + sb.append(ints[i]).append("|"); + } + String key = sb.toString(); + count += rowMap.getOrDefault(key, 0); + } + return count; } - int count = 0; - for (int i = 0; i < cols; i++) { - StringBuilder sb = new StringBuilder(); - for (int j = 0; j < rows; j++) { - sb.append(grid[j][i]).append("|"); - } - String key = sb.toString(); - count += map.getOrDefault(key, 0); - } - return count; - } } From 9568033f2a62dbc2c4944975e6802b6baa0d04d6 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 13 Jun 2023 17:53:49 -0700 Subject: [PATCH 1177/1640] Updated Minimum Absolute Difference in BST.java --- Easy/Minimum Absolute Difference in BST.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Easy/Minimum Absolute Difference in BST.java b/Easy/Minimum Absolute Difference in BST.java index d29da542..80248dc1 100644 --- a/Easy/Minimum Absolute Difference in BST.java +++ b/Easy/Minimum Absolute Difference in BST.java @@ -14,24 +14,22 @@ * } */ class Solution { - int minDiff; - TreeNode prev; - public int getMinimumDifference(TreeNode root) { - minDiff = Integer.MAX_VALUE; - prev = null; - helper(root); - return minDiff; - } - - private void helper(TreeNode root) { - if (root == null) { - return; + public int getMinimumDifference(TreeNode root) { + List nodeValues = new ArrayList<>(); + inorder(root, nodeValues); + int minDifference = Integer.MAX_VALUE; + for (int i = 1; i < nodeValues.size(); i++) { + minDifference = Math.min(minDifference, nodeValues.get(i) - nodeValues.get(i - 1)); + } + return minDifference; } - helper(root.left); - if (prev != null) { - minDiff = Math.min(minDiff, Math.abs(root.val - prev.val)); + + private void inorder(TreeNode root, List nodeValues) { + if (root == null) { + return; + } + inorder(root.left, nodeValues); + nodeValues.add(root.val); + inorder(root.right, nodeValues); } - prev = root; - helper(root.right); - } } From 5ff595191ff7e7e91b006010218ea4a4703473f9 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 14 Jun 2023 17:10:20 -0700 Subject: [PATCH 1178/1640] Updated Maximum Level Sum of a Binary Tree.java --- .../Maximum Level Sum of a Binary Tree.java | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/Medium/Maximum Level Sum of a Binary Tree.java b/Medium/Maximum Level Sum of a Binary Tree.java index 8c1bdac6..74c62767 100644 --- a/Medium/Maximum Level Sum of a Binary Tree.java +++ b/Medium/Maximum Level Sum of a Binary Tree.java @@ -14,34 +14,31 @@ * } */ class Solution { - public int maxLevelSum(TreeNode root) { - if (root == null) { - return 0; - } - int currLevel = 1; - int maxSum = Integer.MIN_VALUE; - int maxSumLevel = 0; - Queue queue = new LinkedList<>(); - queue.add(root); - while (!queue.isEmpty()) { - int size = queue.size(); - int currSum = 0; - while (size-- > 0) { - TreeNode removed = queue.remove(); - currSum += removed.val; - if (removed.left != null) { - queue.add(removed.left); - } - if (removed.right != null) { - queue.add(removed.right); + public int maxLevelSum(TreeNode root) { + int maxSum = Integer.MIN_VALUE; + int maxSumLevel = 0; + int currLevel = 1; + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + int levelSum = 0; + int size = queue.size(); + while (size-- > 0) { + TreeNode removed = queue.remove(); + levelSum += removed.val; + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + if (levelSum > maxSum) { + maxSum = levelSum; + maxSumLevel = currLevel; + } + currLevel++; } - } - if (maxSum < currSum) { - maxSum = currSum; - maxSumLevel = currLevel; - } - currLevel++; + return maxSumLevel; } - return maxSumLevel; - } } From 82a1e5fe9c7d6abb761ad6ebaf75e41482092ef3 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 15 Jun 2023 17:10:51 -0700 Subject: [PATCH 1179/1640] Added Number of Ways to Reorder Array to Get Same BST.java --- ...Ways to Reorder Array to Get Same BST.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Hard/Number of Ways to Reorder Array to Get Same BST.java diff --git a/Hard/Number of Ways to Reorder Array to Get Same BST.java b/Hard/Number of Ways to Reorder Array to Get Same BST.java new file mode 100644 index 00000000..a47c1f1d --- /dev/null +++ b/Hard/Number of Ways to Reorder Array to Get Same BST.java @@ -0,0 +1,38 @@ +class Solution { + + private static final long MOD = 1000_000_007; + + public int numOfWays(int[] nums) { + int n = nums.length; + long[][] dp = new long[n][n]; + for (int i = 0; i < n; i++) { + dp[i][0] = dp[i][i] = 1; + } + for (int i = 2; i < n; i++) { + for (int j = 1; j < i; j++) { + dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % MOD; + } + } + List list = Arrays.stream(nums).boxed().collect(Collectors.toList()); + return (int) ((dfs(list, dp) - 1) % MOD); + } + + private long dfs(List nums, long[][] dp) { + int n = nums.size(); + if (n < 3) { + return 1; + } + List leftNodes = new ArrayList<>(); + List rightNodes = new ArrayList<>(); + for (int i = 1; i < n; i++) { + if (nums.get(i) < nums.get(0)) { + leftNodes.add(nums.get(i)); + } else { + rightNodes.add(nums.get(i)); + } + } + long leftCount = dfs(leftNodes, dp) % MOD; + long rightCount = dfs(rightNodes, dp) % MOD; + return (((leftCount * rightCount) % MOD) * dp[n - 1][leftNodes.size()]) % MOD; + } +} From c294d1945c617cd2a1e8c8c1fbade7390fe2f4b0 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 17 Jun 2023 07:19:29 -0700 Subject: [PATCH 1180/1640] Added Make Array Strictly Increasing.java --- Hard/Make Array Strictly Increasing.java | 41 ++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Hard/Make Array Strictly Increasing.java diff --git a/Hard/Make Array Strictly Increasing.java b/Hard/Make Array Strictly Increasing.java new file mode 100644 index 00000000..77bed2a8 --- /dev/null +++ b/Hard/Make Array Strictly Increasing.java @@ -0,0 +1,41 @@ +class Solution { + public int makeArrayIncreasing(int[] arr1, int[] arr2) { + Arrays.sort(arr2); + Map, Integer> dp = new HashMap<>(); + int result = dfs(0, -1, arr1, arr2, dp); + return result < 2001 ? result : -1; + } + + private int dfs(int idx, int prev, int[] arr1, int[] arr2, Map, Integer> dp) { + if (idx == arr1.length) { + return 0; + } + if (dp.containsKey(new Pair<>(idx, prev))) { + return dp.get(new Pair<>(idx, prev)); + } + int cost = 2001; + if (arr1[idx] > prev) { + cost = dfs(idx + 1, arr1[idx], arr1, arr2, dp); + } + int replaceIdx = binarySearch(arr2, prev); + if (replaceIdx < arr2.length) { + cost = Math.min(cost, 1 + dfs(idx + 1, arr2[replaceIdx], arr1, arr2, dp)); + } + dp.put(new Pair<>(idx, prev), cost); + return cost; + } + + private static int binarySearch(int[] arr, int value) { + int left = 0; + int right = arr.length; + while (left < right) { + int mid = (left + right) / 2; + if (arr[mid] <= value) { + left = mid + 1; + } else { + right = mid; + } + } + return left; + } +} From 5db3be7839486bddeb3e561ee5a887bac4036476 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 19 Jun 2023 17:00:37 -0700 Subject: [PATCH 1181/1640] Updated Find the Highest Altitude.java --- Easy/Find the Highest Altitude.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Easy/Find the Highest Altitude.java b/Easy/Find the Highest Altitude.java index a7df7bf1..aa7d12e5 100644 --- a/Easy/Find the Highest Altitude.java +++ b/Easy/Find the Highest Altitude.java @@ -1,11 +1,11 @@ class Solution { - public int largestAltitude(int[] gain) { - int highestAltitude = 0; - int currAltitude = 0; - for (int i = 0; i < gain.length; i++) { - currAltitude += gain[i]; - highestAltitude = Math.max(highestAltitude, currAltitude); + public int largestAltitude(int[] gain) { + int highestAltitude = 0; + int currAltitude = 0; + for (int i = 0; i < gain.length; i++) { + currAltitude = currAltitude + gain[i]; + highestAltitude = Math.max(highestAltitude, currAltitude); + } + return highestAltitude; } - return highestAltitude; - } } From 81e70f92df9bc013c7f0edc347f338f830623323 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 19 Jun 2023 17:11:01 -0700 Subject: [PATCH 1182/1640] Added Total Distance Traveled.java --- Easy/Total Distance Traveled.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Total Distance Traveled.java diff --git a/Easy/Total Distance Traveled.java b/Easy/Total Distance Traveled.java new file mode 100644 index 00000000..e9697899 --- /dev/null +++ b/Easy/Total Distance Traveled.java @@ -0,0 +1,5 @@ +class Solution { + public int distanceTraveled(int mainTank, int additionalTank) { + return (mainTank + Math.min((mainTank - 1) / 4, additionalTank)) * 10; + } +} From c9ba0096554df67e1a40f6a55aaaca2af0fabe47 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 20 Jun 2023 17:44:27 -0700 Subject: [PATCH 1183/1640] Added Minimum Cost to Make Array Equal.java --- Hard/Minimum Cost to Make Array Equal.java | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Hard/Minimum Cost to Make Array Equal.java diff --git a/Hard/Minimum Cost to Make Array Equal.java b/Hard/Minimum Cost to Make Array Equal.java new file mode 100644 index 00000000..9fe9b8f9 --- /dev/null +++ b/Hard/Minimum Cost to Make Array Equal.java @@ -0,0 +1,27 @@ +class Solution { + public long minCost(int[] nums, int[] cost) { + int n = nums.length; + int[][] numWithCost = new int[n][2]; + for (int i = 0; i < n; i++) { + numWithCost[i] = new int[]{nums[i], cost[i]}; + } + Arrays.sort(numWithCost, (a, b) -> a[0] - b[0]); + long[] prefixCost = new long[n]; + prefixCost[0] = numWithCost[0][1]; + for (int i = 1; i < n; i++) { + prefixCost[i] = numWithCost[i][1] + prefixCost[i - 1]; + } + long totalCost = 0; + for (int i = 1; i < n; i++) { + totalCost += 1L * numWithCost[i][1] * (numWithCost[i][0] - numWithCost[0][0]); + } + long result = totalCost; + for (int i = 1; i < n; ++i) { + int gap = numWithCost[i][0] - numWithCost[i - 1][0]; + totalCost += 1L * prefixCost[i - 1] * gap; + totalCost -= 1L * (prefixCost[n - 1] - prefixCost[i - 1]) * gap; + result = Math.min(result, totalCost); + } + return result; + } +} From d9bf069395adaabd39adb6a479d537bf0e5a163d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 22 Jun 2023 07:22:19 -0700 Subject: [PATCH 1184/1640] Added Best Time to Buy and Sell Stock with Transaction Fee.java --- ... to Buy and Sell Stock with Transaction Fee.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Best Time to Buy and Sell Stock with Transaction Fee.java diff --git a/Medium/Best Time to Buy and Sell Stock with Transaction Fee.java b/Medium/Best Time to Buy and Sell Stock with Transaction Fee.java new file mode 100644 index 00000000..1251e8d0 --- /dev/null +++ b/Medium/Best Time to Buy and Sell Stock with Transaction Fee.java @@ -0,0 +1,13 @@ +class Solution { + public int maxProfit(int[] prices, int fee) { + int n = prices.length; + int[] notHolding = new int[n]; + int[] holding = new int[n]; + holding[0] = -prices[0]; + for (int i = 1; i < n; i++) { + holding[i] = Math.max(holding[i - 1], notHolding[i - 1] - prices[i]); + notHolding[i] = Math.max(notHolding[i - 1], holding[i - 1] + prices[i] - fee); + } + return notHolding[n - 1]; + } +} From 157f7bfd46771922c330031f695cb639389962fb Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 23 Jun 2023 06:50:39 -0700 Subject: [PATCH 1185/1640] Updated Longest Arithmetic Subsequence.java --- Medium/Longest Arithmetic Subsequence.java | 24 +++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Medium/Longest Arithmetic Subsequence.java b/Medium/Longest Arithmetic Subsequence.java index 70544ee4..67a7fbb6 100644 --- a/Medium/Longest Arithmetic Subsequence.java +++ b/Medium/Longest Arithmetic Subsequence.java @@ -1,15 +1,15 @@ class Solution { - public int longestArithSeqLength(int[] nums) { - int result = 2; - Map[] dp = new HashMap[nums.length]; - for (int i = 0; i < nums.length; i++) { - dp[i] = new HashMap<>(); - for (int j = 0; j < i; j++) { - int diff = nums[i] - nums[j]; - dp[i].put(diff, dp[j].getOrDefault(diff, 1) + 1); - result = Math.max(result, dp[i].get(diff)); - } + public int longestArithSeqLength(int[] nums) { + int result = 0; + Map[] dp = new HashMap[nums.length]; + for (int i = 0; i < nums.length; i++) { + dp[i] = new HashMap<>(); + for (int j = 0; j < i; j++) { + int diff = nums[j] - nums[i]; + dp[i].put(diff, dp[j].getOrDefault(diff, 1) + 1); + result = Math.max(result, dp[i].get(diff)); + } + } + return result; } - return result; - } } From 9f9edb0697d85042e4e917f248699facb234ce24 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 24 Jun 2023 07:41:33 -0700 Subject: [PATCH 1186/1640] Added Tallest Billboard.java --- Hard/Tallest Billboard.java | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Hard/Tallest Billboard.java diff --git a/Hard/Tallest Billboard.java b/Hard/Tallest Billboard.java new file mode 100644 index 00000000..04f81763 --- /dev/null +++ b/Hard/Tallest Billboard.java @@ -0,0 +1,35 @@ +class Solution { + public int tallestBillboard(int[] rods) { + int n = rods.length; + Map firstHalf = helper(rods, 0, n / 2); + Map secondHalf = helper(rods, n / 2, n); + int result = 0; + for (Integer difference : firstHalf.keySet()) { + if (secondHalf.containsKey(-1 * difference)) { + result = Math.max(result, firstHalf.get(difference) + secondHalf.get(-1 * difference)); + } + } + return result; + } + + private Map helper(int[] rods, int leftIdx, int rightIdx) { + Set> states = new HashSet<>(); + states.add(new Pair(0, 0)); + for (int i = leftIdx; i < rightIdx; i++) { + int rod = rods[i]; + Set> newStates = new HashSet<>(); + for (Pair state : states) { + newStates.add(new Pair(state.getKey() + rod, state.getValue())); + newStates.add(new Pair(state.getKey(), state.getValue() + rod)); + } + states.addAll(newStates); + } + Map dp = new HashMap<>(); + for (Pair pair : states) { + Integer left = pair.getKey(); + Integer right = pair.getValue(); + dp.put(left - right, Math.max(dp.getOrDefault(left - right, 0), left)); + } + return dp; + } +} From b66cf22f9d15257d8df8b820c177f485bead5681 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 24 Jun 2023 14:23:21 -0700 Subject: [PATCH 1187/1640] Added Find Maximum Number of String Pairs.java --- Easy/Find Maximum Number of String Pairs.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Find Maximum Number of String Pairs.java diff --git a/Easy/Find Maximum Number of String Pairs.java b/Easy/Find Maximum Number of String Pairs.java new file mode 100644 index 00000000..f2673fbe --- /dev/null +++ b/Easy/Find Maximum Number of String Pairs.java @@ -0,0 +1,13 @@ +class Solution { + public int maximumNumberOfStringPairs(String[] words) { + Set set = new HashSet<>(); + int pairCount = 0; + for (String word : words) { + if (set.contains(new StringBuilder(word).reverse().toString())) { + pairCount++; + } + set.add(word); + } + return pairCount; + } +} From 0259040e6657c3e246ad602b6d9d88797cf460a0 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 25 Jun 2023 07:33:31 -0700 Subject: [PATCH 1188/1640] Added Number of Beautiful Pairs.java --- Easy/Number of Beautiful Pairs.java | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Easy/Number of Beautiful Pairs.java diff --git a/Easy/Number of Beautiful Pairs.java b/Easy/Number of Beautiful Pairs.java new file mode 100644 index 00000000..2993a81e --- /dev/null +++ b/Easy/Number of Beautiful Pairs.java @@ -0,0 +1,29 @@ +class Solution { + public int countBeautifulPairs(int[] nums) { + int pairCount = 0; + for (int i = 0; i < nums.length; i++) { + int lastDigit = nums[i] % 10; + for (int j = 0; j < i; j++) { + int firstDigit = getFirstDigit(nums[j]); + pairCount += gcd(firstDigit, lastDigit) == 1 ? 1 : 0; + } + } + return pairCount; + } + + private static int getFirstDigit(int num) { + while (num >= 10) { + num /= 10; + } + return num; + } + + private static int gcd(int a, int b) { + while (b != 0) { + int temp = a % b; + a = b; + b = temp; + } + return a; + } +} From a4d59271959434a39250148d30dbfc7aff266d5d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 26 Jun 2023 08:48:34 -0700 Subject: [PATCH 1189/1640] Added Total Cost to Hire K Workers.java --- Medium/Total Cost to Hire K Workers.java | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Total Cost to Hire K Workers.java diff --git a/Medium/Total Cost to Hire K Workers.java b/Medium/Total Cost to Hire K Workers.java new file mode 100644 index 00000000..c5708a4b --- /dev/null +++ b/Medium/Total Cost to Hire K Workers.java @@ -0,0 +1,29 @@ +class Solution { + public long totalCost(int[] costs, int k, int candidates) { + PriorityQueue headWorkers = new PriorityQueue<>(); + PriorityQueue tailWorkers = new PriorityQueue<>(); + for (int i = 0; i < candidates; i++) { + headWorkers.add(costs[i]); + } + for (int i = Math.max(candidates, costs.length - candidates); i < costs.length; i++) { + tailWorkers.add(costs[i]); + } + int headIdx = candidates; + int tailIdx = costs.length - candidates - 1; + long result = 0; + for (int i = 0; i < k; i++) { + if (tailWorkers.isEmpty() || (!headWorkers.isEmpty() && headWorkers.peek() <= tailWorkers.peek())) { + result += headWorkers.poll(); + if (headIdx <= tailIdx) { + headWorkers.add(costs[headIdx++]); + } + } else { + result += tailWorkers.poll(); + if (headIdx <= tailIdx) { + tailWorkers.add(costs[tailIdx--]); + } + } + } + return result; + } +} From dfa8b889cc78825fb08b7c7ce5c6216c3feb6daf Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 26 Jun 2023 17:37:51 -0700 Subject: [PATCH 1190/1640] Updated Find K Pairs with Smallest Sums.java --- Medium/Find K Pairs with Smallest Sums.java | 70 +++++++-------------- 1 file changed, 21 insertions(+), 49 deletions(-) diff --git a/Medium/Find K Pairs with Smallest Sums.java b/Medium/Find K Pairs with Smallest Sums.java index 894ca10d..f29f5c15 100644 --- a/Medium/Find K Pairs with Smallest Sums.java +++ b/Medium/Find K Pairs with Smallest Sums.java @@ -1,54 +1,26 @@ -class Solution { - public List kSmallestPairs(int[] nums1, int[] nums2, int k) { - List ans = new ArrayList<>(); - - if (nums1.length == 0 || nums2.length == 0 || k == 0) { - return ans; - } - - PriorityQueue pq = new PriorityQueue<>(new Comparator() { - @Override - public int compare(Element o1, Element o2) { - return (o1.x + o1.y) - (o2.x + o2.y); - } - }); - - for (int i=0; i> kSmallestPairs(int[] nums1, int[] nums2, int k) { + PriorityQueue pq = new PriorityQueue<>((a, b) -> a[2] - b[2]); + List> result = new ArrayList<>(); + Set> visited = new HashSet<>(); + pq.add(new int[]{0, 0, nums1[0] + nums2[0]}); + visited.add(new Pair(0, 0)); while (k-- > 0 && !pq.isEmpty()) { - Element temp = pq.poll(); - ans.add(new int[]{temp.y, temp.x}); - - if (temp.idx >= nums1.length-1) { - continue; + int[] removed = pq.poll(); + int i = removed[0]; + int j = removed[1]; + result.add(List.of(nums1[i], nums2[j])); + Pair nums1Pair = new Pair(i + 1, j); + Pair nums2Pair = new Pair(i, j + 1); + if (i + 1 < nums1.length && !visited.contains(nums1Pair)) { + pq.add(new int[]{i + 1, j, nums1[i + 1] + nums2[j]}); + visited.add(nums1Pair); + } + if (j + 1 < nums2.length && !visited.contains(nums2Pair)) { + pq.add(new int[]{i, j + 1, nums1[i] + nums2[j + 1]}); + visited.add(nums2Pair); } - - pq.offer(new Element(temp.idx+1, temp.x, nums1[temp.idx+1])); - } - - return ans; - } - - class Element { - int idx; - int x; - int y; - - public Element(int val, int x, int y) { - this.idx = val; - this.x = x; - this.y = y; - } - - @Override - public String toString() { - return "Element{" + - "idx=" + idx + - ", x=" + x + - ", y=" + y + - '}'; } + return result; } } From 52111fe5405a6b1d1842b5ec063301e9dbd499a1 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 1 Jul 2023 22:03:18 -0700 Subject: [PATCH 1191/1640] Added Longest Even Odd Subarray With Threshold.java --- ...gest Even Odd Subarray With Threshold.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Easy/Longest Even Odd Subarray With Threshold.java diff --git a/Easy/Longest Even Odd Subarray With Threshold.java b/Easy/Longest Even Odd Subarray With Threshold.java new file mode 100644 index 00000000..f3dcc239 --- /dev/null +++ b/Easy/Longest Even Odd Subarray With Threshold.java @@ -0,0 +1,31 @@ +class Solution { + public int longestAlternatingSubarray(int[] nums, int threshold) { + int maxLength = 0; + int start = 0; + boolean evenRequired = true; + int idx = 0; + while (idx < nums.length) { + if (nums[idx] > threshold) { + idx++; + start = idx; + evenRequired = true; + continue; + } + if (nums[idx] % 2 == 0 && !evenRequired) { + start = idx; + evenRequired = true; + continue; + } + if (nums[idx] % 2 != 0 && evenRequired) { + idx++; + start = idx; + evenRequired = true; + continue; + } + idx++; + maxLength = Math.max(maxLength, idx - start); + evenRequired = !evenRequired; + } + return maxLength; + } +} From ab79856e35201bbb7e6b3d0d09808557f0d597d7 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 2 Jul 2023 17:24:13 -0700 Subject: [PATCH 1192/1640] Updated Buddy Strings.java --- Easy/Buddy Strings.java | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/Easy/Buddy Strings.java b/Easy/Buddy Strings.java index 83f94a5a..f34ecf35 100644 --- a/Easy/Buddy Strings.java +++ b/Easy/Buddy Strings.java @@ -1,33 +1,32 @@ class Solution { + + private static final int SWAP_DONE_IDX = Integer.MIN_VALUE; + public boolean buddyStrings(String s, String goal) { if (s.length() != goal.length()) { return false; } - int mismatchIdx = -1; + int swapIdx = -1; Set set = new HashSet<>(); for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == goal.charAt(i)) { + set.add(s.charAt(i)); + continue; + } if (s.charAt(i) != goal.charAt(i)) { - if (mismatchIdx == Integer.MAX_VALUE) { + if (swapIdx == SWAP_DONE_IDX) { return false; } - if (mismatchIdx == -1) { - mismatchIdx = i; - } else { - if (!(s.charAt(mismatchIdx) == goal.charAt(i) && s.charAt(i) == goal.charAt(mismatchIdx))) { - return false; - } - mismatchIdx = Integer.MAX_VALUE; + if (swapIdx == -1) { + swapIdx = i; + continue; + } + if (!(s.charAt(swapIdx) == goal.charAt(i) && s.charAt(i) == goal.charAt(swapIdx))) { + return false; } - } else { - set.add(s.charAt(i)); + swapIdx = SWAP_DONE_IDX; } } - if (mismatchIdx != -1 && mismatchIdx != Integer.MAX_VALUE) { - return false; - } - if (mismatchIdx == -1) { - return s.length() > set.size(); - } - return true; + return (swapIdx != -1 && swapIdx == SWAP_DONE_IDX) || (swapIdx == -1 && set.size() < s.length()); } } From 85c734aa61a38757ae91ed354a9262d329d0448e Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 4 Jul 2023 17:44:18 -0700 Subject: [PATCH 1193/1640] Added Longest Subarray of 1's After Deleting One Element.java --- ...ubarray of 1's After Deleting One Element.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Longest Subarray of 1's After Deleting One Element.java diff --git a/Medium/Longest Subarray of 1's After Deleting One Element.java b/Medium/Longest Subarray of 1's After Deleting One Element.java new file mode 100644 index 00000000..b10a1675 --- /dev/null +++ b/Medium/Longest Subarray of 1's After Deleting One Element.java @@ -0,0 +1,15 @@ +class Solution { + public int longestSubarray(int[] nums) { + int zeroIdx = -1; + int windowSize = 0; + int startIdx = 0; + for (int i = 0; i < nums.length; i++) { + if (nums[i] == 0) { + startIdx = zeroIdx + 1; + zeroIdx = i; + } + windowSize = Math.max(windowSize, i - startIdx); + } + return windowSize; + } +} From 97c634930a2062e9a1d5d42b7dc3b6b3ea16a1de Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 6 Jul 2023 17:24:24 -0700 Subject: [PATCH 1194/1640] Added Maximize the Confusion of an Exam.java --- Medium/Maximize the Confusion of an Exam.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Maximize the Confusion of an Exam.java diff --git a/Medium/Maximize the Confusion of an Exam.java b/Medium/Maximize the Confusion of an Exam.java new file mode 100644 index 00000000..3e7e14d1 --- /dev/null +++ b/Medium/Maximize the Confusion of an Exam.java @@ -0,0 +1,19 @@ +class Solution { + public int maxConsecutiveAnswers(String answerKey, int k) { + int resultSize = k; + Map map = new HashMap<>(); + for (int i = 0; i < k; i++) { + map.put(answerKey.charAt(i), map.getOrDefault(answerKey.charAt(i), 0) + 1); + } + int start = 0; + for (int i = k; i < answerKey.length(); i++) { + map.put(answerKey.charAt(i), map.getOrDefault(answerKey.charAt(i), 0) + 1); + while (Math.min(map.getOrDefault('T', 0), map.getOrDefault('F', 0)) > k) { + map.put(answerKey.charAt(start), map.get(answerKey.charAt(start)) - 1); + start++; + } + resultSize = Math.max(resultSize, i - start + 1); + } + return resultSize; + } +} From 5c15c2c4ec60e4e30a7528e61cd89c720d3a0f1c Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 8 Jul 2023 10:58:57 -0700 Subject: [PATCH 1195/1640] Added Longest Alternating Subarray.java --- Easy/Longest Alternating Subarray.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Easy/Longest Alternating Subarray.java diff --git a/Easy/Longest Alternating Subarray.java b/Easy/Longest Alternating Subarray.java new file mode 100644 index 00000000..65de425c --- /dev/null +++ b/Easy/Longest Alternating Subarray.java @@ -0,0 +1,21 @@ +class Solution { + public int alternatingSubarray(int[] nums) { + int start = 0; + int maxLength = -1; + int expectedDiff = 1; + for (int i = 1; i < nums.length;) { + if (nums[i] - nums[i - 1] != expectedDiff) { + if (nums[i] - nums[i - 1] != 1) { + i++; + } + start = i - 1; + expectedDiff = 1; + continue; + } + expectedDiff *= -1; + maxLength = Math.max(maxLength, i - start + 1); + i++; + } + return maxLength; + } +} From ca0aa5f3d50a52363b2ed46cffb0d1981dc0c16d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 9 Jul 2023 06:43:54 -0700 Subject: [PATCH 1196/1640] Added Find the Maximum Achievable Number.java --- Easy/Find the Maximum Achievable Number.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Find the Maximum Achievable Number.java diff --git a/Easy/Find the Maximum Achievable Number.java b/Easy/Find the Maximum Achievable Number.java new file mode 100644 index 00000000..841862be --- /dev/null +++ b/Easy/Find the Maximum Achievable Number.java @@ -0,0 +1,5 @@ +class Solution { + public int theMaximumAchievableX(int num, int t) { + return num + 2 * t; + } +} From 6cb7d533c288ce708d1e8d210a97ed3a63b5ff43 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 9 Jul 2023 06:51:46 -0700 Subject: [PATCH 1197/1640] Updated Longest Substring with At Most K Distinct Characters.java --- ...ng with At Most K Distinct Characters.java | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Medium/Longest Substring with At Most K Distinct Characters.java b/Medium/Longest Substring with At Most K Distinct Characters.java index 02936a53..a793b8c0 100644 --- a/Medium/Longest Substring with At Most K Distinct Characters.java +++ b/Medium/Longest Substring with At Most K Distinct Characters.java @@ -1,21 +1,21 @@ class Solution { - public int lengthOfLongestSubstringKDistinct(String s, int k) { - Map map = new HashMap<>(); - int startIdx = 0; - int endIdx = 0; - int maxLength = 0; - while (endIdx < s.length()) { - map.put(s.charAt(endIdx), map.getOrDefault(s.charAt(endIdx), 0) + 1); - endIdx++; - while (startIdx < endIdx && map.size() > k) { - map.put(s.charAt(startIdx), map.getOrDefault(s.charAt(startIdx), 0 ) - 1); - if (map.get(s.charAt(startIdx)) == 0) { - map.remove(s.charAt(startIdx)); + public int lengthOfLongestSubstringKDistinct(String s, int k) { + Map map = new HashMap<>(); + int start = 0; + int end = 0; + int maxLength = 0; + while (end < s.length()) { + map.put(s.charAt(end), map.getOrDefault(s.charAt(end), 0) + 1); + while (start <= end && map.size() > k) { + map.put(s.charAt(start), map.get(s.charAt(start)) - 1); + if (map.get(s.charAt(start)) == 0) { + map.remove(s.charAt(start)); + } + start++; + } + end++; + maxLength = Math.max(maxLength, end - start); } - startIdx++; - } - maxLength = Math.max(maxLength, endIdx - startIdx); + return maxLength; } - return maxLength; - } } From f38831aadfe1c0ce6e3ab6c4aa88f958db2e2cad Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 9 Jul 2023 18:46:15 -0700 Subject: [PATCH 1198/1640] Updated Minimum Depth of a Binary Tree.java --- Easy/Minimum Depth of a Binary Tree.java | 46 ++++++++++++------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/Easy/Minimum Depth of a Binary Tree.java b/Easy/Minimum Depth of a Binary Tree.java index e1d21cc6..0da04114 100644 --- a/Easy/Minimum Depth of a Binary Tree.java +++ b/Easy/Minimum Depth of a Binary Tree.java @@ -14,31 +14,29 @@ * } */ class Solution { - public int minDepth(TreeNode root) { - if (root == null) { - return 0; - } - int steps = 1; - Queue queue = new LinkedList<>(); - queue.add(root); - while (!queue.isEmpty()) { - int size = queue.size(); - // Level iteration - while (size-- > 0) { - TreeNode removed = queue.remove(); - // Leaf reached - if (removed.left == null && removed.right == null) { - return steps; - } - if (removed.left != null) { - queue.add(removed.left); + public int minDepth(TreeNode root) { + if (root == null) { + return 0; } - if (removed.right != null) { - queue.add(removed.right); + int level = 1; + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + TreeNode removed = queue.remove(); + if (removed.left == null && removed.right == null) { + return level; + } + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + level++; } - } - steps++; + return level; } - return steps; - } } From b86b4488f7a3d51036e42fabc46dd9223930651d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 11 Jul 2023 08:21:15 -0700 Subject: [PATCH 1199/1640] Updated All Nodes Distance K in Binary Tree.java --- .../All Nodes Distance K in Binary Tree.java | 77 +++++++++---------- 1 file changed, 38 insertions(+), 39 deletions(-) diff --git a/Medium/All Nodes Distance K in Binary Tree.java b/Medium/All Nodes Distance K in Binary Tree.java index 13e9485b..9f88451e 100644 --- a/Medium/All Nodes Distance K in Binary Tree.java +++ b/Medium/All Nodes Distance K in Binary Tree.java @@ -8,49 +8,48 @@ * } */ class Solution { - public List distanceK(TreeNode root, TreeNode target, int k) { - List result = new ArrayList<>(); - dfs(root, target, k, result); - return new ArrayList<>(result); - } - - private int dfs(TreeNode node, TreeNode target, int k, List result) { - if (node == null) { - return -1; + public List distanceK(TreeNode root, TreeNode target, int k) { + List result = new ArrayList<>(); + dfs(root, target, k, result); + return result; } - if (node == target) { - addToResult(node, 0, result, k); - return 1; - } else { - int left = dfs(node.left, target, k, result); - int right = dfs(node.right, target, k, result); - if (left != -1) { - if (left == k) { - result.add(node.val); + + private int dfs(TreeNode node, TreeNode target, int k, List result) { + if (node == null) { + return -1; } - addToResult(node.right, left + 1, result, k); - return left + 1; - } else if (right != -1) { - if (right == k) { - result.add(node.val); + if (node == target) { + dfs(node, 0, k, result); + return 1; + } + int left = dfs(node.left, target, k, result); + if (left != -1) { + if (left == k) { + result.add(node.val); + } + dfs(node.right, left + 1, k, result); + return left + 1; + } + int right = dfs(node.right, target, k, result); + if (right != -1) { + if (right == k) { + result.add(node.val); + } + dfs(node.left, right + 1, k, result); + return right + 1; } - addToResult(node.left, right + 1, result, k); - return right + 1; - } else { return -1; - } - } - } - - private void addToResult(TreeNode node, int dist, List result, int k) { - if (node == null || dist > k) { - return; } - if (dist == k) { - result.add(node.val); - } else { - addToResult(node.left, dist + 1, result, k); - addToResult(node.right, dist + 1, result, k); + + private void dfs(TreeNode node, int distance, int k, List result) { + if (node == null || distance > k) { + return; + } + if (distance == k) { + result.add(node.val); + return; + } + dfs(node.left, distance + 1, k, result); + dfs(node.right, distance + 1, k, result); } - } } From 8e7e64da784242b3c62ddb04fabf5da83baae74a Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 11 Jul 2023 18:30:11 -0700 Subject: [PATCH 1200/1640] Added Find Eventual Safe States.java --- Medium/Find Eventual Safe States.java | 35 +++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Medium/Find Eventual Safe States.java diff --git a/Medium/Find Eventual Safe States.java b/Medium/Find Eventual Safe States.java new file mode 100644 index 00000000..2948587d --- /dev/null +++ b/Medium/Find Eventual Safe States.java @@ -0,0 +1,35 @@ +class Solution { + public List eventualSafeNodes(int[][] graph) { + int n = graph.length; + Map> map = new HashMap<>(); + int[] indegree = new int[n]; + for (int i = 0; i < n; i++) { + for (Integer conn : graph[i]) { + indegree[i]++; + map.computeIfAbsent(conn, k -> new HashSet<>()).add(i); + } + } + Queue queue = new LinkedList<>(); + for (int i = 0; i < n; i++) { + if (indegree[i] == 0) { + queue.add(i); + } + } + List result = new ArrayList<>(); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int removed = queue.remove(); + result.add(removed); + for (Integer conn : map.getOrDefault(removed, new HashSet<>())) { + indegree[conn]--; + if (indegree[conn] == 0) { + queue.add(conn); + } + } + } + } + Collections.sort(result); + return result; + } +} From 3523744aed753badf83a54e68879ab20ed5655ad Mon Sep 17 00:00:00 2001 From: varunu28 Date: Thu, 13 Jul 2023 09:08:53 -0700 Subject: [PATCH 1201/1640] Updated Course Schedule.java --- Medium/Course Schedule.java | 52 +++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/Medium/Course Schedule.java b/Medium/Course Schedule.java index bea1a964..1f8c0693 100644 --- a/Medium/Course Schedule.java +++ b/Medium/Course Schedule.java @@ -1,29 +1,31 @@ class Solution { - public boolean canFinish(int numCourses, int[][] prerequisites) { - Map> map = new HashMap<>(); - int[] indegree = new int[numCourses]; - for (int[] prerequisite : prerequisites) { - map.computeIfAbsent(prerequisite[1], k -> new HashSet<>()).add(prerequisite[0]); - indegree[prerequisite[0]]++; - } - Queue queue = new LinkedList<>(); - Set taken = new HashSet<>(); - for (int i = 0; i < numCourses; i++) { - if (indegree[i] == 0) { - queue.add(i); - taken.add(i); - } - } - while (!queue.isEmpty()) { - int removed = queue.remove(); - for (Integer dependentCourse : map.getOrDefault(removed, new HashSet<>())) { - indegree[dependentCourse]--; - if (indegree[dependentCourse] == 0) { - taken.add(dependentCourse); - queue.add(dependentCourse); + public boolean canFinish(int numCourses, int[][] prerequisites) { + int[] indegree = new int[numCourses]; + Map> map = new HashMap<>(); + for (int[] prerequisite : prerequisites) { + int course = prerequisite[0]; + int prereq = prerequisite[1]; + indegree[course]++; + map.computeIfAbsent(prereq, k -> new HashSet<>()).add(course); + } + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(); + for (int i = 0; i < numCourses; i++) { + if (indegree[i] == 0) { + queue.add(i); + visited.add(i); + } + } + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (Integer conn : map.getOrDefault(removed, new HashSet<>())) { + indegree[conn]--; + if (indegree[conn] == 0) { + queue.add(conn); + visited.add(conn); + } + } } - } + return visited.size() == numCourses; } - return taken.size() == numCourses; - } } From a89344a94b320af42b8c740e388d89db9e53db7f Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 14 Jul 2023 07:43:29 -0700 Subject: [PATCH 1202/1640] Added Longest Arithmetic Subsequence of Given Difference.java --- ...t Arithmetic Subsequence of Given Difference.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Longest Arithmetic Subsequence of Given Difference.java diff --git a/Medium/Longest Arithmetic Subsequence of Given Difference.java b/Medium/Longest Arithmetic Subsequence of Given Difference.java new file mode 100644 index 00000000..ef48493e --- /dev/null +++ b/Medium/Longest Arithmetic Subsequence of Given Difference.java @@ -0,0 +1,12 @@ +class Solution { + public int longestSubsequence(int[] arr, int difference) { + Map map = new HashMap<>(); + int maxValue = 0; + for (int num : arr) { + int endingSubLength = map.getOrDefault(num - difference, 0); + map.put(num, endingSubLength + 1); + maxValue = Math.max(maxValue, map.get(num)); + } + return maxValue; + } +} From 91dd115b39eb3e77b54c889f0688c6e93b99a48a Mon Sep 17 00:00:00 2001 From: varunu28 Date: Fri, 14 Jul 2023 13:11:54 -0700 Subject: [PATCH 1203/1640] Added Web Crawler Multithreaded.java --- Concurrency/Web Crawler Multithreaded.java | 108 +++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Concurrency/Web Crawler Multithreaded.java diff --git a/Concurrency/Web Crawler Multithreaded.java b/Concurrency/Web Crawler Multithreaded.java new file mode 100644 index 00000000..bb48616c --- /dev/null +++ b/Concurrency/Web Crawler Multithreaded.java @@ -0,0 +1,108 @@ +/** + * // This is the HtmlParser's API interface. + * // You should not implement it, or speculate about its implementation + * interface HtmlParser { + * public List getUrls(String url) {} + * } + */ +import java.net.URI; +import java.net.URISyntaxException; + + +class Solution { + public List crawl(String startUrl, HtmlParser htmlParser) { + ResultRecord resultRecord = new ResultRecord(); + CrawlTask task = new CrawlTask( + startUrl, htmlParser, resultRecord, UrlUtil.parseHostname(startUrl)); + try { + task.start(); + task.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return resultRecord.getResultList(); + } +} + +class CrawlTask extends Thread { + + private final String url; + private final HtmlParser htmlParser; + private final ResultRecord resultRecord; + private final String parentHost; + + public CrawlTask(String url, + HtmlParser htmlParser, + ResultRecord resultRecord, + String parentHost) { + this.url = url; + this.htmlParser = htmlParser; + this.resultRecord = resultRecord; + this.parentHost = parentHost; + } + + public void run() { + String hostname = UrlUtil.parseHostname(url); + if (!hostname.equals(parentHost)) { + return; + } + if (resultRecord.addIfNotExists(url)) { + List childUrls = htmlParser.getUrls(url); + List tasks = new ArrayList<>(); + for (String childUrl : childUrls) { + tasks.add(new CrawlTask( + childUrl, htmlParser, resultRecord, parentHost)); + } + try { + for (CrawlTask task : tasks) { + task.start(); + } + for (CrawlTask task : tasks) { + task.join(); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } +} + +class UrlUtil { + + public static String parseHostname(String url) { + try { + URI uri = new URI(url); + return uri.getHost(); + } catch(URISyntaxException e) { + e.printStackTrace(); + } + return null; + } +} + +class ResultRecord { + + private Set urls; + private Semaphore mutex; + + public ResultRecord() { + this.urls = new HashSet<>(); + this.mutex = new Semaphore(1); + } + + public boolean addIfNotExists(String url) { + try { + this.mutex.acquire(); + boolean added = this.urls.add(url); + this.mutex.release(); + return added; + } catch (InterruptedException e) { + e.printStackTrace(); + } + return false; + } + + public List getResultList() { + return new ArrayList<>(urls); + } +} From 32088448fd2cb7b6171d8fff65087b68a7aea181 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 15 Jul 2023 14:18:10 -0700 Subject: [PATCH 1204/1640] Updated Combination Sum.java --- Medium/Combination Sum.java | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/Medium/Combination Sum.java b/Medium/Combination Sum.java index de3b3740..6d9e8f77 100644 --- a/Medium/Combination Sum.java +++ b/Medium/Combination Sum.java @@ -1,21 +1,22 @@ class Solution { - public List> combinationSum(int[] candidates, int target) { - List> result = new ArrayList<>(); - helper(candidates, 0, target, new ArrayList<>(), result); - return result; - } + public List> combinationSum(int[] candidates, int target) { + List> result = new ArrayList<>(); + helper(candidates, target, new ArrayList<>(), result, 0); + return result; + } - private void helper(int[] candidates, int idx, int target, List currCombination, - List> result) { - if (target == 0) { - result.add(new ArrayList<>(currCombination)); - } - if (target > 0 && idx < candidates.length) { - for (int i = idx; i < candidates.length; i++) { - currCombination.add(candidates[i]); - helper(candidates, i, target - candidates[i], currCombination, result); - currCombination.remove(currCombination.size() - 1); - } + private void helper(int[] candidates, int target, List combination, List> result, int idx) { + if (target < 0 || idx == candidates.length) { + return; + } + if (target == 0) { + result.add(combination); + return; + } + for (int i = idx; i < candidates.length; i++) { + combination.add(candidates[i]); + helper(candidates, target - candidates[i], new ArrayList<>(combination), result, i); + combination.remove(combination.size() - 1); + } } - } } From 343b1fc60b051544444d75ac0ced78454c36004d Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 15 Jul 2023 14:43:55 -0700 Subject: [PATCH 1205/1640] Updated Reorganize String.java --- Medium/Reorganize String.java | 63 ++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/Medium/Reorganize String.java b/Medium/Reorganize String.java index f3c2dfc1..9dd20760 100644 --- a/Medium/Reorganize String.java +++ b/Medium/Reorganize String.java @@ -1,37 +1,38 @@ class Solution { - public String reorganizeString(String s) { - Map map = new HashMap<>(); - for (char c : s.toCharArray()) { - map.put(c, map.getOrDefault(c, 0) + 1); - } - PriorityQueue pq = new PriorityQueue<>( - (o1, o2) -> map.get(o2).compareTo(map.get(o1))); - pq.addAll(map.keySet()); - StringBuilder sb = new StringBuilder(); - while (!pq.isEmpty()) { - char removed = pq.poll(); - if (!sb.isEmpty() && sb.charAt(sb.length() - 1) == removed) { - if (pq.isEmpty()) { - return ""; + public String reorganizeString(String s) { + Map map = new HashMap<>(); + int maxFrequency = 0; + char maxFrequencyLetter = ' '; + int n = s.length(); + for (char c : s.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); + if (maxFrequency < map.get(c)) { + maxFrequency = map.get(c); + maxFrequencyLetter = c; + } + } + if (maxFrequency > (n + 1) / 2) { + return ""; } - char secondRemoved = pq.poll(); - pq.add(removed); - sb.append(secondRemoved); - updateStructure(map, pq, secondRemoved); - } else { - sb.append(removed); - updateStructure(map, pq, removed); - } + char[] letters = new char[s.length()]; + int idx = 0; + idx = insertLetter(n, map, maxFrequencyLetter, letters, idx); + map.remove(maxFrequencyLetter); + for (Character key : map.keySet()) { + idx = insertLetter(n, map, key, letters, idx); + } + return String.valueOf(letters); } - return sb.toString(); - } - private void updateStructure(Map map, PriorityQueue pq, char c) { - map.put(c, map.get(c) - 1); - if (map.get(c) > 0) { - pq.add(c); - } else { - map.remove(c); + private static int insertLetter(int n, Map map, char maxFrequencyLetter, char[] letters, int idx) { + while (map.get(maxFrequencyLetter) > 0) { + if (idx >= n) { + idx = 1; + } + letters[idx] = maxFrequencyLetter; + idx += 2; + map.put(maxFrequencyLetter, map.get(maxFrequencyLetter) - 1); + } + return idx; } - } } From 2a5879f2d2341289d6088796ba1d0ad8129774c2 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 16 Jul 2023 06:45:14 -0700 Subject: [PATCH 1206/1640] Added Sum of Squares of Special Elements.java --- Easy/Sum of Squares of Special Elements.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Sum of Squares of Special Elements.java diff --git a/Easy/Sum of Squares of Special Elements.java b/Easy/Sum of Squares of Special Elements.java new file mode 100644 index 00000000..2072eee5 --- /dev/null +++ b/Easy/Sum of Squares of Special Elements.java @@ -0,0 +1,8 @@ +class Solution { + public int sumOfSquares(int[] nums) { + return IntStream.range(0, nums.length) + .filter(i -> nums.length % (i + 1) == 0) + .map(i -> nums[i] * nums[i]) + .sum(); + } +} From 433c62a177ec3f9403028295aa32399eac6cb811 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 16 Jul 2023 09:07:18 -0700 Subject: [PATCH 1207/1640] Updated Lowest Common Ancestor of a Binary Tree.java --- ...west Common Ancestor of a Binary Tree.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/Medium/Lowest Common Ancestor of a Binary Tree.java b/Medium/Lowest Common Ancestor of a Binary Tree.java index b49de19a..890c71e6 100644 --- a/Medium/Lowest Common Ancestor of a Binary Tree.java +++ b/Medium/Lowest Common Ancestor of a Binary Tree.java @@ -8,15 +8,21 @@ * } */ class Solution { - public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { - if (root == null || root == p || root == q) { - return root; + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { + if (root == null) { + return null; + } + if (root == p || root == q) { + return root; + } + TreeNode left = lowestCommonAncestor(root.left, p, q); + TreeNode right = lowestCommonAncestor(root.right, p, q); + if (left != null && right != null) { + return root; + } + if (left != null || right != null) { + return left != null ? left : right; + } + return null; } - TreeNode leftRoot = lowestCommonAncestor(root.left, p, q); - TreeNode rightRoot = lowestCommonAncestor(root.right, p, q); - if (leftRoot != null && rightRoot != null) { - return root; - } - return leftRoot != null ? leftRoot : rightRoot; - } } From b0b2dba5fab86f28fdc192673b44d2ccf0ccbe6a Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 16 Jul 2023 09:18:31 -0700 Subject: [PATCH 1208/1640] Added Lowest Common Ancestor of a Binary Tree II.java --- ...t Common Ancestor of a Binary Tree II.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 Medium/Lowest Common Ancestor of a Binary Tree II.java diff --git a/Medium/Lowest Common Ancestor of a Binary Tree II.java b/Medium/Lowest Common Ancestor of a Binary Tree II.java new file mode 100644 index 00000000..be4c28d2 --- /dev/null +++ b/Medium/Lowest Common Ancestor of a Binary Tree II.java @@ -0,0 +1,46 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { + TreeNode result = lca(root, p, q); + if (result == p) { + return checkIfNodeExist(p, q) ? p : null; + } + if (result == q) { + return checkIfNodeExist(q, p) ? q : null; + } + return result; + } + + private boolean checkIfNodeExist(TreeNode root, TreeNode target) { + if (root == target) { + return true; + } + if (root == null) { + return false; + } + return checkIfNodeExist(root.left, target) || checkIfNodeExist(root.right, target); + } + + private TreeNode lca(TreeNode root, TreeNode p, TreeNode q) { + if (root == null) { + return root; + } + if (root == p || root == q) { + return root; + } + TreeNode left = lca(root.left, p, q); + TreeNode right = lca(root.right, p, q); + if (left != null && right != null) { + return root; + } + return left != null ? left : right; + } +} From bed63498e394f69d47e6d733ab530b57db7030f8 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 16 Jul 2023 17:44:51 -0700 Subject: [PATCH 1209/1640] Updated Add Two Numbers II.java --- Medium/Add Two Numbers II.java | 68 +++++++++++++++++----------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/Medium/Add Two Numbers II.java b/Medium/Add Two Numbers II.java index fe08935f..59d717cb 100644 --- a/Medium/Add Two Numbers II.java +++ b/Medium/Add Two Numbers II.java @@ -9,40 +9,40 @@ * } */ class Solution { - public ListNode addTwoNumbers(ListNode l1, ListNode l2) { - ListNode revL1 = reverse(l1); - ListNode revL2 = reverse(l2); - ListNode dummy = new ListNode(0); - ListNode curr = dummy; - int carry = 0; - while (revL1 != null || revL2 != null || carry != 0) { - if (revL1 != null && revL2 != null) { - carry += revL1.val + revL2.val; - revL1 = revL1.next; - revL2 = revL2.next; - } else if (revL1 != null && revL2 == null) { - carry += revL1.val; - revL1 = revL1.next; - } else if (revL1 == null && revL2 != null) { - carry += revL2.val; - revL2 = revL2.next; - } - curr.next = new ListNode(carry % 10); - carry /= 10; - curr = curr.next; + public ListNode addTwoNumbers(ListNode l1, ListNode l2) { + ListNode rev1 = reverse(l1); + ListNode rev2 = reverse(l2); + ListNode dummy = new ListNode(); + ListNode curr = dummy; + int carry = 0; + while (rev1 != null || rev2 != null || carry > 0) { + if (rev1 != null && rev2 != null) { + carry += rev1.val + rev2.val; + rev1 = rev1.next; + rev2 = rev2.next; + } else if (rev1 == null && rev2 != null) { + carry += rev2.val; + rev2 = rev2.next; + } else if (rev1 != null && rev2 == null) { + carry += rev1.val; + rev1 = rev1.next; + } + curr.next = new ListNode(carry % 10); + curr = curr.next; + carry /= 10; + } + return reverse(dummy.next); } - return reverse(dummy.next); - } - - private ListNode reverse(ListNode root) { - ListNode curr = root; - ListNode prev = null; - while (curr != null) { - ListNode next = curr.next; - curr.next = prev; - prev = curr; - curr = next; + + private ListNode reverse(ListNode node) { + ListNode curr = node; + ListNode prev = null; + while (curr != null) { + ListNode next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; } - return prev; - } } From 86f10a6e61d9127420318e80ce5ba0a15bb64a74 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Tue, 18 Jul 2023 08:55:44 -0700 Subject: [PATCH 1210/1640] Updated LRU Cache.java --- Medium/LRU Cache.java | 131 +++++++++++++++++++++++------------------- 1 file changed, 73 insertions(+), 58 deletions(-) diff --git a/Medium/LRU Cache.java b/Medium/LRU Cache.java index e141637f..1e1b3ae6 100644 --- a/Medium/LRU Cache.java +++ b/Medium/LRU Cache.java @@ -1,69 +1,84 @@ class LRUCache { + + private final Map map; + private final int capacity; + private final Node head; + private final Node tail; + + public LRUCache(int capacity) { + this.capacity = capacity; + this.map = new HashMap<>(); + this.head = new Node(-1, -1); + this.tail = new Node(-1, -1); + this.head.next = this.tail; + this.tail.prev = this.head; + } + + public int get(int key) { + if (!map.containsKey(key)) { + return -1; + } + Node node = map.get(key); + removeNode(node); + addToFront(node); + return node.value; + } - private final Map map; - private final Node head; - private final Node tail; - private int capacity; + public void put(int key, int value) { + if (map.containsKey(key)) { + updateExistingKey(key, value); + return; + } + if (map.size() == this.capacity) { + Node leastUsed = tail.prev; + removeNode(leastUsed); + map.remove(leastUsed.key); + } + Node newNode = new Node(key, value); + addToFront(newNode); + map.put(key, newNode); + } - public LRUCache(int capacity) { - this.map = new HashMap<>(); - this.head = new Node(-1, -1); - this.tail = new Node(-1, -1); - head.next = tail; - tail.prev = head; - this.capacity = capacity; - } + private void updateExistingKey(int key, int value) { + Node node = map.get(key); + Node updatedNode = new Node(key, value); + removeNode(node); + addToFront(updatedNode); + map.put(key, updatedNode); + } - public int get(int key) { - if (!this.map.containsKey(key)) { - return -1; + private void removeNode(Node node) { + Node prevToNode = node.prev; + Node nextToNode = node.next; + prevToNode.next = nextToNode; + nextToNode.prev = prevToNode; } - Node node = this.map.get(key); - removeNode(node); - addNode(node); - return this.map.get(key).val; - } - public void put(int key, int value) { - if (!map.containsKey(key)) { - if (capacity == 0) { - removeNode(tail.prev); - } - } else { - removeNode(this.map.get(key)); + private void addToFront(Node node) { + Node nextToHead = head.next; + node.next = nextToHead; + nextToHead.prev = node; + node.prev = head; + head.next = node; } - addNode(new Node(key, value)); - } - - private void addNode(Node node) { - Node nextToHead = head.next; - head.next = node; - node.next = nextToHead; - nextToHead.prev = node; - node.prev = head; - this.map.put(node.key, node); - this.capacity--; - } - - private void removeNode(Node node) { - Node nextNode = node.next; - node.prev.next = nextNode; - nextNode.prev = node.prev; - this.map.remove(node.key); - this.capacity++; - } - private static class Node { - Node next; - Node prev; - int key; - int val; + private static class Node { - public Node(int key, int val) { - this.key = key; - this.val = val; - this.next = null; - this.prev = null; + private final int key; + private final int value; + private Node next; + private Node prev; + + public Node(int key, int value) { + this.key = key; + this.value = value; + } } - } } + +/** + * Your LRUCache object will be instantiated and called as such: + * LRUCache obj = new LRUCache(capacity); + * int param_1 = obj.get(key); + * obj.put(key,value); + */ From 77437e8516b3faa064f9b17fdb0ee5c7bb651cf9 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 19 Jul 2023 06:14:02 -0700 Subject: [PATCH 1211/1640] Added Non-overlapping Intervals.java --- Medium/Non Overlapping Intervals.java | 17 ----------------- Medium/Non-overlapping Intervals.java | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 Medium/Non Overlapping Intervals.java create mode 100644 Medium/Non-overlapping Intervals.java diff --git a/Medium/Non Overlapping Intervals.java b/Medium/Non Overlapping Intervals.java deleted file mode 100644 index cbdae574..00000000 --- a/Medium/Non Overlapping Intervals.java +++ /dev/null @@ -1,17 +0,0 @@ -class Solution { - public int eraseOverlapIntervals(int[][] intervals) { - if (intervals.length == 0) { - return 0; - } - Arrays.sort(intervals, Comparator.comparingInt(o -> o[1])); - int notRemoved = 1; - int end = intervals[0][1]; - for (int i = 1; i < intervals.length; i++) { - if (intervals[i][0] >= end) { - notRemoved++; - end = intervals[i][1]; - } - } - return intervals.length - notRemoved; - } -} diff --git a/Medium/Non-overlapping Intervals.java b/Medium/Non-overlapping Intervals.java new file mode 100644 index 00000000..c403b5ed --- /dev/null +++ b/Medium/Non-overlapping Intervals.java @@ -0,0 +1,17 @@ +class Solution { + public int eraseOverlapIntervals(int[][] intervals) { + Arrays.sort(intervals, Comparator.comparingInt((int[] o) -> o[1])); + int result = 0; + int minEndTime = Integer.MIN_VALUE; + for (int i = 0; i < intervals.length; i++) { + int start = intervals[i][0]; + int end = intervals[i][1]; + if (start >= minEndTime) { + minEndTime = end; + } else { + result++; + } + } + return result; + } +} From 030ccf5ff473cd0e0a80662abeddb6e0869637c3 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 19 Jul 2023 18:27:58 -0700 Subject: [PATCH 1212/1640] Updated Asteroid Collision.java --- Medium/Asteroid Collision.java | 49 +++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/Medium/Asteroid Collision.java b/Medium/Asteroid Collision.java index f739ff48..64a10bf3 100644 --- a/Medium/Asteroid Collision.java +++ b/Medium/Asteroid Collision.java @@ -1,26 +1,33 @@ class Solution { - public int[] asteroidCollision(int[] asteroids) { - Stack stack = new Stack<>(); - for (int asteroid : asteroids) { - if (asteroid < 0) { - while (!stack.isEmpty() && stack.peek() > 0 && stack.peek() < Math.abs(asteroid)) { - stack.pop(); + public int[] asteroidCollision(int[] asteroids) { + List result = new ArrayList<>(); + int idx = 0; + while (idx < asteroids.length && asteroids[idx] < 0) { + result.add(asteroids[idx++]); } - if (!stack.isEmpty() && stack.peek() > 0) { - if (stack.peek() == Math.abs(asteroid)) { - stack.pop(); - } - } else { - stack.push(asteroid); + while (idx < asteroids.length) { + if (asteroids[idx] > 0) { + result.add(asteroids[idx++]); + } else { + if (result.isEmpty() || result.get(result.size() - 1) < 0) { + result.add(asteroids[idx]); + } else { + while (!result.isEmpty() && + result.get(result.size() - 1) > 0 && + result.get(result.size() - 1) < Math.abs(asteroids[idx])) { + result.remove(result.size() - 1); + } + if (!result.isEmpty() && result.get(result.size() - 1) > 0) { + if (result.get(result.size() - 1) == Math.abs(asteroids[idx])) { + result.remove(result.size() - 1); + } + } else { + result.add(asteroids[idx]); + } + } + idx++; + } } - } else { - stack.push(asteroid); - } + return result.stream().mapToInt(Integer::valueOf).toArray(); } - int[] result = new int[stack.size()]; - for (int i = result.length - 1; i >= 0; i--) { - result[i] = stack.pop(); - } - return result; - } } From af2dcca53ab3bc59f08bd7fbcb62e1ebe600f472 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 22 Jul 2023 17:54:40 -0700 Subject: [PATCH 1213/1640] Added Check if Array is Good.java --- Easy/Check if Array is Good.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Easy/Check if Array is Good.java diff --git a/Easy/Check if Array is Good.java b/Easy/Check if Array is Good.java new file mode 100644 index 00000000..f0b86ddc --- /dev/null +++ b/Easy/Check if Array is Good.java @@ -0,0 +1,24 @@ +class Solution { + public boolean isGood(int[] nums) { + if (nums.length <= 1) { + return false; + } + int n = nums.length - 1; + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + for (int i = 1; i <= n; i++) { + if (!map.containsKey(i)) { + return false; + } + if (map.get(i) > 1 && i != n) { + return false; + } + if (i == n && map.get(i) != 2) { + return false; + } + } + return true; + } +} From 21cc646c90cf987d73508826557ab82bb150f205 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sat, 22 Jul 2023 18:33:40 -0700 Subject: [PATCH 1214/1640] Updated Ternary Expression Parser.java --- Medium/Ternary Expression Parser.java | 36 ++++++++++++--------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/Medium/Ternary Expression Parser.java b/Medium/Ternary Expression Parser.java index c0079881..6798336d 100644 --- a/Medium/Ternary Expression Parser.java +++ b/Medium/Ternary Expression Parser.java @@ -1,23 +1,19 @@ class Solution { - public String parseTernary(String expression) { - if (expression == null || expression.length() == 0) { - return ""; + public String parseTernary(String expression) { + Stack stack = new Stack<>(); + int idx = expression.length() - 1; + while (idx >= 0) { + char c = expression.charAt(idx); + if (c >= '0' && c <= '9' || c == 'T' || c == 'F') { + stack.push(c); + } else if (c == '?') { + char trueValue = stack.pop(); + char falseValue = stack.pop(); + stack.push(expression.charAt(idx - 1) == 'T' ? trueValue : falseValue); + idx--; + } + idx--; + } + return String.valueOf(stack.pop()); } - Deque stack = new LinkedList<>(); - int n = expression.length(); - for (int i = n - 1; i >= 0; i--) { - char c = expression.charAt(i); - if (!stack.isEmpty() && stack.peek() == '?') { - stack.pop(); // Pop ? - char first = stack.pop(); - stack.pop(); // Pop : - char second = stack.pop(); - stack.push(c == 'T' ? first : second); - } - else { - stack.push(c); - } - } - return String.valueOf(stack.peek()); - } } From 4feb8fec7c911f0370d16c68290d6cf54b6f9e49 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Sun, 23 Jul 2023 09:05:40 -0700 Subject: [PATCH 1215/1640] Added Split Strings by Separator.java --- Easy/Split Strings by Separator.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Split Strings by Separator.java diff --git a/Easy/Split Strings by Separator.java b/Easy/Split Strings by Separator.java new file mode 100644 index 00000000..2292a309 --- /dev/null +++ b/Easy/Split Strings by Separator.java @@ -0,0 +1,22 @@ +class Solution { + public List splitWordsBySeparator(List words, char separator) { + List result = new ArrayList<>(); + for (String word : words) { + int startIdx = 0; + int currIdx = 0; + while (currIdx < word.length()) { + if (word.charAt(currIdx) == separator) { + if (currIdx - startIdx > 0) { + result.add(word.substring(startIdx, currIdx)); + } + startIdx = currIdx + 1; + } + currIdx++; + } + if (currIdx - startIdx > 0) { + result.add(word.substring(startIdx, currIdx)); + } + } + return result; + } +} From 9cfef955c90e6afd14d08cc15b492c424b720e76 Mon Sep 17 00:00:00 2001 From: varunu28 Date: Mon, 24 Jul 2023 17:58:41 -0700 Subject: [PATCH 1216/1640] Added Peak Index in a Mountain Array.java --- Easy/Peak Index in a Mountain Array.java | 16 ---------------- Medium/Peak Index in a Mountain Array.java | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 16 deletions(-) delete mode 100644 Easy/Peak Index in a Mountain Array.java create mode 100644 Medium/Peak Index in a Mountain Array.java diff --git a/Easy/Peak Index in a Mountain Array.java b/Easy/Peak Index in a Mountain Array.java deleted file mode 100644 index 818dbf9c..00000000 --- a/Easy/Peak Index in a Mountain Array.java +++ /dev/null @@ -1,16 +0,0 @@ -class Solution { - public int peakIndexInMountainArray(int[] A) { - int low = 0; - int high = A.length - 1; - while (low < high) { - int mid = low + (high - low) / 2; - if (A[mid] < A[mid + 1]) { - low = mid + 1; - } - else { - high = mid; - } - } - return low; - } -} diff --git a/Medium/Peak Index in a Mountain Array.java b/Medium/Peak Index in a Mountain Array.java new file mode 100644 index 00000000..d496f7c4 --- /dev/null +++ b/Medium/Peak Index in a Mountain Array.java @@ -0,0 +1,15 @@ +class Solution { + public int peakIndexInMountainArray(int[] arr) { + int start = 0; + int end = arr.length - 1; + while (start < end) { + int mid = (start + end) / 2; + if (arr[mid] < arr[mid + 1]) { + start = mid + 1; + } else { + end = mid; + } + } + return start; + } +} From 6b73d50956da22787d7ca4d16a54d7ba11d79469 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 25 Jul 2023 18:44:14 -0700 Subject: [PATCH 1217/1640] Create Minimum Speed to Arrive on Time.java --- Medium/Minimum Speed to Arrive on Time.java | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Minimum Speed to Arrive on Time.java diff --git a/Medium/Minimum Speed to Arrive on Time.java b/Medium/Minimum Speed to Arrive on Time.java new file mode 100644 index 00000000..c5751902 --- /dev/null +++ b/Medium/Minimum Speed to Arrive on Time.java @@ -0,0 +1,26 @@ +class Solution { + public int minSpeedOnTime(int[] dist, double hour) { + int start = 1; + int end = 1000_000_0; + int minSpeed = -1; + while (start <= end) { + int mid = (start + end) / 2; + if (isPossible(dist, mid, hour)) { + minSpeed = mid; + end = mid - 1; + } else { + start = mid + 1; + } + } + return minSpeed; + } + + private boolean isPossible(int[] dist, int speed, double hour) { + double totalTime = 0.0; + for (int i = 0; i < dist.length; i++) { + double time = (double) dist[i] / (double) speed; + totalTime += (i == dist.length - 1 ? time : Math.ceil(time)); + } + return totalTime <= hour; + } +} From c04e0a8bb8873c44f4c56618153c538598536d60 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Jul 2023 08:30:30 -0700 Subject: [PATCH 1218/1640] Create Number of Employees Who Met the Target.java --- Easy/Number of Employees Who Met the Target.java | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Easy/Number of Employees Who Met the Target.java diff --git a/Easy/Number of Employees Who Met the Target.java b/Easy/Number of Employees Who Met the Target.java new file mode 100644 index 00000000..64f20287 --- /dev/null +++ b/Easy/Number of Employees Who Met the Target.java @@ -0,0 +1,5 @@ +class Solution { + public int numberOfEmployeesWhoMetTarget(int[] hours, int target) { + return (int) Arrays.stream(hours).filter(hour -> hour >= target).count(); + } +} From 51074092e35e2cdeb1559819326cea0d3480f512 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Jul 2023 08:31:03 -0700 Subject: [PATCH 1219/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index dd9ecf17..79190be6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 1300+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1400+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count From 5ca5bfc1ae8f36abe3b47301a0744ed971dbf395 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 31 Jul 2023 17:52:05 -0700 Subject: [PATCH 1220/1640] Update Combinations.java --- Medium/Combinations.java | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/Medium/Combinations.java b/Medium/Combinations.java index f5d99e2b..425b44ff 100644 --- a/Medium/Combinations.java +++ b/Medium/Combinations.java @@ -1,26 +1,22 @@ class Solution { - public List> combine(int n, int k) { - List> ans = new ArrayList<>(); - List curr = new ArrayList<>(); - helper(ans, curr, new boolean[n], k, 0); - return ans; - } - - private void helper(List> ans, List curr, boolean[] visited, int k, int idx) { - if (curr.size() == k) { - ans.add(new ArrayList<>(curr)); + public List> combine(int n, int k) { + List> result = new ArrayList<>(); + helper(result, n, k, new ArrayList<>(), 1); + return result; } - else { - for (int i = idx; i < visited.length; i++) { - if (visited[i]) { - continue; + + private void helper(List> result, int n, int k, List curr, int currValue) { + if (curr.size() == k) { + result.add(new ArrayList<>(curr)); + return; + } + for (int i = currValue; i <= n; i++) { + if (!curr.isEmpty() && curr.get(curr.size() - 1) >= i) { + continue; + } + curr.add(i); + helper(result, n, k, curr, currValue + 1); + curr.remove(curr.size() - 1); } - curr.add(i + 1); - visited[i] = true; - helper(ans, curr, visited, k, i + 1); - curr.remove(curr.size() - 1); - visited[i] = false; - } } - } } From 948b2fc4bbc7a43cae264bcb911ef6486683a52e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Aug 2023 17:47:26 -0700 Subject: [PATCH 1221/1640] Update Permutations.java --- Medium/Permutations.java | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/Medium/Permutations.java b/Medium/Permutations.java index 760b7452..61c86f42 100644 --- a/Medium/Permutations.java +++ b/Medium/Permutations.java @@ -1,23 +1,25 @@ class Solution { - public List> permute(int[] nums) { - List> result = new ArrayList<>(); - helper(nums, result, new ArrayList<>(), new boolean[nums.length]); - return result; - } - - private void helper(int[] nums, List> result, List curr, boolean[] visited) { - if (curr.size() == nums.length) { - result.add(new ArrayList<>(curr)); - } else { - for (int i = 0; i < nums.length; i++) { - if (!visited[i]) { - visited[i] = true; - curr.add(nums[i]); - helper(nums, result, curr, visited); - visited[i] = false; - curr.remove(curr.size() - 1); + public List> permute(int[] nums) { + List> result = new ArrayList<>(); + Set visited = new HashSet<>(); + permute(nums, result, new ArrayList<>(), visited); + return result; + } + + private void permute(int[] nums, List> result, List curr, Set visited) { + if (curr.size() == nums.length) { + result.add(new ArrayList<>(curr)); + return; + } + for (int i = 0; i < nums.length; i++) { + if (visited.contains(nums[i])) { + continue; + } + visited.add(nums[i]); + curr.add(nums[i]); + permute(nums, result, curr, visited); + visited.remove(nums[i]); + curr.remove(curr.size() - 1); } - } } - } } From f9008e0defd3aae742e88bd0126eb72ab47d0818 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Aug 2023 11:24:25 -0700 Subject: [PATCH 1222/1640] Update Letter Combinations of a Phone Number.java --- ...Letter Combinations of a Phone Number.java | 51 +++++++++++-------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/Medium/Letter Combinations of a Phone Number.java b/Medium/Letter Combinations of a Phone Number.java index 2c3a8c23..b145954b 100644 --- a/Medium/Letter Combinations of a Phone Number.java +++ b/Medium/Letter Combinations of a Phone Number.java @@ -1,25 +1,32 @@ class Solution { - - private final List LETTER_MAPPING = Arrays.asList("abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"); - - public List letterCombinations(String digits) { - List result = new ArrayList<>(); - helper(digits, 0, new StringBuilder(), result); - return result; - } - - private void helper(String digits, int idx, StringBuilder sb, List result) { - if (idx == digits.length()) { - if (sb.length() > 0) { - result.add(new String(sb.toString())); - } - return; - } - int mappingIdx = Character.getNumericValue(digits.charAt(idx)) - 2; - for (char c : LETTER_MAPPING.get(mappingIdx).toCharArray()) { - sb.append(c); - helper(digits, idx + 1, sb, result); - sb.deleteCharAt(sb.length() - 1); + private static final Map DIGIT_TO_CHAR_MAPPING = Map.of( + '2', "abc", + '3', "def", + '4', "ghi", + '5', "jkl", + '6', "mno", + '7', "pqrs", + '8', "tuv", + '9', "wxyz" + ); + + public List letterCombinations(String digits) { + List result = new ArrayList<>(); + letterCombinations(digits, 0, new StringBuilder(), result); + return result; + } + + private void letterCombinations(String digits, int idx, StringBuilder sb, List result) { + if (idx == digits.length()) { + if (!sb.isEmpty()) { + result.add(sb.toString()); + } + return; + } + for (char c : DIGIT_TO_CHAR_MAPPING.get(digits.charAt(idx)).toCharArray()) { + sb.append(c); + letterCombinations(digits, idx + 1, sb, result); + sb.deleteCharAt(sb.length() - 1); + } } - } } From 786047b7d738f735525f7ad5b418c902e52e2f20 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Aug 2023 18:36:51 -0700 Subject: [PATCH 1223/1640] Create Account Balance After Rounded Purchase.java --- Easy/Account Balance After Rounded Purchase.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/Account Balance After Rounded Purchase.java diff --git a/Easy/Account Balance After Rounded Purchase.java b/Easy/Account Balance After Rounded Purchase.java new file mode 100644 index 00000000..3342d18d --- /dev/null +++ b/Easy/Account Balance After Rounded Purchase.java @@ -0,0 +1,10 @@ +class Solution { + public int accountBalanceAfterPurchase(int purchaseAmount) { + if (purchaseAmount % 10 >= 5) { + purchaseAmount += 10 - purchaseAmount % 10; + } else { + purchaseAmount -= purchaseAmount % 10; + } + return 100 - purchaseAmount; + } +} From 6775fadb7f0d45f1eb7e2e44c87b2169280e6eec Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 6 Aug 2023 07:51:35 -0700 Subject: [PATCH 1224/1640] Create Faulty Keyboard.java --- Easy/Faulty Keyboard.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Faulty Keyboard.java diff --git a/Easy/Faulty Keyboard.java b/Easy/Faulty Keyboard.java new file mode 100644 index 00000000..500dc39b --- /dev/null +++ b/Easy/Faulty Keyboard.java @@ -0,0 +1,22 @@ +class Solution { + public String finalString(String s) { + Deque deque = new ArrayDeque<>(); + boolean flip = false; + for (char c : s.toCharArray()) { + if (c == 'i') { + flip = !flip; + } else { + if (flip) { + deque.addFirst(c); + } else { + deque.addLast(c); + } + } + } + StringBuilder sb = new StringBuilder(); + for (char c : deque){ + sb.append(c); + } + return flip ? sb.reverse().toString() : sb.toString(); + } +} From b44f362cb1c8add8f1f9a616c6e9ee77fcd1b842 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Aug 2023 06:40:10 -0700 Subject: [PATCH 1225/1640] Update Search a 2D Matrix.java --- Medium/Search a 2D Matrix.java | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Medium/Search a 2D Matrix.java b/Medium/Search a 2D Matrix.java index e7de2a1f..086454e0 100644 --- a/Medium/Search a 2D Matrix.java +++ b/Medium/Search a 2D Matrix.java @@ -1,21 +1,21 @@ class Solution { - public boolean searchMatrix(int[][] matrix, int target) { - int rowIdx = matrix.length - 1; - int colIdx = matrix[0].length - 1; - while (rowIdx >= 0 && colIdx >= 0) { - if (matrix[rowIdx][colIdx] == target) { - return true; - } - if (matrix[rowIdx][colIdx] > target) { - colIdx--; - if (colIdx < 0) { - colIdx = matrix[0].length - 1; - rowIdx--; + public boolean searchMatrix(int[][] matrix, int target) { + int row = matrix.length - 1; + int col = matrix[0].length - 1; + while (row >= 0 && col >= 0) { + if (matrix[row][col] == target) { + return true; + } + if (matrix[row][col] > target) { + col--; + if (col < 0) { + col = matrix[0].length - 1; + row--; + } + } else { + row--; + } } - } else { - rowIdx--; - } + return false; } - return false; - } } From 632f7892d835aa73b69cc100c0be01b64b6bcf09 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Aug 2023 06:48:18 -0700 Subject: [PATCH 1226/1640] Create Insert Greatest Common Divisors in Linked List.java --- ...eatest Common Divisors in Linked List.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Insert Greatest Common Divisors in Linked List.java diff --git a/Medium/Insert Greatest Common Divisors in Linked List.java b/Medium/Insert Greatest Common Divisors in Linked List.java new file mode 100644 index 00000000..6dcf5fd0 --- /dev/null +++ b/Medium/Insert Greatest Common Divisors in Linked List.java @@ -0,0 +1,29 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode insertGreatestCommonDivisors(ListNode head) { + ListNode curr = head; + while (curr != null && curr.next != null) { + ListNode gcdNode = new ListNode(findGcd(curr.val, curr.next.val)); + gcdNode.next = curr.next; + curr.next = gcdNode; + curr = gcdNode.next; + } + return head; + } + + private static int findGcd(int numOne, int numTwo) { + if (numOne == numTwo) { + return numOne; + } + return numOne > numTwo ? findGcd(numOne - numTwo, numTwo) : findGcd(numOne, numTwo - numOne); + } +} From ff3e17292ea34d3355e30e177ce06c6cc19ac742 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Aug 2023 13:43:37 -0700 Subject: [PATCH 1227/1640] Create Minimize the Maximum Difference of Pairs.java --- ...imize the Maximum Difference of Pairs.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Medium/Minimize the Maximum Difference of Pairs.java diff --git a/Medium/Minimize the Maximum Difference of Pairs.java b/Medium/Minimize the Maximum Difference of Pairs.java new file mode 100644 index 00000000..5ec67591 --- /dev/null +++ b/Medium/Minimize the Maximum Difference of Pairs.java @@ -0,0 +1,30 @@ +class Solution { + public int minimizeMax(int[] nums, int p) { + Arrays.sort(nums); + int n = nums.length; + int start = 0; + int end = nums[n - 1] - nums[0]; + while (start < end) { + int mid = (start + end) / 2; + if (countValidPairs(nums, mid) >= p) { + end = mid; + } else { + start = mid + 1; + } + } + return start; + } + + private static int countValidPairs(int[] nums, int limit) { + int idx = 0; + int count = 0; + while (idx < nums.length - 1) { + if (nums[idx + 1] - nums[idx] <= limit) { + count++; + idx++; + } + idx++; + } + return count; + } +} From 6e45a6a2254b08182704b42abeabb7b151ce9cb8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Aug 2023 10:02:12 -0700 Subject: [PATCH 1228/1640] Update Search in Rotated Sorted Array II.java --- Medium/Search in Rotated Sorted Array II.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/Medium/Search in Rotated Sorted Array II.java b/Medium/Search in Rotated Sorted Array II.java index 65081528..bcb34f99 100644 --- a/Medium/Search in Rotated Sorted Array II.java +++ b/Medium/Search in Rotated Sorted Array II.java @@ -1,28 +1,28 @@ class Solution { - public boolean search(int[] nums, int target) { - int start = 0; - int end = nums.length - 1; - while (start <= end) { - int mid = (start + end) / 2; - if (nums[mid] == target) { - return true; - } - if (nums[mid] < nums[end] || nums[mid] < nums[start]) { - if (target > nums[mid] && target <= nums[end]) { - start = mid + 1; - } else { - end = mid - 1; + public boolean search(int[] nums, int target) { + int start = 0; + int end = nums.length - 1; + while (start <= end) { + int mid = (start + end) / 2; + if (nums[mid] == target) { + return true; + } + if (nums[mid] < nums[end] || nums[mid] < nums[start]) { + if (target > nums[mid] && target <= nums[end]) { + start = mid + 1; + } else { + end = mid - 1; + } + } else if (nums[mid] > nums[start] || nums[mid] > nums[end]) { + if (target < nums[mid] && target >= nums[start]) { + end = mid - 1; + } else { + start = mid + 1; + } + } else { + end--; + } } - } else if (nums[mid] > nums[start] || nums[mid] > nums[end]) { - if (target < nums[mid] && target >= nums[start]) { - end = mid - 1; - } else { - start = mid + 1; - } - } else { - end--; - } + return false; } - return false; - } } From de9e6a09d0537b777eddbc4de9870c538d2a9d68 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Aug 2023 06:41:55 -0700 Subject: [PATCH 1229/1640] Create Max Pair Sum in an Array.java --- Easy/Max Pair Sum in an Array.java | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Easy/Max Pair Sum in an Array.java diff --git a/Easy/Max Pair Sum in an Array.java b/Easy/Max Pair Sum in an Array.java new file mode 100644 index 00000000..e7f6332e --- /dev/null +++ b/Easy/Max Pair Sum in an Array.java @@ -0,0 +1,54 @@ +class Solution { + public int maxSum(int[] nums) { + Map map = new HashMap<>(); + for (int num : nums) { + int maxDigit = getMaxDigit(num); + if (!map.containsKey(maxDigit)) { + map.put(maxDigit, new Pair()); + } + map.get(maxDigit).record(num); + } + int result = -1; + for (Integer key : map.keySet()) { + result = Math.max(result, map.get(key).getPairSum()); + } + return result; + } + + private int getMaxDigit(int num) { + int maxDigit = 0; + while (num > 0) { + maxDigit = Math.max(maxDigit, num % 10); + num /= 10; + } + return maxDigit; + } + + private static class Pair { + int maximum; + int secondMaximum; + + public Pair() { + maximum = -1; + secondMaximum = -1; + } + + public void record(int num) { + if (maximum < num) { + if (secondMaximum < maximum) { + secondMaximum = maximum; + } + maximum = num; + } else if (secondMaximum < num) { + secondMaximum = num; + } + } + + public int getPairSum() { + if (maximum == -1 || secondMaximum == -1) { + return -1; + } + return maximum + secondMaximum; + } + } +} From 3b753db3d0ca7a0be5b210cfa4dbea592d83ebde Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Aug 2023 13:53:41 -0700 Subject: [PATCH 1230/1640] Update Partition List.java --- Medium/Partition List.java | 59 ++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/Medium/Partition List.java b/Medium/Partition List.java index bb1f9dcf..a807608c 100644 --- a/Medium/Partition List.java +++ b/Medium/Partition List.java @@ -9,38 +9,35 @@ * } */ class Solution { - public ListNode partition(ListNode head, int x) { - ListNode lessThanHead = null; - ListNode lessThan = null; - ListNode greaterThan = null; - ListNode greaterThanHead = null; - while (head != null) { - ListNode nextNode = head.next; - if (head.val < x) { - if (lessThan == null) { - lessThan = head; - lessThanHead = lessThan; - } else { - lessThan.next = head; - lessThan = lessThan.next; + public ListNode partition(ListNode head, int x) { + ListNode lessHead = null; + ListNode lessCurr = null; + ListNode greaterHead = null; + ListNode greaterCurr = null; + while (head != null) { + if (head.val < x) { + if (lessCurr == null) { + lessCurr = new ListNode(head.val); + lessHead = lessCurr; + } else { + lessCurr.next = new ListNode(head.val); + lessCurr = lessCurr.next; + } + } else { + if (greaterCurr == null) { + greaterCurr = new ListNode(head.val); + greaterHead = greaterCurr; + } else { + greaterCurr.next = new ListNode(head.val); + greaterCurr = greaterCurr.next; + } + } + head = head.next; } - lessThan.next = null; - } else { - if (greaterThan == null) { - greaterThan = head; - greaterThanHead = greaterThan; - } else { - greaterThan.next = head; - greaterThan = greaterThan.next; + if (lessHead == null) { + return greaterHead; } - greaterThan.next = null; - } - head = nextNode; + lessCurr.next = greaterHead; + return lessHead; } - if (lessThanHead == null || greaterThanHead == null) { - return lessThan == null ? greaterThanHead : lessThanHead; - } - lessThan.next = greaterThanHead; - return lessThanHead; - } } From 265791bdf2285190ac5b840c708804856701c679 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 16 Aug 2023 11:51:52 -0700 Subject: [PATCH 1231/1640] Update Sliding Window Maximum.java --- Hard/Sliding Window Maximum.java | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/Hard/Sliding Window Maximum.java b/Hard/Sliding Window Maximum.java index 2aafc22d..635720b8 100644 --- a/Hard/Sliding Window Maximum.java +++ b/Hard/Sliding Window Maximum.java @@ -1,25 +1,18 @@ class Solution { public int[] maxSlidingWindow(int[] nums, int k) { + Deque dequeue = new ArrayDeque<>(); int[] result = new int[nums.length - k + 1]; - int start = 0; - int end = 0; - Deque queue = new ArrayDeque<>(); - while (end < nums.length) { - // Remove elements from end of queue as long as the value at end of queue is less - // than the current value - while (!queue.isEmpty() && nums[queue.peekLast()] < nums[end]) { - queue.removeLast(); + for (int i = 0; i < nums.length; i++) { + if (!dequeue.isEmpty() && dequeue.getFirst() == i - k) { + dequeue.removeFirst(); } - queue.add(end); - // Remove the first element from the queue if we have already passed it in our range - if (start > queue.peekFirst()) { - queue.removeFirst(); + while (!dequeue.isEmpty() && nums[i] > nums[dequeue.getLast()]) { + dequeue.removeLast(); } - // Update result if our window is at least of size k - if (end + 1 >= k) { - result[start++] = nums[queue.peekFirst()]; + dequeue.addLast(i); + if (i >= k - 1) { + result[i - k + 1] = nums[dequeue.getFirst()]; } - end++; } return result; } From 0568a1ad8acc18f44337c12e043a4bbe103829d8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 18 Aug 2023 09:44:20 -0700 Subject: [PATCH 1232/1640] Update Maximal Network Rank.java --- Medium/Maximal Network Rank.java | 34 +++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/Medium/Maximal Network Rank.java b/Medium/Maximal Network Rank.java index 211a7c8e..e5c3f20c 100644 --- a/Medium/Maximal Network Rank.java +++ b/Medium/Maximal Network Rank.java @@ -1,19 +1,21 @@ class Solution { - public int maximalNetworkRank(int n, int[][] roads) { - boolean[][] connected = new boolean[n][n]; - int[] count = new int[n]; - for (int[] road : roads) { - count[road[0]]++; - count[road[1]]++; - connected[road[0]][road[1]] = true; - connected[road[1]][road[0]] = true; + public int maximalNetworkRank(int n, int[][] roads) { + Map> map = new HashMap<>(); + for (int[] road : roads) { + map.computeIfAbsent(road[0], k -> new HashSet<>()).add(road[1]); + map.computeIfAbsent(road[1], k -> new HashSet<>()).add(road[0]); + } + int maximumRank = 0; + for (int i = 0; i < n; i++) { + int iRank = map.getOrDefault(i, new HashSet<>()).size(); + for (int j = i + 1; j < n; j++) { + int combinedRank = iRank + map.getOrDefault(j, new HashSet<>()).size(); + if (map.getOrDefault(j, new HashSet<>()).contains(i)) { + combinedRank--; + } + maximumRank = Math.max(maximumRank, combinedRank); + } + } + return maximumRank; } - int maxCount = 0; - for (int i = 0; i < n; i++) { - for (int j = i + 1; j < n; j++) { - maxCount = Math.max(maxCount, count[i] + count[j] - (connected[i][j] ? 1 : 0)); - } - } - return maxCount; - } } From 04946d7f6cca3822ae65c6e5d9c1b62a3b9543d3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Aug 2023 12:27:23 -0700 Subject: [PATCH 1233/1640] Create Sort Items by Groups Respecting Dependencies.java --- ...ems by Groups Respecting Dependencies.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Hard/Sort Items by Groups Respecting Dependencies.java diff --git a/Hard/Sort Items by Groups Respecting Dependencies.java b/Hard/Sort Items by Groups Respecting Dependencies.java new file mode 100644 index 00000000..38c531a3 --- /dev/null +++ b/Hard/Sort Items by Groups Respecting Dependencies.java @@ -0,0 +1,62 @@ +class Solution { + public int[] sortItems(int n, int m, int[] group, List> beforeItems) { + int groupId = m; + for (int i = 0; i < group.length; i++) { + if (group[i] == -1) { + group[i] = groupId++; + } + } + Map> nodeToDependentNodes = new HashMap<>(); + Map> groupToDependentGroups = new HashMap<>(); + int[] itemIndegree = new int[n]; + int[] groupIndegree = new int[groupId]; + for (int i = 0; i < beforeItems.size(); i++) { + for (Integer prev : beforeItems.get(i)) { + nodeToDependentNodes.computeIfAbsent(prev, k -> new ArrayList<>()).add(i); + itemIndegree[i]++; + if (group[i] != group[prev]) { + groupToDependentGroups.computeIfAbsent(group[prev], k -> new ArrayList<>()).add(group[i]); + groupIndegree[group[i]]++; + } + } + } + List itemOrdering = topologicalSort(nodeToDependentNodes, itemIndegree); + List groupOrdering = topologicalSort(groupToDependentGroups, groupIndegree); + if (itemOrdering.isEmpty() || groupOrdering.isEmpty()) { + return new int[]{}; + } + Map> orderedGroups = new HashMap<>(); + for (Integer item : itemOrdering) { + orderedGroups.computeIfAbsent(group[item], k -> new ArrayList<>()).add(item); + } + int[] result = new int[n]; + int idx = 0; + for (Integer groupNo : groupOrdering) { + for (Integer item : orderedGroups.getOrDefault(groupNo, new ArrayList<>())) { + result[idx++] = item; + } + } + return result; + } + + private static List topologicalSort(Map> graph, int[] indegree) { + List visited = new ArrayList<>(); + Queue queue = new LinkedList<>(); + for (int i = 0; i < indegree.length; i++) { + if (indegree[i] == 0) { + queue.add(i); + } + } + while (!queue.isEmpty()) { + int removed = queue.remove(); + visited.add(removed); + for (Integer conn : graph.getOrDefault(removed, new ArrayList<>())) { + indegree[conn]--; + if (indegree[conn] == 0) { + queue.add(conn); + } + } + } + return visited.size() == indegree.length ? visited : new ArrayList<>(); + } +} From cc431382291b2cf01b8dce7088698cd7759dce6e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Aug 2023 17:34:10 -0700 Subject: [PATCH 1234/1640] Update Repeated Substring Pattern.java --- Easy/Repeated Substring Pattern.java | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/Easy/Repeated Substring Pattern.java b/Easy/Repeated Substring Pattern.java index 79ea250c..fc817f7e 100644 --- a/Easy/Repeated Substring Pattern.java +++ b/Easy/Repeated Substring Pattern.java @@ -1,19 +1,16 @@ class Solution { - public boolean repeatedSubstringPattern(String s) { - int n = s.length(); - for (int i = n / 2; i >= 1; i--) { - if (n % i == 0) { - int count = n / i; - StringBuilder sb = new StringBuilder(); - String sub = s.substring(0, i); - while (count-- > 0) { - sb.append(sub); + public boolean repeatedSubstringPattern(String s) { + int n = s.length(); + for (int i = n / 2; i > 0; i--) { + if (n % i == 0) { + int count = n / i; + String substring = s.substring(0, i); + String repeatedString = substring.repeat(count); + if (repeatedString.equals(s)) { + return true; + } + } } - if (sb.toString().equals(s)) { - return true; - } - } + return false; } - return false; - } } From 36aec1a994a56f82e26f90c46f75696fb3ef8646 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Aug 2023 17:36:41 -0700 Subject: [PATCH 1235/1640] Create Check if a String Is an Acronym of Words.java --- Easy/Check if a String Is an Acronym of Words.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Check if a String Is an Acronym of Words.java diff --git a/Easy/Check if a String Is an Acronym of Words.java b/Easy/Check if a String Is an Acronym of Words.java new file mode 100644 index 00000000..5608783c --- /dev/null +++ b/Easy/Check if a String Is an Acronym of Words.java @@ -0,0 +1,9 @@ +class Solution { + public boolean isAcronym(List words, String s) { + StringBuilder sb = new StringBuilder(); + for (String word : words) { + sb.append(word.charAt(0)); + } + return sb.toString().equals(s); + } +} From 13c88ecbdab6dcac0d33dd7698f12528c6498745 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Aug 2023 07:31:03 -0700 Subject: [PATCH 1236/1640] Create Count Pairs Whose Sum is Less than Target.java --- ...nt Pairs Whose Sum is Less than Target.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Count Pairs Whose Sum is Less than Target.java diff --git a/Easy/Count Pairs Whose Sum is Less than Target.java b/Easy/Count Pairs Whose Sum is Less than Target.java new file mode 100644 index 00000000..90c31c23 --- /dev/null +++ b/Easy/Count Pairs Whose Sum is Less than Target.java @@ -0,0 +1,18 @@ +class Solution { + public int countPairs(List nums, int target) { + Collections.sort(nums); + int start = 0; + int end = nums.size() - 1; + int count = 0; + while (start < end) { + int sum = nums.get(start) + nums.get(end); + if (sum < target) { + count += end - start; + start++; + } else { + end--; + } + } + return count; + } +} From 94d6c7631e9ad5154c03b87cec621a02574c7642 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Aug 2023 16:52:21 -0700 Subject: [PATCH 1237/1640] Create Determine the Minimum Sum of a k-avoiding Array.java --- ... the Minimum Sum of a k-avoiding Array.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Determine the Minimum Sum of a k-avoiding Array.java diff --git a/Medium/Determine the Minimum Sum of a k-avoiding Array.java b/Medium/Determine the Minimum Sum of a k-avoiding Array.java new file mode 100644 index 00000000..3eab331f --- /dev/null +++ b/Medium/Determine the Minimum Sum of a k-avoiding Array.java @@ -0,0 +1,18 @@ +class Solution { + public int minimumSum(int n, int k) { + Set set = new HashSet<>(); + set.add(1); + int sum = 1; + int next = 2; + while (n > 1) { + if (set.contains(k - next)) { + next++; + continue; + } + set.add(next); + sum += next++; + n--; + } + return sum; + } +} From 3ab5cb5cc7d9c0d0826268f91ef150d50333c5b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 22 Aug 2023 17:00:54 -0700 Subject: [PATCH 1238/1640] Create Make String a Subsequence Using Cyclic Increments.java --- ... a Subsequence Using Cyclic Increments.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Make String a Subsequence Using Cyclic Increments.java diff --git a/Medium/Make String a Subsequence Using Cyclic Increments.java b/Medium/Make String a Subsequence Using Cyclic Increments.java new file mode 100644 index 00000000..1247a755 --- /dev/null +++ b/Medium/Make String a Subsequence Using Cyclic Increments.java @@ -0,0 +1,18 @@ +class Solution { + public boolean canMakeSubsequence(String str1, String str2) { + int idxOne = 0; + int idxTwo = 0; + while (idxOne < str1.length() && idxTwo < str2.length()) { + if (str1.charAt(idxOne) == str2.charAt(idxTwo) || + nextCyclicChar(str1.charAt(idxOne)) == str2.charAt(idxTwo)) { + idxTwo++; + } + idxOne++; + } + return idxTwo == str2.length(); + } + + private static char nextCyclicChar(char c) { + return c == 'z' ? 'a' : (char) (c + 1); + } +} From 8c4f2cfb09055746c83be881ed85de019ee11c03 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Aug 2023 13:12:46 -0700 Subject: [PATCH 1239/1640] Update Maximum Length of Pair Chain.java --- Medium/Maximum Length of Pair Chain.java | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/Medium/Maximum Length of Pair Chain.java b/Medium/Maximum Length of Pair Chain.java index 1ad30427..cb98b670 100644 --- a/Medium/Maximum Length of Pair Chain.java +++ b/Medium/Maximum Length of Pair Chain.java @@ -1,22 +1,14 @@ class Solution { public int findLongestChain(int[][] pairs) { - Arrays.sort(pairs, new Comparator() { - @Override - public int compare(int[] o1, int[] o2) { - return o1[0] - o2[0]; - } - }); - - int[] temp = new int[pairs.length]; - Arrays.fill(temp, 1); - for (int i=1; i a[1])); + int curr = Integer.MIN_VALUE; + int result = 0; + for (int[] pair : pairs) { + if (pair[0] > curr) { + result++; + curr = pair[1]; } } - - return Arrays.stream(temp).max().getAsInt(); + return result; } } From d68bc4f512443e0d54e7e32f5d95c48871b3fc57 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Aug 2023 07:17:35 -0700 Subject: [PATCH 1240/1640] Create Furthest Point From Origin.java --- Easy/Furthest Point From Origin.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Furthest Point From Origin.java diff --git a/Easy/Furthest Point From Origin.java b/Easy/Furthest Point From Origin.java new file mode 100644 index 00000000..d7abca92 --- /dev/null +++ b/Easy/Furthest Point From Origin.java @@ -0,0 +1,14 @@ +class Solution { + public int furthestDistanceFromOrigin(String moves) { + int emptyCount = 0; + int direction = 0; + for (char c : moves.toCharArray()) { + if (c == '_') { + emptyCount++; + } else { + direction += c == 'L' ? -1 : 1; + } + } + return Math.abs(direction) + emptyCount; + } +} From 92023ae957e8647e1b4fdae4ff444b17ec54878c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Aug 2023 17:44:26 -0700 Subject: [PATCH 1241/1640] Update Implement Stack using Queues.java --- Easy/Implement Stack using Queues.java | 87 +++++++++++++------------- 1 file changed, 43 insertions(+), 44 deletions(-) diff --git a/Easy/Implement Stack using Queues.java b/Easy/Implement Stack using Queues.java index 43c62339..d93ce3ae 100644 --- a/Easy/Implement Stack using Queues.java +++ b/Easy/Implement Stack using Queues.java @@ -1,52 +1,51 @@ class MyStack { - - private Queue primaryQueue; - private Queue secondaryQueue; - - public MyStack() { - this.primaryQueue = new LinkedList<>(); - this.secondaryQueue = new LinkedList<>(); - } + + private final Queue mainQueue; + private final Queue backupQueue; - public void push(int x) { - this.primaryQueue.add(x); - } - - public int pop() { - int result = moveFromPrimaryToSecondary(); - moveFromSecondaryToPrimary(true); - return result; - } - - public int top() { - int result = moveFromPrimaryToSecondary(); - moveFromSecondaryToPrimary(false); - return result; - } - - public boolean empty() { - return this.primaryQueue.isEmpty(); - } - - private int moveFromPrimaryToSecondary() { - int last = this.primaryQueue.peek(); - while (!this.primaryQueue.isEmpty()) { - last = this.primaryQueue.peek(); - this.secondaryQueue.add(this.primaryQueue.remove()); + public MyStack() { + this.mainQueue = new LinkedList<>(); + this.backupQueue = new LinkedList<>(); + } + + public void push(int x) { + this.mainQueue.add(x); + } + + public int pop() { + int lastElement = moveToBackupQueue(); + moveToMainQueue(true); + return lastElement; + } + + public int top() { + int lastElement = moveToBackupQueue(); + moveToMainQueue(false); + return lastElement; + } + + public boolean empty() { + return this.mainQueue.isEmpty(); } - return last; - } - - private void moveFromSecondaryToPrimary(boolean removeLast) { - while (this.secondaryQueue.size() > 1) { - this.primaryQueue.add(this.secondaryQueue.remove()); + + private int moveToBackupQueue() { + int lastElement = this.mainQueue.peek(); + while (!this.mainQueue.isEmpty()) { + lastElement = this.mainQueue.peek(); + this.backupQueue.add(this.mainQueue.poll()); + } + return lastElement; } - if (removeLast) { - this.secondaryQueue.remove(); - } else { - this.primaryQueue.add(this.secondaryQueue.remove()); + + private void moveToMainQueue(boolean removeLast) { + int sizeLimit = removeLast ? 1 : 0; + while (this.backupQueue.size() > sizeLimit) { + this.mainQueue.add(this.backupQueue.poll()); + } + if (removeLast) { + this.backupQueue.remove(); + } } - } } /** From 455fcb85c8c55a2a90bc8bd9a2224cd5458f82a2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 27 Aug 2023 17:44:46 -0700 Subject: [PATCH 1242/1640] Update Implement Stack using Queues.java From e361d66356431914ebfd507b9924188e1a7f2ffd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Aug 2023 08:58:42 -0700 Subject: [PATCH 1243/1640] Create Minimum Penalty for a Shop.java --- Medium/Minimum Penalty for a Shop.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Minimum Penalty for a Shop.java diff --git a/Medium/Minimum Penalty for a Shop.java b/Medium/Minimum Penalty for a Shop.java new file mode 100644 index 00000000..e5c5eaa9 --- /dev/null +++ b/Medium/Minimum Penalty for a Shop.java @@ -0,0 +1,16 @@ +class Solution { + public int bestClosingTime(String customers) { + int n = customers.length(); + int minPenalty = 0; + int currPenalty = 0; + int minPenaltyHour = 0; + for (int i = 0; i < n; i++) { + currPenalty += customers.charAt(i) == 'Y' ? -1 : 1; + if (currPenalty < minPenalty) { + minPenaltyHour = i + 1; + minPenalty = currPenalty; + } + } + return minPenaltyHour; + } +} From d9c6a40491a4fff7ce976d4252c0a15b30656e49 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 30 Aug 2023 08:02:04 -0700 Subject: [PATCH 1244/1640] Create Minimum Replacements to Sort the Array.java --- Hard/Minimum Replacements to Sort the Array.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Hard/Minimum Replacements to Sort the Array.java diff --git a/Hard/Minimum Replacements to Sort the Array.java b/Hard/Minimum Replacements to Sort the Array.java new file mode 100644 index 00000000..1c3cfc4f --- /dev/null +++ b/Hard/Minimum Replacements to Sort the Array.java @@ -0,0 +1,14 @@ +class Solution { + public long minimumReplacement(int[] nums) { + int n = nums.length; + long numOfOperations = 0; + for (int i = n - 2; i >= 0; i--) { + if (nums[i] > nums[i + 1]) { + long numElements = (long)(nums[i] + nums[i + 1] - 1) / (long)nums[i + 1]; + numOfOperations += numElements - 1; + nums[i] = nums[i] / (int)numElements; + } + } + return numOfOperations; + } +} From 66a79a031f220ba6f295a9db2bb69321aa76a9f9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Sep 2023 09:53:25 -0700 Subject: [PATCH 1245/1640] Update Counting Bits.java --- Easy/Counting Bits.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Easy/Counting Bits.java b/Easy/Counting Bits.java index 4d948810..4b5c69fa 100644 --- a/Easy/Counting Bits.java +++ b/Easy/Counting Bits.java @@ -1,9 +1,9 @@ class Solution { - public int[] countBits(int n) { - int[] numofOnes = new int[n + 1]; - for (int i = 1; i <= n; i++) { - numofOnes[i] = numofOnes[i / 2] + i % 2; + public int[] countBits(int n) { + int[] result = new int[n + 1]; + for (int i = 1; i <= n; i++) { + result[i] = result[i / 2] + i % 2; + } + return result; } - return numofOnes; - } } From 475f7f8e8f7c252b2ee98098364ea672f1339071 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Sep 2023 14:58:05 -0700 Subject: [PATCH 1246/1640] Create Check if Strings Can be Made Equal With Operations I.java --- ...k if Strings Can be Made Equal With Operations I.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Check if Strings Can be Made Equal With Operations I.java diff --git a/Easy/Check if Strings Can be Made Equal With Operations I.java b/Easy/Check if Strings Can be Made Equal With Operations I.java new file mode 100644 index 00000000..cc99065a --- /dev/null +++ b/Easy/Check if Strings Can be Made Equal With Operations I.java @@ -0,0 +1,9 @@ +class Solution { + public boolean canBeEqual(String s1, String s2) { + boolean firstSwap = (s1.charAt(0) == s2.charAt(0) && s1.charAt(2) == s2.charAt(2)) || + (s1.charAt(2) == s2.charAt(0) && s1.charAt(0) == s2.charAt(2)); + boolean secondSwap = (s1.charAt(1) == s2.charAt(1) && s1.charAt(3) == s2.charAt(3)) || + (s1.charAt(1) == s2.charAt(3) && s1.charAt(3) == s2.charAt(1)); + return firstSwap && secondSwap; + } +} From b850056ed748167424052d4655f24d9c9cb3687f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Sep 2023 15:21:15 -0700 Subject: [PATCH 1247/1640] Create Check if Strings Can be Made Equal With Operations II.java --- ... Can be Made Equal With Operations II.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Medium/Check if Strings Can be Made Equal With Operations II.java diff --git a/Medium/Check if Strings Can be Made Equal With Operations II.java b/Medium/Check if Strings Can be Made Equal With Operations II.java new file mode 100644 index 00000000..7507b140 --- /dev/null +++ b/Medium/Check if Strings Can be Made Equal With Operations II.java @@ -0,0 +1,21 @@ +class Solution { + public boolean checkStrings(String s1, String s2) { + int[] odd = new int[26]; + int[] even = new int[26]; + for (int i = 0; i < s1.length(); i++) { + if (i % 2 == 0) { + even[s1.charAt(i) - 'a']++; + even[s2.charAt(i) - 'a']--; + } else { + odd[s1.charAt(i) - 'a']++; + odd[s2.charAt(i) - 'a']--; + } + } + for (int i = 0; i < 26; i++) { + if (odd[i] != 0 || even[i] != 0) { + return false; + } + } + return true; + } +} From 4b0fa539231b11fde6b3aba232bb0d712252c20a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 5 Sep 2023 12:48:01 -0700 Subject: [PATCH 1248/1640] Create Count Symmetric Integers.java --- Easy/Count Symmetric Integers.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Count Symmetric Integers.java diff --git a/Easy/Count Symmetric Integers.java b/Easy/Count Symmetric Integers.java new file mode 100644 index 00000000..f32301e1 --- /dev/null +++ b/Easy/Count Symmetric Integers.java @@ -0,0 +1,17 @@ +class Solution { + public int countSymmetricIntegers(int low, int high) { + int result = 0; + for (int i = low; i <= high; i++) { + String s = String.valueOf(i); + int diff = 0; + int n = s.length(); + for (int j = 0; j < n / 2; j++) { + diff += s.charAt(j) - s.charAt(n - j - 1); + } + if (n % 2 == 0 && diff == 0) { + result++; + } + } + return result; + } +} From 5642e0cadbeeb10bcbaa534f2d74c7645915bb20 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Sep 2023 07:35:18 -0700 Subject: [PATCH 1249/1640] Update Split Linked List in Parts.java --- Medium/Split Linked List in Parts.java | 40 ++++++++++++++------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/Medium/Split Linked List in Parts.java b/Medium/Split Linked List in Parts.java index 30121c82..2fdd787c 100644 --- a/Medium/Split Linked List in Parts.java +++ b/Medium/Split Linked List in Parts.java @@ -7,25 +7,27 @@ * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } -*/ + */ class Solution { - public ListNode[] splitListToParts(ListNode head, int k) { - ListNode[] arr = new ListNode[k]; - int nodeLength = 0; - for (ListNode curr = head; curr != null; curr = curr.next) { - nodeLength++; + public ListNode[] splitListToParts(ListNode head, int k) { + int length = 0; + ListNode curr = head; + while (curr != null) { + length++; + curr = curr.next; + } + ListNode[] splits = new ListNode[k]; + int elementsPerPart = length / k; + int partsWithExtra = length % k; + ListNode prev = null; + for (int i = 0; i < k && head != null; i++, partsWithExtra--) { + splits[i] = head; + for (int j = 0; j < elementsPerPart + (partsWithExtra > 0 ? 1 : 0); j++) { + prev = head; + head = head.next; + } + prev.next = null; + } + return splits; } - int n = nodeLength / k; - int remaining = nodeLength % k; - ListNode prev = null; - for (int i = 0; i < k && head != null; i++, remaining--) { - arr[i] = head; - for (int j = 0; j < n + (remaining > 0 ? 1 : 0); j++) { - prev = head; - head = head.next; - } - prev.next = null; - } - return arr; - } } From c9d4f1a65cbf4bdc3919d1040aa160247e806514 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Sep 2023 14:54:20 -0700 Subject: [PATCH 1250/1640] Create Minimum Operations to Make a Special Number.java --- ...m Operations to Make a Special Number.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Minimum Operations to Make a Special Number.java diff --git a/Medium/Minimum Operations to Make a Special Number.java b/Medium/Minimum Operations to Make a Special Number.java new file mode 100644 index 00000000..20f250fc --- /dev/null +++ b/Medium/Minimum Operations to Make a Special Number.java @@ -0,0 +1,25 @@ +class Solution { + + private final int NOT_FOUND_VALUE = 100_000; + + public int minimumOperations(String num) { + Integer[][] dp = new Integer[100][25]; + return helper(num, 0, 0, dp); + } + + private int helper(String num, int idx, int mod, Integer[][] dp) { + if (idx == num.length()) { + if (mod == 0) { + return 0; + } + return NOT_FOUND_VALUE; + } + if (dp[idx][mod] != null) { + return dp[idx][mod]; + } + int take = helper(num, idx + 1, (mod * 10 + (num.charAt(idx) - '0')) % 25, dp); + int remove = 1 + helper(num, idx + 1, mod, dp); + dp[idx][mod] = Math.min(take, remove); + return dp[idx][mod]; + } +} From b234fe82a97a0e0eb0ac48c08e11ff4593befaf2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Sep 2023 17:16:17 -0700 Subject: [PATCH 1251/1640] Update Reverse Linked List II.java --- Medium/Reverse Linked List II.java | 72 +++++++++++++++--------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/Medium/Reverse Linked List II.java b/Medium/Reverse Linked List II.java index 53edc4e4..3835dbcd 100644 --- a/Medium/Reverse Linked List II.java +++ b/Medium/Reverse Linked List II.java @@ -9,41 +9,43 @@ * } */ class Solution { - public ListNode reverseBetween(ListNode head, int left, int right) { - ListNode prev = null; - ListNode start = head; - for (int i = 1; i < left; i++) { - prev = start; - start = start.next; + public ListNode reverseBetween(ListNode head, int left, int right) { + ListNode curr = head; + ListNode prevToLeft = null; + for (int i = 1; i < left; i++) { + prevToLeft = curr; + curr = curr.next; + } + ListNode nextToLeft = prevToLeft == null ? head : prevToLeft.next; + for (int i = left; i < right; i++) { + curr = curr.next; + } + ListNode nextToRight = curr.next; + curr.next = null; + if (prevToLeft != null) { + prevToLeft.next = null; + } + ListNode reversedStart = reverse(nextToLeft); + if (prevToLeft != null) { + prevToLeft.next = reversedStart; + } + curr = reversedStart; + while (curr.next != null) { + curr = curr.next; + } + curr.next = nextToRight; + return prevToLeft == null ? reversedStart : head; } - ListNode end = start; - for (int i = left; i < right; i++) { - end = end.next; + + private ListNode reverse(ListNode head) { + ListNode prev = null; + ListNode curr = head; + while (curr != null) { + ListNode next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; } - ListNode nextToEnd = end.next; - end.next = null; - ListNode reverseStart = reverse(start); - if (prev != null) { - prev.next = reverseStart; - } - ListNode curr = reverseStart; - while (curr.next != null) { - curr = curr.next; - } - curr.next = nextToEnd; - return prev == null ? reverseStart : head; - } - - private ListNode reverse(ListNode node) { - ListNode prev = null; - ListNode next = null; - ListNode curr = node; - while (curr != null) { - next = curr.next; - curr.next = prev; - prev = curr; - curr = next; - } - return prev; - } } From dadb59b7d7253a89f042fc39a3d9529fad48ccc5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Sep 2023 07:15:39 -0700 Subject: [PATCH 1252/1640] Create Maximum Sum of Almost Unique Subarray.java --- ...Maximum Sum of Almost Unique Subarray.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/Maximum Sum of Almost Unique Subarray.java diff --git a/Medium/Maximum Sum of Almost Unique Subarray.java b/Medium/Maximum Sum of Almost Unique Subarray.java new file mode 100644 index 00000000..1d9facff --- /dev/null +++ b/Medium/Maximum Sum of Almost Unique Subarray.java @@ -0,0 +1,28 @@ +class Solution { + public long maxSum(List nums, int m, int k) { + long result = 0; + long currSum = 0; + Map frequencyMap = new HashMap<>(); + int uniqueCount = 0; + for (int i = 0; i < nums.size(); i++) { + int curr = nums.get(i); + frequencyMap.put(curr, frequencyMap.getOrDefault(curr, 0) + 1); + if (frequencyMap.get(curr) == 1) { + uniqueCount++; + } + currSum += curr; + if (i >= k - 1) { + if (uniqueCount >= m) { + result = Math.max(result, currSum); + } + int temp = nums.get(i - k + 1); + frequencyMap.put(temp, frequencyMap.getOrDefault(temp, 0) - 1); + if (frequencyMap.get(temp) == 0) { + uniqueCount--; + } + currSum -= temp; + } + } + return result; + } +} From 1f561e474e24e63411218f05e4fdfc11e049434a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 8 Sep 2023 10:59:22 -0700 Subject: [PATCH 1253/1640] Create Rearrange String k Distance Apart.java --- Hard/Rearrange String k Distance Apart.java | 26 +++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/Rearrange String k Distance Apart.java diff --git a/Hard/Rearrange String k Distance Apart.java b/Hard/Rearrange String k Distance Apart.java new file mode 100644 index 00000000..da212877 --- /dev/null +++ b/Hard/Rearrange String k Distance Apart.java @@ -0,0 +1,26 @@ +class Solution { + public String rearrangeString(String s, int k) { + Map map = new HashMap<>(); + for (char c : s.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); + } + PriorityQueue pq = new PriorityQueue<>((a, b) -> map.get(b).compareTo(map.get(a))); + Queue busy = new LinkedList<>(); + StringBuilder sb = new StringBuilder(); + pq.addAll(map.keySet()); + while (!pq.isEmpty()) { + Character removed = pq.poll(); + sb.append(removed); + map.put(removed, map.get(removed) - 1); + busy.add(removed); + if (busy.size() < k) { + continue; + } + Character busyRemoved = busy.remove(); + if (map.get(busyRemoved) > 0) { + pq.add(busyRemoved); + } + } + return sb.length() == s.length() ? sb.toString() : ""; + } +} From 42c41ac800637e833bbbf733b4b880fb1b5d806f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Sep 2023 07:44:36 -0700 Subject: [PATCH 1254/1640] Update Combination Sum IV.java --- Medium/Combination Sum IV.java | 39 ++++++++++++++++------------------ 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/Medium/Combination Sum IV.java b/Medium/Combination Sum IV.java index bc8c1924..3a0eb51e 100644 --- a/Medium/Combination Sum IV.java +++ b/Medium/Combination Sum IV.java @@ -1,25 +1,22 @@ class Solution { - public int combinationSum4(int[] nums, int target) { - Integer[] dp = new Integer[target + 1]; - return getCount(target, nums, dp); - } - - public int getCount(int target, int[] nums, Integer[] dp) { - if (dp[target] != null) { - return dp[target]; + public int combinationSum4(int[] nums, int target) { + Integer[] dp = new Integer[target + 1]; + return helper(nums, target, dp); } - if (target == 0) { - return 1; + + private int helper(int[] nums, int target, Integer[] dp) { + if (dp[target] != null) { + return dp[target]; + } + if (target == 0) { + return 1; + } + int count = 0; + for (int num : nums) { + if (target >= num) { + count += helper(nums, target - num, dp); + } + } + return dp[target] = count; } - if (target < 0) { - return 0; - } - int total = 0; - for (int num : nums) { - if (target >= num) { - total += getCount(target - num, nums, dp); - } - } - return dp[target] = total; - } } From 64429283f6c25e5d98d69cb7fc0aa0427004dc5c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Sep 2023 06:56:14 -0700 Subject: [PATCH 1255/1640] Update Group the People Given the Group Size They Belong To.java --- ...e Given the Group Size They Belong To.java | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/Medium/Group the People Given the Group Size They Belong To.java b/Medium/Group the People Given the Group Size They Belong To.java index 475cf0c6..095fb67f 100644 --- a/Medium/Group the People Given the Group Size They Belong To.java +++ b/Medium/Group the People Given the Group Size They Belong To.java @@ -1,20 +1,18 @@ class Solution { - public List> groupThePeople(int[] groupSizes) { - Map> groupSizeToId = new HashMap<>(); - for (int i = 0; i < groupSizes.length; i++) { - groupSizeToId.computeIfAbsent(groupSizes[i], k -> new LinkedList<>()).add(i); - } - List> result = new ArrayList<>(); - for (Integer groupSize : groupSizeToId.keySet()) { - Queue ids = groupSizeToId.get(groupSize); - while (!ids.isEmpty()) { - List group = new ArrayList<>(groupSize); - for (int i = 0; i< groupSize; i++) { - group.add(ids.remove()); + public List> groupThePeople(int[] groupSizes) { + Map> map = new HashMap<>(); + for (int i = 0; i < groupSizes.length; i++) { + map.computeIfAbsent(groupSizes[i], k -> new ArrayList<>()).add(i); + } + List> result = new ArrayList<>(); + for (Integer key : map.keySet()) { + List candidates = map.get(key); + int idx = 0; + while (idx < candidates.size()) { + result.add(candidates.subList(idx, idx + key)); + idx += key; + } } - result.add(group); - } + return result; } - return result; - } } From cbdf34baf52b2dae10108834af7ac3c63f24e3dc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Sep 2023 09:37:35 -0700 Subject: [PATCH 1256/1640] Create Points That Intersect With Cars.java --- Easy/Points That Intersect With Cars.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Points That Intersect With Cars.java diff --git a/Easy/Points That Intersect With Cars.java b/Easy/Points That Intersect With Cars.java new file mode 100644 index 00000000..8443505c --- /dev/null +++ b/Easy/Points That Intersect With Cars.java @@ -0,0 +1,20 @@ +class Solution { + public int numberOfPoints(List> coordinates) { + coordinates.sort(Comparator.comparingInt((List o) -> o.get(0)).thenComparingInt(o -> o.get(1))); + int points = 0; + int intervalStart = -1; + int intervalEnd = -1; + for (List coordinate : coordinates) { + if (intervalStart == -1) { + intervalStart = coordinate.get(0); + } else { + if (intervalEnd < coordinate.get(0)) { + points += intervalEnd - intervalStart + 1; + intervalStart = coordinate.get(0); + } + } + intervalEnd = Math.max(intervalEnd, coordinate.get(1)); + } + return points + intervalEnd - intervalStart + 1; + } +} From 65f9addfce377ab18e93c9d8c0b7f87f03b4e3e0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Sep 2023 15:43:54 -0700 Subject: [PATCH 1257/1640] Create Determine if a Cell Is Reachable at a Given Time.java --- ...termine if a Cell Is Reachable at a Given Time.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Medium/Determine if a Cell Is Reachable at a Given Time.java diff --git a/Medium/Determine if a Cell Is Reachable at a Given Time.java b/Medium/Determine if a Cell Is Reachable at a Given Time.java new file mode 100644 index 00000000..37878fa8 --- /dev/null +++ b/Medium/Determine if a Cell Is Reachable at a Given Time.java @@ -0,0 +1,10 @@ +class Solution { + public boolean isReachableAtTime(int sx, int sy, int fx, int fy, int t) { + int xDiff = Math.abs(sx - fx); + int yDiff = Math.abs(sy - fy); + if (xDiff == 0 && yDiff == 0 && t == 1) { + return false; + } + return (Math.min(xDiff, yDiff) + Math.abs(xDiff - yDiff)) <= t; + } +} From 01347e7f723f0c155ebfef1c2f7d18b5de7672a2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 12 Sep 2023 07:17:04 -0700 Subject: [PATCH 1258/1640] Update Minimum Deletions to Make Character Frequencies Unique.java --- ... to Make Character Frequencies Unique.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Medium/Minimum Deletions to Make Character Frequencies Unique.java b/Medium/Minimum Deletions to Make Character Frequencies Unique.java index f98fa559..2d57dc68 100644 --- a/Medium/Minimum Deletions to Make Character Frequencies Unique.java +++ b/Medium/Minimum Deletions to Make Character Frequencies Unique.java @@ -1,25 +1,25 @@ class Solution { - public int minDeletions(String s) { - int[] frequency = new int[26]; - for (char c : s.toCharArray()) { - frequency[c - 'a']++; - } - PriorityQueue pq = new PriorityQueue<>(Collections.reverseOrder()); - for (int freq : frequency) { - if (freq > 0) { - pq.add(freq); - } - } - int numOfDeletions = 0; - while (!pq.isEmpty()) { - int removedFreq = pq.poll(); - if (!pq.isEmpty() && pq.peek() == removedFreq) { - numOfDeletions++; - if (removedFreq > 1) { - pq.add(removedFreq - 1); + public int minDeletions(String s) { + int[] frequency = new int[26]; + for (char c : s.toCharArray()) { + frequency[c - 'a']++; + } + Arrays.sort(frequency); + int numOfDeletions = 0; + int expectedFrequency = frequency[25]; + for (int i = 25; i >= 0; i--) { + if (frequency[i] == 0) { + break; + } + if (frequency[i] > expectedFrequency) { + numOfDeletions += frequency[i] - expectedFrequency; + } else { + expectedFrequency = frequency[i]; + } + if (expectedFrequency > 0) { + expectedFrequency--; + } } - } + return numOfDeletions; } - return numOfDeletions; - } } From 9759e5a4ba6ea77fbfc3fb32cc8a0c65eba460ea Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Sep 2023 07:26:55 -0700 Subject: [PATCH 1259/1640] Update Candy.java --- Hard/Candy.java | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/Hard/Candy.java b/Hard/Candy.java index 5bf67db1..269d4d6a 100644 --- a/Hard/Candy.java +++ b/Hard/Candy.java @@ -1,19 +1,22 @@ class Solution { - public int candy(int[] ratings) { - int[] candies = new int[ratings.length]; - Arrays.fill(candies, 1); - for (int i = 1; i < ratings.length; i++) { - if (ratings[i] > ratings[i - 1]) { - candies[i] = candies[i - 1] + 1; - } + public int candy(int[] ratings) { + int n = ratings.length; + int[] candies = new int[n]; + Arrays.fill(candies, 1); + for (int i = 1; i < n; i++) { + if (ratings[i] > ratings[i - 1]) { + candies[i] = candies[i - 1] + 1; + } + } + for (int i = n - 2; i >= 0; i--) { + if (ratings[i] > ratings[i + 1]) { + candies[i] = Math.max(candies[i], candies[i + 1] + 1); + } + } + int totalCandies = 0; + for (int i = 0; i < n; i++) { + totalCandies += candies[i]; + } + return totalCandies; } - int totalCandies = candies[candies.length - 1]; - for (int i = ratings.length - 2; i >= 0; i--) { - if (ratings[i] > ratings[i + 1]) { - candies[i] = Math.max(candies[i], candies[i + 1] + 1); - } - totalCandies += candies[i]; - } - return totalCandies; - } } From 49a1a51566eb3eeb63ce779c6ddc869246a24e89 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Sep 2023 18:02:02 -0700 Subject: [PATCH 1260/1640] Update Reconstruct Itinerary.java --- Hard/Reconstruct Itinerary.java | 35 +++++++++++++++------------------ 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/Hard/Reconstruct Itinerary.java b/Hard/Reconstruct Itinerary.java index 0c3c962f..e5616f94 100644 --- a/Hard/Reconstruct Itinerary.java +++ b/Hard/Reconstruct Itinerary.java @@ -1,22 +1,19 @@ class Solution { - public List findItinerary(List> tickets) { - Map> map = new HashMap<>(); - for (List ticket : tickets) { - String from = ticket.get(0); - String to = ticket.get(1); - map.computeIfAbsent(from, k -> new PriorityQueue<>()).add(to); + public List findItinerary(List> tickets) { + Map> map = new HashMap<>(); + for (List ticket : tickets) { + map.computeIfAbsent(ticket.get(0), k -> new PriorityQueue<>()).add(ticket.get(1)); + } + Stack stack = new Stack<>(); + stack.push("JFK"); + List result = new ArrayList<>(); + while (!stack.isEmpty()) { + while (map.containsKey(stack.peek()) && !map.get(stack.peek()).isEmpty()) { + stack.push(map.get(stack.peek()).poll()); + } + result.add(stack.pop()); + } + Collections.reverse(result); + return result; } - Stack stack = new Stack<>(); - LinkedList result = new LinkedList<>(); - stack.push("JFK"); - while (!stack.isEmpty()) { - String destination = stack.peek(); - if (!map.getOrDefault(destination, new PriorityQueue<>()).isEmpty()) { - stack.push(map.get(destination).remove()); - } else { - result.addFirst(stack.pop()); - } - } - return result; - } } From 76f32c6f4fd8eb4c621f18ae29c042ff7110ea77 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 15 Sep 2023 09:28:06 -0700 Subject: [PATCH 1261/1640] Update Min Cost to Connect All Points.java --- Medium/Min Cost to Connect All Points.java | 126 +++++++++------------ 1 file changed, 55 insertions(+), 71 deletions(-) diff --git a/Medium/Min Cost to Connect All Points.java b/Medium/Min Cost to Connect All Points.java index 15cc689b..168142ca 100644 --- a/Medium/Min Cost to Connect All Points.java +++ b/Medium/Min Cost to Connect All Points.java @@ -1,80 +1,64 @@ class Solution { - public int minCostConnectPoints(int[][] points) { - int n = points.length; - PriorityQueue priorityQueue = new PriorityQueue<>((x, y) -> x.cost - y.cost); - UnionFind unionFind = new UnionFind(n); - for (int i = 0; i < n; i++) { - int[] coordinate = points[i]; - for (int j = i + 1; j < n; j++) { - int[] secondCoordinate = points[j]; - int cost = Math.abs(coordinate[0] - secondCoordinate[0]) + Math.abs(coordinate[1] - secondCoordinate[1]); - Edge edge = new Edge(i, j, cost); - priorityQueue.add(edge); - } - } - int minimumCost = 0; - int totalEdges = n - 1; - while (!priorityQueue.isEmpty() && totalEdges > 0) { - Edge edge = priorityQueue.poll(); - if (!unionFind.connected(edge.pointOne, edge.pointTwo)) { - unionFind.union(edge.pointOne, edge.pointTwo); - minimumCost += edge.cost; - totalEdges--; - } - } - return minimumCost; - } - - private static class Edge { - int pointOne; - int pointTwo; - int cost; - - public Edge(int pointOne, int pointTwo, int cost) { - this.pointOne = pointOne; - this.pointTwo = pointTwo; - this.cost = cost; + public int minCostConnectPoints(int[][] points) { + int n = points.length; + List edges = new ArrayList<>(); + for (int i = 0; i < n; i++) { + for (int j = i + 1; j < n; j++) { + int weight = Math.abs(points[i][0] - points[j][0]) + Math.abs(points[i][1] - points[j][1]); + int[] curr = {weight, i, j}; + edges.add(curr); + } + } + Collections.sort(edges, Comparator.comparingInt(a -> a[0])); + UnionFind unionFind = new UnionFind(n); + int minCost = 0; + int edgeUsedCount = 0; + for (int i = 0; i < edges.size() && edgeUsedCount < n - 1; i++) { + int nodeOne = edges.get(i)[1]; + int nodeTwo = edges.get(i)[2]; + int weight = edges.get(i)[0]; + if (unionFind.union(nodeOne, nodeTwo)) { + minCost += weight; + edgeUsedCount++; + } + } + return minCost; } - } - - private static class UnionFind { - private final int[] root; - private final int[] rank; + private static class UnionFind { + private final int[] group; + private final int[] rank; - public UnionFind(int size) { - this.root = new int[size]; - this.rank = new int[size]; - for (int i = 0; i < size; i++) { - this.root[i] = i; - this.rank[i] = 1; - } - } - - public void union(int nodeOne, int nodeTwo) { - int rootOne = find(nodeOne); - int rootTwo = find(nodeTwo); - if (rootOne != rootTwo) { - if (this.rank[rootOne] > this.rank[rootTwo]) { - this.root[rootTwo] = rootOne; - } else if (this.rank[rootOne] < this.rank[rootTwo]) { - this.root[rootOne] = rootTwo; - } else { - this.root[rootTwo] = rootOne; - this.rank[rootOne]++; + public UnionFind(int n) { + this.group = new int[n]; + this.rank = new int[n]; + for (int i = 0; i < n; i++) { + this.group[i] = i; + } } - } - } - public int find(int node) { - if (node == root[node]) { - return node; - } - return root[node] = find(root[node]); - } + public int find(int node) { + if (group[node] != node) { + group[node] = find(group[node]); + } + return group[node]; + } - public boolean connected(int nodeOne, int nodeTwo) { - return find(nodeOne) == find(nodeTwo); + public boolean union(int nodeOne, int nodeTwo) { + int groupOne = find(nodeOne); + int groupTwo = find(nodeTwo); + if (groupOne == groupTwo) { + return false; + } + if (rank[groupOne] > rank[groupTwo]) { + group[groupTwo] = groupOne; + } else if (rank[groupOne] < rank[groupTwo]) { + group[groupOne] = groupTwo; + } else { + group[groupOne] = groupTwo; + rank[groupTwo]++; + } + return true; + } } - } } From 80259e4d2dae2210d70bb5e05797fe6387ff5abd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 16 Sep 2023 16:23:50 -0700 Subject: [PATCH 1262/1640] Create Minimum Right Shifts to Sort the Array.java --- ...inimum Right Shifts to Sort the Array.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Minimum Right Shifts to Sort the Array.java diff --git a/Easy/Minimum Right Shifts to Sort the Array.java b/Easy/Minimum Right Shifts to Sort the Array.java new file mode 100644 index 00000000..aad801a0 --- /dev/null +++ b/Easy/Minimum Right Shifts to Sort the Array.java @@ -0,0 +1,19 @@ +class Solution { + public int minimumRightShifts(List nums) { + int mismatchIdx = -1; + int count = 0; + for (int i = 1; i < nums.size(); i++) { + if (nums.get(i - 1) > nums.get(i)) { + mismatchIdx = i; + count++; + } + } + if (count > 1) { + return -1; + } + if (count == 0) { + return 0; + } + return nums.get(nums.size() - 1) > nums.get(0) ? -1 : nums.size() - mismatchIdx; + } +} From c21dafb087383fafc50a347daf81d32b80ab826c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Sep 2023 09:34:14 -0700 Subject: [PATCH 1263/1640] Create Sum of Values at Indices With K Set Bits.java --- Easy/Sum of Values at Indices With K Set Bits.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Sum of Values at Indices With K Set Bits.java diff --git a/Easy/Sum of Values at Indices With K Set Bits.java b/Easy/Sum of Values at Indices With K Set Bits.java new file mode 100644 index 00000000..598f65c1 --- /dev/null +++ b/Easy/Sum of Values at Indices With K Set Bits.java @@ -0,0 +1,8 @@ +class Solution { + public int sumIndicesWithKSetBits(List nums, int k) { + return IntStream.range(0, nums.size()) + .filter(idx -> Integer.bitCount(idx) == k) + .map(idx -> nums.get(idx)) + .sum(); + } +} From b07d068d74e02b8000bf3e7e475493845434524c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Sep 2023 12:05:05 -0700 Subject: [PATCH 1264/1640] Create Shortest Path Visiting All Nodes.java --- Hard/Shortest Path Visiting All Nodes.java | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 Hard/Shortest Path Visiting All Nodes.java diff --git a/Hard/Shortest Path Visiting All Nodes.java b/Hard/Shortest Path Visiting All Nodes.java new file mode 100644 index 00000000..8d08ecfa --- /dev/null +++ b/Hard/Shortest Path Visiting All Nodes.java @@ -0,0 +1,33 @@ +class Solution { + public int shortestPathLength(int[][] graph) { + int n = graph.length; + Map>> map = new HashMap<>(); + Queue queue = new LinkedList<>(); + for (int i = 0; i < n; i++) { + Set visited = new HashSet<>(); + visited.add(i); + map.put(i, new HashSet<>(List.of(visited))); + queue.add(new State(i, 0, visited)); + } + while (!queue.isEmpty()) { + State removed = queue.remove(); + int node = removed.node(); + int steps = removed.steps(); + Set visited = removed.visited(); + if (visited.size() == n) { + return steps; + } + for (int conn : graph[node]) { + Set connVisited = new HashSet<>(visited); + connVisited.add(conn); + if (!map.get(conn).contains(connVisited)) { + queue.add(new State(conn, steps + 1, connVisited)); + map.computeIfAbsent(conn, k -> new HashSet<>()).add(connVisited); + } + } + } + return -1; + } + + private static record State(int node, int steps, Set visited) {} +} From 5502fe64029d14cef414b388c85e8b2ba19f4de9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 18 Sep 2023 07:05:13 -0700 Subject: [PATCH 1265/1640] Update The K Weakest Rows in a Matrix.java --- Easy/The K Weakest Rows in a Matrix.java | 46 ++++++++++++------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Easy/The K Weakest Rows in a Matrix.java b/Easy/The K Weakest Rows in a Matrix.java index 09e395be..a4a52ad7 100644 --- a/Easy/The K Weakest Rows in a Matrix.java +++ b/Easy/The K Weakest Rows in a Matrix.java @@ -1,28 +1,28 @@ class Solution { - public int[] kWeakestRows(int[][] mat, int k) { - PriorityQueue pq = new PriorityQueue<>( - Comparator.comparingInt((int[] o) -> o[1]).thenComparingInt(o -> o[0])); - for (int i = 0; i < mat.length; i++) { - pq.add(new int[]{i, getNumberOfOnes(mat[i])}); + public int[] kWeakestRows(int[][] mat, int k) { + PriorityQueue pq = + new PriorityQueue<>(Comparator.comparingInt((int[] o) -> o[1]).thenComparingInt(o -> o[0])); + for (int i = 0; i < mat.length; i++) { + pq.add(new int[]{i, findNumberOfSoldiers(mat[i])}); + } + int[] result = new int[k]; + for (int i = 0; i < k && !pq.isEmpty(); i++){ + result[i] = pq.poll()[0]; + } + return result; } - int[] result = new int[k]; - for (int i = 0; i < result.length && !pq.isEmpty(); i++) { - result[i] = pq.poll()[0]; - } - return result; - } - private int getNumberOfOnes(int[] arr) { - int start = 0; - int end = arr.length - 1; - while (start <= end) { - int mid = (start + end) / 2; - if (arr[mid] == 0) { - end = mid - 1; - } else { - start = mid + 1; - } + private int findNumberOfSoldiers(int[] row) { + int left = 0; + int right = row.length - 1; + while (left <= right) { + int mid = (left + right) / 2; + if (row[mid] == 0) { + right = mid - 1; + } else { + left = mid + 1; + } + } + return right < 0 ? 0 : left; } - return end < 0 ? 0 : start; - } } From 40bb0b180ad7865e54efd790f7f143131d723d41 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 18 Sep 2023 08:51:40 -0700 Subject: [PATCH 1266/1640] Update Parallel Courses.java --- Medium/Parallel Courses.java | 60 +++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/Medium/Parallel Courses.java b/Medium/Parallel Courses.java index a3843f23..797e3b58 100644 --- a/Medium/Parallel Courses.java +++ b/Medium/Parallel Courses.java @@ -1,33 +1,35 @@ class Solution { - public int minimumSemesters(int n, int[][] relations) { - Map> graph = new HashMap<>(); - int[] indegree = new int[n + 1]; - for (int[] relation : relations) { - graph.computeIfAbsent(relation[0], k -> new ArrayList<>()).add(relation[1]); - indegree[relation[1]]++; - } - Queue queue = new LinkedList<>(); - int numOfSemesters = 0; - Set coursesTaken = new HashSet<>(); - for (int i = 1; i <= n; i++) { - if (indegree[i] == 0) { - queue.add(i); - } - } - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int course = queue.remove(); - coursesTaken.add(course); - for (int dependentCourse : graph.getOrDefault(course, new ArrayList<>())) { - indegree[dependentCourse]--; - if (indegree[dependentCourse] <= 0 && !coursesTaken.contains(dependentCourse)) { - queue.add(dependentCourse); - } + public int minimumSemesters(int n, int[][] relations) { + Map> graph = new HashMap<>(); + int[] indegree = new int[n]; + for (int[] relation : relations) { + int course = relation[0]; + int dependency = relation[1]; + indegree[course - 1]++; + graph.computeIfAbsent(dependency, k -> new HashSet<>()).add(course); + } + Queue queue = new LinkedList<>(); + int numOfSemesters = 0; + int coursesTaken = 0; + for (int i = 0; i < n; i++) { + if (indegree[i] == 0) { + queue.add(i + 1); + } + } + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int removed = queue.remove(); + coursesTaken++; + for (Integer dependent : graph.getOrDefault(removed, new HashSet<>())) { + indegree[dependent - 1]--; + if (indegree[dependent - 1] == 0) { + queue.add(dependent); + } + } + } + numOfSemesters++; } - } - numOfSemesters++; + return coursesTaken == n ? numOfSemesters : -1; } - return coursesTaken.size() == n ? numOfSemesters : -1; - } } From 01039f5e50509d0fd496abadb507b3ae53b57cb2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 19 Sep 2023 08:19:22 -0700 Subject: [PATCH 1267/1640] Update Find the Duplicate Number.java From b43550af66a9288fe7487d71cb1a95d81b8344c9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 19 Sep 2023 08:19:33 -0700 Subject: [PATCH 1268/1640] Update Find the Duplicate Number.java --- Medium/Find the Duplicate Number.java | 30 +++++++++++++++------------ 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/Medium/Find the Duplicate Number.java b/Medium/Find the Duplicate Number.java index c4f5a541..bfd8908b 100644 --- a/Medium/Find the Duplicate Number.java +++ b/Medium/Find the Duplicate Number.java @@ -1,16 +1,20 @@ class Solution { - public int findDuplicate(int[] nums) { - int slow = nums[0]; - int fast = nums[0]; - do { - slow = nums[slow]; - fast = nums[nums[fast]]; - } while (slow != fast); - slow = nums[0]; - while (slow != fast) { - slow = nums[slow]; - fast = nums[fast]; + public int findDuplicate(int[] nums) { + int slow = nums[0]; + int fast = nums[0]; + while (true) { + slow = nums[slow]; + fast = nums[nums[fast]]; + if (slow == fast) { + break; + } + } + int idxOne = nums[0]; + int idxTwo = slow; + while (idxOne != idxTwo) { + idxOne = nums[idxOne]; + idxTwo = nums[idxTwo]; + } + return idxOne; } - return fast; - } } From 9f154a1703d583d7261bda066aa242e92cdba3f3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Sep 2023 08:30:12 -0700 Subject: [PATCH 1269/1640] Update Minimum Operations to Reduce X to Zero.java --- ...inimum Operations to Reduce X to Zero.java | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/Medium/Minimum Operations to Reduce X to Zero.java b/Medium/Minimum Operations to Reduce X to Zero.java index 3e202cb6..f2f2a99b 100644 --- a/Medium/Minimum Operations to Reduce X to Zero.java +++ b/Medium/Minimum Operations to Reduce X to Zero.java @@ -1,21 +1,22 @@ class Solution { - public int minOperations(int[] nums, int x) { - int totalSum = 0; - for (int num : nums) { - totalSum += num; + public int minOperations(int[] nums, int x) { + int sum = 0; + for (int num : nums) { + sum += num; + } + int max = -1; + int left = 0; + int curr = 0; + int n = nums.length; + for (int right = 0; right < n; right++) { + curr += nums[right]; + while (curr > sum - x && left <= right) { + curr -= nums[left++]; + } + if (curr == sum - x) { + max = Math.max(max, right - left + 1); + } + } + return max != -1 ? n - max : -1; } - int max = -1; - int left = 0; - int current = 0; - for (int right = 0; right < nums.length; right++) { - current += nums[right]; - while (current > totalSum - x && left <= right) { - current -= nums[left++]; - } - if (current == totalSum - x) { - max = Math.max(max, right - left + 1); - } - } - return max != -1 ? nums.length - max : -1; - } } From e2c2b2372b952c4ee16f19250a05a4a7346defb4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 21 Sep 2023 17:20:10 -0700 Subject: [PATCH 1270/1640] Update Is Subsequence.java --- Easy/Is Subsequence.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Easy/Is Subsequence.java b/Easy/Is Subsequence.java index 90732379..2d67a698 100644 --- a/Easy/Is Subsequence.java +++ b/Easy/Is Subsequence.java @@ -1,11 +1,13 @@ class Solution { - public boolean isSubsequence(String s, String t) { - int j = 0; - for (int i = 0; i < t.length() && j < s.length(); i++) { - if (s.charAt(j) == t.charAt(i)) { - j++; - } + public boolean isSubsequence(String s, String t) { + int sIdx = 0; + int tIdx = 0; + while (sIdx < s.length() && tIdx < t.length()) { + if (s.charAt(sIdx) == t.charAt(tIdx)) { + sIdx++; + } + tIdx++; + } + return sIdx == s.length(); } - return j == s.length(); - } } From 162a26bf7f655add678c07960c5aa13ae9f02042 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Sep 2023 08:43:44 -0700 Subject: [PATCH 1271/1640] Update Longest String Chain.java --- Medium/Longest String Chain.java | 52 +++++++++++++++++--------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/Medium/Longest String Chain.java b/Medium/Longest String Chain.java index 17d14f0c..5c36ef9d 100644 --- a/Medium/Longest String Chain.java +++ b/Medium/Longest String Chain.java @@ -1,29 +1,31 @@ class Solution { - public int longestStrChain(String[] words) { - Map dp = new HashMap<>(); - Set wordSet = Arrays.stream(words).collect(Collectors.toSet()); - int maxLength = 0; - for (String word : words) { - maxLength = Math.max(maxLength, dfs(wordSet, dp, word)); + public int longestStrChain(String[] words) { + Set wordSet = Arrays.stream(words) + .collect(Collectors.toSet()); + Map memo = new HashMap<>(); + int result = 0; + for (String word : words) { + result = Math.max(result, dfs(wordSet, memo, word)); + } + return result; } - return maxLength; - } - - private int dfs(Set wordSet, Map dp, String currWord) { - if (dp.containsKey(currWord)) { - return dp.get(currWord); + + private int dfs(Set wordSet, Map memo, String word) { + if (memo.containsKey(word)) { + return memo.get(word); + } + int maxLength = 1; + StringBuilder sb = new StringBuilder(word); + for (int i = 0; i < word.length(); i++) { + sb.deleteCharAt(i); + String newWord = sb.toString(); + if (wordSet.contains(newWord)) { + int currLength = 1 + dfs(wordSet, memo, newWord); + maxLength = Math.max(maxLength, currLength); + } + sb.insert(i, word.charAt(i)); + } + memo.put(word, maxLength); + return maxLength; } - int maxLength = 1; - StringBuilder sb = new StringBuilder(currWord); - for (int i = 0; i < currWord.length(); i++) { - sb.deleteCharAt(i); - String newWord = sb.toString(); - if (wordSet.contains(newWord)) { - maxLength = Math.max(maxLength, 1 + dfs(wordSet, dp, newWord)); - } - sb.insert(i, currWord.charAt(i)); - } - dp.put(currWord, maxLength); - return dp.get(currWord); - } } From 5c7f8b7106ab6174d147f94899798faa047ac10f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Sep 2023 17:54:15 -0700 Subject: [PATCH 1272/1640] Update Champagne Tower.java --- Medium/Champagne Tower.java | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Medium/Champagne Tower.java b/Medium/Champagne Tower.java index b8f0797e..ccd07a8b 100644 --- a/Medium/Champagne Tower.java +++ b/Medium/Champagne Tower.java @@ -1,14 +1,13 @@ class Solution { - public double champagneTower(int poured, int query_row, int query_glass) { - double[][] glassCapacity = new double[query_row + 1][query_glass + 2]; - glassCapacity[0][0] = poured; - for (int currRow = 0; currRow < query_row; currRow++) { - for (int currCol = 0; currCol <= query_glass; currCol++) { - double currCapacity = Math.max(glassCapacity[currRow][currCol] - 1.0, 0); - glassCapacity[currRow + 1][currCol] += currCapacity / 2.0; - glassCapacity[currRow + 1][currCol + 1] += currCapacity / 2.0; - } + public double champagneTower(int poured, int query_row, int query_glass) { + double[] glass = new double[query_row + 2]; + glass[0] = poured; + for (int row = 1; row <= query_row; row++) { + for (int idx = row; idx >= 0; idx--) { + glass[idx] = Math.max(0.0, (glass[idx] - 1) / 2); + glass[idx + 1] += glass[idx]; + } + } + return Math.min(glass[query_glass], 1.0); } - return Math.min(glassCapacity[query_row][query_glass], 1.0); - } } From de2351a228b16cc5caf781bacccdee9e1224c0ae Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 24 Sep 2023 07:45:44 -0700 Subject: [PATCH 1273/1640] Create Maximum Odd Binary Number.java --- Easy/Maximum Odd Binary Number.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Maximum Odd Binary Number.java diff --git a/Easy/Maximum Odd Binary Number.java b/Easy/Maximum Odd Binary Number.java new file mode 100644 index 00000000..861a3fd1 --- /dev/null +++ b/Easy/Maximum Odd Binary Number.java @@ -0,0 +1,13 @@ +class Solution { + public String maximumOddBinaryNumber(String s) { + int oneCount = 0; + for (char c : s.toCharArray()) { + oneCount += c == '1' ? 1 : 0; + } + if (oneCount == 0) { + return s; + } + int zeroCount = s.length() - oneCount; + return "1".repeat(oneCount - 1) + "0".repeat(zeroCount) + "1"; + } +} From f01834c0c536c2ed9f260a70376f117130f3629a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 24 Sep 2023 20:50:12 -0700 Subject: [PATCH 1274/1640] Update Find the difference.java --- Easy/Find the difference.java | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Easy/Find the difference.java b/Easy/Find the difference.java index 710a70d3..ca12be6d 100644 --- a/Easy/Find the difference.java +++ b/Easy/Find the difference.java @@ -1,15 +1,15 @@ class Solution { - public char findTheDifference(String s, String t) { - int[] counter = new int[26]; - for (char c : s.toCharArray()) { - counter[c - 'a']++; + public char findTheDifference(String s, String t) { + int[] frequency = new int[26]; + for (char c : s.toCharArray()) { + frequency[c - 'a']++; + } + for (char c : t.toCharArray()) { + if (frequency[c - 'a'] == 0) { + return c; + } + frequency[c - 'a']--; + } + return ' '; } - for (char c : t.toCharArray()) { - if (counter[c - 'a'] == 0) { - return c; - } - counter[c - 'a']--; - } - return '-'; - } } From f65450e5cc65333d00b56d73e1d3c7bd16eda4e3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Sep 2023 06:26:42 -0700 Subject: [PATCH 1275/1640] Update Remove Duplicate Letters.java --- Medium/Remove Duplicate Letters.java | 46 +++++++++++++--------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/Medium/Remove Duplicate Letters.java b/Medium/Remove Duplicate Letters.java index 25cfd16c..19bd928d 100644 --- a/Medium/Remove Duplicate Letters.java +++ b/Medium/Remove Duplicate Letters.java @@ -1,27 +1,25 @@ class Solution { - public String removeDuplicateLetters(String s) { - int[] counter = new int[26]; - for (char c : s.toCharArray()) { - counter[c - 'a']++; + public String removeDuplicateLetters(String s) { + Map lastIndexMap = new HashMap<>(); + for (int i = 0; i < s.length(); i++) { + lastIndexMap.put(s.charAt(i), i); + } + Stack stack = new Stack<>(); + Set visited = new HashSet<>(); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (!visited.contains(c)) { + while (!stack.isEmpty() && c < stack.peek() && lastIndexMap.get(stack.peek()) > i) { + visited.remove(stack.pop()); + } + visited.add(c); + stack.push(c); + } + } + StringBuilder sb = new StringBuilder(); + for (Character c : stack) { + sb.append(c); + } + return sb.toString(); } - Stack stack = new Stack<>(); - boolean[] visited = new boolean[26]; - for (char c : s.toCharArray()) { - int idx = c - 'a'; - counter[idx]--; - if (visited[idx]) { - continue; - } - while (!stack.isEmpty() && stack.peek() > idx && counter[stack.peek()] > 0) { - visited[stack.pop()] = false; - } - stack.add(idx); - visited[idx] = true; - } - StringBuilder sb = new StringBuilder(); - while (!stack.isEmpty()) { - sb.append((char) (stack.pop() + 'a')); - } - return sb.reverse().toString(); - } } From c0bc4aba017f8c62ec662106636418447fb40d88 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 27 Sep 2023 08:34:44 -0700 Subject: [PATCH 1276/1640] Create Decoded String at Index.java --- Medium/Decoded String at Index.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Decoded String at Index.java diff --git a/Medium/Decoded String at Index.java b/Medium/Decoded String at Index.java new file mode 100644 index 00000000..a0c94968 --- /dev/null +++ b/Medium/Decoded String at Index.java @@ -0,0 +1,27 @@ +class Solution { + public String decodeAtIndex(String s, int k) { + long size = 0; + int n = s.length(); + for (int i = 0; i < n; i++) { + char c = s.charAt(i); + if (Character.isDigit(c)) { + size *= (c - '0'); + } else { + size++; + } + } + for (int i = n - 1; i >= 0; i--) { + char c = s.charAt(i); + k %= size; + if (k == 0 && Character.isLetter(c)) { + return Character.toString(c); + } + if (Character.isDigit(c)) { + size /= (c - '0'); + } else { + size--; + } + } + return ""; + } +} From 866f09583d07f33f6d988fa1df33fd98e3082923 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Sep 2023 09:02:43 -0700 Subject: [PATCH 1277/1640] Update Sort Array By Parity.java --- Easy/Sort Array By Parity.java | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/Easy/Sort Array By Parity.java b/Easy/Sort Array By Parity.java index c74dcae0..0b54ae53 100644 --- a/Easy/Sort Array By Parity.java +++ b/Easy/Sort Array By Parity.java @@ -1,17 +1,16 @@ class Solution { - public int[] sortArrayByParity(int[] A) { - int evenIdx = 0; - int oddIdx = A.length - 1; - while (evenIdx < oddIdx) { - if (A[evenIdx] % 2 == 0) { - evenIdx++; - } - else { - int temp = A[evenIdx]; - A[evenIdx] = A[oddIdx]; - A[oddIdx--] = temp; - } + public int[] sortArrayByParity(int[] nums) { + int start = 0; + int end = 0; + int n = nums.length; + while (end < n) { + if (nums[end] % 2 == 0) { + int temp = nums[start]; + nums[start++] = nums[end]; + nums[end] = temp; + } + end++; + } + return nums; } - return A; - } } From 0cb7779f1f326f3fdeb43c95db4b4c3620ad5b8d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Sep 2023 17:04:44 -0700 Subject: [PATCH 1278/1640] Update Monotonic Array.java --- Easy/Monotonic Array.java | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/Easy/Monotonic Array.java b/Easy/Monotonic Array.java index 4a348d71..e460648c 100644 --- a/Easy/Monotonic Array.java +++ b/Easy/Monotonic Array.java @@ -1,21 +1,19 @@ class Solution { - public boolean isMonotonic(int[] nums) { - int idx = 0; - int sign = 0; - while (idx < nums.length - 1 && sign == 0) { - if (nums[idx] < nums[idx + 1]) { - sign = 1; - } else if (nums[idx] > nums[idx + 1]) { - sign = -1; - } - idx++; + public boolean isMonotonic(int[] nums) { + int idx = 0; + while (idx + 1 < nums.length && nums[idx] == nums[idx + 1]) { + idx++; + } + boolean increasing = idx + 1 < nums.length && nums[idx] < nums[idx + 1]; + while (idx + 1 < nums.length) { + if (nums[idx] > nums[idx + 1] && increasing) { + return false; + } + if (nums[idx] < nums[idx + 1] && !increasing) { + return false; + } + idx++; + } + return true; } - while (idx < nums.length - 1) { - if ((sign == 1 && nums[idx] > nums[idx + 1]) || (sign == -1 && nums[idx] < nums[idx + 1])) { - return false; - } - idx++; - } - return true; - } } From 88f4c846c5f3afca739cb44f3c2143963e783507 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Sep 2023 09:01:31 -0700 Subject: [PATCH 1279/1640] Update 132 Pattern.java --- Medium/132 Pattern.java | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/Medium/132 Pattern.java b/Medium/132 Pattern.java index 80a6c64e..54937149 100644 --- a/Medium/132 Pattern.java +++ b/Medium/132 Pattern.java @@ -1,25 +1,23 @@ class Solution { - public boolean find132pattern(int[] nums) { - if (nums.length < 3) { - return false; - } - int[] minTillIndex = new int[nums.length]; - minTillIndex[0] = nums[0]; - for (int idx = 1; idx < nums.length; idx++) { - minTillIndex[idx] = Math.min(minTillIndex[idx - 1], nums[idx]); - } - Stack stack = new Stack<>(); - for (int idx = nums.length - 1; idx >= 0; idx--) { - if (nums[idx] > minTillIndex[idx]) { - while (!stack.isEmpty() && stack.peek() <= minTillIndex[idx]) { - stack.pop(); + public boolean find132pattern(int[] nums) { + int n = nums.length; + int[] uptoIdxMin = new int[n]; + uptoIdxMin[0] = nums[0]; + for (int i = 1; i < n; i++) { + uptoIdxMin[i] = Math.min(uptoIdxMin[i - 1], nums[i]); } - if (!stack.isEmpty() && stack.peek() < nums[idx]) { - return true; + Stack stack = new Stack<>(); + for (int i = n - 1; i >= 0; i--) { + if (nums[i] > uptoIdxMin[i]) { + while (!stack.isEmpty() && stack.peek() <= uptoIdxMin[i]) { + stack.pop(); + } + if (!stack.isEmpty() && stack.peek() < nums[i]) { + return true; + } + stack.push(nums[i]); + } } - stack.push(nums[idx]); - } + return false; } - return false; - } } From d202d37900aeec8a517f39041fa71efb7f53ba3a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Sep 2023 12:44:55 -0700 Subject: [PATCH 1280/1640] Create Minimum Operations to Collect Elements.java --- Easy/Minimum Operations to Collect Elements.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Minimum Operations to Collect Elements.java diff --git a/Easy/Minimum Operations to Collect Elements.java b/Easy/Minimum Operations to Collect Elements.java new file mode 100644 index 00000000..59e9d7c4 --- /dev/null +++ b/Easy/Minimum Operations to Collect Elements.java @@ -0,0 +1,16 @@ +class Solution { + public int minOperations(List nums, int k) { + boolean[] found = new boolean[k]; + int foundCount = 0; + for (int i = nums.size() - 1; i >= 0; i--) { + if (nums.get(i) <= k && !found[nums.get(i) - 1]) { + found[nums.get(i) - 1] = true; + foundCount++; + } + if (foundCount == k) { + return nums.size() - i; + } + } + return -1; + } +} From f626d03defca6cbac2a486d21015785af18f5a99 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Sep 2023 18:26:02 -0700 Subject: [PATCH 1281/1640] Update Reverse words in a String III.java --- Easy/Reverse words in a String III.java | 47 ++++++++++++++----------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/Easy/Reverse words in a String III.java b/Easy/Reverse words in a String III.java index e50dd770..c6c46160 100644 --- a/Easy/Reverse words in a String III.java +++ b/Easy/Reverse words in a String III.java @@ -1,23 +1,30 @@ class Solution { - public String reverseWords(String s) { - int idx = 0; - int n = s.length(); - StringBuilder sb = new StringBuilder(); - int start = 0; - while (idx < n) { - while (idx < n && s.charAt(idx) != ' ') { - idx++; - } - int curr = idx - 1; - while (curr >= start) { - sb.append(s.charAt(curr--)); - } - if (idx != n) { - sb.append(" "); - } - idx++; - start = idx; + public String reverseWords(String s) { + int start = 0; + int end = 0; + char[] chars = s.toCharArray(); + while (end < s.length()) { + if (chars[end] == ' ') { + if (start < end - 1) { + reverse(chars, start, end - 1); + } + end++; + start = end; + } else { + end++; + } + } + if (start < end) { + reverse(chars, start, end - 1); + } + return String.valueOf(chars); + } + + private void reverse(char[] chars, int start, int end) { + while (start < end) { + char temp = chars[start]; + chars[start++] = chars[end]; + chars[end--] = temp; + } } - return sb.toString(); - } } From ea1ff399c56360f66ad2fe864017020756c9f811 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 Oct 2023 07:25:01 -0700 Subject: [PATCH 1282/1640] Create Maximum Value of an Ordered Triplet I.java --- ...Maximum Value of an Ordered Triplet I.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Maximum Value of an Ordered Triplet I.java diff --git a/Easy/Maximum Value of an Ordered Triplet I.java b/Easy/Maximum Value of an Ordered Triplet I.java new file mode 100644 index 00000000..870e4602 --- /dev/null +++ b/Easy/Maximum Value of an Ordered Triplet I.java @@ -0,0 +1,22 @@ +class Solution { + public long maximumTripletValue(int[] nums) { + int n = nums.length; + int[] maxLeft = new int[n]; + int[] maxRight = new int[n]; + maxLeft[0] = nums[0]; + for (int i = 1; i < n; i++) { + maxLeft[i] = Math.max(maxLeft[i - 1], nums[i]); + } + maxRight[n - 1] = nums[n - 1]; + for (int i = n - 2; i >= 0; i--) { + maxRight[i] = Math.max(maxRight[i + 1], nums[i]); + } + long maxValue = -1; + for (int i = 1; i < n - 1; i++) { + long left = (long) maxLeft[i - 1]; + long right = (long) maxRight[i + 1]; + maxValue = Math.max(maxValue, (left - nums[i]) * right); + } + return maxValue == -1 ? 0 : maxValue; + } +} From ea6f89d24079ec634b9d51b8fdc2b82610d73217 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 Oct 2023 08:35:23 -0700 Subject: [PATCH 1283/1640] Update Implement Trie II (Prefix Tree).java --- Medium/Implement Trie II (Prefix Tree).java | 51 +++++++++++---------- 1 file changed, 28 insertions(+), 23 deletions(-) diff --git a/Medium/Implement Trie II (Prefix Tree).java b/Medium/Implement Trie II (Prefix Tree).java index a3bddf29..7c5b1a36 100644 --- a/Medium/Implement Trie II (Prefix Tree).java +++ b/Medium/Implement Trie II (Prefix Tree).java @@ -1,62 +1,67 @@ -public class Trie { +import java.util.Optional; - private final TrieNode root; + +class Trie { + + private final Node root; public Trie() { - this.root = new TrieNode(); + root = new Node(); } public void insert(String word) { - TrieNode curr = root; + Node curr = root; for (char c : word.toCharArray()) { if (!curr.children.containsKey(c)) { - curr.children.put(c, new TrieNode()); + curr.children.put(c, new Node()); } curr = curr.children.get(c); curr.startingWordCount++; } - curr.completeWordCount++; + curr.endingWordCount++; } public int countWordsEqualTo(String word) { - TrieNode endNode = searchWord(word); - return endNode == null ? 0 : endNode.completeWordCount; + Optional curr = search(word); + return curr.map(node -> node.endingWordCount).orElse(0); } public int countWordsStartingWith(String prefix) { - TrieNode endNode = searchWord(prefix); - return endNode == null ? 0 : endNode.startingWordCount; + Optional curr = search(prefix); + return curr.map(node -> node.startingWordCount).orElse(0); } public void erase(String word) { - TrieNode curr = root; + Node curr = root; for (char c : word.toCharArray()) { curr = curr.children.get(c); curr.startingWordCount--; } - curr.completeWordCount--; + curr.endingWordCount--; } - private TrieNode searchWord(String word) { - TrieNode curr = root; + private Optional search(String word) { + Node curr = root; for (char c : word.toCharArray()) { if (!curr.children.containsKey(c)) { - return null; + return Optional.empty(); } curr = curr.children.get(c); } - return curr; + return Optional.of(curr); } - private static class TrieNode { - Map children; - int completeWordCount; - int startingWordCount; + private static class Node { - public TrieNode() { - this.children = new HashMap<>(); - this.completeWordCount = 0; + private int startingWordCount; + private int endingWordCount; + + private final Map children; + + public Node() { this.startingWordCount = 0; + this.endingWordCount = 0; + this.children = new HashMap<>(); } } } From c7f0398ba830f64d54f3de4f344da2c67d2c875f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 2 Oct 2023 06:40:27 -0700 Subject: [PATCH 1284/1640] Create Remove Colored Pieces if Both Neighbors are the Same Color.java --- ...ces if Both Neighbors are the Same Color.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Remove Colored Pieces if Both Neighbors are the Same Color.java diff --git a/Medium/Remove Colored Pieces if Both Neighbors are the Same Color.java b/Medium/Remove Colored Pieces if Both Neighbors are the Same Color.java new file mode 100644 index 00000000..950afa6f --- /dev/null +++ b/Medium/Remove Colored Pieces if Both Neighbors are the Same Color.java @@ -0,0 +1,16 @@ +class Solution { + public boolean winnerOfGame(String colors) { + int alice = 0; + int bob = 0; + for (int i = 1; i < colors.length() - 1; i++) { + if (colors.charAt(i - 1) == colors.charAt(i) && colors.charAt(i + 1) == colors.charAt(i)) { + if (colors.charAt(i) == 'A') { + alice++; + } else { + bob++; + } + } + } + return alice - bob > 0; + } +} From 64077658a5f27876f8118439012ae020f4a4532c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 2 Oct 2023 17:15:32 -0700 Subject: [PATCH 1285/1640] Update Number of Good Pairs.java --- Easy/Number of Good Pairs.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Easy/Number of Good Pairs.java b/Easy/Number of Good Pairs.java index d3c347af..edb3a754 100644 --- a/Easy/Number of Good Pairs.java +++ b/Easy/Number of Good Pairs.java @@ -1,11 +1,11 @@ class Solution { - public int numIdenticalPairs(int[] nums) { - Map map = new HashMap<>(); - int count = 0; - for (int num : nums) { - count += map.getOrDefault(num, 0); - map.put(num, map.getOrDefault(num, 0) + 1); + public int numIdenticalPairs(int[] nums) { + Map map = new HashMap<>(); + int count = 0; + for (int num : nums) { + count += map.getOrDefault(num, 0); + map.put(num, map.getOrDefault(num, 0) + 1); + } + return count; } - return count; - } } From 13ffcb896d6fe6ffa120ce3d89070d629ca6e41c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Oct 2023 05:30:41 -0700 Subject: [PATCH 1286/1640] Update Design HashMap.java --- Easy/Design HashMap.java | 66 +++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/Easy/Design HashMap.java b/Easy/Design HashMap.java index d59fe9e1..ff29c920 100644 --- a/Easy/Design HashMap.java +++ b/Easy/Design HashMap.java @@ -1,42 +1,40 @@ class MyHashMap { - /** Initialize your data structure here. */ - Integer[][] map; - int NUM_OF_BUCKETS = 1000; - int BUCKET_SIZE = 1000; - public MyHashMap() { - map = new Integer[NUM_OF_BUCKETS][BUCKET_SIZE]; - } + private static final int BUCKET_COUNT = 1001; - /** value will always be non-negative. */ - public void put(int key, int value) { - Integer[] bucket = getBucket(key); - int keyHash = getKeyHash(key); - bucket[keyHash] = value; - } + private static final int BUCKET_SIZE = 1001; - /** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */ - public int get(int key) { - Integer[] bucket = getBucket(key); - int keyHash = getKeyHash(key); - return bucket[keyHash] == null ? -1 : bucket[keyHash]; - } + private final Integer[][] map; - /** Removes the mapping of the specified value key if this map contains a mapping for the key */ - public void remove(int key) { - Integer[] bucket = getBucket(key); - int keyHash = getKeyHash(key); - bucket[keyHash] = null; - } - - private Integer[] getBucket(int key) { - int bucketIdx = key / BUCKET_SIZE; - return map[bucketIdx]; - } - - private Integer getKeyHash(int key) { - return key % BUCKET_SIZE; - } + public MyHashMap() { + this.map = new Integer[BUCKET_COUNT][BUCKET_SIZE]; + } + + public void put(int key, int value) { + Position position = getPosition(key); + map[position.bucket()][position.index()] = value; + } + + public int get(int key) { + Position position = getPosition(key); + Integer value = map[position.bucket()][position.index()]; + return value == null ? -1 : value; + } + + public void remove(int key) { + Position position = getPosition(key); + map[position.bucket()][position.index()] = null; + } + + private static Position getPosition(int key) { + int bucket = key / BUCKET_COUNT; + int index = key % BUCKET_SIZE; + return new Position(bucket, index); + } + + private static record Position(int bucket, int index) { + + } } /** From 26fd48c8f78ecbc93eef72f621622e388014f0bb Mon Sep 17 00:00:00 2001 From: varunu28 Date: Wed, 4 Oct 2023 12:25:33 -0700 Subject: [PATCH 1287/1640] Updated README --- Easy/README.md | 1179 ++++++++++++++++++----------------- Hard/README.md | 236 +++---- Medium/README.md | 1547 ++++++++++++++++++++++++---------------------- README.md | 6 +- 4 files changed, 1528 insertions(+), 1440 deletions(-) diff --git a/Easy/README.md b/Easy/README.md index d3b1e72e..ff578ea7 100644 --- a/Easy/README.md +++ b/Easy/README.md @@ -1,574 +1,609 @@ -# Easy LeetCode Java Solutions +# Easy LeetCode-Java-Solutions S.no | Coding Problem --- | --- -1 | [1-bit and 2-bit Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/1-bit%20and%202-bit%20Characters.java) -2 | [A Number After a Double Reversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/A%20Number%20After%20a%20Double%20Reversal.java) -3 | [Add Binary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Binary.java) -4 | [Add Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Digits.java) -5 | [Add Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Strings.java) -6 | [Add to Array-Form of Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20to%20Array-Form%20of%20Integer.java) -7 | [Alternating Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Alternating%20Digit%20Sum.java) -8 | [Apply Operations to an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Apply%20Operations%20to%20an%20Array.java) -9 | [Armstrong Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Armstrong%20Number.java) -10 | [Arranging Coins](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Arranging%20Coins.java) -11 | [Array Partition I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Partition%20I.java) -12 | [Array Transformation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Transformation.java) -13 | [Assign Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Assign%20Cookies.java) -14 | [Available Captures for Rook](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Available%20Captures%20for%20Rook.java) -15 | [Average Salary Excluding the Minimum and Maximum Salary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Salary%20Excluding%20the%20Minimum%20and%20Maximum%20Salary.java) -16 | [Average Value of Even Numbers That Are Divisible by Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Value%20of%20Even%20Numbers%20That%20Are%20Divisible%20by%20Three.java) -17 | [Average of Levels in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20of%20Levels%20in%20Binary%20Tree.java) -18 | [Backspace String Compare](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Backspace%20String%20Compare.java) -19 | [Balanced Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Balanced%20Binary%20Tree.java) -20 | [Base 7](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Base%207.java) -21 | [Baseball Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Baseball%20Game.java) -22 | [Best Poker Hand](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Poker%20Hand.java) -23 | [Best Time to Buy and Sell Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Time%20to%20Buy%20and%20Sell%20Stock.java) -24 | [Binary Gap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Gap.java) -25 | [Binary Number with Alternating Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Number%20with%20Alternating%20Bits.java) -26 | [Binary Prefix Divisible By 5](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Prefix%20Divisible%20By%205.java) -27 | [Binary Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Search.java) -28 | [Binary Tree Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Inorder%20Traversal.java) -29 | [Binary Tree Level Order Traversal II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Level%20Order%20Traversal%20II.java) -30 | [Binary Tree Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Paths.java) -31 | [Binary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Postorder%20Traversal.java) -32 | [Binary Tree Tilt](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Tilt.java) -33 | [Binary Watch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Watch.java) -34 | [Buddy Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Buddy%20Strings.java) -35 | [Build Array from Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20Array%20from%20Permutation.java) -36 | [Build an Array With Stack Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20an%20Array%20With%20Stack%20Operations.java) -37 | [Bulls and Cows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bulls%20and%20Cows.java) -38 | [Calculate Amount Paid in Taxes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Amount%20Paid%20in%20Taxes.java) -39 | [Calculate Delayed Arrival Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Delayed%20Arrival%20Time.java) -40 | [Calculate Digit Sum of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Digit%20Sum%20of%20a%20String.java) -41 | [Calculate Money in Leetcode Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Money%20in%20Leetcode%20Bank.java) -42 | [Can Make Arithmetic Progression From Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Make%20Arithmetic%20Progression%20From%20Sequence.java) -43 | [Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) -44 | [Capitalize the Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Capitalize%20the%20Title.java) -45 | [Categorize Box According to Criteria](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Categorize%20Box%20According%20to%20Criteria.java) -46 | [Cells in a Range on an Excel Sheet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20in%20a%20Range%20on%20an%20Excel%20Sheet.java) -47 | [Cells with Odd Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20with%20Odd%20Values%20in%20a%20Matrix.java) -48 | [Check Array Formation Through Concatenation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Array%20Formation%20Through%20Concatenation.java) -49 | [Check Distances Between Same Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Distances%20Between%20Same%20Letters.java) -50 | [Check If It Is a Straight Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20It%20Is%20a%20Straight%20Line.java) -51 | [Check If N and Its Double Exist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20N%20and%20Its%20Double%20Exist.java) -52 | [Check If String Is a Prefix of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20String%20Is%20a%20Prefix%20of%20Array.java) -53 | [Check If Two String Arrays are Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20Two%20String%20Arrays%20are%20Equivalent.java) -54 | [Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) -55 | [Check If a Word Occurs As a Prefix of Any Word in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Word%20Occurs%20As%20a%20Prefix%20of%20Any%20Word%20in%20a%20Sentence.java) -56 | [Check Whether Two Strings are Almost Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Whether%20Two%20Strings%20are%20Almost%20Equivalent.java) -57 | [Check if All A's Appears Before All B's](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20A's%20Appears%20Before%20All%20B's.java) -58 | [Check if All Characters Have Equal Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20Characters%20Have%20Equal%20Number%20of%20Occurrences.java) -59 | [Check if All the Integers in a Range Are Covered](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered.java) -60 | [Check if Array Is Sorted and Rotated](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20Is%20Sorted%20and%20Rotated.java) -61 | [Check if Binary String Has at Most One Segment of Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Binary%20String%20Has%20at%20Most%20One%20Segment%20of%20Ones.java) -62 | [Check if Every Row and Column Contains All Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Every%20Row%20and%20Column%20Contains%20All%20Numbers.java) -63 | [Check if Matrix Is X-Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Matrix%20Is%20X-Matrix.java) -64 | [Check if Number Has Equal Digit Count and Digit Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Number%20Has%20Equal%20Digit%20Count%20and%20Digit%20Value.java) -65 | [Check if Numbers Are Ascending in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Numbers%20Are%20Ascending%20in%20a%20Sentence.java) -66 | [Check if One String Swap Can Make Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20One%20String%20Swap%20Can%20Make%20Strings%20Equal.java) -67 | [Check if String Is Decomposable Into Value-Equal Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20String%20Is%20Decomposable%20Into%20Value-Equal%20Substrings.java) -68 | [Check if Word Equals Summation of Two Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Word%20Equals%20Summation%20of%20Two%20Words.java) -69 | [Check if an Array Is Consecutive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20an%20Array%20Is%20Consecutive.java) -70 | [Check if the Sentence Is Pangram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20the%20Sentence%20Is%20Pangram.java) -71 | [Circular Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Circular%20Sentence.java) -72 | [Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) -73 | [Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) -74 | [Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) -75 | [Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) -76 | [Concatenation of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Concatenation%20of%20Array.java) -77 | [Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) -78 | [Consecutive Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Consecutive%20Characters.java) -79 | [Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) -80 | [Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) -81 | [Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) -82 | [Contains Duplicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate.java) -83 | [Convert 1D Array Into 2D Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%201D%20Array%20Into%202D%20Array.java) -84 | [Convert BST to Greater Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20Greater%20Tree.java) -85 | [Convert Binary Number in a Linked List to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Binary%20Number%20in%20a%20Linked%20List%20to%20Integer.java) -86 | [Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) -87 | [Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) -88 | [Convert the Temperature](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20the%20Temperature.java) -89 | [Count Asterisks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Asterisks.java) -90 | [Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) -91 | [Count Common Words With One Occurrence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Common%20Words%20With%20One%20Occurrence.java) -92 | [Count Distinct Numbers on Board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Distinct%20Numbers%20on%20Board.java) -93 | [Count Elements With Strictly Smaller and Greater Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Elements%20With%20Strictly%20Smaller%20and%20Greater%20Elements.java) -94 | [Count Equal and Divisible Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Equal%20and%20Divisible%20Pairs%20in%20an%20Array.java) -95 | [Count Good Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Good%20Triplets.java) -96 | [Count Hills and Valleys in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Hills%20and%20Valleys%20in%20an%20Array.java) -97 | [Count Integers With Even Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Integers%20With%20Even%20Digit%20Sum.java) -98 | [Count Items Matching a Rule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Items%20Matching%20a%20Rule.java) -99 | [Count Largest Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Largest%20Group.java) -100 | [Count Negative Numbers in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Negative%20Numbers%20in%20a%20Sorted%20Matrix.java) -101 | [Count Number of Pairs With Absolute Difference K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Number%20of%20Pairs%20With%20Absolute%20Difference%20K.java) -102 | [Count Odd Numbers in an Interval Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Odd%20Numbers%20in%20an%20Interval%20Range.java) -103 | [Count Operations to Obtain Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Operations%20to%20Obtain%20Zero.java) -104 | [Count Pairs Of Similar Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Pairs%20Of%20Similar%20Strings.java) -105 | [Count Prefixes of a Given String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Prefixes%20of%20a%20Given%20String.java) -106 | [Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) -107 | [Count Special Quadruplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Special%20Quadruplets.java) -108 | [Count Square Sum Triples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Square%20Sum%20Triples.java) -109 | [Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) -110 | [Count Vowel Substrings of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Vowel%20Substrings%20of%20a%20String.java) -111 | [Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) -112 | [Count the Digits That Divide a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Digits%20That%20Divide%20a%20Number.java) -113 | [Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) -114 | [Count the Number of Vowel Strings in Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Vowel%20Strings%20in%20Range.java) -115 | [Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Bits.java) -116 | [Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) -117 | [Counting Words With a Given Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Words%20With%20a%20Given%20Prefix.java) -118 | [Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) -119 | [Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) -120 | [Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) -121 | [DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) -122 | [Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) -123 | [Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) -124 | [Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) -125 | [Decode the Message](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20the%20Message.java) -126 | [Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) -127 | [Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) -128 | [Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) -129 | [Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) -130 | [Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) -131 | [Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) -132 | [Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) -133 | [Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) -134 | [Delete Node in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Node%20in%20a%20Linked%20List.java) -135 | [Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) -136 | [Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) -137 | [Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) -138 | [Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) -139 | [Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) -140 | [Design an Ordered Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20Stream.java) -141 | [Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) -142 | [Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) -143 | [Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) -144 | [Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) -145 | [Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) -146 | [Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) -147 | [Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) -148 | [Determine if Two Events Have Conflict](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20Two%20Events%20Have%20Conflict.java) -149 | [Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) -150 | [Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) -151 | [Difference Between Element Sum and Digit Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Difference%20Between%20Element%20Sum%20and%20Digit%20Sum%20of%20an%20Array.java) -152 | [Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) -153 | [Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) -154 | [Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) -155 | [Distribute Money to Maximum Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Money%20to%20Maximum%20Children.java) -156 | [Divide Array Into Equal Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20Array%20Into%20Equal%20Pairs.java) -157 | [Divide a String Into Groups of Size k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20a%20String%20Into%20Groups%20of%20Size%20k.java) -158 | [Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) -159 | [Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) -160 | [Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) -161 | [Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) -162 | [Evaluate Boolean Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Evaluate%20Boolean%20Binary%20Tree.java) -163 | [Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) -164 | [Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) -165 | [Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) -166 | [Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) -167 | [Fibonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Number.java) -168 | [Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) -169 | [Final Value of Variable After Performing Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Value%20of%20Variable%20After%20Performing%20Operations.java) -170 | [Find All K-Distant Indices in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20K-Distant%20Indices%20in%20an%20Array.java) -171 | [Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) -172 | [Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) -173 | [Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) -174 | [Find Closest Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Closest%20Number%20to%20Zero.java) -175 | [Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) -176 | [Find First Palindromic String in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20First%20Palindromic%20String%20in%20the%20Array.java) -177 | [Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) -178 | [Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) -179 | [Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) -180 | [Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) -181 | [Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) -182 | [Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) -183 | [Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) -184 | [Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) -185 | [Find Resultant Array After Removing Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Resultant%20Array%20After%20Removing%20Anagrams.java) -186 | [Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) -187 | [Find Subarrays With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Subarrays%20With%20Equal%20Sum.java) -188 | [Find Target Indices After Sorting Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Target%20Indices%20After%20Sorting%20Array.java) -189 | [Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) -190 | [Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) -191 | [Find if Path Exists in Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20if%20Path%20Exists%20in%20Graph.java) -192 | [Find the Array Concatenation Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Array%20Concatenation%20Value.java) -193 | [Find the Difference of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Difference%20of%20Two%20Arrays.java) -194 | [Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) -195 | [Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) -196 | [Find the K-Beauty of a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20K-Beauty%20of%20a%20Number.java) -197 | [Find the Longest Balanced Substring of a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Longest%20Balanced%20Substring%20of%20a%20Binary%20String.java) -198 | [Find the Middle Index in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Middle%20Index%20in%20Array.java) -199 | [Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) -200 | [Find the Width of Columns of a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Width%20of%20Columns%20of%20a%20Grid.java) -201 | [Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) -202 | [Finding 3-Digit Even Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Finding%203-Digit%20Even%20Numbers.java) -203 | [First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) -204 | [First Letter to Appear Twice](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Letter%20to%20Appear%20Twice.java) -205 | [First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) -206 | [Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) -207 | [Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) -208 | [Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) -209 | [Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) -210 | [Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) -211 | [Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) -212 | [Form Smallest Number From Two Digit Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Form%20Smallest%20Number%20From%20Two%20Digit%20Arrays.java) -213 | [Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) -214 | [Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) -215 | [Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) -216 | [Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) -217 | [Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) -218 | [Greatest English Letter in Upper and Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20English%20Letter%20in%20Upper%20and%20Lower%20Case.java) -219 | [Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) -220 | [Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) -221 | [Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) -222 | [Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) -223 | [Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) -224 | [Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) -225 | [Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) -226 | [High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) -227 | [How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) -228 | [How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) -229 | [Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) -230 | [Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) -231 | [Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) -232 | [Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) -233 | [Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) -234 | [Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) -235 | [Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) -236 | [Intersection of Multiple Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Multiple%20Arrays.java) -237 | [Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) -238 | [Intersection of Two Arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays%20II.java) -239 | [Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) -240 | [Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) -241 | [Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) -242 | [Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) -243 | [Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) -244 | [Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) -245 | [Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) -246 | [Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) -247 | [K Items With the Maximum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K%20Items%20With%20the%20Maximum%20Sum.java) -248 | [K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) -249 | [Keep Multiplying Found Values by Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keep%20Multiplying%20Found%20Values%20by%20Two.java) -250 | [Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) -251 | [Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) -252 | [Kth Distinct String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Distinct%20String%20in%20an%20Array.java) -253 | [Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) -254 | [Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) -255 | [Largest 3-Same-Digit Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%203-Same-Digit%20Number%20in%20String.java) -256 | [Largest Local Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Local%20Values%20in%20a%20Matrix.java) -257 | [Largest Number After Digit Swaps by Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20After%20Digit%20Swaps%20by%20Parity.java) -258 | [Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) -259 | [Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) -260 | [Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) -261 | [Largest Positive Integer That Exists With Its Negative](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Positive%20Integer%20That%20Exists%20With%20Its%20Negative.java) -262 | [Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) -263 | [Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) -264 | [Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) -265 | [Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) -266 | [Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) -267 | [Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) -268 | [Left and Right Sum Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Left%20and%20Right%20Sum%20Differences.java) -269 | [Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) -270 | [Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) -271 | [Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) -272 | [License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) -273 | [Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) -274 | [Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) -275 | [Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) -276 | [Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) -277 | [Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) -278 | [Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) -279 | [Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) -280 | [Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) -281 | [Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) -282 | [Longest Subsequence With Limited Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Subsequence%20With%20Limited%20Sum.java) -283 | [Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) -284 | [Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) -285 | [Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) -286 | [Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) -287 | [Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) -288 | [Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) -289 | [Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) -290 | [Make Array Zero by Subtracting Equal Amounts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20Array%20Zero%20by%20Subtracting%20Equal%20Amounts.java) -291 | [Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) -292 | [Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) -293 | [Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) -294 | [Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) -295 | [Maximize Sum Of Array After K Negations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Sum%20Of%20Array%20After%20K%20Negations.java) -296 | [Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) -297 | [Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) -298 | [Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) -299 | [Maximum Count of Positive Integer and Negative Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Count%20of%20Positive%20Integer%20and%20Negative%20Integer.java) -300 | [Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) -301 | [Maximum Difference Between Increasing Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20Between%20Increasing%20Elements.java) -302 | [Maximum Difference by Remapping a Digit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20by%20Remapping%20a%20Digit.java) -303 | [Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) -304 | [Maximum Enemy Forts That Can Be Captured](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Enemy%20Forts%20That%20Can%20Be%20Captured.java) -305 | [Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) -306 | [Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) -307 | [Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) -308 | [Maximum Number of Pairs in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Pairs%20in%20Array.java) -309 | [Maximum Number of Words Found in Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20Found%20in%20Sentences.java) -310 | [Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) -311 | [Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) -312 | [Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) -313 | [Maximum Product of Three Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Three%20Numbers.java) -314 | [Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) -315 | [Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) -316 | [Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) -317 | [Maximum Sum With Exactly K Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Sum%20With%20Exactly%20K%20Elements.java) -318 | [Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) -319 | [Maximum Value of a String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20a%20String%20in%20an%20Array.java) -320 | [Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) -321 | [Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) -322 | [Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) -323 | [Merge Similar Items](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Similar%20Items.java) -324 | [Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) -325 | [Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) -326 | [Merge Two 2D Arrays by Summing Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%202D%20Arrays%20by%20Summing%20Values.java) -327 | [Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) -328 | [Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) -329 | [Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) -330 | [Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) -331 | [Min Max Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Max%20Game.java) -332 | [Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) -333 | [Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) -334 | [Minimum Amount of Time to Fill Cups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Amount%20of%20Time%20to%20Fill%20Cups.java) -335 | [Minimum Bit Flips to Convert Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Bit%20Flips%20to%20Convert%20Number.java) -336 | [Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) -337 | [Minimum Common Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Common%20Value.java) -338 | [Minimum Cost of Buying Candies With Discount](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20of%20Buying%20Candies%20With%20Discount.java) -339 | [Minimum Cost to Move Chips to The Same Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20to%20Move%20Chips%20to%20The%20Same%20Position.java) -340 | [Minimum Cuts to Divide a Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cuts%20to%20Divide%20a%20Circle.java) -341 | [Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) -342 | [Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) -343 | [Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) -344 | [Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) -345 | [Minimum Hours of Training to Win a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Hours%20of%20Training%20to%20Win%20a%20Competition.java) -346 | [Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) -347 | [Minimum Moves to Convert String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Convert%20String.java) -348 | [Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) -349 | [Minimum Number of Moves to Seat Everyone](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Moves%20to%20Seat%20Everyone.java) -350 | [Minimum Number of Operations to Convert Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Operations%20to%20Convert%20Time.java) -351 | [Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) -352 | [Minimum Recolors to Get K Consecutive Black Blocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Recolors%20to%20Get%20K%20Consecutive%20Black%20Blocks.java) -353 | [Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) -354 | [Minimum Sum of Four Digit Number After Splitting Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Sum%20of%20Four%20Digit%20Number%20After%20Splitting%20Digits.java) -355 | [Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) -356 | [Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) -357 | [Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) -358 | [Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) -359 | [Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) -360 | [Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) -361 | [Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Ranges.java) -362 | [Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) -363 | [Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) -364 | [Most Frequent Even Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Even%20Element.java) -365 | [Most Frequent Number Following Key In an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Number%20Following%20Key%20In%20an%20Array.java) -366 | [Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) -367 | [Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) -368 | [Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) -369 | [N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) -370 | [N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) -371 | [N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) -372 | [N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) -373 | [Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) -374 | [Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) -375 | [Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) -376 | [Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) -377 | [Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) -378 | [Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) -379 | [Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) -380 | [Number of Arithmetic Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Arithmetic%20Triplets.java) -381 | [Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) -382 | [Number of Common Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Common%20Factors.java) -383 | [Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) -384 | [Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) -385 | [Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) -386 | [Number of Distinct Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Distinct%20Averages.java) -387 | [Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) -388 | [Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) -389 | [Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) -390 | [Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) -391 | [Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) -392 | [Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) -393 | [Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) -394 | [Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) -395 | [Number of Unequal Triplets in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Unequal%20Triplets%20in%20Array.java) -396 | [Number of Valid Words in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Valid%20Words%20in%20a%20Sentence.java) -397 | [Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) -398 | [Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) -399 | [Odd String Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Odd%20String%20Difference.java) -400 | [Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) -401 | [Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) -402 | [Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) -403 | [Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) -404 | [Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) -405 | [Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) -406 | [Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) -407 | [Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) -408 | [Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) -409 | [Pass the Pillow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pass%20the%20Pillow.java) -410 | [Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) -411 | [Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) -412 | [Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) -413 | [Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Peak%20Index%20in%20a%20Mountain%20Array.java) -414 | [Percentage of Letter in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Percentage%20of%20Letter%20in%20String.java) -415 | [Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) -416 | [Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) -417 | [Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) -418 | [Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) -419 | [Power of Four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Four.java) -420 | [Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) -421 | [Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) -422 | [Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) -423 | [Prime In Diagonal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Prime%20In%20Diagonal.java) -424 | [Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) -425 | [Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) -426 | [Range Sum of BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20of%20BST.java) -427 | [Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) -428 | [Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) -429 | [Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) -430 | [Rearrange Characters to Make Target String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Characters%20to%20Make%20Target%20String.java) -431 | [Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) -432 | [Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rectangle%20Overlap.java) -433 | [Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) -434 | [Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) -435 | [Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) -436 | [Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) -437 | [Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) -438 | [Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) -439 | [Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) -440 | [Remove Digit From Number to Maximize Result](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Digit%20From%20Number%20to%20Maximize%20Result.java) -441 | [Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) -442 | [Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) -443 | [Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) -444 | [Remove Letter To Equalize Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Letter%20To%20Equalize%20Frequency.java) -445 | [Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) -446 | [Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) -447 | [Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) -448 | [Remove Palindromic Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Palindromic%20Subsequences.java) -449 | [Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) -450 | [Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) -451 | [Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) -452 | [Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) -453 | [Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) -454 | [Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) -455 | [Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) -456 | [Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) -457 | [Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) -458 | [Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) -459 | [Reverse Prefix of Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Prefix%20of%20Word.java) -460 | [Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) -461 | [Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) -462 | [Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) -463 | [Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) -464 | [Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) -465 | [Rings and Rods](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rings%20and%20Rods.java) -466 | [Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) -467 | [Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) -468 | [Root Equals Sum of Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Root%20Equals%20Sum%20of%20Children.java) -469 | [Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) -470 | [Row With Maximum Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Row%20With%20Maximum%20Ones.java) -471 | [Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) -472 | [Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) -473 | [Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) -474 | [Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) -475 | [Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) -476 | [Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) -477 | [Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) -478 | [Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) -479 | [Separate the Digits in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Separate%20the%20Digits%20in%20an%20Array.java) -480 | [Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) -481 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) -482 | [Shortest Distance to Target String in a Circular Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20Target%20String%20in%20a%20Circular%20Array.java) -483 | [Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) -484 | [Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) -485 | [Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) -486 | [Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) -487 | [Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) -488 | [Similar RGB Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Similar%20RGB%20Color.java) -489 | [Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) -490 | [Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) -491 | [Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) -492 | [Smallest Even Multiple](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Even%20Multiple.java) -493 | [Smallest Index With Equal Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Index%20With%20Equal%20Value.java) -494 | [Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) -495 | [Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) -496 | [Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) -497 | [Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) -498 | [Sort Even and Odd Indices Independently](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Even%20and%20Odd%20Indices%20Independently.java) -499 | [Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) -500 | [Sort the People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20the%20People.java) -501 | [Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) -502 | [Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) -503 | [Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) -504 | [Split With Minimum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20With%20Minimum%20Sum.java) -505 | [Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) -506 | [SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) -507 | [Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) -508 | [String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) -509 | [String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) -510 | [Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) -511 | [Strong Password Checker II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strong%20Password%20Checker%20II.java) -512 | [Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) -513 | [Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) -514 | [Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) -515 | [Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) -516 | [Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) -517 | [Sum Of Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20Of%20Two%20Integers.java) -518 | [Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) -519 | [Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) -520 | [Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) -521 | [Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) -522 | [Sum of Left Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Left%20Leaves.java) -523 | [Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) -524 | [Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) -525 | [Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) -526 | [Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) -527 | [Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) -528 | [Take Gifts From the Richest Pile](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Take%20Gifts%20From%20the%20Richest%20Pile.java) -529 | [Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teemo%20Attacking.java) -530 | [Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) -531 | [The Employee That Worked on the Longest Task](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20Employee%20That%20Worked%20on%20the%20Longest%20Task.java) -532 | [The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) -533 | [Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) -534 | [Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) -535 | [Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) -536 | [Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) -537 | [Time Needed to Buy Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Time%20Needed%20to%20Buy%20Tickets.java) -538 | [To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) -539 | [Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) -540 | [Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) -541 | [Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) -542 | [Two Furthest Houses With Different Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Furthest%20Houses%20With%20Different%20Colors.java) -543 | [Two Out of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Out%20of%20Three.java) -544 | [Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) -545 | [Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) -546 | [Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) -547 | [Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) -548 | [Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) -549 | [Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) -550 | [Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) -551 | [Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) -552 | [Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) -553 | [Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) -554 | [Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) -555 | [Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) -556 | [Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) -557 | [Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) -558 | [Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) -559 | [Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) -560 | [Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) -561 | [Valid Word Abbreviation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbreviation.java) -562 | [Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) -563 | [Valid Word Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Square.java) -564 | [Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) -565 | [Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) -566 | [Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) -567 | [X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) -568 | [XOR Operation in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/XOR%20Operation%20in%20an%20Array.java) -569 | [nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) -570 | [range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) -571 | [trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) +1|[Count Binary Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Binary%20Substrings.java) +2|[Check if All A's Appears Before All B's](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20A's%20Appears%20Before%20All%20B's.java) +3|[Longest Harmonious Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Harmonious%20Subsequence.java) +4|[Missing Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Ranges.java) +5|[High Five](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/High%20Five.java) +6|[Binary Tree Tilt](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Tilt.java) +7|[Number of Boomerangs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Boomerangs.java) +8|[Count the Number of Consistent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Consistent%20Strings.java) +9|[Sentence Similarity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sentence%20Similarity.java) +10|[Strong Password Checker II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strong%20Password%20Checker%20II.java) +11|[Perform String Shifts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perform%20String%20Shifts.java) +12|[Kth Largest Element in a Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Largest%20Element%20in%20a%20Stream.java) +13|[Kth Missing Positive Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Missing%20Positive%20Number.java) +14|[Check If String Is a Prefix of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20String%20Is%20a%20Prefix%20of%20Array.java) +15|[Capitalize the Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Capitalize%20the%20Title.java) +16|[The K Weakest Rows in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20K%20Weakest%20Rows%20in%20a%20Matrix.java) +17|[Missing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number.java) +18|[Remove Duplicates from Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20from%20Sorted%20Array.java) +19|[Implement strStr](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20strStr.java) +20|[Reverse String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String.java) +21|[Create Target Array in the Given Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Create%20Target%20Array%20in%20the%20Given%20Order.java) +22|[Increasing Order Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Order%20Search%20Tree.java) +23|[Minimum Number of Moves to Seat Everyone](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Moves%20to%20Seat%20Everyone.java) +24|[Minimum Absolute Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Absolute%20Difference.java) +25|[Maximum 69 Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%2069%20Number.java) +26|[Largest Perimeter Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Perimeter%20Triangle.java) +27|[Minimum Cost of Buying Candies With Discount](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20of%20Buying%20Candies%20With%20Discount.java) +28|[Number of Equivalent Domino Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Equivalent%20Domino%20Pairs.java) +29|[Summary Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Summary%20Ranges.java) +30|[Binary Number with Alternating Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Number%20with%20Alternating%20Bits.java) +31|[Find the Distinct Difference Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distinct%20Difference%20Array.java) +32|[Buy Two Chocolates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Buy%20Two%20Chocolates.java) +33|[Intersection of Multiple Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Multiple%20Arrays.java) +34|[Palindrome Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Linked%20List.java) +35|[Rectangle Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rectangle%20Overlap.java) +36|[Intersection of Three Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Three%20Sorted%20Arrays.java) +37|[Minimum Changes To Make Alternating Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Changes%20To%20Make%20Alternating%20Binary%20String.java) +38|[Jewels and Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Jewels%20and%20Stones.java) +39|[Number of Valid Words in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Valid%20Words%20in%20a%20Sentence.java) +40|[Greatest English Letter in Upper and Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20English%20Letter%20in%20Upper%20and%20Lower%20Case.java) +41|[Unique Email Addresses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Email%20Addresses.java) +42|[X of a Kind in a Deck of Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/X%20of%20a%20Kind%20in%20a%20Deck%20of%20Cards.java) +43|[Longest Nice Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Nice%20Substring.java) +44|[Count Primes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Primes.java) +45|[Positions of Large Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Positions%20of%20Large%20Groups.java) +46|[Maximum Population Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Population%20Year.java) +47|[Min Cost Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Cost%20Climbing%20Stairs.java) +48|[Number of Days Between Two Dates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20Between%20Two%20Dates.java) +49|[Minimum Distance to the Target Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20to%20the%20Target%20Element.java) +50|[Path Crossing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Crossing.java) +51|[Check If N and Its Double Exist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20N%20and%20Its%20Double%20Exist.java) +52|[Word Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Word%20Pattern.java) +53|[Maximum Nesting Depth of the Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Nesting%20Depth%20of%20the%20Parentheses.java) +54|[Two Sum IV - Input is a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20IV%20-%20Input%20is%20a%20BST.java) +55|[Find Positive Integer Solution for a Given Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Positive%20Integer%20Solution%20for%20a%20Given%20Equation.java) +56|[Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hamming%20Distance.java) +57|[Defuse the Bomb](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defuse%20the%20Bomb.java) +58|[Check if The Number is Fascinating](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20The%20Number%20is%20Fascinating.java) +59|[Minimum Common Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Common%20Value.java) +60|[Final Prices With a Special Discount in a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Prices%20With%20a%20Special%20Discount%20in%20a%20Shop.java) +61|[Plus One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Plus%20One.java) +62|[Submission Detail](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Submission%20Detail.java) +63|[Rotate String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rotate%20String.java) +64|[Minimum Depth of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Depth%20of%20a%20Binary%20Tree.java) +65|[Power of Four](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Four.java) +66|[Valid Perfect Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Perfect%20Square.java) +67|[Find N Unique Integers Sum up to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20N%20Unique%20Integers%20Sum%20up%20to%20Zero.java) +68|[Remove Trailing Zeros From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Trailing%20Zeros%20From%20a%20String.java) +69|[Paint Fence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20Fence.java) +70|[Detect Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Capital.java) +71|[XOR Operation in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/XOR%20Operation%20in%20an%20Array.java) +72|[Divide a String Into Groups of Size k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20a%20String%20Into%20Groups%20of%20Size%20k.java) +73|[Flipping an Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flipping%20an%20Image.java) +74|[Subtract the Product and Sum of Digits of an Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtract%20the%20Product%20and%20Sum%20of%20Digits%20of%20an%20Integer.java) +75|[Two Sum III - Data Structure Design](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20III%20-%20Data%20Structure%20Design.java) +76|[Check if Binary String Has at Most One Segment of Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Binary%20String%20Has%20at%20Most%20One%20Segment%20of%20Ones.java) +77|[Number Complement](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Complement.java) +78|[Longer Contiguous Segments of Ones than Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longer%20Contiguous%20Segments%20of%20Ones%20than%20Zeros.java) +79|[Design HashSet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashSet.java) +80|[Convert 1D Array Into 2D Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%201D%20Array%20Into%202D%20Array.java) +81|[Odd String Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Odd%20String%20Difference.java) +82|[Remove Digit From Number to Maximize Result](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Digit%20From%20Number%20to%20Maximize%20Result.java) +83|[Find Mode in Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Mode%20in%20Binary%20Search%20Tree.java) +84|[Count Hills and Valleys in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Hills%20and%20Valleys%20in%20an%20Array.java) +85|[Maximum Repeating Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Repeating%20Substring.java) +86|[Number of Unequal Triplets in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Unequal%20Triplets%20in%20Array.java) +87|[Split Strings by Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20Strings%20by%20Separator.java) +88|[Find Closest Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Closest%20Number%20to%20Zero.java) +89|[1-bit and 2-bit Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/1-bit%20and%202-bit%20Characters.java) +90|[Binary Gap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Gap.java) +91|[Subtree of Another Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Subtree%20of%20Another%20Tree.java) +92|[Binary Tree Level Order Traversal II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Level%20Order%20Traversal%20II.java) +93|[Count Prefixes of a Given String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Prefixes%20of%20a%20Given%20String.java) +94|[Find the Width of Columns of a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Width%20of%20Columns%20of%20a%20Grid.java) +95|[Defanging an IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Defanging%20an%20IP%20Address.java) +96|[Find Target Indices After Sorting Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Target%20Indices%20After%20Sorting%20Array.java) +97|[Truncate Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Truncate%20Sentence.java) +98|[Diameter of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diameter%20of%20Binary%20Tree.java) +99|[Best Poker Hand](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Poker%20Hand.java) +100|[Range Sum of BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20of%20BST.java) +101|[Maximum Average Subarray I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Average%20Subarray%20I.java) +102|[Fizz Buzz](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fizz%20Buzz.java) +103|[Check if All the Integers in a Range Are Covered](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered.java) +104|[Find First Palindromic String in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20First%20Palindromic%20String%20in%20the%20Array.java) +105|[Duplicate Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Duplicate%20Zeros.java) +106|[Minimum Subsequence in Non-Increasing Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Subsequence%20in%20Non-Increasing%20Order.java) +107|[Smallest Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Range%20I.java) +108|[Employee Importance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Employee%20Importance.java) +109|[Minimum_index_sum_of_two_lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum_index_sum_of_two_lists.java) +110|[Points That Intersect With Cars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Points%20That%20Intersect%20With%20Cars.java) +111|[Number of segments in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20segments%20in%20a%20String.java) +112|[Delete Columns to Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Columns%20to%20Make%20Sorted.java) +113|[Reverse Only Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Only%20Letters.java) +114|[Evaluate Boolean Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Evaluate%20Boolean%20Binary%20Tree.java) +115|[Repeated String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20String%20Match.java) +116|[Neither Minimum nor Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Neither%20Minimum%20nor%20Maximum.java) +117|[Maximum Value of an Ordered Triplet I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20an%20Ordered%20Triplet%20I.java) +118|[Uncommon Words from Two Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Uncommon%20Words%20from%20Two%20Sentences.java) +119|[Assign Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Assign%20Cookies.java) +120|[Most Frequent Number Following Key In an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Number%20Following%20Key%20In%20an%20Array.java) +121|[Element Appearing More Than 25% In Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Element%20Appearing%20More%20Than%2025%%20In%20Sorted%20Array.java) +122|[Find the Town Judge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Town%20Judge.java) +123|[Buddy Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Buddy%20Strings.java) +124|[Teoplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teoplitz%20Matrix.java) +125|[Leaf-Similar Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Leaf-Similar%20Trees.java) +126|[Minimum Hours of Training to Win a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Hours%20of%20Training%20to%20Win%20a%20Competition.java) +127|[Goat Latin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goat%20Latin.java) +128|[Flower Planting With No Adjacent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flower%20Planting%20With%20No%20Adjacent.java) +129|[Largest Triangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Triangle%20Area.java) +130|[Row With Maximum Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Row%20With%20Maximum%20Ones.java) +131|[Determine Color of a Chessboard Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Color%20of%20a%20Chessboard%20Square.java) +132|[Richest Customer Wealth](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Richest%20Customer%20Wealth.java) +133|[Consecutive Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Consecutive%20Characters.java) +134|[Latest Time by Replacing Hidden Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Latest%20Time%20by%20Replacing%20Hidden%20Digits.java) +135|[Robot Return to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Robot%20Return%20to%20Origin.java) +136|[Determine Whether Matrix Can Be Obtained By Rotation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20Whether%20Matrix%20Can%20Be%20Obtained%20By%20Rotation.java) +137|[Flip Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flip%20Game.java) +138|[Minimum Value to Get Positive Step by Step Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Value%20to%20Get%20Positive%20Step%20by%20Step%20Sum.java) +139|[Average Value of Even Numbers That Are Divisible by Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Value%20of%20Even%20Numbers%20That%20Are%20Divisible%20by%20Three.java) +140|[Reshape the matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reshape%20the%20matrix.java) +141|[Valid Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Anagram.java) +142|[Number of Strings That Appear as Substrings in Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Strings%20That%20Appear%20as%20Substrings%20in%20Word.java) +143|[DI String Match](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/DI%20String%20Match.java) +144|[Running Sum of 1d Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Running%20Sum%20of%201d%20Array.java) +145|[Special Array With X Elements Greater Than or Equal X](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Array%20With%20X%20Elements%20Greater%20Than%20or%20Equal%20X.java) +146|[Number of Distinct Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Distinct%20Averages.java) +147|[Check if an Array Is Consecutive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20an%20Array%20Is%20Consecutive.java) +148|[Backspace String Compare](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Backspace%20String%20Compare.java) +149|[Rings and Rods](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rings%20and%20Rods.java) +150|[Implement Stack using Queues](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Stack%20using%20Queues.java) +151|[Baseball Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Baseball%20Game.java) +152|[Pairs of Songs With Total Durations Divisible by 60](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pairs%20of%20Songs%20With%20Total%20Durations%20Divisible%20by%2060.java) +153|[Destination City](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Destination%20City.java) +154|[Maximum Product of Three Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Three%20Numbers.java) +155|[Three Consecutive Odds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Consecutive%20Odds.java) +156|[Set Mismatch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Set%20Mismatch.java) +157|[Sort Array by Increasing Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20by%20Increasing%20Frequency.java) +158|[Find the Distance Value Between Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Distance%20Value%20Between%20Two%20Arrays.java) +159|[Find Anagram Mappings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Anagram%20Mappings.java) +160|[Check if Array is Good](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20is%20Good.java) +161|[Decompress Run-Length Encoded List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decompress%20Run-Length%20Encoded%20List.java) +162|[Flood Fill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Flood%20Fill.java) +163|[Magic Squares In Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Magic%20Squares%20In%20Grid.java) +164|[Smallest Even Multiple](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Even%20Multiple.java) +165|[Hexspeak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Hexspeak.java) +166|[Diet Plan Performance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Diet%20Plan%20Performance.java) +167|[Maximum Number of Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balloons.java) +168|[Find Smallest Letter Greater Than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Smallest%20Letter%20Greater%20Than%20Target.java) +169|[Check if Array Is Sorted and Rotated](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Array%20Is%20Sorted%20and%20Rotated.java) +170|[Maximum Enemy Forts That Can Be Captured](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Enemy%20Forts%20That%20Can%20Be%20Captured.java) +171|[Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20Sum.java) +172|[Day of the Year](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Year.java) +173|[Number of Beautiful Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Beautiful%20Pairs.java) +174|[Can Make Arithmetic Progression From Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Make%20Arithmetic%20Progression%20From%20Sequence.java) +175|[Furthest Point From Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Furthest%20Point%20From%20Origin.java) +176|[Find the Highest Altitude](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Highest%20Altitude.java) +177|[Root Equals Sum of Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Root%20Equals%20Sum%20of%20Children.java) +178|[Powerful Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Powerful%20Integers.java) +179|[Merge Two Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%20Sorted%20Lists.java) +180|[Binary Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Search.java) +181|[K-diff Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K-diff%20Pairs%20in%20an%20Array.java) +182|[Repeated Substring Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Repeated%20Substring%20Pattern.java) +183|[Calculate Digit Sum of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Digit%20Sum%20of%20a%20String.java) +184|[Reformat Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Phone%20Number.java) +185|[Longest Continuous Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Continuous%20Increasing%20Subsequence.java) +186|[Shuffle the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20the%20Array.java) +187|[Count Pairs Of Similar Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Pairs%20Of%20Similar%20Strings.java) +188|[Ransom Note](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ransom%20Note.java) +189|[trailing_zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/trailing_zeroes.java) +190|[Height Checker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Height%20Checker.java) +191|[License Key Formatting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/License%20Key%20Formatting.java) +192|[Sum of Values at Indices With K Set Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Values%20at%20Indices%20With%20K%20Set%20Bits.java) +193|[Balanced Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Balanced%20Binary%20Tree.java) +194|[Check If It Is a Straight Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20It%20Is%20a%20Straight%20Line.java) +195|[Binary Watch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Watch.java) +196|[Count Special Quadruplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Special%20Quadruplets.java) +197|[Three Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Three%20Divisors.java) +198|[Make Array Zero by Subtracting Equal Amounts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20Array%20Zero%20by%20Subtracting%20Equal%20Amounts.java) +199|[Maximum Number of Words You Can Type](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20You%20Can%20Type.java) +200|[Contains Duplicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate.java) +201|[Decode the Message](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20the%20Message.java) +202|[String Matching in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Matching%20in%20an%20Array.java) +203|[Count the Digits That Divide a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Digits%20That%20Divide%20a%20Number.java) +204|[Distance Between Bus Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distance%20Between%20Bus%20Stops.java) +205|[Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Ugly%20Number.java) +206|[Faulty Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Faulty%20Keyboard.java) +207|[Find the Pivot Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Pivot%20Integer.java) +208|[Pascal's Triangle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle%20II.java) +209|[Maximum Count of Positive Integer and Negative Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Count%20of%20Positive%20Integer%20and%20Negative%20Integer.java) +210|[Count Symmetric Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Symmetric%20Integers.java) +211|[Pascal's Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pascal's%20Triangle.java) +212|[Binary Prefix Divisible By 5](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Prefix%20Divisible%20By%205.java) +213|[Number Of Rectangles That Can Form The Largest Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20Of%20Rectangles%20That%20Can%20Form%20The%20Largest%20Square.java) +214|[Separate the Digits in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Separate%20the%20Digits%20in%20an%20Array.java) +215|[Count Negative Numbers in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Negative%20Numbers%20in%20a%20Sorted%20Matrix.java) +216|[Remove One Element to Make the Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20One%20Element%20to%20Make%20the%20Array%20Strictly%20Increasing.java) +217|[Two Furthest Houses With Different Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Furthest%20Houses%20With%20Different%20Colors.java) +218|[Special Positions in a Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Special%20Positions%20in%20a%20Binary%20Matrix.java) +219|[Check if All Characters Have Equal Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20All%20Characters%20Have%20Equal%20Number%20of%20Occurrences.java) +220|[Valid Word Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Sequence.java) +221|[Counting Words With a Given Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Words%20With%20a%20Given%20Prefix.java) +222|[Binary Tree Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Inorder%20Traversal.java) +223|[Minimum Moves to Convert String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Convert%20String.java) +224|[Design Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Linked%20List.java) +225|[Kth Distinct String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kth%20Distinct%20String%20in%20an%20Array.java) +226|[Count Good Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Good%20Triplets.java) +227|[Design an Ordered System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20System.java) +228|[Get Maximum in Generated Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Get%20Maximum%20in%20Generated%20Array.java) +229|[Convert the Temperature](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20the%20Temperature.java) +230|[Arranging Coins](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Arranging%20Coins.java) +231|[Count Pairs Whose Sum is Less than Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Pairs%20Whose%20Sum%20is%20Less%20than%20Target.java) +232|[Check if Word Equals Summation of Two Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Word%20Equals%20Summation%20of%20Two%20Words.java) +233|[Fair Candy Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fair%20Candy%20Swap.java) +234|[Design Parking System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Parking%20System.java) +235|[Transpose Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Transpose%20Matrix.java) +236|[Delete Greatest Value in Each Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Greatest%20Value%20in%20Each%20Row.java) +237|[Excel Sheet Column Title](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Title.java) +238|[First Letter to Appear Twice](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Letter%20to%20Appear%20Twice.java) +239|[Linked List Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Linked%20List%20Cycle.java) +240|[Find All the Lonely Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20the%20Lonely%20Nodes.java) +241|[Find the Maximum Achievable Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Maximum%20Achievable%20Number.java) +242|[Base 7](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Base%207.java) +243|[Reverse Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Bits.java) +244|[SqrtX](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/SqrtX.java) +245|[Check if Strings Can be Made Equal With Operations I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Strings%20Can%20be%20Made%20Equal%20With%20Operations%20I.java) +246|[Similar RGB Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Similar%20RGB%20Color.java) +247|[Sort the People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20the%20People.java) +248|[Is Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Is%20Subsequence.java) +249|[Longest Even Odd Subarray With Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Even%20Odd%20Subarray%20With%20Threshold.java) +250|[Reverse Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Linked%20List.java) +251|[Shortest Distance to a Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20a%20Character.java) +252|[Count of Matches in Tournament](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20of%20Matches%20in%20Tournament.java) +253|[Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Parentheses.java) +254|[Convert Sorted Array To Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Sorted%20Array%20To%20Binary%20Search%20Tree.java) +255|[Count Vowel Substrings of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Vowel%20Substrings%20of%20a%20String.java) +256|[Construct the rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20the%20rectangle.java) +257|[Maximum Units on a Truck](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Units%20on%20a%20Truck.java) +258|[Sum of Left Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Left%20Leaves.java) +259|[Decrypt String from Alphabet to Integer Mapping](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decrypt%20String%20from%20Alphabet%20to%20Integer%20Mapping.java) +260|[Number of Employees Who Met the Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Employees%20Who%20Met%20the%20Target.java) +261|[Find Pivot Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Pivot%20Index.java) +262|[Factorial Trailing Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Factorial%20Trailing%20Zeroes.java) +263|[Build an Array With Stack Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20an%20Array%20With%20Stack%20Operations.java) +264|[Last Stone Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Last%20Stone%20Weight.java) +265|[range_addition_II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/range_addition_II.java) +266|[Isomorphic Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Isomorphic%20Strings.java) +267|[Longest Subsequence With Limited Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Subsequence%20With%20Limited%20Sum.java) +268|[Split a String in Balanced Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20a%20String%20in%20Balanced%20Strings.java) +269|[To Lower Case](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/To%20Lower%20Case.java) +270|[Sum of Digits of String After Convert](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20of%20String%20After%20Convert.java) +271|[Number of Senior Citizens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Senior%20Citizens.java) +272|[Minimum Cost to Move Chips to The Same Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cost%20to%20Move%20Chips%20to%20The%20Same%20Position.java) +273|[Read N characters Given Read4](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Read%20N%20characters%20Given%20Read4.java) +274|[Longest Alternating Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Alternating%20Subarray.java) +275|[Delete N Nodes After M Nodes of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20N%20Nodes%20After%20M%20Nodes%20of%20a%20Linked%20List.java) +276|[Count Items Matching a Rule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Items%20Matching%20a%20Rule.java) +277|[Reverse Vowels of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Vowels%20of%20a%20String.java) +278|[Largest Local Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Local%20Values%20in%20a%20Matrix.java) +279|[A Number After a Double Reversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/A%20Number%20After%20a%20Double%20Reversal.java) +280|[Roman to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Roman%20to%20Integer.java) +281|[Cousins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cousins%20in%20Binary%20Tree.java) +282|[Binary Tree Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Paths.java) +283|[Complement of Base 10 Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Complement%20of%20Base%2010%20Integer.java) +284|[Find if Path Exists in Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20if%20Path%20Exists%20in%20Graph.java) +285|[Minimum Difference Between Highest and Lowest of K Scores](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Difference%20Between%20Highest%20and%20Lowest%20of%20K%20Scores.java) +286|[Number of Days in a Month](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Days%20in%20a%20Month.java) +287|[Find Resultant Array After Removing Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Resultant%20Array%20After%20Removing%20Anagrams.java) +288|[Minimum String Length After Removing Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20String%20Length%20After%20Removing%20Substrings.java) +289|[Palindrome Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Number.java) +290|[Find Subarrays With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Subarrays%20With%20Equal%20Sum.java) +291|[Account Balance After Rounded Purchase](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Account%20Balance%20After%20Rounded%20Purchase.java) +292|[Minimum Amount of Time to Fill Cups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Amount%20of%20Time%20to%20Fill%20Cups.java) +293|[Detect Pattern of Length M Repeated K or More Times](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Detect%20Pattern%20of%20Length%20M%20Repeated%20K%20or%20More%20Times.java) +294|[Largest Positive Integer That Exists With Its Negative](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Positive%20Integer%20That%20Exists%20With%20Its%20Negative.java) +295|[Univalued Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Univalued%20Binary%20Tree.java) +296|[Single-Row Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single-Row%20Keyboard.java) +297|[Remove Linked List Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Linked%20List%20Elements.java) +298|[How Many Numbers Are Smaller Than the Current Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Numbers%20Are%20Smaller%20Than%20the%20Current%20Number.java) +299|[Most Frequent Even Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Frequent%20Even%20Element.java) +300|[Maximum Odd Binary Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Odd%20Binary%20Number.java) +301|[Armstrong Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Armstrong%20Number.java) +302|[Counting Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Elements.java) +303|[Make The String Great](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Make%20The%20String%20Great.java) +304|[Cells with Odd Values in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20with%20Odd%20Values%20in%20a%20Matrix.java) +305|[Power of Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Two.java) +306|[Decode XORed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Decode%20XORed%20Array.java) +307|[Long Pressed Name](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Long%20Pressed%20Name.java) +308|[Kids With the Greatest Number of Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Kids%20With%20the%20Greatest%20Number%20of%20Candies.java) +309|[N-ary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Postorder%20Traversal.java) +310|[Max Consecutive Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Consecutive%20Ones.java) +311|[Find Words That Can Be Formed by Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Words%20That%20Can%20Be%20Formed%20by%20Characters.java) +312|[Number of 1 bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%201%20bits.java) +313|[Largest Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Unique%20Number.java) +314|[The Employee That Worked on the Longest Task](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/The%20Employee%20That%20Worked%20on%20the%20Longest%20Task.java) +315|[Paint House](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Paint%20House.java) +316|[Logger Rate Limiter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Logger%20Rate%20Limiter.java) +317|[Substrings of Size Three with Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Substrings%20of%20Size%20Three%20with%20Distinct%20Characters.java) +318|[Maximum Difference by Remapping a Digit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20by%20Remapping%20a%20Digit.java) +319|[Monotonic Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Monotonic%20Array.java) +320|[Check if One String Swap Can Make Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20One%20String%20Swap%20Can%20Make%20Strings%20Equal.java) +321|[Valid Palindrome II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome%20II.java) +322|[Occurrences After Bigram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Occurrences%20After%20Bigram.java) +323|[Minimum Sum of Four Digit Number After Splitting Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Sum%20of%20Four%20Digit%20Number%20After%20Splitting%20Digits.java) +324|[Move Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Move%20Zeroes.java) +325|[Number of Arithmetic Triplets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Arithmetic%20Triplets.java) +326|[Count Number of Pairs With Absolute Difference K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Number%20of%20Pairs%20With%20Absolute%20Difference%20K.java) +327|[Number of Lines To Write String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Lines%20To%20Write%20String.java) +328|[First Unique Character in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Unique%20Character%20in%20a%20String.java) +329|[Maximum depth of Binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20depth%20of%20Binary%20tree.java) +330|[Largest Number At Least Twice of Others](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20At%20Least%20Twice%20of%20Others.java) +331|[Reverse String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20String%20II.java) +332|[Letter Case Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Letter%20Case%20Permutation.java) +333|[Two Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum.java) +334|[Climbing Stairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Climbing%20Stairs.java) +335|[Projection Area of 3D Shapes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Projection%20Area%20of%203D%20Shapes.java) +336|[Maximize Sum Of Array After K Negations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximize%20Sum%20Of%20Array%20After%20K%20Negations.java) +337|[Third Maximum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Third%20Maximum%20Number.java) +338|[Sign of the Product of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sign%20of%20the%20Product%20of%20an%20Array.java) +339|[Heaters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Heaters.java) +340|[Remove Palindromic Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Palindromic%20Subsequences.java) +341|[Time Needed to Buy Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Time%20Needed%20to%20Buy%20Tickets.java) +342|[Find the K-Beauty of a Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20K-Beauty%20of%20a%20Number.java) +343|[Find All K-Distant Indices in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20K-Distant%20Indices%20in%20an%20Array.java) +344|[Student Attendance Record I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Student%20Attendance%20Record%20I.java) +345|[Delete Characters to Make Fancy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Characters%20to%20Make%20Fancy%20String.java) +346|[Longest Uncommon Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Uncommon%20Subsequence.java) +347|[Check Distances Between Same Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Distances%20Between%20Same%20Letters.java) +348|[Valid Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Mountain%20Array.java) +349|[Shortest Word Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Word%20Distance.java) +350|[Check if String Is Decomposable Into Value-Equal Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20String%20Is%20Decomposable%20Into%20Value-Equal%20Substrings.java) +351|[Matrix Cells in Distance Order](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Cells%20in%20Distance%20Order.java) +352|[Final Value of Variable After Performing Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Final%20Value%20of%20Variable%20After%20Performing%20Operations.java) +353|[Shuffle String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shuffle%20String.java) +354|[Sum of Square Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Square%20Numbers.java) +355|[Percentage of Letter in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Percentage%20of%20Letter%20in%20String.java) +356|[Intersection of Two Arrays II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays%20II.java) +357|[Most Common Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Common%20Word.java) +358|[Count Asterisks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Asterisks.java) +359|[Sum of Squares of Special Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Squares%20of%20Special%20Elements.java) +360|[Largest 3-Same-Digit Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%203-Same-Digit%20Number%20in%20String.java) +361|[Number of Students Doing Homework at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Doing%20Homework%20at%20a%20Given%20Time.java) +362|[Invert Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Invert%20Binary%20Tree.java) +363|[Check if the Sentence Is Pangram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20the%20Sentence%20Is%20Pangram.java) +364|[Island Perimeter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Island%20Perimeter.java) +365|[Available Captures for Rook](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Available%20Captures%20for%20Rook.java) +366|[Count Common Words With One Occurrence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Common%20Words%20With%20One%20Occurrence.java) +367|[Degree of an array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Degree%20of%20an%20array.java) +368|[Sum of Root To Leaf Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Root%20To%20Leaf%20Binary%20Numbers.java) +369|[Circular Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Circular%20Sentence.java) +370|[Sort Array By Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity.java) +371|[Number of Good Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Good%20Pairs.java) +372|[Convert a number to hexadecimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20a%20number%20to%20hexadecimal.java) +373|[Check If a Word Occurs As a Prefix of Any Word in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Word%20Occurs%20As%20a%20Prefix%20of%20Any%20Word%20in%20a%20Sentence.java) +374|[Calculate Delayed Arrival Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Delayed%20Arrival%20Time.java) +375|[Concatenation of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Concatenation%20of%20Array.java) +376|[Number of Recent Calls](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Recent%20Calls.java) +377|[Fixed Point](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fixed%20Point.java) +378|[Valid Boomerang](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Boomerang.java) +379|[Minimum Moves to Equal an Array Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Moves%20to%20Equal%20an%20Array%20Element.java) +380|[Calculate Money in Leetcode Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Money%20in%20Leetcode%20Bank.java) +381|[Check If Two String Arrays are Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20Two%20String%20Arrays%20are%20Equivalent.java) +382|[Find Nearest Point That Has the Same X or Y Coordinate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Nearest%20Point%20That%20Has%20the%20Same%20X%20or%20Y%20Coordinate.java) +383|[Maximum Product Difference Between Two Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20Difference%20Between%20Two%20Pairs.java) +384|[Goal Parser Interpretation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Goal%20Parser%20Interpretation.java) +385|[Find the Losers of the Circular Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Losers%20of%20the%20Circular%20Game.java) +386|[Judge Route Cycle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Judge%20Route%20Cycle.java) +387|[K Items With the Maximum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/K%20Items%20With%20the%20Maximum%20Sum.java) +388|[Middle of the linked list](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Middle%20of%20the%20linked%20list.java) +389|[Maximum Number of Pairs in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Pairs%20in%20Array.java) +390|[Check if Matrix Is X-Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Matrix%20Is%20X-Matrix.java) +391|[Compare Strings by Frequency of the Smallest Character](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Compare%20Strings%20by%20Frequency%20of%20the%20Smallest%20Character.java) +392|[Intersection of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20Two%20Arrays.java) +393|[Bulls and Cows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Bulls%20and%20Cows.java) +394|[Slowest Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Slowest%20Key.java) +395|[Count Equal and Divisible Pairs in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Equal%20and%20Divisible%20Pairs%20in%20an%20Array.java) +396|[nim_game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/nim_game.java) +397|[Min Max Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Min%20Max%20Game.java) +398|[Groups of Special-Equivalent Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Groups%20of%20Special-Equivalent%20Strings.java) +399|[Reformat The String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20The%20String.java) +400|[Minimum Number of Operations to Convert Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Number%20of%20Operations%20to%20Convert%20Time.java) +401|[Form Smallest Number From Two Digit Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Form%20Smallest%20Number%20From%20Two%20Digit%20Arrays.java) +402|[Minimum Operations to Collect Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Collect%20Elements.java) +403|[Count Elements With Strictly Smaller and Greater Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Elements%20With%20Strictly%20Smaller%20and%20Greater%20Elements.java) +404|[Determine the Winner of a Bowling Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20the%20Winner%20of%20a%20Bowling%20Game.java) +405|[Minimum Operations to Make the Array Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Operations%20to%20Make%20the%20Array%20Increasing.java) +406|[Minimum Right Shifts to Sort the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Right%20Shifts%20to%20Sort%20the%20Array.java) +407|[Index Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Index%20Pairs%20of%20a%20String.java) +408|[Number of Steps to Reduce a Number to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Steps%20to%20Reduce%20a%20Number%20to%20Zero.java) +409|[Confusing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Confusing%20Number.java) +410|[Convert BST to Greater Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20BST%20to%20Greater%20Tree.java) +411|[Find All Numbers Disappeared in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20All%20Numbers%20Disappeared%20in%20an%20Array.java) +412|[Largest Number After Digit Swaps by Parity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Number%20After%20Digit%20Swaps%20by%20Parity.java) +413|[Merge Two 2D Arrays by Summing Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Two%202D%20Arrays%20by%20Summing%20Values.java) +414|[Reformat Date](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reformat%20Date.java) +415|[Largest Odd Number in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Odd%20Number%20in%20String.java) +416|[Build Array from Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Build%20Array%20from%20Permutation.java) +417|[Find Lucky Integer in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Lucky%20Integer%20in%20an%20Array.java) +418|[Reverse Prefix of Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20Prefix%20of%20Word.java) +419|[Nested List Weight Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nested%20List%20Weight%20Sum.java) +420|[Relative ranks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20ranks.java) +421|[Palindrome Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Palindrome%20Permutation.java) +422|[Find Winner on a Tic Tac Toe Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Winner%20on%20a%20Tic%20Tac%20Toe%20Game.java) +423|[Merge two binary trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20two%20binary%20trees.java) +424|[Check if Numbers Are Ascending in a Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Numbers%20Are%20Ascending%20in%20a%20Sentence.java) +425|[Power of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Power%20of%20Three.java) +426|[Remove Letter To Equalize Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Letter%20To%20Equalize%20Frequency.java) +427|[Lemonade Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lemonade%20Change.java) +428|[Length of last word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Length%20of%20last%20word.java) +429|[Increasing Decreasing String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Increasing%20Decreasing%20String.java) +430|[N-th Tribonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-th%20Tribonacci%20Number.java) +431|[Longest Common Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Common%20Prefix.java) +432|[Minimum Time Visiting All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20Visiting%20All%20Points.java) +433|[Calculate Amount Paid in Taxes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Calculate%20Amount%20Paid%20in%20Taxes.java) +434|[Number of Different Integers in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Different%20Integers%20in%20a%20String.java) +435|[Minimize String Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimize%20String%20Length.java) +436|[Add Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Strings.java) +437|[Maximum Ascending Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Ascending%20Subarray%20Sum.java) +438|[Best Time to Buy and Sell Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Best%20Time%20to%20Buy%20and%20Sell%20Stock.java) +439|[Lowest Common Ancestor of a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Search%20Tree.java) +440|[Determine if String Halves Are Alike](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20String%20Halves%20Are%20Alike.java) +441|[Find the difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20difference.java) +442|[Check if Every Row and Column Contains All Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Every%20Row%20and%20Column%20Contains%20All%20Numbers.java) +443|[Replace All Digits with Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20Digits%20with%20Characters.java) +444|[Largest Substring Between Two Equal Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Largest%20Substring%20Between%20Two%20Equal%20Characters.java) +445|[Strobogrammatic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Strobogrammatic%20Number.java) +446|[Rearrange Characters to Make Target String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Characters%20to%20Make%20Target%20String.java) +447|[Next Greater Element I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element%20I.java) +448|[Counting Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Counting%20Bits.java) +449|[Remove Outermost Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Outermost%20Parentheses.java) +450|[Count the Number of Vowel Strings in Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20the%20Number%20of%20Vowel%20Strings%20in%20Range.java) +451|[Determine if Two Events Have Conflict](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Determine%20if%20Two%20Events%20Have%20Conflict.java) +452|[Replace All ?'s to Avoid Consecutive Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20All%20?'s%20to%20Avoid%20Consecutive%20Repeating%20Characters.java) +453|[Two Sum Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Sum%20Less%20Than%20K.java) +454|[Majority Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Majority%20Element.java) +455|[Merge Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Sorted%20Array.java) +456|[Unique Morse Code Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Morse%20Code%20Words.java) +457|[Divisor Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divisor%20Game.java) +458|[Find Numbers with Even Number of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Numbers%20with%20Even%20Number%20of%20Digits.java) +459|[Categorize Box According to Criteria](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Categorize%20Box%20According%20to%20Criteria.java) +460|[Implement Queue using Stacks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Implement%20Queue%20using%20Stacks.java) +461|[N-ary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-ary%20Tree%20Preorder%20Traversal.java) +462|[Smallest Index With Equal Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Smallest%20Index%20With%20Equal%20Value.java) +463|[Total Distance Traveled](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Total%20Distance%20Traveled.java) +464|[Delete Node in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Delete%20Node%20in%20a%20Linked%20List.java) +465|[Sort Array By Parity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Array%20By%20Parity%20II.java) +466|[Most Visited Sector in a Circular Track](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Most%20Visited%20Sector%20in%20a%20Circular%20Track.java) +467|[Greatest Common Divisor of Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Greatest%20Common%20Divisor%20of%20Strings.java) +468|[Remove Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Element.java) +469|[Maximum Subarray Sum I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Subarray%20Sum%20I.java) +470|[Partition Array Into Three Parts With Equal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Partition%20Array%20Into%20Three%20Parts%20With%20Equal%20Sum.java) +471|[Remove Duplicates From Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Duplicates%20From%20Sorted%20Lists.java) +472|[Minimum Bit Flips to Convert Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Bit%20Flips%20to%20Convert%20Number.java) +473|[Sort Even and Odd Indices Independently](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Even%20and%20Odd%20Indices%20Independently.java) +474|[Meeting Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Meeting%20Rooms.java) +475|[Crawler Log Folder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Crawler%20Log%20Folder.java) +476|[Maximum Difference Between Increasing Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Difference%20Between%20Increasing%20Elements.java) +477|[Left and Right Sum Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Left%20and%20Right%20Sum%20Differences.java) +478|[Find the Middle Index in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Middle%20Index%20in%20Array.java) +479|[Range Sum Query Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Range%20Sum%20Query%20Immutable.java) +480|[Intersection of two Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Intersection%20of%20two%20Linked%20Lists.java) +481|[Merge Similar Items](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Similar%20Items.java) +482|[Can Place Flowers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Can%20Place%20Flowers.java) +483|[Generate a String With Characters That Have Odd Counts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Generate%20a%20String%20With%20Characters%20That%20Have%20Odd%20Counts.java) +484|[Count Operations to Obtain Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Operations%20to%20Obtain%20Zero.java) +485|[Array Partition I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Partition%20I.java) +486|[Next Greater Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Next%20Greater%20Element.java) +487|[Perfect Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Perfect%20Number.java) +488|[Sum of Digits in the Minimum Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20the%20Minimum%20Number.java) +489|[Guess Number Higher or Lower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Guess%20Number%20Higher%20or%20Lower.java) +490|[Find the Array Concatenation Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Array%20Concatenation%20Value.java) +491|[Self Dividing Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Self%20Dividing%20Number.java) +492|[Design HashMap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20HashMap.java) +493|[Minimum Time to Type Word Using Special Typewriter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Time%20to%20Type%20Word%20Using%20Special%20Typewriter.java) +494|[Check Whether Two Strings are Almost Equivalent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Whether%20Two%20Strings%20are%20Almost%20Equivalent.java) +495|[Shortest Distance to Target String in a Circular Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Distance%20to%20Target%20String%20in%20a%20Circular%20Array.java) +496|[Cells in a Range on an Excel Sheet](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Cells%20in%20a%20Range%20on%20an%20Excel%20Sheet.java) +497|[Number of Common Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Common%20Factors.java) +498|[Keep Multiplying Found Values by Two](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keep%20Multiplying%20Found%20Values%20by%20Two.java) +499|[Search in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20in%20a%20Binary%20Search%20Tree.java) +500|[Count Largest Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Largest%20Group.java) +501|[Sum of Unique Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Unique%20Elements.java) +502|[Moving Average from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Moving%20Average%20from%20Data%20Stream.java) +503|[Symmetric Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Symmetric%20Tree.java) +504|[Maximum Product of Two Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Product%20of%20Two%20Elements%20in%20an%20Array.java) +505|[Difference Between Element Sum and Digit Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Difference%20Between%20Element%20Sum%20and%20Digit%20Sum%20of%20an%20Array.java) +506|[Find Common Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Common%20Characters.java) +507|[Lucky Numbers in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Lucky%20Numbers%20in%20a%20Matrix.java) +508|[Remove Vowels from a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20Vowels%20from%20a%20String.java) +509|[Add Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Digits.java) +510|[Teemo Attacking](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Teemo%20Attacking.java) +511|[Contains Duplicate II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Contains%20Duplicate%20II.java) +512|[Count Integers With Even Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Integers%20With%20Even%20Digit%20Sum.java) +513|[Minimum Index Sum of Two Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Index%20Sum%20of%20Two%20Lists.java) +514|[Two Out of Three](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Two%20Out%20of%20Three.java) +515|[Closest Binary Search Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Closest%20Binary%20Search%20Tree%20Value.java) +516|[Distribute Money to Maximum Children](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Money%20to%20Maximum%20Children.java) +517|[Sum of Digits in Base K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20Digits%20in%20Base%20K.java) +518|[Fibonacci Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Fibonacci%20Number.java) +519|[Distribute Candies to People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies%20to%20People.java) +520|[Valid Word Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Square.java) +521|[Distribute Candies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Distribute%20Candies.java) +522|[Check If a Number Is Majority Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20If%20a%20Number%20Is%20Majority%20Element%20in%20a%20Sorted%20Array.java) +523|[Alternating Digit Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Alternating%20Digit%20Sum.java) +524|[Take Gifts From the Richest Pile](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Take%20Gifts%20From%20the%20Richest%20Pile.java) +525|[Verifying an Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Verifying%20an%20Alien%20Dictionary.java) +526|[Longest Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Palindrome.java) +527|[Sum of All Odd Length Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20of%20All%20Odd%20Length%20Subarrays.java) +528|[Average Salary Excluding the Minimum and Maximum Salary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20Salary%20Excluding%20the%20Minimum%20and%20Maximum%20Salary.java) +529|[Apply Operations to an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Apply%20Operations%20to%20an%20Array.java) +530|[Single Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Single%20Number.java) +531|[Keyboard Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Keyboard%20Row.java) +532|[Count Distinct Numbers on Board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Distinct%20Numbers%20on%20Board.java) +533|[Squares of a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Squares%20of%20a%20Sorted%20Array.java) +534|[Find the Longest Balanced Substring of a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Longest%20Balanced%20Substring%20of%20a%20Binary%20String.java) +535|[Binary Tree Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Binary%20Tree%20Postorder%20Traversal.java) +536|[Rearrange Spaces Between Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rearrange%20Spaces%20Between%20Words.java) +537|[Minimum Recolors to Get K Consecutive Black Blocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Recolors%20to%20Get%20K%20Consecutive%20Black%20Blocks.java) +538|[Count Square Sum Triples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Square%20Sum%20Triples.java) +539|[Maximum Distance in Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Distance%20in%20Arrays.java) +540|[Unique Number of Occurrences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Unique%20Number%20of%20Occurrences.java) +541|[Day of the Week](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Day%20of%20the%20Week.java) +542|[Design an Ordered Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20an%20Ordered%20Stream.java) +543|[Minimum Distance Between BST Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Distance%20Between%20BST%20Nodes.java) +544|[Maximum Sum With Exactly K Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Sum%20With%20Exactly%20K%20Elements.java) +545|[Number of Students Unable to Eat Lunch](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Number%20of%20Students%20Unable%20to%20Eat%20Lunch.java) +546|[Check if Number Has Equal Digit Count and Digit Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20Number%20Has%20Equal%20Digit%20Count%20and%20Digit%20Value.java) +547|[Sum Of Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sum%20Of%20Two%20Integers.java) +548|[Check if a String Is an Acronym of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20if%20a%20String%20Is%20an%20Acronym%20of%20Words.java) +549|[Search Insert Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Search%20Insert%20Position.java) +550|[Max Pair Sum in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Max%20Pair%20Sum%20in%20an%20Array.java) +551|[Longest Univalue Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Univalue%20Path.java) +552|[Maximum Depth of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Depth%20of%20N-ary%20Tree.java) +553|[Thousand Separator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Thousand%20Separator.java) +554|[Add Binary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20Binary.java) +555|[Convert Binary Number in a Linked List to Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Convert%20Binary%20Number%20in%20a%20Linked%20List%20to%20Integer.java) +556|[Sorting the Sentence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sorting%20the%20Sentence.java) +557|[Replace Elements with Greatest Element on Right Side](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Replace%20Elements%20with%20Greatest%20Element%20on%20Right%20Side.java) +558|[Matrix Diagonal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Matrix%20Diagonal%20Sum.java) +559|[Check Array Formation Through Concatenation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Check%20Array%20Formation%20Through%20Concatenation.java) +560|[Water Bottles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Water%20Bottles.java) +561|[Add to Array-Form of Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Add%20to%20Array-Form%20of%20Integer.java) +562|[Prime In Diagonal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Prime%20In%20Diagonal.java) +563|[Pass the Pillow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Pass%20the%20Pillow.java) +564|[Missing Number In Arithmetic Progression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Missing%20Number%20In%20Arithmetic%20Progression.java) +565|[Divide Array Into Equal Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Divide%20Array%20Into%20Equal%20Pairs.java) +566|[Maximum Value of a String in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Value%20of%20a%20String%20in%20an%20Array.java) +567|[Maximum Number of Balls in a Box](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Balls%20in%20a%20Box.java) +568|[Mean of Array After Removing Some Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Mean%20of%20Array%20After%20Removing%20Some%20Elements.java) +569|[N-Repeated Element in Size 2N Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/N-Repeated%20Element%20in%20Size%202N%20Array.java) +570|[Redistribute Characters to Make All Strings Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Redistribute%20Characters%20to%20Make%20All%20Strings%20Equal.java) +571|[Remove All Adjacent Duplicates In String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Remove%20All%20Adjacent%20Duplicates%20In%20String.java) +572|[Minimum Absolute Difference in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20%20Absolute%20Difference%20in%20BST.java) +573|[Image Smoother](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Image%20Smoother.java) +574|[Find the Difference of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20the%20Difference%20of%20Two%20Arrays.java) +575|[How Many Apples Can You Put into the Basket](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/How%20Many%20Apples%20Can%20You%20Put%20into%20the%20Basket.java) +576|[Second Minimum Node in a binary tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Minimum%20Node%20in%20a%20binary%20tree.java) +577|[Excel Sheet Column Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Excel%20Sheet%20Column%20Number.java) +578|[Same Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Same%20Tree.java) +579|[Count Odd Numbers in an Interval Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Odd%20Numbers%20in%20an%20Interval%20Range.java) +580|[String Without AAA or BBB](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/String%20Without%20AAA%20or%20BBB.java) +581|[Find Greatest Common Divisor of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Greatest%20Common%20Divisor%20of%20Array.java) +582|[Longest Word in Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Longest%20Word%20in%20Dictionary.java) +583|[Happy Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Happy%20Number.java) +584|[Array Transformation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Array%20Transformation.java) +585|[Design Compressed String Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Design%20Compressed%20String%20Iterator.java) +586|[Reverse words in a String III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Reverse%20words%20in%20a%20String%20III.java) +587|[Rank Transform of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Rank%20Transform%20of%20an%20Array.java) +588|[First Bad Version](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/First%20Bad%20Version.java) +589|[Sort Integers by The Number of 1 Bits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Sort%20Integers%20by%20The%20Number%20of%201%20Bits.java) +590|[Split With Minimum Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Split%20With%20Minimum%20Sum.java) +591|[Construct String from Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Construct%20String%20from%20Binary%20Tree.java) +592|[Maximum Number of Words Found in Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Maximum%20Number%20of%20Words%20Found%20in%20Sentences.java) +593|[Toeplitz Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Toeplitz%20Matrix.java) +594|[Find Maximum Number of String Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Find%20Maximum%20Number%20of%20String%20Pairs.java) +595|[Finding 3-Digit Even Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Finding%203-Digit%20Even%20Numbers.java) +596|[Valid Word Abbreviation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Word%20Abbreviation.java) +597|[Second Largest Digit in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Second%20Largest%20Digit%20in%20a%20String.java) +598|[Valid Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Valid%20Palindrome.java) +599|[Relative Sort Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Relative%20Sort%20Array.java) +600|[Minimum Cuts to Divide a Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Minimum%20Cuts%20to%20Divide%20a%20Circle.java) +601|[Path In Zigzag Labelled Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Path%20In%20Zigzag%20Labelled%20Binary%20Tree.java) +602|[Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Shortest%20Completing%20Word.java) +603|[Nim Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Nim%20Game.java) +604|[Count Substrings with Only One Distinct Letter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Count%20Substrings%20with%20Only%20One%20Distinct%20Letter.java) +605|[Average of Levels in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Average%20of%20Levels%20in%20Binary%20Tree.java) +606|[Merge Strings Alternately](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Easy/Merge%20Strings%20Alternately.java) diff --git a/Hard/README.md b/Hard/README.md index e97d573a..0e44bb8b 100644 --- a/Hard/README.md +++ b/Hard/README.md @@ -1,113 +1,127 @@ -# Hard LeetCode Java Solutions +# Hard LeetCode-Java-Solutions S.no | Coding Problem --- | --- -1 | [Add Edges to Make Degrees of All Nodes Even](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Add%20Edges%20to%20Make%20Degrees%20of%20All%20Nodes%20Even.java) -2 | [Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Alien%20Dictionary.java) -3 | [Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) -4 | [Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) -5 | [Best Time to Buy and Sell Stock IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20IV.java) -6 | [Binary Tree Cameras](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Cameras.java) -7 | [Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) -8 | [Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) -9 | [Checking Existence of Edge Length Limited Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Checking%20Existence%20of%20Edge%20Length%20Limited%20Paths.java) -10 | [Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) -11 | [Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) -12 | [Construct Target Array With Multiple Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Construct%20Target%20Array%20With%20Multiple%20Sums.java) -13 | [Count Subarrays With Fixed Bounds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Subarrays%20With%20Fixed%20Bounds.java) -14 | [Count Vowels Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Vowels%20Permutation.java) -15 | [Count of Smaller Numbers After Self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20of%20Smaller%20Numbers%20After%20Self.java) -16 | [Course Schedule III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Course%20Schedule%20III.java) -17 | [Critical Connections in a Network](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Critical%20Connections%20in%20a%20Network.java) -18 | [Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) -19 | [Design In-Memory File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20In-Memory%20File%20System.java) -20 | [Design Movie Rental System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Movie%20Rental%20System.java) -21 | [Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) -22 | [Design Skiplist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Skiplist.java) -23 | [Dice Roll Simulation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Dice%20Roll%20Simulation.java) -24 | [Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) -25 | [Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) -26 | [Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) -27 | [Expression Add Operators](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Expression%20Add%20Operators.java) -28 | [Find Median from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20from%20Data%20Stream.java) -29 | [Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) -30 | [Find the Kth Smallest Sum of a Matrix With Sorted Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Kth%20Smallest%20Sum%20of%20a%20Matrix%20With%20Sorted%20Rows.java) -31 | [First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) -32 | [Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) -33 | [IPO](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/IPO.java) -34 | [Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) -35 | [Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) -36 | [Jump Game IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Jump%20Game%20IV.java) -37 | [K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) -38 | [K Inverse Pairs Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Inverse%20Pairs%20Array.java) -39 | [Kth Smallest Number in Multiplication Table](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Kth%20Smallest%20Number%20in%20Multiplication%20Table.java) -40 | [LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) -41 | [Largest Color Value in a Directed Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Color%20Value%20in%20a%20Directed%20Graph.java) -42 | [Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) -43 | [Longest Cycle in a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Cycle%20in%20a%20Graph.java) -44 | [Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) -45 | [Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) -46 | [Longest Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Valid%20Parentheses.java) -47 | [Max Points on a Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Points%20on%20a%20Line.java) -48 | [Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Stack.java) -49 | [Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) -50 | [Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) -51 | [Maximum Performance of a Team](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Performance%20of%20a%20Team.java) -52 | [Maximum Profit in Job Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Profit%20in%20Job%20Scheduling.java) -53 | [Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) -54 | [Maximum Value of K Coins From Piles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Value%20of%20K%20Coins%20From%20Piles.java) -55 | [Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) -56 | [Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) -57 | [Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) -58 | [Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) -59 | [Minimum Difficulty of a Job Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Difficulty%20of%20a%20Job%20Schedule.java) -60 | [Minimum Insertion Steps to Make a String Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Insertion%20Steps%20to%20Make%20a%20String%20Palindrome.java) -61 | [Minimum Number of Refueling Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Number%20of%20Refueling%20Stops.java) -62 | [Minimum Window Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Subsequence.java) -63 | [Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) -64 | [My Calendar III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/My%20Calendar%20III.java) -65 | [N-Queens II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens%20II.java) -66 | [N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) -67 | [Naming a Company](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Naming%20a%20Company.java) -68 | [Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) -69 | [Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) -70 | [Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) -71 | [Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) -72 | [Number of Ways of Cutting a Pizza](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Ways%20of%20Cutting%20a%20Pizza.java) -73 | [Number of Ways to Form a Target String Given a Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Ways%20to%20Form%20a%20Target%20String%20Given%20a%20Dictionary.java) -74 | [Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) -75 | [Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) -76 | [Paint House III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20III.java) -77 | [Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) -78 | [Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) -79 | [Perfect Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Perfect%20Rectangle.java) -80 | [Poor Pigs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Poor%20Pigs.java) -81 | [Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) -82 | [Profitable Schemes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Profitable%20Schemes.java) -83 | [Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reconstruct%20Itinerary.java) -84 | [Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) -85 | [Reducing Dishes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reducing%20Dishes.java) -86 | [Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) -87 | [Restore The Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Restore%20The%20Array.java) -88 | [Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) -89 | [Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) -90 | [Scramble String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Scramble%20String.java) -91 | [Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) -92 | [Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) -93 | [Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) -94 | [Similar String Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Similar%20String%20Groups.java) -95 | [Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) -96 | [Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) -97 | [Stamping The Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stamping%20The%20Sequence.java) -98 | [Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) -99 | [String Compression II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/String%20Compression%20II.java) -100 | [Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) -101 | [Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) -102 | [Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) -103 | [The Skyline Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/The%20Skyline%20Problem.java) -104 | [Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) -105 | [Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) -106 | [Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) -107 | [Vertical Order Traversal Of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Vertical%20Order%20Traversal%20Of%20a%20Binary%20Tree.java) -108 | [Wildcard Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Wildcard%20Matching.java) -109 | [Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) -110 | [Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) +1|[Concatenated Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Concatenated%20Words.java) +2|[Minimum Cost to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Make%20Array%20Equal.java) +3|[Max Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Stack.java) +4|[Course Schedule III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Course%20Schedule%20III.java) +5|[Binary Tree Cameras](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Cameras.java) +6|[Remove Invalid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Invalid%20Parentheses.java) +7|[First Missing Positive](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/First%20Missing%20Positive.java) +8|[Reconstruct Itinerary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reconstruct%20Itinerary.java) +9|[Frog Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Frog%20Jump.java) +10|[Sort Items by Groups Respecting Dependencies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sort%20Items%20by%20Groups%20Respecting%20Dependencies.java) +11|[Shortest Path Visiting All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Path%20Visiting%20All%20Nodes.java) +12|[Critical Connections in a Network](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Critical%20Connections%20in%20a%20Network.java) +13|[Sliding Window Median](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Median.java) +14|[Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Edit%20Distance.java) +15|[Checking Existence of Edge Length Limited Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Checking%20Existence%20of%20Edge%20Length%20Limited%20Paths.java) +16|[Perfect Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Perfect%20Rectangle.java) +17|[Minimum Window Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Subsequence.java) +18|[Remove Max Number of Edges to Keep Graph Fully Traversable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Remove%20Max%20Number%20of%20Edges%20to%20Keep%20Graph%20Fully%20Traversable.java) +19|[K Inverse Pairs Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Inverse%20Pairs%20Array.java) +20|[Merge K Sorted Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Merge%20K%20Sorted%20Lists.java) +21|[Minimum Replacements to Sort the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Replacements%20to%20Sort%20the%20Array.java) +22|[Design Movie Rental System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Movie%20Rental%20System.java) +23|[Sliding Window Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Sliding%20Window%20Maximum.java) +24|[My Calendar III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/My%20Calendar%20III.java) +25|[Longest Cycle in a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Cycle%20in%20a%20Graph.java) +26|[Text Justification](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Text%20Justification.java) +27|[Design In-Memory File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20In-Memory%20File%20System.java) +28|[Basic Calculator III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator%20III.java) +29|[Integer to English Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Integer%20to%20English%20Words.java) +30|[Naming a Company](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Naming%20a%20Company.java) +31|[Minimum Number of Refueling Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Number%20of%20Refueling%20Stops.java) +32|[Rearrange String k Distance Apart](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Rearrange%20String%20k%20Distance%20Apart.java) +33|[Make Array Strictly Increasing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Make%20Array%20Strictly%20Increasing.java) +34|[Median of Two Sorted Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Median%20of%20Two%20Sorted%20Arrays.java) +35|[Vertical Order Traversal Of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Vertical%20Order%20Traversal%20Of%20a%20Binary%20Tree.java) +36|[Divide Array Into Increasing Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Divide%20Array%20Into%20Increasing%20Sequences.java) +37|[Word Break II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Break%20II.java) +38|[Maximum Number of Non-Overlapping Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Number%20of%20Non-Overlapping%20Substrings.java) +39|[Paint House II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20II.java) +40|[Subarrays with K Different Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Subarrays%20with%20K%20Different%20Integers.java) +41|[Maximum Performance of a Team](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Performance%20of%20a%20Team.java) +42|[Jump Game IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Jump%20Game%20IV.java) +43|[Paint House III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Paint%20House%20III.java) +44|[LFU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/LFU%20Cache.java) +45|[Scramble String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Scramble%20String.java) +46|[Word Search II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Word%20Search%20II.java) +47|[K Empty Slots](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/K%20Empty%20Slots.java) +48|[Employee Free Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Employee%20Free%20Time.java) +49|[Maximize Score After N Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximize%20Score%20After%20N%20Operations.java) +50|[Max Points on a Line](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Max%20Points%20on%20a%20Line.java) +51|[The Skyline Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/The%20Skyline%20Problem.java) +52|[N-Queens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens.java) +53|[Longest Palindrome Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Palindrome%20Product.java) +54|[Odd Even Jump](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Odd%20Even%20Jump.java) +55|[Palindrome Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Palindrome%20Pairs.java) +56|[Stream of Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stream%20of%20Characters.java) +57|[Cut Off Trees for Golf Event](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Cut%20Off%20Trees%20for%20Golf%20Event.java) +58|[Kth Smallest Number in Multiplication Table](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Kth%20Smallest%20Number%20in%20Multiplication%20Table.java) +59|[String Compression II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/String%20Compression%20II.java) +60|[Minimize Deviation in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimize%20Deviation%20in%20Array.java) +61|[Minimum Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Cost%20to%20Hire%20K%20Workers.java) +62|[Find the Longest Valid Obstacle Course at Each Position](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Longest%20Valid%20Obstacle%20Course%20at%20Each%20Position.java) +63|[Number of Valid Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Valid%20Subarrays.java) +64|[Maximum Value of K Coins From Piles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Value%20of%20K%20Coins%20From%20Piles.java) +65|[Substring with Concatenation of All Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Substring%20with%20Concatenation%20of%20All%20Words.java) +66|[Number of Paths with Max Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Paths%20with%20Max%20Score.java) +67|[Profitable Schemes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Profitable%20Schemes.java) +68|[Design Search Autocomplete System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Search%20Autocomplete%20System.java) +69|[Number of Squareful Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Squareful%20Arrays.java) +70|[N-Queens II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/N-Queens%20II.java) +71|[Robot Room Cleaner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Robot%20Room%20Cleaner.java) +72|[Poor Pigs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Poor%20Pigs.java) +73|[Minimum Window Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Window%20Substring.java) +74|[Number of Ways of Cutting a Pizza](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Ways%20of%20Cutting%20a%20Pizza.java) +75|[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Hard.md) +76|[Parsing A Boolean Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Parsing%20A%20Boolean%20Expression.java) +77|[Trapping Rain Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Trapping%20Rain%20Water.java) +78|[Similar String Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Similar%20String%20Groups.java) +79|[Number of Ways to Form a Target String Given a Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Ways%20to%20Form%20a%20Target%20String%20Given%20a%20Dictionary.java) +80|[Find the Kth Smallest Sum of a Matrix With Sorted Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20the%20Kth%20Smallest%20Sum%20of%20a%20Matrix%20With%20Sorted%20Rows.java) +81|[Optimal Account Balancing](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Optimal%20Account%20Balancing.java) +82|[Design Skiplist](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Design%20Skiplist.java) +83|[Wildcard Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Wildcard%20Matching.java) +84|[Expression Add Operators](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Expression%20Add%20Operators.java) +85|[Count of Smaller Numbers After Self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20of%20Smaller%20Numbers%20After%20Self.java) +86|[Number of Ways to Reorder Array to Get Same BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Ways%20to%20Reorder%20Array%20to%20Get%20Same%20BST.java) +87|[Find Median from Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Median%20from%20Data%20Stream.java) +88|[Best Time to Buy and Sell Stock IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20IV.java) +89|[Find Minimum in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Find%20Minimum%20in%20Rotated%20Sorted%20Array%20II.java) +90|[Longest Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Valid%20Parentheses.java) +91|[Stone Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stone%20Game%20III.java) +92|[Reducing Dishes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reducing%20Dishes.java) +93|[Count Subarrays With Fixed Bounds](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Subarrays%20With%20Fixed%20Bounds.java) +94|[Stamping The Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Stamping%20The%20Sequence.java) +95|[Number of Submatrices That Sum to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Number%20of%20Submatrices%20That%20Sum%20to%20Target.java) +96|[Candy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Candy.java) +97|[Minimum Insertion Steps to Make a String Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Insertion%20Steps%20to%20Make%20a%20String%20Palindrome.java) +98|[Shortest Distance from All Buildings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Shortest%20Distance%20from%20All%20Buildings.java) +99|[Recover a Tree From Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Recover%20a%20Tree%20From%20Preorder%20Traversal.java) +100|[Count Vowels Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Count%20Vowels%20Permutation.java) +101|[Longest Increasing Path in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Longest%20Increasing%20Path%20in%20a%20Matrix.java) +102|[Maximum Profit in Job Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Profit%20in%20Job%20Scheduling.java) +103|[Closest Binary Search Tree Values II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Closest%20Binary%20Search%20Tree%20Values%20II.java) +104|[Basic Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Basic%20Calculator.java) +105|[Alien Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Alien%20Dictionary.java) +106|[Prefix and Suffix Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Prefix%20and%20Suffix%20Search.java) +107|[Construct Target Array With Multiple Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Construct%20Target%20Array%20With%20Multiple%20Sums.java) +108|[Tallest Billboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Tallest%20Billboard.java) +109|[Largest Color Value in a Directed Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Color%20Value%20in%20a%20Directed%20Graph.java) +110|[Valid Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Valid%20Number.java) +111|[Dice Roll Simulation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Dice%20Roll%20Simulation.java) +112|[Maximum Frequency Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Frequency%20Stack.java) +113|[Reverse Nodes in k-Group](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Reverse%20Nodes%20in%20k-Group.java) +114|[Serialize and Deserialize N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20N-ary%20Tree.java) +115|[Serialize and Deserialize a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Serialize%20and%20Deserialize%20a%20Binary%20Tree.java) +116|[Minimum Difficulty of a Job Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Minimum%20Difficulty%20of%20a%20Job%20Schedule.java) +117|[Unique Paths III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Unique%20Paths%20III.java) +118|[Restore The Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Restore%20The%20Array.java) +119|[IPO](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/IPO.java) +120|[Insert Delete GetRandom O(1) - Duplicates Allowed](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Insert%20Delete%20GetRandom%20O(1)%20-%20Duplicates%20Allowed.java) +121|[Add Edges to Make Degrees of All Nodes Even](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Add%20Edges%20to%20Make%20Degrees%20of%20All%20Nodes%20Even.java) +122|[Maximum Sum BST in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Maximum%20Sum%20BST%20in%20Binary%20Tree.java) +123|[Binary Tree Maximum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Binary%20Tree%20Maximum%20Path%20Sum.java) +124|[Largest Rectangle in Histogram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Hard/Largest%20Rectangle%20in%20Histogram.java) diff --git a/Medium/README.md b/Medium/README.md index 0d6a9299..cb496742 100644 --- a/Medium/README.md +++ b/Medium/README.md @@ -1,756 +1,795 @@ -# Medium LeetCode Java Solutions +# Medium LeetCode-Java-Solutions S.no | Coding Problem --- | --- -1 | [01 Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/01%20Matrix.java) -2 | [132 Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/132%20Pattern.java) -3 | [3Sum Closest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Closest.java) -4 | [3Sum Smaller](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Smaller.java) -5 | [3Sum With Multiplicity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20With%20Multiplicity.java) -6 | [3Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum.java) -7 | [4 Keys Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Keys%20Keyboard.java) -8 | [4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) -9 | [4Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum%20II.java) -10 | [4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) -11 | [Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) -12 | [Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) -13 | [Add Minimum Number of Rungs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Minimum%20Number%20of%20Rungs.java) -14 | [Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) -15 | [Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) -16 | [Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) -17 | [Adding Spaces to a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Spaces%20to%20a%20String.java) -18 | [Adding Two Negabinary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Two%20Negabinary%20Numbers.java) -19 | [Advantage Shuffle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Advantage%20Shuffle.java) -20 | [Alert Using Same Key-Card Three or More Times in a One Hour Period](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Alert%20Using%20Same%20Key-Card%20Three%20or%20More%20Times%20in%20a%20One%20Hour%20Period.java) -21 | [All Ancestors of a Node in a Directed Acyclic Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Ancestors%20of%20a%20Node%20in%20a%20Directed%20Acyclic%20Graph.java) -22 | [All Divisions With the Highest Score of a Binary Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Divisions%20With%20the%20Highest%20Score%20of%20a%20Binary%20Array.java) -23 | [All Elements in Two Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Elements%20in%20Two%20Binary%20Search%20Trees.java) -24 | [All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) -25 | [All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) -26 | [All Paths from Source Lead to Destination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20from%20Source%20Lead%20to%20Destination.java) -27 | [All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) -28 | [Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) -29 | [Angle Between Hands of a Clock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Angle%20Between%20Hands%20of%20a%20Clock.java) -30 | [Append Characters to String to Make Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20Characters%20to%20String%20to%20Make%20Subsequence.java) -31 | [Append K Integers With Minimal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20K%20Integers%20With%20Minimal%20Sum.java) -32 | [Apply Discount Every n Orders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20Every%20n%20Orders.java) -33 | [Apply Discount to Prices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20to%20Prices.java) -34 | [Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) -35 | [Arithmetic Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Subarrays.java) -36 | [Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) -37 | [Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) -38 | [As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) -39 | [Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) -40 | [Average Waiting Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Average%20Waiting%20Time.java) -41 | [Bag of Tokens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bag%20of%20Tokens.java) -42 | [Balance a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Balance%20a%20Binary%20Search%20Tree.java) -43 | [Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) -44 | [Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) -45 | [Best Time to Buy and Sell Stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20II.java) -46 | [Best Time to Buy and Sell Stock with Cooldown](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Cooldown.java) -47 | [Binary Search Tree Iterator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator%20II.java) -48 | [Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) -49 | [Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) -50 | [Binary Tree Coloring Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Coloring%20Game.java) -51 | [Binary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Level%20Order%20Traversal.java) -52 | [Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) -53 | [Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) -54 | [Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) -55 | [Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) -56 | [Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) -57 | [Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) -58 | [Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) -59 | [Binary Tree Zigzag Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Zigzag%20Level%20Order%20Traversal.java) -60 | [Binary Trees With Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Trees%20With%20Factors.java) -61 | [Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) -62 | [Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) -63 | [Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bold%20Words%20in%20String.java) -64 | [Bomb Enemy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bomb%20Enemy.java) -65 | [Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) -66 | [Brace Expansion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Brace%20Expansion.java) -67 | [Break a Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Break%20a%20Palindrome.java) -68 | [Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) -69 | [Buildings With an Ocean View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Buildings%20With%20an%20Ocean%20View.java) -70 | [Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) -71 | [Camelcase Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Camelcase%20Matching.java) -72 | [Campus Bikes II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes%20II.java) -73 | [Campus Bikes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes.java) -74 | [Can Convert String in K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Convert%20String%20in%20K%20Moves.java) -75 | [Can Make Palindrome from Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Make%20Palindrome%20from%20Substring.java) -76 | [Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) -77 | [Capacity To Ship Packages Within D Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Capacity%20To%20Ship%20Packages%20Within%20D%20Days.java) -78 | [Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) -79 | [Champagne Tower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Champagne%20Tower.java) -80 | [Cheapest Flights Within K Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cheapest%20Flights%20Within%20K%20Stops.java) -81 | [Check Completeness of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20Completeness%20of%20a%20Binary%20Tree.java) -82 | [Check If All 1's Are at Least Length K Places Away](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20All%201's%20Are%20at%20Least%20Length%20K%20Places%20Away.java) -83 | [Check If a String Can Break Another String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Can%20Break%20Another%20String.java) -84 | [Check If a String Contains All Binary Codes of Size K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Contains%20All%20Binary%20Codes%20of%20Size%20K.java) -85 | [Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Is%20a%20Valid%20Sequence%20from%20Root%20to%20Leaves%20Path%20in%20a%20Binary%20Tree.java) -86 | [Check if There is a Valid Path in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20There%20is%20a%20Valid%20Path%20in%20a%20Grid.java) -87 | [Cinema Seat Allocation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cinema%20Seat%20Allocation.java) -88 | [Clone Binary Tree With Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Binary%20Tree%20With%20Random%20Pointer.java) -89 | [Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) -90 | [Clone N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20N-ary%20Tree.java) -91 | [Closest Nodes Queries in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Closest%20Nodes%20Queries%20in%20a%20Binary%20Search%20Tree.java) -92 | [Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) -93 | [Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) -94 | [Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) -95 | [Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) -96 | [Combination Sum IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20IV.java) -97 | [Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) -98 | [Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) -99 | [Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) -100 | [Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) -101 | [Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) -102 | [Concatenation of Consecutive Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Concatenation%20of%20Consecutive%20Binary%20Numbers.java) -103 | [Connecting Cities With Minimum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Connecting%20Cities%20With%20Minimum%20Cost.java) -104 | [Construct Binary Search Tree from Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Search%20Tree%20from%20Preorder%20Traversal.java) -105 | [Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) -106 | [Construct Binary Tree from Preorder and Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Preorder%20and%20Inorder%20Traversal.java) -107 | [Construct K Palindrome Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20K%20Palindrome%20Strings.java) -108 | [Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) -109 | [Construct String With Repeat Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20String%20With%20Repeat%20Limit.java) -110 | [Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) -111 | [Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) -112 | [Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) -113 | [Continuous Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Continuous%20Subarray%20Sum.java) -114 | [Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) -115 | [Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) -116 | [Convert an Array Into a 2D Array With Conditions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20an%20Array%20Into%20a%202D%20Array%20With%20Conditions.java) -117 | [Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) -118 | [Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) -119 | [Count Collisions on a Road](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Collisions%20on%20a%20Road.java) -120 | [Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) -121 | [Count Good Nodes in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Good%20Nodes%20in%20Binary%20Tree.java) -122 | [Count Nodes Equal to Average of Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Average%20of%20Subtree.java) -123 | [Count Nodes Equal to Sum of Descendants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Sum%20of%20Descendants.java) -124 | [Count Number of Bad Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Bad%20Pairs.java) -125 | [Count Number of Distinct Integers After Reverse Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Distinct%20Integers%20After%20Reverse%20Operations.java) -126 | [Count Number of Homogenous Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Homogenous%20Substrings.java) -127 | [Count Number of Teams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Teams.java) -128 | [Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) -129 | [Count Servers That Communicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Servers%20That%20Communicate.java) -130 | [Count Sorted Vowel Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sorted%20Vowel%20Strings.java) -131 | [Count Square Submatrices with All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Square%20Submatrices%20with%20All%20Ones.java) -132 | [Count Sub Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sub%20Islands.java) -133 | [Count Submatrices With All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Submatrices%20With%20All%20Ones.java) -134 | [Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) -135 | [Count Unreachable Pairs of Nodes in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Unreachable%20Pairs%20of%20Nodes%20in%20an%20Undirected%20Graph.java) -136 | [Count Vowel Strings in Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Vowel%20Strings%20in%20Ranges.java) -137 | [Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20and%20Say.java) -138 | [Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) -139 | [Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) -140 | [Create Binary Tree From Descriptions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Create%20Binary%20Tree%20From%20Descriptions.java) -141 | [Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) -142 | [Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) -143 | [Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) -144 | [Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) -145 | [Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) -146 | [Deepest Leaves Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Deepest%20Leaves%20Sum.java) -147 | [Delete Leaves With a Given Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Leaves%20With%20a%20Given%20Value.java) -148 | [Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) -149 | [Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) -150 | [Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) -151 | [Delete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Tree%20Nodes.java) -152 | [Delete the Middle Node of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20the%20Middle%20Node%20of%20a%20Linked%20List.java) -153 | [Design A Leaderboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20A%20Leaderboard.java) -154 | [Design Add and Search Words Data Structure](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Add%20and%20Search%20Words%20Data%20Structure.java) -155 | [Design Authentication Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Authentication%20Manager.java) -156 | [Design Browser History](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Browser%20History.java) -157 | [Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) -158 | [Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) -159 | [Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) -160 | [Design Front Middle Back Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Front%20Middle%20Back%20Queue.java) -161 | [Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) -162 | [Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) -163 | [Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) -164 | [Design SQL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20SQL.java) -165 | [Design Snake Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Snake%20Game.java) -166 | [Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) -167 | [Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) -168 | [Design Underground System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Underground%20System.java) -169 | [Design a File Sharing System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20File%20Sharing%20System.java) -170 | [Design a Stack With Increment Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20Stack%20With%20Increment%20Operation.java) -171 | [Design an ATM Machine](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20ATM%20Machine.java) -172 | [Design an Expression Tree With Evaluate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20Expression%20Tree%20With%20Evaluate%20Function.java) -173 | [Determine if Two Strings Are Close](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20Two%20Strings%20Are%20Close.java) -174 | [Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) -175 | [Diameter of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diameter%20of%20N-ary%20Tree.java) -176 | [Display Table of Food Orders in a Restaurant](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Display%20Table%20of%20Food%20Orders%20in%20a%20Restaurant.java) -177 | [Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) -178 | [Divide Array in Sets of K Consecutive Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Array%20in%20Sets%20of%20K%20Consecutive%20Numbers.java) -179 | [Divide Players Into Teams of Equal Skill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Players%20Into%20Teams%20of%20Equal%20Skill.java) -180 | [Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) -181 | [Dot Product of Two Sparse Vectors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dot%20Product%20of%20Two%20Sparse%20Vectors.java) -182 | [Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) -183 | [Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) -184 | [Equal Row and Column Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Equal%20Row%20and%20Column%20Pairs.java) -185 | [Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) -186 | [Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) -187 | [Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) -188 | [Evaluate the Bracket Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20the%20Bracket%20Pairs%20of%20a%20String.java) -189 | [Even Odd Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Even%20Odd%20Tree.java) -190 | [Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) -191 | [Execution of All Suffix Instructions Staying in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid.java) -192 | [Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) -193 | [Fair Distribution of Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fair%20Distribution%20of%20Cookies.java) -194 | [Filter Restaurants by Vegan-Friendly, Price and Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Filter%20Restaurants%20by%20Vegan-Friendly,%20Price%20and%20Distance.java) -195 | [Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Anagrams%20in%20a%20String.java) -196 | [Find All Lonely Numbers in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Lonely%20Numbers%20in%20the%20Array.java) -197 | [Find All Possible Recipes from Given Supplies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Possible%20Recipes%20from%20Given%20Supplies.java) -198 | [Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) -199 | [Find Center of Star Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Center%20of%20Star%20Graph.java) -200 | [Find Closest Node to Given Two Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Closest%20Node%20to%20Given%20Two%20Nodes.java) -201 | [Find Consecutive Integers from a Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Consecutive%20Integers%20from%20a%20Data%20Stream.java) -202 | [Find Distance in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Distance%20in%20a%20Binary%20Tree.java) -203 | [Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) -204 | [Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) -205 | [Find Elements in a Contaminated Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Elements%20in%20a%20Contaminated%20Binary%20Tree.java) -206 | [Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) -207 | [Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) -208 | [Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) -209 | [Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) -210 | [Find Largest Value in Each Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Each%20Tree%20Row.java) -211 | [Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) -212 | [Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) -213 | [Find Missing Observations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Missing%20Observations.java) -214 | [Find Nearest Right Node in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Nearest%20Right%20Node%20in%20Binary%20Tree.java) -215 | [Find Original Array From Doubled Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Original%20Array%20From%20Doubled%20Array.java) -216 | [Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) -217 | [Find Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Permutation.java) -218 | [Find Players With Zero or One Losses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Players%20With%20Zero%20or%20One%20Losses.java) -219 | [Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) -220 | [Find Root of N-Ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Root%20of%20N-Ary%20Tree.java) -221 | [Find Smallest Common Element in All Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Smallest%20Common%20Element%20in%20All%20Rows.java) -222 | [Find The Original Array of Prefix Xor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20The%20Original%20Array%20of%20Prefix%20Xor.java) -223 | [Find Triangular Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Triangular%20Sum%20of%20an%20Array.java) -224 | [Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20a%20Corresponding%20Node%20of%20a%20Binary%20Tree%20in%20a%20Clone%20of%20That%20Tree.java) -225 | [Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) -226 | [Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) -227 | [Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) -228 | [Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) -229 | [Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) -230 | [Find the Duplicate Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Duplicate%20Number.java) -231 | [Find the Index of the First Occurrence in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20First%20Occurrence%20in%20a%20String.java) -232 | [Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) -233 | [Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) -234 | [Find the Maximum Divisibility Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Maximum%20Divisibility%20Score.java) -235 | [Find the Minimum and Maximum Number of Nodes Between Critical Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Minimum%20and%20Maximum%20Number%20of%20Nodes%20Between%20Critical%20Points.java) -236 | [Find the Score of All Prefixes of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Score%20of%20All%20Prefixes%20of%20an%20Array.java) -237 | [Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) -238 | [Find the Substring With Maximum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Substring%20With%20Maximum%20Cost.java) -239 | [Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) -240 | [Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) -241 | [First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) -242 | [Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) -243 | [Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) -244 | [Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) -245 | [Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) -246 | [Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) -247 | [Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) -248 | [Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) -249 | [Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) -250 | [Friends Of Appropriate Ages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friends%20Of%20Appropriate%20Ages.java) -251 | [Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) -252 | [Furthest Building You Can Reach](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Furthest%20Building%20You%20Can%20Reach.java) -253 | [Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) -254 | [Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) -255 | [Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) -256 | [Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) -257 | [Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) -258 | [Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) -259 | [Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) -260 | [Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) -261 | [Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) -262 | [Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) -263 | [H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) -264 | [H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) -265 | [HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) -266 | [Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) -267 | [House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) -268 | [House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) -269 | [House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber.java) -270 | [Image Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Image%20Overlap.java) -271 | [Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) -272 | [Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) -273 | [Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) -274 | [Implement Trie II (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20II%20(Prefix%20Tree).java) -275 | [Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) -276 | [Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) -277 | [Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) -278 | [Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) -279 | [Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) -280 | [Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) -281 | [Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Interval.java) -282 | [Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) -283 | [Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) -284 | [Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) -285 | [Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) -286 | [Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) -287 | [Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) -288 | [Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interleaving%20String.java) -289 | [Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) -290 | [Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) -291 | [Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) -292 | [Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) -293 | [Jump Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20II.java) -294 | [Jump Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20III.java) -295 | [Jump Game VI](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20VI.java) -296 | [Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) -297 | [K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Closest%20Points%20to%20Origin.java) -298 | [K Radius Subarray Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Radius%20Subarray%20Averages.java) -299 | [Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) -300 | [Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) -301 | [Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) -302 | [Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) -303 | [Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) -304 | [Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) -305 | [Kth Largest Sum in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Sum%20in%20a%20Binary%20Tree.java) -306 | [Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) -307 | [Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) -308 | [LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/LRU%20Cache.java) -309 | [Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) -310 | [Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) -311 | [Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) -312 | [Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Time%20for%20Given%20Digits.java) -313 | [Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) -314 | [Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) -315 | [Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) -316 | [Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) -317 | [Length of the Longest Alphabetical Continuous Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Length%20of%20the%20Longest%20Alphabetical%20Continuous%20Substring.java) -318 | [Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) -319 | [Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) -320 | [Lexicographical Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographical%20Numbers.java) -321 | [Lexicographically Smallest Equivalent String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20Equivalent%20String.java) -322 | [Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) -323 | [Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) -324 | [Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) -325 | [Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) -326 | [Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) -327 | [Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) -328 | [Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) -329 | [Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) -330 | [Longest Arithmetic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence.java) -331 | [Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) -332 | [Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) -333 | [Longest Happy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Happy%20String.java) -334 | [Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) -335 | [Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) -336 | [Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) -337 | [Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) -338 | [Longest String Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20String%20Chain.java) -339 | [Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) -340 | [Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) -341 | [Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) -342 | [Longest Uploaded Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Uploaded%20Prefix.java) -343 | [Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) -344 | [Longest Word With All Prefixes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20With%20All%20Prefixes.java) -345 | [Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) -346 | [Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) -347 | [Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) -348 | [Lowest Common Ancestor of a Binary Tree III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20III.java) -349 | [Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) -350 | [Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) -351 | [Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) -352 | [Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) -353 | [Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) -354 | [Matchsticks to Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Matchsticks%20to%20Square.java) -355 | [Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Area%20of%20Island.java) -356 | [Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) -357 | [Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) -358 | [Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) -359 | [Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) -360 | [Max Sum of a Pair With Equal Sum of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Sum%20of%20a%20Pair%20With%20Equal%20Sum%20of%20Digits.java) -361 | [Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) -362 | [Maximal Score After Applying K Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Score%20After%20Applying%20K%20Operations.java) -363 | [Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) -364 | [Maximize Number of Subsequences in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Number%20of%20Subsequences%20in%20a%20String.java) -365 | [Maximize the Topmost Element After K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Topmost%20Element%20After%20K%20Moves.java) -366 | [Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) -367 | [Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Area%20of%20a%20Piece%20of%20Cake%20After%20Horizontal%20and%20Vertical%20Cuts.java) -368 | [Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) -369 | [Maximum Bags With Full Capacity of Rocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Bags%20With%20Full%20Capacity%20of%20Rocks.java) -370 | [Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) -371 | [Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) -372 | [Maximum Consecutive Floors Without Special Floors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Consecutive%20Floors%20Without%20Special%20Floors.java) -373 | [Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) -374 | [Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) -375 | [Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) -376 | [Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) -377 | [Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) -378 | [Maximum Length of Repeated Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Repeated%20Subarray.java) -379 | [Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) -380 | [Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) -381 | [Maximum Matching of Players With Trainers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Matching%20of%20Players%20With%20Trainers.java) -382 | [Maximum Nesting Depth of Two Valid Parentheses Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Nesting%20Depth%20of%20Two%20Valid%20Parentheses%20Strings.java) -383 | [Maximum Number of Coins You Can Get](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Coins%20You%20Can%20Get.java) -384 | [Maximum Number of Events That Can Be Attended](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Events%20That%20Can%20Be%20Attended.java) -385 | [Maximum Number of Groups Entering a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Groups%20Entering%20a%20Competition.java) -386 | [Maximum Number of Integers to Choose From a Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I.java) -387 | [Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) -388 | [Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) -389 | [Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) -390 | [Maximum Points You Can Obtain from Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Points%20You%20Can%20Obtain%20from%20Cards.java) -391 | [Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) -392 | [Maximum Product of Splitted Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Splitted%20Binary%20Tree.java) -393 | [Maximum Product of Word Lengths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Word%20Lengths.java) -394 | [Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) -395 | [Maximum Score from Performing Multiplication Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20from%20Performing%20Multiplication%20Operations.java) -396 | [Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) -397 | [Maximum Star Sum of a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Star%20Sum%20of%20a%20Graph.java) -398 | [Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Subarray.java) -399 | [Maximum Sum of Distinct Subarrays With Length K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Distinct%20Subarrays%20With%20Length%20K.java) -400 | [Maximum Sum of an Hourglass](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20an%20Hourglass.java) -401 | [Maximum Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Swap.java) -402 | [Maximum Total Importance of Roads](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Total%20Importance%20of%20Roads.java) -403 | [Maximum Twin Sum of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Twin%20Sum%20of%20a%20Linked%20List.java) -404 | [Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) -405 | [Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) -406 | [Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) -407 | [Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) -408 | [Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) -409 | [Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) -410 | [Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) -411 | [Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) -412 | [Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) -413 | [Merge Nodes in Between Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Nodes%20in%20Between%20Zeros.java) -414 | [Min Cost to Connect All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Cost%20to%20Connect%20All%20Points.java) -415 | [Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Stack.java) -416 | [Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) -417 | [Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) -418 | [Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) -419 | [Minimize Maximum of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20of%20Array.java) -420 | [Minimize Product Sum of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Product%20Sum%20of%20Two%20Arrays.java) -421 | [Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) -422 | [Minimum Amount of Time to Collect Garbage](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Amount%20of%20Time%20to%20Collect%20Garbage.java) -423 | [Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) -424 | [Minimum Average Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Average%20Difference.java) -425 | [Minimum Consecutive Cards to Pick Up](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Consecutive%20Cards%20to%20Pick%20Up.java) -426 | [Minimum Cost For Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20For%20Tickets.java) -427 | [Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) -428 | [Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) -429 | [Minimum Deletions to Make Array Beautiful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Array%20Beautiful.java) -430 | [Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) -431 | [Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) -432 | [Minimum Falling Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Falling%20Path%20Sum.java) -433 | [Minimum Fuel Cost to Report to the Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Fuel%20Cost%20to%20Report%20to%20the%20Capital.java) -434 | [Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) -435 | [Minimum Health to Beat Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Health%20to%20Beat%20Game.java) -436 | [Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) -437 | [Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) -438 | [Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) -439 | [Minimum Moves to Equal Array Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements.java) -440 | [Minimum Moves to Reach Target Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Reach%20Target%20Score.java) -441 | [Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) -442 | [Minimum Number of Steps to Make Two Strings Anagram II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram%20II.java) -443 | [Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) -444 | [Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) -445 | [Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) -446 | [Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) -447 | [Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) -448 | [Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) -449 | [Minimum Rounds to Complete All Tasks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Rounds%20to%20Complete%20All%20Tasks.java) -450 | [Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) -451 | [Minimum Score of a Path Between Two Cities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20of%20a%20Path%20Between%20Two%20Cities.java) -452 | [Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) -453 | [Minimum Swaps to Group All 1's Together](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Swaps%20to%20Group%20All%201's%20Together.java) -454 | [Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) -455 | [Minimum Time to Collect All Apples in a Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Collect%20All%20Apples%20in%20a%20Tree.java) -456 | [Minimum Time to Complete Trips](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Complete%20Trips.java) -457 | [Minimum Time to Make Rope Colorful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Make%20Rope%20Colorful.java) -458 | [Mirror Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mirror%20Reflection.java) -459 | [Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) -460 | [Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) -461 | [Most Popular Video Creator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Popular%20Video%20Creator.java) -462 | [Most Profit Assigning Work](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Profit%20Assigning%20Work.java) -463 | [Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) -464 | [Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) -465 | [My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) -466 | [My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) -467 | [N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/N-ary%20Tree%20Level%20Order%20Traversal.java) -468 | [Nearest Exit from Entrance in Maze](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nearest%20Exit%20from%20Entrance%20in%20Maze.java) -469 | [Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) -470 | [Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) -471 | [Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) -472 | [Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) -473 | [Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) -474 | [Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) -475 | [Next Greater Numerically Balanced Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Numerically%20Balanced%20Number.java) -476 | [Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) -477 | [Node With Highest Edge Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Node%20With%20Highest%20Edge%20Score.java) -478 | [Non Overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non%20Overlapping%20Intervals.java) -479 | [Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-decreasing%20Array.java) -480 | [Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) -481 | [Number of Closed Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Closed%20Islands.java) -482 | [Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) -483 | [Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) -484 | [Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) -485 | [Number of Distinct Substrings in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Substrings%20in%20a%20String.java) -486 | [Number of Enclaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Enclaves.java) -487 | [Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) -488 | [Number of Laser Beams in a Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Laser%20Beams%20in%20a%20Bank.java) -489 | [Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) -490 | [Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) -491 | [Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) -492 | [Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) -493 | [Number of Operations to Make Network Connected](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Operations%20to%20Make%20Network%20Connected.java) -494 | [Number of Pairs of Interchangeable Rectangles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Interchangeable%20Rectangles.java) -495 | [Number of Pairs of Strings With Concatenation Equal to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target.java) -496 | [Number of Provinces](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Provinces.java) -497 | [Number of Smooth Descent Periods of a Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock.java) -498 | [Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) -499 | [Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) -500 | [Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) -501 | [Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) -502 | [Number of Ways to Split Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Ways%20to%20Split%20Array.java) -503 | [Number of Zero-Filled Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Zero-Filled%20Subarrays.java) -504 | [Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) -505 | [Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) -506 | [One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) -507 | [Ones and Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ones%20and%20Zeroes.java) -508 | [Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) -509 | [Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) -510 | [Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) -511 | [Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) -512 | [Optimal Partition of String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Partition%20of%20String.java) -513 | [Out of Boundary Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Out%20of%20Boundary%20Paths.java) -514 | [Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) -515 | [Pacific Atlantic Water Flow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pacific%20Atlantic%20Water%20Flow.java) -516 | [Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) -517 | [Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) -518 | [Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) -519 | [Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Parallel%20Courses.java) -520 | [Partition Array According to Given Pivot](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Array%20According%20to%20Given%20Pivot.java) -521 | [Partition Equal Subset Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Equal%20Subset%20Sum.java) -522 | [Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) -523 | [Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) -524 | [Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) -525 | [Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) -526 | [Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20III.java) -527 | [Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) -528 | [Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) -529 | [Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) -530 | [Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) -531 | [Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) -532 | [People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) -533 | [Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) -534 | [Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) -535 | [Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) -536 | [Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) -537 | [Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) -538 | [Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) -539 | [Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) -540 | [Possible Bipartition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Possible%20Bipartition.java) -541 | [Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) -542 | [Pow(x, n)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow(x,%20n).java) -543 | [Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) -544 | [Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) -545 | [Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) -546 | [Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) -547 | [Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) -548 | [Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) -549 | [Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) -550 | [Product of Two Run-Length Encoded Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Two%20Run-Length%20Encoded%20Arrays.java) -551 | [Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) -552 | [Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) -553 | [Push Dominoes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Push%20Dominoes.java) -554 | [Put Boxes Into the Warehouse I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Put%20Boxes%20Into%20the%20Warehouse%20I.java) -555 | [Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) -556 | [Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) -557 | [RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) -558 | [Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) -559 | [Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) -560 | [Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) -561 | [Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) -562 | [Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) -563 | [Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) -564 | [Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) -565 | [Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) -566 | [Reachable Nodes With Restrictions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reachable%20Nodes%20With%20Restrictions.java) -567 | [Rearrange Array Elements by Sign](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20Elements%20by%20Sign.java) -568 | [Rearrange Array to Maximize Prefix Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20to%20Maximize%20Prefix%20Score.java) -569 | [Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) -570 | [Recover Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Recover%20Binary%20Search%20Tree.java) -571 | [Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) -572 | [Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) -573 | [Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) -574 | [Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) -575 | [Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) -576 | [Remove All Ones With Row and Column Flips II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Ones%20With%20Row%20and%20Column%20Flips%20II.java) -577 | [Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) -578 | [Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) -579 | [Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) -580 | [Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) -581 | [Remove Duplicates From an Unsorted Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20an%20Unsorted%20Linked%20List.java) -582 | [Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) -583 | [Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) -584 | [Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) -585 | [Remove Nodes From Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nodes%20From%20Linked%20List.java) -586 | [Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) -587 | [Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) -588 | [Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) -589 | [Removing Stars From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Removing%20Stars%20From%20a%20String.java) -590 | [Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Data%20in%20Log%20Files.java) -591 | [Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) -592 | [Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) -593 | [Reordered Power of 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reordered%20Power%20of%202.java) -594 | [Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) -595 | [Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) -596 | [Replace Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Elements%20in%20an%20Array.java) -597 | [Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) -598 | [Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) -599 | [Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) -600 | [Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Integer.java) -601 | [Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) -602 | [Reverse Nodes in Even Length Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20Even%20Length%20Groups.java) -603 | [Reverse Odd Levels of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Odd%20Levels%20of%20Binary%20Tree.java) -604 | [Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) -605 | [Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) -606 | [Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) -607 | [Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) -608 | [Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) -609 | [Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) -610 | [Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) -611 | [Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) -612 | [Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotated%20Digits.java) -613 | [Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) -614 | [Satisfiability of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfiability%20of%20Equality%20Equations.java) -615 | [Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) -616 | [Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) -617 | [Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) -618 | [Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) -619 | [Search a 2D Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix%20II.java) -620 | [Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) -621 | [Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) -622 | [Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) -623 | [Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) -624 | [Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) -625 | [Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) -626 | [Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) -627 | [Sender With Largest Word Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sender%20With%20Largest%20Word%20Count.java) -628 | [Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) -629 | [Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) -630 | [Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) -631 | [Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) -632 | [Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) -633 | [Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) -634 | [Short Encoding of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Short%20Encoding%20of%20Words.java) -635 | [Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) -636 | [Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) -637 | [Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) -638 | [Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Unsorted%20Continuous%20Subarray.java) -639 | [Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) -640 | [Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) -641 | [Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) -642 | [Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) -643 | [Simple Bank System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simple%20Bank%20System.java) -644 | [Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) -645 | [Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) -646 | [Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) -647 | [Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) -648 | [Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) -649 | [Smallest Number in Infinite Set](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Number%20in%20Infinite%20Set.java) -650 | [Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) -651 | [Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) -652 | [Smallest String With Swaps](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20Swaps.java) -653 | [Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) -654 | [Smallest Value of the Rearranged Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Value%20of%20the%20Rearranged%20Number.java) -655 | [Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) -656 | [Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) -657 | [Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) -658 | [Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) -659 | [Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) -660 | [Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) -661 | [Sort Integers by The Power Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Integers%20by%20The%20Power%20Value.java) -662 | [Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) -663 | [Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) -664 | [Sort the Jumbled Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Jumbled%20Numbers.java) -665 | [Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) -666 | [Sort the Students by Their Kth Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Students%20by%20Their%20Kth%20Score.java) -667 | [Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) -668 | [Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) -669 | [Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) -670 | [Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) -671 | [Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) -672 | [Split Linked List in Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20in%20Parts.java) -673 | [Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) -674 | [Step-By-Step Directions From a Binary Tree Node to Another](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Step-By-Step%20Directions%20From%20a%20Binary%20Tree%20Node%20to%20Another.java) -675 | [Stock Price Fluctuation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stock%20Price%20Fluctuation.java) -676 | [Strictly Palindromic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Strictly%20Palindromic%20Number.java) -677 | [String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20Compression.java) -678 | [String to Integer (atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer%20(atoi).java) -679 | [Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) -680 | [Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) -681 | [Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) -682 | [Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subdomain%20Visit%20Count.java) -683 | [Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) -684 | [Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) -685 | [Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) -686 | [Successful Pairs of Spells and Potions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Successful%20Pairs%20of%20Spells%20and%20Potions.java) -687 | [Sum Multiples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Multiples.java) -688 | [Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) -689 | [Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) -690 | [Sum of Beauty of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Beauty%20of%20All%20Substrings.java) -691 | [Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Even%20Numbers%20After%20Queries.java) -692 | [Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) -693 | [Sum of Numbers With Units Digit K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Numbers%20With%20Units%20Digit%20K.java) -694 | [Sum of Subarray Minimums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Subarray%20Minimums.java) -695 | [Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) -696 | [Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) -697 | [Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) -698 | [Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) -699 | [Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) -700 | [Synonymous Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Synonymous%20Sentences.java) -701 | [Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) -702 | [Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) -703 | [Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) -704 | [The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) -705 | [The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) -706 | [The Number of Weak Characters in the Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Weak%20Characters%20in%20the%20Game.java) -707 | [The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) -708 | [The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) -709 | [Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) -710 | [Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) -711 | [Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) -712 | [Time Needed to Rearrange a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Rearrange%20a%20Binary%20String.java) -713 | [Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) -714 | [Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) -715 | [Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) -716 | [Tree Diameter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tree%20Diameter.java) -717 | [Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Triangle.java) -718 | [Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) -719 | [Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) -720 | [Tweet Counts Per Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tweet%20Counts%20Per%20Frequency.java) -721 | [Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20City%20Scheduling.java) -722 | [Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) -723 | [Two Sum II - Input Array Is Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20II%20-%20Input%20Array%20Is%20Sorted.java) -724 | [UTF-8 Validation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/UTF-8%20Validation.java) -725 | [Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) -726 | [Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) -727 | [Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) -728 | [Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) -729 | [Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) -730 | [Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) -731 | [Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) -732 | [Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) -733 | [Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) -734 | [Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) -735 | [Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) -736 | [Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) -737 | [Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) -738 | [Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) -739 | [Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) -740 | [Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) -741 | [Vowels of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowels%20of%20All%20Substrings.java) -742 | [Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) -743 | [Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) -744 | [Watering Plants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Watering%20Plants.java) -745 | [Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) -746 | [Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) -747 | [Wiggle Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Subsequence.java) -748 | [Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) -749 | [Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) -750 | [Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) -751 | [Word Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Subsets.java) -752 | [ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) -753 | [Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) +1|[Jump Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20II.java) +2|[Unique Paths II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths%20II.java) +3|[Search a 2D Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix%20II.java) +4|[First Unique Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/First%20Unique%20Number.java) +5|[Minimum Number of Vertices to Reach All Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Vertices%20to%20Reach%20All%20Nodes.java) +6|[Inorder Successor in BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST.java) +7|[3Sum Closest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Closest.java) +8|[Binary Tree Zigzag Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Zigzag%20Level%20Order%20Traversal.java) +9|[Successful Pairs of Spells and Potions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Successful%20Pairs%20of%20Spells%20and%20Potions.java) +10|[Sort the Jumbled Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Jumbled%20Numbers.java) +11|[Closest Nodes Queries in a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Closest%20Nodes%20Queries%20in%20a%20Binary%20Search%20Tree.java) +12|[House Robber III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20III.java) +13|[Out of Boundary Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Out%20of%20Boundary%20Paths.java) +14|[Campus Bikes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes.java) +15|[Arithmetic Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Subarrays.java) +16|[Binary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Level%20Order%20Traversal.java) +17|[Vowels of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowels%20of%20All%20Substrings.java) +18|[Grumpy Bookstore Owner](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Grumpy%20Bookstore%20Owner.java) +19|[Minimize the Maximum Difference of Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20the%20Maximum%20Difference%20of%20Pairs.java) +20|[Linked List Cycle II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Cycle%20II.java) +21|[Dota2 Senate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dota2%20Senate.java) +22|[Largest Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Number.java) +23|[Stone Game II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stone%20Game%20II.java) +24|[Web Crawler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Web%20Crawler.java) +25|[Champagne Tower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Champagne%20Tower.java) +26|[Candy Crush](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Candy%20Crush.java) +27|[Bold Words in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bold%20Words%20in%20String.java) +28|[Diagonal Traverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diagonal%20Traverse.java) +29|[Shortest Way to Form String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Way%20to%20Form%20String.java) +30|[Maximum Number of Coins You Can Get](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Coins%20You%20Can%20Get.java) +31|[Masking Personal Information](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Masking%20Personal%20Information.java) +32|[The Earliest Moment When Everyone Become Friends](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Earliest%20Moment%20When%20Everyone%20Become%20Friends.java) +33|[Divide Two Integers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Two%20Integers.java) +34|[Minimum Cost to Connect Sticks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20to%20Connect%20Sticks.java) +35|[Lowest Common Ancestor of Deepest Leaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20Deepest%20Leaves.java) +36|[Single Number III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20III.java) +37|[Next Greater Element III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20III.java) +38|[Making File Names Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Making%20File%20Names%20Unique.java) +39|[Validate Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Binary%20Search%20Tree.java) +40|[Sparse Matrix Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sparse%20Matrix%20Multiplication.java) +41|[Uncrossed Lines](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Uncrossed%20Lines.java) +42|[Capacity To Ship Packages Within D Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Capacity%20To%20Ship%20Packages%20Within%20D%20Days.java) +43|[Count Vowel Strings in Ranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Vowel%20Strings%20in%20Ranges.java) +44|[Set Matrix Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Set%20Matrix%20Zeroes.java) +45|[Flatten a Multilevel Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20a%20Multilevel%20Doubly%20Linked%20List.java) +46|[Word Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Subsets.java) +47|[Find Smallest Common Element in All Rows](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Smallest%20Common%20Element%20in%20All%20Rows.java) +48|[Reverse Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Integer.java) +49|[Most Popular Video Creator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Popular%20Video%20Creator.java) +50|[Most Stones Removed with Same Row or Column](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Stones%20Removed%20with%20Same%20Row%20or%20Column.java) +51|[Shortest Word Distance II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20II.java) +52|[Total Hamming Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Hamming%20Distance.java) +53|[Sort Linked List Already Sorted Using Absolute Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Linked%20List%20Already%20Sorted%20Using%20Absolute%20Values.java) +54|[Count Number of Homogenous Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Homogenous%20Substrings.java) +55|[Score of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20of%20Parentheses.java) +56|[Gas Station](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gas%20Station.java) +57|[Number of Subarrays with Bounded Maximum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subarrays%20with%20Bounded%20Maximum.java) +58|[Kth Largest Sum in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Sum%20in%20a%20Binary%20Tree.java) +59|[Smallest Number in Infinite Set](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Number%20in%20Infinite%20Set.java) +60|[All Divisions With the Highest Score of a Binary Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Divisions%20With%20the%20Highest%20Score%20of%20a%20Binary%20Array.java) +61|[Non-decreasing Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-decreasing%20Array.java) +62|[Palindrome Partitioning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindrome%20Partitioning.java) +63|[Find all Duplicates in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20all%20Duplicates%20in%20an%20Array.java) +64|[Find Largest Value in Each Tree Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Largest%20Value%20in%20Each%20Tree%20Row.java) +65|[Flatten 2D Vector](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%202D%20Vector.java) +66|[Find All Lonely Numbers in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Lonely%20Numbers%20in%20the%20Array.java) +67|[Furthest Building You Can Reach](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Furthest%20Building%20You%20Can%20Reach.java) +68|[Convert Binary Search Tree to Sorted Doubly Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Binary%20Search%20Tree%20to%20Sorted%20Doubly%20Linked%20List.java) +69|[Design a File Sharing System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20File%20Sharing%20System.java) +70|[Watering Plants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Watering%20Plants.java) +71|[Smallest String Starting From Leaf](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20Starting%20From%20Leaf.java) +72|[Throne Inheritence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Throne%20Inheritence.java) +73|[Minimum Remove to Make Valid Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Remove%20to%20Make%20Valid%20Parentheses.java) +74|[Implement Trie II (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20II%20(Prefix%20Tree).java) +75|[Remove Covered Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Covered%20Intervals.java) +76|[Minimum Add to Make Parentheses Valid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Add%20to%20Make%20Parentheses%20Valid.java) +77|[Arithmetic Slices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Arithmetic%20Slices.java) +78|[Binary Tree Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Preorder%20Traversal.java) +79|[Time Needed to Inform All Employees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Inform%20All%20Employees.java) +80|[Kill Process](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kill%20Process.java) +81|[Maximum Twin Sum of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Twin%20Sum%20of%20a%20Linked%20List.java) +82|[Line Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Line%20Reflection.java) +83|[Maximum Number of Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Occurrences%20of%20a%20Substring.java) +84|[Frequency Tracker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Frequency%20Tracker.java) +85|[Diameter of N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Diameter%20of%20N-ary%20Tree.java) +86|[Maximum Number of Non-Overlapping Subarrays With Sum Equals Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Non-Overlapping%20Subarrays%20With%20Sum%20Equals%20Target.java) +87|[Majority Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Majority%20Element%20II.java) +88|[Number of Ways to Split Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Ways%20to%20Split%20Array.java) +89|[Plus One Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Plus%20One%20Linked%20List.java) +90|[Append Characters to String to Make Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20Characters%20to%20String%20to%20Make%20Subsequence.java) +91|[Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Consecutive%20Sequence.java) +92|[Find Minimum in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Minimum%20in%20Rotated%20Sorted%20Array.java) +93|[Decrease Elements To Make Array Zigzag](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decrease%20Elements%20To%20Make%20Array%20Zigzag.java) +94|[Binary Tree Longest Consecutive Sequence II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence%20II.java) +95|[Concatenation of Consecutive Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Concatenation%20of%20Consecutive%20Binary%20Numbers.java) +96|[Bitwise AND of Numbers Range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bitwise%20AND%20of%20Numbers%20Range.java) +97|[Maximum Points You Can Obtain from Cards](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Points%20You%20Can%20Obtain%20from%20Cards.java) +98|[Count Number of Teams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Teams.java) +99|[Sum of Subarray Minimums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Subarray%20Minimums.java) +100|[Binary Trees With Factors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Trees%20With%20Factors.java) +101|[Prime Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prime%20Palindrome.java) +102|[Minimum Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Path%20Sum.java) +103|[Friend Circles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friend%20Circles.java) +104|[Matchsticks to Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Matchsticks%20to%20Square.java) +105|[Valid Sudoku](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Sudoku.java) +106|[Four Divisors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Four%20Divisors.java) +107|[As Far from Land as Possible](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/As%20Far%20from%20Land%20as%20Possible.java) +108|[Count Square Submatrices with All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Square%20Submatrices%20with%20All%20Ones.java) +109|[Linked List in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20in%20Binary%20Tree.java) +110|[Number of Nodes in the Sub-Tree With the Same Label](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Nodes%20in%20the%20Sub-Tree%20With%20the%20Same%20Label.java) +111|[Pseudo-Palindromic Paths in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pseudo-Palindromic%20Paths%20in%20a%20Binary%20Tree.java) +112|[Pancake Sorting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pancake%20Sorting.java) +113|[Walls and Gates](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Walls%20and%20Gates.java) +114|[Decode String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20String.java) +115|[Combination Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20II.java) +116|[Complete Binary Tree Insertor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complete%20Binary%20Tree%20Insertor.java) +117|[Minimum Moves to Equal Array Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements.java) +118|[Design an ATM Machine](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20ATM%20Machine.java) +119|[Split Linked List in Parts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Linked%20List%20in%20Parts.java) +120|[Longest Word With All Prefixes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20With%20All%20Prefixes.java) +121|[Binary Tree Pruning](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Pruning.java) +122|[Escape The Ghosts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Escape%20The%20Ghosts.java) +123|[Longest Arithmetic Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Sequence.java) +124|[Longest Arithmetic Subsequence of Given Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence%20of%20Given%20Difference.java) +125|[Equal Row and Column Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Equal%20Row%20and%20Column%20Pairs.java) +126|[Count Numbers With Unique Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Numbers%20With%20Unique%20Digits.java) +127|[Maximum Average Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Average%20Subtree.java) +128|[Product of Array Except self](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Array%20Except%20self.java) +129|[Find Bottom Left Tree Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Bottom%20Left%20Tree%20Value.java) +130|[Shifting Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shifting%20Letters.java) +131|[Maximum Product of Splitted Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Splitted%20Binary%20Tree.java) +132|[Minimum Knight Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Knight%20Moves.java) +133|[3Sum With Multiplicity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20With%20Multiplicity.java) +134|[Rotting Oranges](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotting%20Oranges.java) +135|[Palindromic Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Palindromic%20Substrings.java) +136|[Maximum of Absolute Value Expression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20of%20Absolute%20Value%20Expression.java) +137|[Insert Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Interval.java) +138|[Is Graph Bipartite](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Is%20Graph%20Bipartite.java) +139|[Add Two Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers.java) +140|[Find Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Permutation.java) +141|[Number of Burgers with No Waste of Ingredients](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Burgers%20with%20No%20Waste%20of%20Ingredients.java) +142|[Finding the Users Active Minutes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Finding%20the%20Users%20Active%20Minutes.java) +143|[Validate Stack Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20Stack%20Sequences.java) +144|[Number of Substrings Containing All Three Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20Containing%20All%20Three%20Characters.java) +145|[Next Greater Element II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Element%20II.java) +146|[Count and Say](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20and%20Say.java) +147|[Design Add and Search Words Data Structure](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Add%20and%20Search%20Words%20Data%20Structure.java) +148|[Maximum Score From Removing Stones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20From%20Removing%20Stones.java) +149|[Minimum Consecutive Cards to Pick Up](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Consecutive%20Cards%20to%20Pick%20Up.java) +150|[Score After Flipping Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Score%20After%20Flipping%20Matrix.java) +151|[Jump Game VI](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20VI.java) +152|[Design Browser History](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Browser%20History.java) +153|[Cheapest Flights Within K Stops](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cheapest%20Flights%20Within%20K%20Stops.java) +154|[Meeting Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Scheduler.java) +155|[Perfect Squares](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Perfect%20Squares.java) +156|[Maximum Matching of Players With Trainers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Matching%20of%20Players%20With%20Trainers.java) +157|[Word Search](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Search.java) +158|[Find Triangular Sum of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Triangular%20Sum%20of%20an%20Array.java) +159|[Knight Dialer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Dialer.java) +160|[3Sum Smaller](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum%20Smaller.java) +161|[Repeated DNA Sequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Repeated%20DNA%20Sequences.java) +162|[Lowest Common Ancestor of a Binary Tree III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20III.java) +163|[Partition Array According to Given Pivot](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Array%20According%20to%20Given%20Pivot.java) +164|[Construct K Palindrome Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20K%20Palindrome%20Strings.java) +165|[Solve the Equation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solve%20the%20Equation.java) +166|[Average Waiting Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Average%20Waiting%20Time.java) +167|[Time Needed to Rearrange a Binary String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Needed%20to%20Rearrange%20a%20Binary%20String.java) +168|[Sort Integers by The Power Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Integers%20by%20The%20Power%20Value.java) +169|[Sum in a Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20in%20a%20Matrix.java) +170|[Combination Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum.java) +171|[Make String a Subsequence Using Cyclic Increments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Make%20String%20a%20Subsequence%20Using%20Cyclic%20Increments.java) +172|[Merge Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Intervals.java) +173|[4 Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Sum%20II.java) +174|[Advantage Shuffle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Advantage%20Shuffle.java) +175|[Number of Dice Rolls With Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Dice%20Rolls%20With%20Target%20Sum.java) +176|[Minimum Flips to Make a OR b Equal to c](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Flips%20to%20Make%20a%20OR%20b%20Equal%20to%20c.java) +177|[Basic Calculator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Basic%20Calculator%20II.java) +178|[Find Original Array From Doubled Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Original%20Array%20From%20Doubled%20Array.java) +179|[Maximum Length of Repeated Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Repeated%20Subarray.java) +180|[Lonely Pixel I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lonely%20Pixel%20I.java) +181|[Guess Number Higher or Lower II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Guess%20Number%20Higher%20or%20Lower%20II.java) +182|[Remove Duplicate Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicate%20Letters.java) +183|[Construct Binary Tree from Preorder and Inorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Preorder%20and%20Inorder%20Traversal.java) +184|[Group the People Given the Group Size They Belong To](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20the%20People%20Given%20the%20Group%20Size%20They%20Belong%20To.java) +185|[House Robber II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber%20II.java) +186|[Find the Winner of an Array Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Winner%20of%20an%20Array%20Game.java) +187|[Check if Strings Can be Made Equal With Operations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20Strings%20Can%20be%20Made%20Equal%20With%20Operations%20II.java) +188|[Letter Combinations of a Phone Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Combinations%20of%20a%20Phone%20Number.java) +189|[Implement Magic Dictionary](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Magic%20Dictionary.java) +190|[Task Scheduler](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Task%20Scheduler.java) +191|[Minimum Size Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Size%20Subarray%20Sum.java) +192|[Max Chunks To Make Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Chunks%20To%20Make%20Sorted.java) +193|[Max Number of K-Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Number%20of%20K-Sum%20Pairs.java) +194|[Longest Word in Dictionary through Deleting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Word%20in%20Dictionary%20through%20Deleting.java) +195|[Maximum Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree.java) +196|[Find and Replace in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20in%20String.java) +197|[Sort Characters By Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Characters%20By%20Frequency.java) +198|[Maximum Erasure Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Erasure%20Value.java) +199|[Number of Matching Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequences.java) +200|[Simple Bank System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simple%20Bank%20System.java) +201|[Camelcase Matching](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Camelcase%20Matching.java) +202|[Split Array into Consecutive Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20Array%20into%20Consecutive%20Subsequences.java) +203|[Integer To Roman](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Integer%20To%20Roman.java) +204|[Smallest Value of the Rearranged Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Value%20of%20the%20Rearranged%20Number.java) +205|[Count Servers That Communicate](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Servers%20That%20Communicate.java) +206|[Execution of All Suffix Instructions Staying in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Execution%20of%20All%20Suffix%20Instructions%20Staying%20in%20a%20Grid.java) +207|[Number of Laser Beams in a Bank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Laser%20Beams%20in%20a%20Bank.java) +208|[Minimize Maximum Pair Sum in Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20Pair%20Sum%20in%20Array.java) +209|[Lowest Common Ancestor of a Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree%20II.java) +210|[Image Overlap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Image%20Overlap.java) +211|[Balance a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Balance%20a%20Binary%20Search%20Tree.java) +212|[Insert Greatest Common Divisors in Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Greatest%20Common%20Divisors%20in%20Linked%20List.java) +213|[Reordered Power of 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reordered%20Power%20of%202.java) +214|[Construct Binary Tree from Inorder and Postorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Tree%20from%20Inorder%20and%20Postorder%20Traversal.java) +215|[Multiply Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Multiply%20Strings.java) +216|[K Radius Subarray Averages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Radius%20Subarray%20Averages.java) +217|[Minimum Health to Beat Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Health%20to%20Beat%20Game.java) +218|[Path With Minimum Effort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Minimum%20Effort.java) +219|[Append K Integers With Minimal Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Append%20K%20Integers%20With%20Minimal%20Sum.java) +220|[Minimum Moves to Equal Array Elements II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Equal%20Array%20Elements%20II.java) +221|[Parallel Courses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Parallel%20Courses.java) +222|[Put Boxes Into the Warehouse I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Put%20Boxes%20Into%20the%20Warehouse%20I.java) +223|[Adding Two Negabinary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Two%20Negabinary%20Numbers.java) +224|[Minimum Rounds to Complete All Tasks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Rounds%20to%20Complete%20All%20Tasks.java) +225|[Longest Happy String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Happy%20String.java) +226|[Nested List Weight Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nested%20List%20Weight%20Sum%20II.java) +227|[Range Sum Query 2D-Immutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%202D-Immutable.java) +228|[Remove Nth Node From End of List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nth%20Node%20From%20End%20of%20List.java) +229|[Peeking Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peeking%20Iterator.java) +230|[Subsets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets.java) +231|[Design Circular Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Queue.java) +232|[4 Keys Keyboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4%20Keys%20Keyboard.java) +233|[Single Element in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Element%20in%20a%20Sorted%20Array.java) +234|[Permutations II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations%20II.java) +235|[Knight Probability in Chessboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Knight%20Probability%20in%20Chessboard.java) +236|[Reachable Nodes With Restrictions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reachable%20Nodes%20With%20Restrictions.java) +237|[Longest ZigZag Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20ZigZag%20Path%20in%20a%20Binary%20Tree.java) +238|[Reduce Array Size to The Half](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduce%20Array%20Size%20to%20The%20Half.java) +239|[Maximum Length of Pair Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Pair%20Chain.java) +240|[Binary Tree Vertical Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Vertical%20Order%20Traversal.java) +241|[Reorder Data in Log Files](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Data%20in%20Log%20Files.java) +242|[Maximum Product Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20Subarray.java) +243|[Rotate List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20List.java) +244|[Find the Celebrity](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Celebrity.java) +245|[Swap Nodes in Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20Nodes%20in%20Pairs.java) +246|[Filter Restaurants by Vegan-Friendly, Price and Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Filter%20Restaurants%20by%20Vegan-Friendly,%20Price%20and%20Distance.java) +247|[Evaluate Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Division.java) +248|[Minimum Operations to Make Array Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20Array%20Equal.java) +249|[Combinations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combinations.java) +250|[Max Area of Island](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Area%20of%20Island.java) +251|[Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20List.java) +252|[Most Frequent Subtree Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Frequent%20Subtree%20Sum.java) +253|[Find Peak Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Peak%20Element.java) +254|[Open The Lock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Open%20The%20Lock.java) +255|[Fruit Into Baskets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fruit%20Into%20Baskets.java) +256|[Maximum Sum of Almost Unique Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Almost%20Unique%20Subarray.java) +257|[Remove K Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20K%20Digits.java) +258|[Minimum Number of Steps to Make Two Strings Anagram](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram.java) +259|[Connecting Cities With Minimum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Connecting%20Cities%20With%20Minimum%20Cost.java) +260|[Decoded String at Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decoded%20String%20at%20Index.java) +261|[Satisfisbility of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfisbility%20of%20Equality%20Equations.java) +262|[Maximum Product of Word Lengths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Product%20of%20Word%20Lengths.java) +263|[Maximum Number of Integers to Choose From a Range I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Integers%20to%20Choose%20From%20a%20Range%20I.java) +264|[Pour Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pour%20Water.java) +265|[Gray Code](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Gray%20Code.java) +266|[Minimum Moves to Reach Target Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Moves%20to%20Reach%20Target%20Score.java) +267|[Encode and Decode TinyURL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20TinyURL.java) +268|[Game of Life](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Game%20of%20Life.java) +269|[Number of Pairs of Strings With Concatenation Equal to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Strings%20With%20Concatenation%20Equal%20to%20Target.java) +270|[Maximum Swap](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Swap.java) +271|[Time Based Key-Value Store](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Time%20Based%20Key-Value%20Store.java) +272|[Compare Version Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Compare%20Version%20Numbers.java) +273|[Reverse Nodes in Even Length Groups](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Nodes%20in%20Even%20Length%20Groups.java) +274|[Maximum Number of Vowels in a Substring of Given Length](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Vowels%20in%20a%20Substring%20of%20Given%20Length.java) +275|[Graph Valid Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Graph%20Valid%20Tree.java) +276|[Minimum Operations to Reduce X to Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Reduce%20X%20to%20Zero.java) +277|[Group Anagrams](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Anagrams.java) +278|[Delete the Middle Node of a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20the%20Middle%20Node%20of%20a%20Linked%20List.java) +279|[Lowest Common Ancestor of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lowest%20Common%20Ancestor%20of%20a%20Binary%20Tree.java) +280|[Deepest Leaves Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Deepest%20Leaves%20Sum.java) +281|[Minimize Maximum of Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Maximum%20of%20Array.java) +282|[Boundary of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boundary%20of%20Binary%20Tree.java) +283|[Clone N-ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20N-ary%20Tree.java) +284|[Rotate Image](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Image.java) +285|[Self Dividing Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Self%20Dividing%20Numbers.java) +286|[Remove Nodes From Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Nodes%20From%20Linked%20List.java) +287|[Map Sum Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Map%20Sum%20Pairs.java) +288|[Restore the Array From Adjacent Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20the%20Array%20From%20Adjacent%20Pairs.java) +289|[Find the Index of the Large Integer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20Large%20Integer.java) +290|[Combination Sum IV](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20IV.java) +291|[Pacific Atlantic Water Flow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pacific%20Atlantic%20Water%20Flow.java) +292|[Delete Leaves With a Given Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Leaves%20With%20a%20Given%20Value.java) +293|[Pow](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow.java) +294|[Remove Comments](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Comments.java) +295|[Longest Uploaded Prefix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Uploaded%20Prefix.java) +296|[Rotated Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotated%20Digits.java) +297|[Next Permutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Permutation.java) +298|[Find the Substring With Maximum Cost](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Substring%20With%20Maximum%20Cost.java) +299|[Design Log Storage System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Log%20Storage%20System.java) +300|[Decode Ways](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Decode%20Ways.java) +301|[Number of Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Longest%20Increasing%20Subsequence.java) +302|[Triangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Triangle.java) +303|[Non-overlapping Intervals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Non-overlapping%20Intervals.java) +304|[Broken Calculator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Broken%20Calculator.java) +305|[Maximum Score from Performing Multiplication Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Score%20from%20Performing%20Multiplication%20Operations.java) +306|[Vowel Spellchecker](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Vowel%20Spellchecker.java) +307|[Maximum Sum of Distinct Subarrays With Length K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20Distinct%20Subarrays%20With%20Length%20K.java) +308|[4Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum.java) +309|[House Robber](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/House%20Robber.java) +310|[Find Root of N-Ary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Root%20of%20N-Ary%20Tree.java) +311|[Rotate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Function.java) +312|[Can Make Palindrome from Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Make%20Palindrome%20from%20Substring.java) +313|[Find Distance in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Distance%20in%20a%20Binary%20Tree.java) +314|[Possible Bipartition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Possible%20Bipartition.java) +315|[Design Hit Counter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Hit%20Counter.java) +316|[Insert into a Sorted Circular Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Sorted%20Circular%20Linked%20List.java) +317|[Online Stock Span](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Stock%20Span.java) +318|[Min Cost to Connect All Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Cost%20to%20Connect%20All%20Points.java) +319|[Minimum Time to Collect All Apples in a Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Collect%20All%20Apples%20in%20a%20Tree.java) +320|[Minimum Area Rectangle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Area%20Rectangle.java) +321|[Invalid Transactions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Invalid%20Transactions.java) +322|[Remove All Occurrences of a Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Occurrences%20of%20a%20Substring.java) +323|[Minimum Average Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Average%20Difference.java) +324|[Maximal Score After Applying K Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Score%20After%20Applying%20K%20Operations.java) +325|[Minimum Amount of Time to Collect Garbage](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Amount%20of%20Time%20to%20Collect%20Garbage.java) +326|[Search in Rotated Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array.java) +327|[Letter Tiles Possibilities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Letter%20Tiles%20Possibilities.java) +328|[Divide Players Into Teams of Equal Skill](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Players%20Into%20Teams%20of%20Equal%20Skill.java) +329|[Path with Maximum Gold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Gold.java) +330|[Copy List with Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Copy%20List%20with%20Random%20Pointer.java) +331|[Number of Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Islands.java) +332|[Total Cost to Hire K Workers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Total%20Cost%20to%20Hire%20K%20Workers.java) +333|[Sum Multiples](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Multiples.java) +334|[Custom Sort String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Custom%20Sort%20String.java) +335|[Populating Next Right Pointers in Each Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node.java) +336|[Mirror Reflection](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mirror%20Reflection.java) +337|[All Possible Full Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Possible%20Full%20Binary%20Trees.java) +338|[Maximum Total Importance of Roads](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Total%20Importance%20of%20Roads.java) +339|[Sum Root to Leaf Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20Root%20to%20Leaf%20Numbers.java) +340|[Contiguous Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contiguous%20Array.java) +341|[Large Divisble Subset](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Large%20Divisble%20Subset.java) +342|[Minimum Height Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Height%20Trees.java) +343|[Analyze User Website Visit Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Analyze%20User%20Website%20Visit%20Pattern.java) +344|[Partitioning Into Minimum Number Of Deci-Binary Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partitioning%20Into%20Minimum%20Number%20Of%20Deci-Binary%20Numbers.java) +345|[Permutations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutations.java) +346|[Maximum Sum of an Hourglass](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Sum%20of%20an%20Hourglass.java) +347|[Minimum Fuel Cost to Report to the Capital](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Fuel%20Cost%20to%20Report%20to%20the%20Capital.java) +348|[Find the Prefix Common Array of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Prefix%20Common%20Array%20of%20Two%20Arrays.java) +349|[Coin Change 2](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change%202.java) +350|[Construct Quad Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Quad%20Tree.java) +351|[Valid Parenthesis String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Parenthesis%20String.java) +352|[Apply Discount Every n Orders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20Every%20n%20Orders.java) +353|[All Elements in Two Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Elements%20in%20Two%20Binary%20Search%20Trees.java) +354|[Longest Substring Without Repeating Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20Without%20Repeating%20Characters.java) +355|[Fraction to Recurring Decimal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fraction%20to%20Recurring%20Decimal.java) +356|[Extra Characters in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Extra%20Characters%20in%20a%20String.java) +357|[Product of the Last K Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20the%20Last%20K%20Numbers.java) +358|[Wiggle Sort](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Sort.java) +359|[Peak Index in a Mountain Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Peak%20Index%20in%20a%20Mountain%20Array.java) +360|[Accounts Merge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Accounts%20Merge.java) +361|[K Closest Points to Origin](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/K%20Closest%20Points%20to%20Origin.java) +362|[Largest Time for Given Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20Time%20for%20Given%20Digits.java) +363|[Fair Distribution of Cookies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Fair%20Distribution%20of%20Cookies.java) +364|[Count Sub Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sub%20Islands.java) +365|[Reverse Words in a String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String%20II.java) +366|[Find Leaves of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Leaves%20of%20Binary%20Tree.java) +367|[Partition Labels](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Labels.java) +368|[Apply Discount to Prices](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Apply%20Discount%20to%20Prices.java) +369|[Sort An Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20An%20Array.java) +370|[Hand of Straights](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Hand%20of%20Straights.java) +371|[Angle Between Hands of a Clock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Angle%20Between%20Hands%20of%20a%20Clock.java) +372|[Maximum Star Sum of a Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Star%20Sum%20of%20a%20Graph.java) +373|[Reorder List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20List.java) +374|[Find a Corresponding Node of a Binary Tree in a Clone of That Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20a%20Corresponding%20Node%20of%20a%20Binary%20Tree%20in%20a%20Clone%20of%20That%20Tree.java) +375|[Remove Colored Pieces if Both Neighbors are the Same Color](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Colored%20Pieces%20if%20Both%20Neighbors%20are%20the%20Same%20Color.java) +376|[Find Consecutive Integers from a Data Stream](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Consecutive%20Integers%20from%20a%20Data%20Stream.java) +377|[Find Eventual Safe States](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Eventual%20Safe%20States.java) +378|[Odd Even Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Odd%20Even%20Linked%20Lists.java) +379|[Find Right Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Right%20Interval.java) +380|[Dot Product of Two Sparse Vectors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Dot%20Product%20of%20Two%20Sparse%20Vectors.java) +381|[Minimum Number of Arrows to Burst Balloons](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Arrows%20to%20Burst%20Balloons.java) +382|[Product of Two Run-Length Encoded Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Product%20of%20Two%20Run-Length%20Encoded%20Arrays.java) +383|[HTML Entity Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/HTML%20Entity%20Parser.java) +384|[Find All Anagrams in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Anagrams%20in%20a%20String.java) +385|[Boats to Save People](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Boats%20to%20Save%20People.java) +386|[Print Words Vertically](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Words%20Vertically.java) +387|[Minimum Falling Path Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Falling%20Path%20Sum.java) +388|[Strictly Palindromic Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Strictly%20Palindromic%20Number.java) +389|[Sentence Similarity III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20III.java) +390|[Minimum Genetic Mutation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Genetic%20Mutation.java) +391|[Split BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Split%20BST.java) +392|[Iterator for Combination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Iterator%20for%20Combination.java) +393|[Valid Triangle Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Triangle%20Number.java) +394|[Keys and Rooms](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Keys%20and%20Rooms.java) +395|[Interval List Intersections](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interval%20List%20Intersections.java) +396|[Subarray Sums Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sums%20Divisible%20by%20K.java) +397|[Merge Nodes in Between Zeros](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20Nodes%20in%20Between%20Zeros.java) +398|[Maximum Level Sum of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Level%20Sum%20of%20a%20Binary%20Tree.java) +399|[Expressive Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Expressive%20Words.java) +400|[Friends Of Appropriate Ages](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Friends%20Of%20Appropriate%20Ages.java) +401|[Flatten Nested List Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Nested%20List%20Iterator.java) +402|[Corporate Flight Bookings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Corporate%20Flight%20Bookings.java) +403|[Unique Binary Search Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Binary%20Search%20Trees.java) +404|[Longest Increasing Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Increasing%20Subsequence.java) +405|[Design Front Middle Back Queue](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Front%20Middle%20Back%20Queue.java) +406|[Design A Leaderboard](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20A%20Leaderboard.java) +407|[Search in Rotated Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20Rotated%20Sorted%20Array%20II.java) +408|[Tuple With Same Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tuple%20With%20Same%20Product.java) +409|[Delete Nodes And Return Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Nodes%20And%20Return%20Forest.java) +410|[The kth Factor of n](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20kth%20Factor%20of%20n.java) +411|[Minimum Time Difference](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20Difference.java) +412|[Maximum Length of Subarray With Positive Product](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Length%20of%20Subarray%20With%20Positive%20Product.java) +413|[Smallest Integer Divisible by K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Integer%20Divisible%20by%20K.java) +414|[Find Players With Zero or One Losses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Players%20With%20Zero%20or%20One%20Losses.java) +415|[Min Stack](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Min%20Stack.java) +416|[Remove Zero Sum Consecutive Nodes from Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Zero%20Sum%20Consecutive%20Nodes%20from%20Linked%20List.java) +417|[Validate IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Validate%20IP%20Address.java) +418|[Reduction Operations to Make the Array Elements Equal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reduction%20Operations%20to%20Make%20the%20Array%20Elements%20Equal.java) +419|[Nearest Exit from Entrance in Maze](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Nearest%20Exit%20from%20Entrance%20in%20Maze.java) +420|[Cinema Seat Allocation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Cinema%20Seat%20Allocation.java) +421|[Delete Operation for Two Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Operation%20for%20Two%20Strings.java) +422|[Path with Maximum Probability](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20with%20Maximum%20Probability.java) +423|[Minimum Time to Complete Trips](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Complete%20Trips.java) +424|[Check If All 1's Are at Least Length K Places Away](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20All%201's%20Are%20at%20Least%20Length%20K%20Places%20Away.java) +425|[RLE Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/RLE%20Iterator.java) +426|[Increasing Subsequences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Subsequences.java) +427|[Number of Closed Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Closed%20Islands.java) +428|[Number of Substrings With Only 1s](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Substrings%20With%20Only%201s.java) +429|[Delete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Tree%20Nodes.java) +430|[Exclusive Time of Functions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Exclusive%20Time%20of%20Functions.java) +431|[Check If a String Is a Valid Sequence from Root to Leaves Path in a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Is%20a%20Valid%20Sequence%20from%20Root%20to%20Leaves%20Path%20in%20a%20Binary%20Tree.java) +432|[Count Ways To Build Good Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Ways%20To%20Build%20Good%20Strings.java) +433|[Minimum Score of a Path Between Two Cities](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20of%20a%20Path%20Between%20Two%20Cities.java) +434|[Leftmost Column with at Least a One](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Leftmost%20Column%20with%20at%20Least%20a%20One.java) +435|[Subsets II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subsets%20II.java) +436|[One Edit Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/One%20Edit%20Distance.java) +437|[N-ary Tree Level Order Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/N-ary%20Tree%20Level%20Order%20Traversal.java) +438|[Design Snake Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Snake%20Game.java) +439|[Swap For Longest Repeated Character Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swap%20For%20Longest%20Repeated%20Character%20Substring.java) +440|[Find the Student that Will Replace the Chalk](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Student%20that%20Will%20Replace%20the%20Chalk.java) +441|[LRU Cache](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/LRU%20Cache.java) +442|[Maximum Number of Groups Entering a Competition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Groups%20Entering%20a%20Competition.java) +443|[Container With Most Water](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Container%20With%20Most%20Water.java) +444|[Subdomain Visit Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subdomain%20Visit%20Count.java) +445|[4Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/4Sum%20II.java) +446|[Word Ladder](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Ladder.java) +447|[Delete Node in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Delete%20Node%20in%20a%20BST.java) +448|[Longest Well-Performing Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Well-Performing%20Interval.java) +449|[Reconstruct Original Digits from English](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reconstruct%20Original%20Digits%20from%20English.java) +450|[Single Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Single%20Number%20II.java) +451|[Maximum Value after Insertion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20after%20Insertion.java) +452|[Optimal Division](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Division.java) +453|[Continuous Subarray Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Continuous%20Subarray%20Sum.java) +454|[Number of Operations to Make Network Connected](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Operations%20to%20Make%20Network%20Connected.java) +455|[Network Delay Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Network%20Delay%20Time.java) +456|[Flip Equivalent Binary Trees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flip%20Equivalent%20Binary%20Trees.java) +457|[String to Integer (atoi)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20to%20Integer%20(atoi).java) +458|[Coin Change](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Coin%20Change.java) +459|[Max Consecutives Ones II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Consecutives%20Ones%20II.java) +460|[Kth Smallest Element in a BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20BST.java) +461|[UTF-8 Validation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/UTF-8%20Validation.java) +462|[Remove Interval](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Interval.java) +463|[Find Nearest Right Node in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Nearest%20Right%20Node%20in%20Binary%20Tree.java) +464|[Create Binary Tree From Descriptions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Create%20Binary%20Tree%20From%20Descriptions.java) +465|[Evaluate the Bracket Pairs of a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20the%20Bracket%20Pairs%20of%20a%20String.java) +466|[Wiggle Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Wiggle%20Subsequence.java) +467|[Random Pick Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20Index.java) +468|[Distribute Coins in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Distribute%20Coins%20in%20Binary%20Tree.java) +469|[Sum of Even Numbers After Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Even%20Numbers%20After%20Queries.java) +470|[Path With Maximum Minimum Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20With%20Maximum%20Minimum%20Value.java) +471|[Most Profit Assigning Work](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Most%20Profit%20Assigning%20Work.java) +472|[The Number of Weak Characters in the Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Weak%20Characters%20in%20the%20Game.java) +473|[Partition List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20List.java) +474|[Number of Distinct Islands](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Islands.java) +475|[Design Circular Deque](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Circular%20Deque.java) +476|[Implement Trie (Prefix Tree)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Trie%20(Prefix%20Tree).java) +477|[Maximize Number of Subsequences in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Number%20of%20Subsequences%20in%20a%20String.java) +478|[Max Sum of a Pair With Equal Sum of Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Sum%20of%20a%20Pair%20With%20Equal%20Sum%20of%20Digits.java) +479|[Number of Provinces](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Provinces.java) +480|[Largest BST Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Largest%20BST%20Subtree.java) +481|[Range Sum Query - Mutable](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20Query%20-%20Mutable.java) +482|[Mini Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Mini%20Parser.java) +483|[Number of Smooth Descent Periods of a Stock](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Smooth%20Descent%20Periods%20of%20a%20Stock.java) +484|[Maximum Distance Between a Pair of Values](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Distance%20Between%20a%20Pair%20of%20Values.java) +485|[Alert Using Same Key-Card Three or More Times in a One Hour Period](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Alert%20Using%20Same%20Key-Card%20Three%20or%20More%20Times%20in%20a%20One%20Hour%20Period.java) +486|[Linked List Components](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Components.java) +487|[Binary Tree Upside Down](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Upside%20Down.java) +488|[New 21 Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/New%2021%20Game.java) +489|[Max Increase to Keep City Skyline](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Max%20Increase%20to%20Keep%20City%20Skyline.java) +490|[Daily Temperatures](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Daily%20Temperatures.java) +491|[Binary Search Tree to Greater Sum Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20to%20Greater%20Sum%20Tree.java) +492|[Subarray Product Less Than K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Product%20Less%20Than%20K.java) +493|[Design a Stack With Increment Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20a%20Stack%20With%20Increment%20Operation.java) +494|[Break a Palindrome](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Break%20a%20Palindrome.java) +495|[Maximum Size Subarray Sum Equals k](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Size%20Subarray%20Sum%20Equals%20k.java) +496|[Minimum Number of Steps to Make Two Strings Anagram II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Number%20of%20Steps%20to%20Make%20Two%20Strings%20Anagram%20II.java) +497|[Subarray Sum Equals K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subarray%20Sum%20Equals%20K.java) +498|[Car Pooling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Car%20Pooling.java) +499|[Remove Sub-Folders from the Filesystem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Sub-Folders%20from%20the%20Filesystem.java) +500|[Sum of Nodes with Even-Valued Grandparent](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Nodes%20with%20Even-Valued%20Grandparent.java) +501|[Check If a String Can Break Another String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Can%20Break%20Another%20String.java) +502|[Ternary Expression Parser](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ternary%20Expression%20Parser.java) +503|[Generate Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Generate%20Parentheses.java) +504|[Minimum Penalty for a Shop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Penalty%20for%20a%20Shop.java) +505|[Encode and Decode Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Encode%20and%20Decode%20Strings.java) +506|[Asteroid Collision](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Asteroid%20Collision.java) +507|[Minimum Deletion Cost to Avoid Repeating Letters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletion%20Cost%20to%20Avoid%20Repeating%20Letters.java) +508|[Design Phone Directory](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Phone%20Directory.java) +509|[Remove Duplicates from Sorted List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20from%20Sorted%20List%20II.java) +510|[Count Nodes Equal to Sum of Descendants](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Sum%20of%20Descendants.java) +511|[Random Pick With Weight](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Random%20Pick%20With%20Weight.java) +512|[Maximize the Topmost Element After K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Topmost%20Element%20After%20K%20Moves.java) +513|[Swapping Nodes in a Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Swapping%20Nodes%20in%20a%20Linked%20List.java) +514|[Number of Subsequences That Satisfy the Given Sum Condition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Subsequences%20That%20Satisfy%20the%20Given%20Sum%20Condition.java) +515|[Ones and Zeroes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ones%20and%20Zeroes.java) +516|[Number of Connected Components in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Connected%20Components%20in%20an%20Undirected%20Graph.java) +517|[Display Table of Food Orders in a Restaurant](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Display%20Table%20of%20Food%20Orders%20in%20a%20Restaurant.java) +518|[Campus Bikes II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Campus%20Bikes%20II.java) +519|[Longest Line of Consecutive One in Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Line%20of%20Consecutive%20One%20in%20Matrix.java) +520|[Zigzag Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Zigzag%20Iterator.java) +521|[Merge In Between Linked Lists](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Merge%20In%20Between%20Linked%20Lists.java) +522|[Surrounded Regions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Surrounded%20Regions.java) +523|[Seat Reservation Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Seat%20Reservation%20Manager.java) +524|[Print Immutable Linked List in Reverse](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Immutable%20Linked%20List%20in%20Reverse.java) +525|[Tree Diameter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tree%20Diameter.java) +526|[Incremental Memory Leak](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Incremental%20Memory%20Leak.java) +527|[Lexicographically Smallest Equivalent String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20Equivalent%20String.java) +528|[Reverse Words in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Words%20in%20a%20String.java) +529|[Simplify Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Simplify%20Path.java) +530|[Design Underground System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Underground%20System.java) +531|[Sequential Digits](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sequential%20Digits.java) +532|[Longest Substring with At Most Two Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20Two%20Distinct%20Characters.java) +533|[Smallest String With Swaps](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20Swaps.java) +534|[Jump Game III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game%20III.java) +535|[Adding Spaces to a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Adding%20Spaces%20to%20a%20String.java) +536|[Shortest Path with Alternating Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20with%20Alternating%20Colors.java) +537|[Maximum Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Subarray.java) +538|[Removing Stars From a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Removing%20Stars%20From%20a%20String.java) +539|[Find K Pairs with Smallest Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Pairs%20with%20Smallest%20Sums.java) +540|[Check if There is a Valid Path in a Grid](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20if%20There%20is%20a%20Valid%20Path%20in%20a%20Grid.java) +541|[Tweet Counts Per Frequency](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Tweet%20Counts%20Per%20Frequency.java) +542|[Ugly Number II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Ugly%20Number%20II.java) +543|[Find First and Last Position of Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20First%20and%20Last%20Position%20of%20Element%20in%20Sorted%20Array.java) +544|[Longest Subarray of 1's After Deleting One Element](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Subarray%20of%201's%20After%20Deleting%20One%20Element.java) +545|[Clone Binary Tree With Random Pointer](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Binary%20Tree%20With%20Random%20Pointer.java) +546|[Longest Continuous Subarray With Absolute Diff Less Than or Equal to Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Continuous%20Subarray%20With%20Absolute%20Diff%20Less%20Than%20or%20Equal%20to%20Limit.java) +547|[Count Number of Bad Pairs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Bad%20Pairs.java) +548|[Super Ugly Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Super%20Ugly%20Number.java) +549|[Add Two Numbers II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Two%20Numbers%20II.java) +550|[Implement Rand10() Using Rand7()](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Implement%20Rand10()%20Using%20Rand7().java) +551|[Minimum Deletions to Make Character Frequencies Unique](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Character%20Frequencies%20Unique.java) +552|[Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Area%20of%20a%20Piece%20of%20Cake%20After%20Horizontal%20and%20Vertical%20Cuts.java) +553|[Array Nesting](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Nesting.java) +554|[Valid Square](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Square.java) +555|[Find Closest Node to Given Two Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Closest%20Node%20to%20Given%20Two%20Nodes.java) +556|[Course Schedule](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule.java) +557|[The k Strongest Values in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20k%20Strongest%20Values%20in%20an%20Array.java) +558|[Longest Arithmetic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Arithmetic%20Subsequence.java) +559|[Optimal Partition of String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Optimal%20Partition%20of%20String.java) +560|[Maximum Bags With Full Capacity of Rocks](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Bags%20With%20Full%20Capacity%20of%20Rocks.java) +561|[Path Sum II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20II.java) +562|[Unique Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Paths.java) +563|[Replace Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Words.java) +564|[Rank Teams by Votes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rank%20Teams%20by%20Votes.java) +565|[Determine if a Cell Is Reachable at a Given Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20a%20Cell%20Is%20Reachable%20at%20a%20Given%20Time.java) +566|[Jump Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Jump%20Game.java) +567|[Can Convert String in K Moves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Can%20Convert%20String%20in%20K%20Moves.java) +568|[Least Number of Unique Integers after K Removals](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Least%20Number%20of%20Unique%20Integers%20after%20K%20Removals.java) +569|[Sum of Absolute Differences in a Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Absolute%20Differences%20in%20a%20Sorted%20Array.java) +570|[Determine the Minimum Sum of a k-avoiding Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20the%20Minimum%20Sum%20of%20a%20k-avoiding%20Array.java) +571|[Linked List Random Node](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Linked%20List%20Random%20Node.java) +572|[Valid Tic-Tac-Toe State](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Valid%20Tic-Tac-Toe%20State.java) +573|[Increasing Triplet Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Increasing%20Triplet%20Subsequence.java) +574|[Partition Equal Subset Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Partition%20Equal%20Subset%20Sum.java) +575|[Range Addition](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Addition.java) +576|[Next Greater Numerically Balanced Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Numerically%20Balanced%20Number.java) +577|[Interleaving String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Interleaving%20String.java) +578|[String Compression](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/String%20Compression.java) +579|[Insert Into a Cyclic Sorted List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Into%20a%20Cyclic%20Sorted%20List.java) +580|[Count Submatrices With All Ones](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Submatrices%20With%20All%20Ones.java) +581|[Shuffle an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shuffle%20an%20Array.java) +582|[Battleships in a board](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Battleships%20in%20a%20board.java) +583|[Shortest Path in Binary Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Path%20in%20Binary%20Matrix.java) +584|[Brace Expansion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Brace%20Expansion.java) +585|[Complex Number Multiplication](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Complex%20Number%20Multiplication.java) +586|[Queries on a Permutation With Key](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queries%20on%20a%20Permutation%20With%20Key.java) +587|[Find Duplicate Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20Subtrees.java) +588|[Maximum Ice Cream Bars](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Ice%20Cream%20Bars.java) +589|[Recover Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Recover%20Binary%20Search%20Tree.java) +590|[My Calendar I](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20I.java) +591|[Reorder Routes to Make All Paths Lead to the City Zero](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorder%20Routes%20to%20Make%20All%20Paths%20Lead%20to%20the%20City%20Zero.java) +592|[Maximize the Confusion of an Exam](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20the%20Confusion%20of%20an%20Exam.java) +593|[Evaluate Reverse Polish Notation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Evaluate%20Reverse%20Polish%20Notation.java) +594|[Maximum Width Ramp](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20Ramp.java) +595|[Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Sub-arrays%20of%20Size%20K%20and%20Average%20Greater%20than%20or%20Equal%20to%20Threshold.java) +596|[Range Sum of Sorted Subarray Sums](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Range%20Sum%20of%20Sorted%20Subarray%20Sums.java) +597|[Find The Original Array of Prefix Xor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20The%20Original%20Array%20of%20Prefix%20Xor.java) +598|[Bomb Enemy](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bomb%20Enemy.java) +599|[Find Center of Star Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Center%20of%20Star%20Graph.java) +600|[Add Bold Tag in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Bold%20Tag%20in%20String.java) +601|[Reverse Linked List II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Linked%20List%20II.java) +602|[Permutation in String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Permutation%20in%20String.java) +603|[Sum of Numbers With Units Digit K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Numbers%20With%20Units%20Digit%20K.java) +604|[Two Sum II - Input Array Is Sorted](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20II%20-%20Input%20Array%20Is%20Sorted.java) +605|[Maximum Number of Events That Can Be Attended](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Number%20of%20Events%20That%20Can%20Be%20Attended.java) +606|[Shortest Word Distance III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Word%20Distance%20III.java) +607|[Sender With Largest Word Count](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sender%20With%20Largest%20Word%20Count.java) +608|[Short Encoding of Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Short%20Encoding%20of%20Words.java) +609|[Serialize and Deserialize BST](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Serialize%20and%20Deserialize%20BST.java) +610|[Remove All Ones With Row and Column Flips II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Ones%20With%20Row%20and%20Column%20Flips%20II.java) +611|[Minimum Domino Rotations For Equal Row](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Domino%20Rotations%20For%20Equal%20Row.java) +612|[132 Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/132%20Pattern.java) +613|[Remove All Adjacent Duplicates in String II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20All%20Adjacent%20Duplicates%20in%20String%20II.java) +614|[Insertion Sort List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insertion%20Sort%20List.java) +615|[Length of the Longest Alphabetical Continuous Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Length%20of%20the%20Longest%20Alphabetical%20Continuous%20Substring.java) +616|[Find the Duplicate Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Duplicate%20Number.java) +617|[Replace Elements in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Replace%20Elements%20in%20an%20Array.java) +618|[Design Twitter](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Twitter.java) +619|[Last Moment Before All Ants Fall Out of a Plank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Moment%20Before%20All%20Ants%20Fall%20Out%20of%20a%20Plank.java) +620|[Sentence Similarity II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sentence%20Similarity%20II.java) +621|[Count Number of Distinct Integers After Reverse Operations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Number%20of%20Distinct%20Integers%20After%20Reverse%20Operations.java) +622|[Find the Index of the First Occurrence in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Index%20of%20the%20First%20Occurrence%20in%20a%20String.java) +623|[Last Stone Weight II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Last%20Stone%20Weight%20II.java) +624|[Rectangle Area](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rectangle%20Area.java) +625|[My Calendar II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/My%20Calendar%20II.java) +626|[Find All Possible Recipes from Given Supplies](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20All%20Possible%20Recipes%20from%20Given%20Supplies.java) +627|[Maximum Value at a Given Index in a Bounded Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Value%20at%20a%20Given%20Index%20in%20a%20Bounded%20Array.java) +628|[Number of Distinct Substrings in a String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Distinct%20Substrings%20in%20a%20String.java) +629|[Search Suggestions System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20Suggestions%20System.java) +630|[Subrectangle Queries](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Subrectangle%20Queries.java) +631|[Sort the Matrix Diagonally](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Matrix%20Diagonally.java) +632|[Convert Sorted List to Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20Sorted%20List%20to%20Binary%20Search%20Tree.java) +633|[Count Nodes Equal to Average of Subtree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Nodes%20Equal%20to%20Average%20of%20Subtree.java) +634|[Bulb Switcher](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bulb%20Switcher.java) +635|[Verify Preorder Serialization of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Verify%20Preorder%20Serialization%20of%20a%20Binary%20Tree.java) +636|[Minimum Speed to Arrive on Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Speed%20to%20Arrive%20on%20Time.java) +637|[Inorder Successor in BST II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Inorder%20Successor%20in%20BST%20II.java) +638|[Detonate the Maximum Bombs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Detonate%20the%20Maximum%20Bombs.java) +639|[Add Minimum Number of Rungs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20Minimum%20Number%20of%20Rungs.java) +640|[Lexicographically Smallest String After Substring Operation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographically%20Smallest%20String%20After%20Substring%20Operation.java) +641|[Find the City With the Smallest Number of Neighbors at a Threshold Distance](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20City%20With%20the%20Smallest%20Number%20of%20Neighbors%20at%20a%20Threshold%20Distance.java) +642|[Node With Highest Edge Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Node%20With%20Highest%20Edge%20Score.java) +643|[Output Contest Matches](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Output%20Contest%20Matches.java) +644|[Design an Expression Tree With Evaluate Function](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20an%20Expression%20Tree%20With%20Evaluate%20Function.java) +645|[H-Index](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index.java) +646|[Best Time to Buy and Sell Stock with Cooldown](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Cooldown.java) +647|[Rabbits in Forest](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rabbits%20in%20Forest.java) +648|[Count Univalue Subtrees](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Univalue%20Subtrees.java) +649|[Find Elements in a Contaminated Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Elements%20in%20a%20Contaminated%20Binary%20Tree.java) +650|[Next Greater Node In Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Greater%20Node%20In%20Linked%20List.java) +651|[Maximum Nesting Depth of Two Valid Parentheses Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Nesting%20Depth%20of%20Two%20Valid%20Parentheses%20Strings.java) +652|[Find and Replace Pattern](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20and%20Replace%20Pattern.java) +653|[Design File System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20File%20System.java) +654|[Determine if Two Strings Are Close](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Determine%20if%20Two%20Strings%20Are%20Close.java) +655|[Maximum Absolute Sum of Any Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Absolute%20Sum%20of%20Any%20Subarray.java) +656|[Number of Pairs of Interchangeable Rectangles](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Pairs%20of%20Interchangeable%20Rectangles.java) +657|[Kth Largest Element in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Largest%20Element%20in%20an%20Array.java) +658|[The Number of Full Rounds You Have Played](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/The%20Number%20of%20Full%20Rounds%20You%20Have%20Played.java) +659|[Snapshot Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snapshot%20Array.java) +660|[Top K Frequent Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Elements.java) +661|[Smallest Subtree with all the Deepest Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20Subtree%20with%20all%20the%20Deepest%20Nodes.java) +662|[Maximal Network Rank](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximal%20Network%20Rank.java) +663|[Rearrange Array Elements by Sign](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20Elements%20by%20Sign.java) +664|[Kth Smallest Element in a Sorted Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Kth%20Smallest%20Element%20in%20a%20Sorted%20Matrix.java) +665|[Two City Scheduling](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20City%20Scheduling.java) +666|[Minimum Score Triangulation of Polygon](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Score%20Triangulation%20of%20Polygon.java) +667|[Binary Tree Coloring Game](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Coloring%20Game.java) +668|[Maximum Difference Between Node and Ancestor](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Difference%20Between%20Node%20and%20Ancestor.java) +669|[Sum of Beauty of All Substrings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sum%20of%20Beauty%20of%20All%20Substrings.java) +670|[Push Dominoes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Push%20Dominoes.java) +671|[Combination Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Combination%20Sum%20III.java) +672|[Find K Closest Elements](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K%20Closest%20Elements.java) +673|[01 Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/01%20Matrix.java) +674|[Clone Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Clone%20Graph.java) +675|[Longest Palindromic Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Substring.java) +676|[Robot Bounded In Circle](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Robot%20Bounded%20In%20Circle.java) +677|[Minimum Deletions to Make Array Beautiful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Deletions%20to%20Make%20Array%20Beautiful.java) +678|[Koko Eating Bananas](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Koko%20Eating%20Bananas.java) +679|[Statistics from a Large Sample](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Statistics%20from%20a%20Large%20Sample.java) +680|[Insert Delete GetRandom O(1)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20Delete%20GetRandom%20O(1).java) +681|[Longest Substring with At Most K Distinct Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Substring%20with%20At%20Most%20K%20Distinct%20Characters.java) +682|[Minimum Swaps to Group All 1's Together](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Swaps%20to%20Group%20All%201's%20Together.java) +683|[Path Sum III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Path%20Sum%20III.java) +684|[Snakes and Ladders](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Snakes%20and%20Ladders.java) +685|[Longest Palindromic Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Palindromic%20Subsequence.java) +686|[Longest String Chain](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20String%20Chain.java) +687|[Buildings With an Ocean View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Buildings%20With%20an%20Ocean%20View.java) +688|[Sort Transformed Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Transformed%20Array.java) +689|[Search in a Sorted Array of Unknown Size](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20in%20a%20Sorted%20Array%20of%20Unknown%20Size.java) +690|[Minimize Product Sum of Two Arrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimize%20Product%20Sum%20of%20Two%20Arrays.java) +691|[Count Complete Tree Nodes](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Complete%20Tree%20Nodes.java) +692|[Minesweeper](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minesweeper.java) +693|[Best Time to Buy and Sell Stock with Transaction Fee](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20with%20Transaction%20Fee.java) +694|[Online Election](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Online%20Election.java) +695|[Minimum Cost For Tickets](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Cost%20For%20Tickets.java) +696|[Find K-Length Substrings With No Repeated Characters](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20K-Length%20Substrings%20With%20No%20Repeated%20Characters.java) +697|[Pow(x, n)](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Pow(x,%20n).java) +698|[Construct String With Repeat Limit](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20String%20With%20Repeat%20Limit.java) +699|[Word Break](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Word%20Break.java) +700|[Reverse Odd Levels of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Odd%20Levels%20of%20Binary%20Tree.java) +701|[Design SQL](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20SQL.java) +702|[Find the Kth Largest Integer in the Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Kth%20Largest%20Integer%20in%20the%20Array.java) +703|[Flatten Binary Tree to Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Flatten%20Binary%20Tree%20to%20Linked%20List.java) +704|[Sort Colors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20Colors.java) +705|[Best Time to Buy and Sell Stock II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Best%20Time%20to%20Buy%20and%20Sell%20Stock%20II.java) +706|[Longest Absolute File Path](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Longest%20Absolute%20File%20Path.java) +707|[Count Unreachable Pairs of Nodes in an Undirected Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Unreachable%20Pairs%20of%20Nodes%20in%20an%20Undirected%20Graph.java) +708|[Prison Cells After N Days](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Prison%20Cells%20After%20N%20Days.java) +709|[Insert into a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insert%20into%20a%20Binary%20Search%20Tree.java) +710|[Binary Search Tree Iterator II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator%20II.java) +711|[Course Schedule II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Course%20Schedule%20II.java) +712|[Remove Duplicates From Sorted Array II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20Sorted%20Array%20II.java) +713|[Shortest Bridge](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Bridge.java) +714|[Binary Search Tree Iterator](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Search%20Tree%20Iterator.java) +715|[Find Duplicate File in System](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Duplicate%20File%20in%20System.java) +716|[Insufficient Nodes in Root to Leaf Paths](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Insufficient%20Nodes%20in%20Root%20to%20Leaf%20Paths.java) +717|[Divide Array in Sets of K Consecutive Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Divide%20Array%20in%20Sets%20of%20K%20Consecutive%20Numbers.java) +718|[Check Completeness of a Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20Completeness%20of%20a%20Binary%20Tree.java) +719|[Two Sum BSTs](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Two%20Sum%20BSTs.java) +720|[Count Sorted Vowel Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Sorted%20Vowel%20Strings.java) +721|[Check If a String Contains All Binary Codes of Size K](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Check%20If%20a%20String%20Contains%20All%20Binary%20Codes%20of%20Size%20K.java) +722|[Contains Duplicate III](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Contains%20Duplicate%20III.java) +723|[Stock Price Fluctuation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Stock%20Price%20Fluctuation.java) +724|[Spiral Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix.java) +725|[Next Closest Time](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Next%20Closest%20Time.java) +726|[Find the Maximum Divisibility Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Maximum%20Divisibility%20Score.java) +727|[Group Shifted Strings](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Group%20Shifted%20Strings.java) +728|[Array Circular Loop](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Array%20Circular%20Loop.java) +729|[ZigZag Conversion](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/ZigZag%20Conversion.java) +730|[Find the Score of All Prefixes of an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Score%20of%20All%20Prefixes%20of%20an%20Array.java) +731|[Number of Matching Subsequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Matching%20Subsequence.java) +732|[All Paths From Source to Target](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20From%20Source%20to%20Target.java) +733|[Spiral Matrix II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Spiral%20Matrix%20II.java) +734|[Design Authentication Manager](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Authentication%20Manager.java) +735|[Minimum Operations to Make a Special Number](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Operations%20to%20Make%20a%20Special%20Number.java) +736|[People Whose List of Favorite Companies Is Not a Subset of Another List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/People%20Whose%20List%20of%20Favorite%20Companies%20Is%20Not%20a%20Subset%20of%20Another%20List.java) +737|[Number of Enclaves](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Enclaves.java) +738|[Sort the Students by Their Kth Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Sort%20the%20Students%20by%20Their%20Kth%20Score.java) +739|[Number of Zero-Filled Subarrays](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Number%20of%20Zero-Filled%20Subarrays.java) +740|[Bag of Tokens](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Bag%20of%20Tokens.java) +741|[Binary Tree Longest Consecutive Sequence](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Longest%20Consecutive%20Sequence.java) +742|[All Paths from Source Lead to Destination](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Paths%20from%20Source%20Lead%20to%20Destination.java) +743|[Trim a Binary Search Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Trim%20a%20Binary%20Search%20Tree.java) +744|[Lexicographical Numbers](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Lexicographical%20Numbers.java) +745|[Minimum Time to Make Rope Colorful](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Minimum%20Time%20to%20Make%20Rope%20Colorful.java) +746|[Rotate Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rotate%20Array.java) +747|[Unique Word Abbrevation](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Unique%20Word%20Abbrevation.java) +748|[Binary Tree Right Side View](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Binary%20Tree%20Right%20Side%20View.java) +749|[Solving Questions With Brainpower](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Solving%20Questions%20With%20Brainpower.java) +750|[All Nodes Distance K in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Nodes%20Distance%20K%20in%20Binary%20Tree.java) +751|[Queue Reconstruction By Height](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Queue%20Reconstruction%20By%20Height.java) +752|[Step-By-Step Directions From a Binary Tree Node to Another](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Step-By-Step%20Directions%20From%20a%20Binary%20Tree%20Node%20to%20Another.java) +753|[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Medium.md) +754|[Meeting Rooms II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Meeting%20Rooms%20II.java) +755|[Maximum Binary Tree II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Binary%20Tree%20II.java) +756|[Maximum Subsequence Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Subsequence%20Score.java) +757|[Smallest String With A Given Numeric Value](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Smallest%20String%20With%20A%20Given%20Numeric%20Value.java) +758|[Print Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Print%20Binary%20Tree.java) +759|[Find Missing Observations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20Missing%20Observations.java) +760|[Restore IP Address](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Restore%20IP%20Address.java) +761|[Water & Jug Problem](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Water%20&%20Jug%20Problem.java) +762|[Maximum Width of Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Width%20of%20Binary%20Tree.java) +763|[Target Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Target%20Sum.java) +764|[Find the Longest Semi-Repetitive Substring](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Longest%20Semi-Repetitive%20Substring.java) +765|[Synonymous Sentences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Synonymous%20Sentences.java) +766|[Top K Frequent Words](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Top%20K%20Frequent%20Words.java) +767|[Convert an Array Into a 2D Array With Conditions](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Convert%20an%20Array%20Into%20a%202D%20Array%20With%20Conditions.java) +768|[Shortest Unsorted Continuous Subarray](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Unsorted%20Continuous%20Subarray.java) +769|[Satisfiability of Equality Equations](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Satisfiability%20of%20Equality%20Equations.java) +770|[All Ancestors of a Node in a Directed Acyclic Graph](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/All%20Ancestors%20of%20a%20Node%20in%20a%20Directed%20Acyclic%20Graph.java) +771|[Maximize Distance to Closest Person](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximize%20Distance%20to%20Closest%20Person.java) +772|[Design Tic-Tac-Toe](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Design%20Tic-Tac-Toe.java) +773|[H-Index II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/H-Index%20II.java) +774|[3Sum](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/3Sum.java) +775|[Maximum Consecutive Floors Without Special Floors](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20Consecutive%20Floors%20Without%20Special%20Floors.java) +776|[Reorganize String](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reorganize%20String.java) +777|[Reverse Substrings Between Each Pair of Parentheses](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Reverse%20Substrings%20Between%20Each%20Pair%20of%20Parentheses.java) +778|[Maximum XOR of Two Numbers in an Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Maximum%20XOR%20of%20Two%20Numbers%20in%20an%20Array.java) +779|[Count Good Nodes in Binary Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Good%20Nodes%20in%20Binary%20Tree.java) +780|[Find the Minimum and Maximum Number of Nodes Between Critical Points](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Find%20the%20Minimum%20and%20Maximum%20Number%20of%20Nodes%20Between%20Critical%20Points.java) +781|[Missing Element in Sorted Array](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Missing%20Element%20in%20Sorted%20Array.java) +782|[Even Odd Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Even%20Odd%20Tree.java) +783|[Rearrange Array to Maximize Prefix Score](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Rearrange%20Array%20to%20Maximize%20Prefix%20Score.java) +784|[Search for a range](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20for%20a%20range.java) +785|[Count Collisions on a Road](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Count%20Collisions%20on%20a%20Road.java) +786|[Numbers With Same Consecutive Differences](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Numbers%20With%20Same%20Consecutive%20Differences.java) +787|[Remove Duplicates From an Unsorted Linked List](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Remove%20Duplicates%20From%20an%20Unsorted%20Linked%20List.java) +788|[Populating Next Right Pointers in Each Node II](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Populating%20Next%20Right%20Pointers%20in%20Each%20Node%20II.java) +789|[Construct Binary Search Tree from Preorder Traversal](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Construct%20Binary%20Search%20Tree%20from%20Preorder%20Traversal.java) +790|[Shortest Completing Word](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Shortest%20Completing%20Word.java) +791|[Search a 2D Matrix](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Search%20a%202D%20Matrix.java) +792|[Add One Row to Tree](https://github.com/varunu28/LeetCode-Java-Solutions/tree/master/Medium/Add%20One%20Row%20to%20Tree.java) diff --git a/README.md b/README.md index 79190be6..4eec5fb7 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Problem Category | Count --- | --- -[Easy](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Easy/README.md) | 572 -[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/README.md) | 754 -[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Hard/README.md) | 111 +[Easy](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Easy/README.md) | 607 +[Medium](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Medium/README.md) | 793 +[Hard](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Hard/README.md) | 125 [Concurrency](https://github.com/varunu28/LeetCode-Java-Solutions/blob/master/Concurrency/README.md) | 9 From d02639a3606198ac5a1aba7715c1f392c905e102 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 6 Oct 2023 05:55:04 -0700 Subject: [PATCH 1288/1640] Create Integer Break.java --- Medium/Integer Break.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Integer Break.java diff --git a/Medium/Integer Break.java b/Medium/Integer Break.java new file mode 100644 index 00000000..10071c6f --- /dev/null +++ b/Medium/Integer Break.java @@ -0,0 +1,19 @@ +class Solution { + public int integerBreak(int n) { + if (n < 4) { + return n - 1; + } + int[] dp = new int[n + 1]; + for (int i = 1; i <= 3; i++) { + dp[i] = i; + } + for (int i = 4; i <= n; i++) { + int result = i; + for (int j = 2; j < i; j++) { + result = Math.max(result, j * dp[i - j]); + } + dp[i] = result; + } + return dp[n]; + } +} From 187962d20ec479ea0422d4d92bdfda7b4fefb06e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 7 Oct 2023 14:01:46 -0700 Subject: [PATCH 1289/1640] Create Build Array Where You Can Find The Maximum Exactly K Comparisons.java --- ...ind The Maximum Exactly K Comparisons.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Hard/Build Array Where You Can Find The Maximum Exactly K Comparisons.java diff --git a/Hard/Build Array Where You Can Find The Maximum Exactly K Comparisons.java b/Hard/Build Array Where You Can Find The Maximum Exactly K Comparisons.java new file mode 100644 index 00000000..c7ede11f --- /dev/null +++ b/Hard/Build Array Where You Can Find The Maximum Exactly K Comparisons.java @@ -0,0 +1,28 @@ +class Solution { + + private static final int MOD = (int) 1000_000_007; + + public int numOfArrays(int n, int m, int k) { + int[][][] dp = new int[n + 1][m + 1][k + 1]; + for (int i = 0; i < dp[0].length; i++) { + dp[n][i][0] = 1; + } + for (int i = n - 1; i >= 0; i--) { + for (int j = m; j >= 0; j--) { + for (int l = 0; l <= k; l++) { + int result = 0; + for (int num = 1; num <= j; num++) { + result = (result + dp[i + 1][j][l]) % MOD; + } + if (l > 0) { + for (int num = j + 1; num <= m; num++) { + result = (result + dp[i + 1][num][l - 1]) % MOD; + } + } + dp[i][j][l] = result; + } + } + } + return dp[0][0][k]; + } +} From 0c6fe309938e938744c046165ca0346040ab8588 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Oct 2023 06:54:39 -0700 Subject: [PATCH 1290/1640] Create Divisible and Non-divisible Sums Difference.java --- Easy/Divisible and Non-divisible Sums Difference.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Divisible and Non-divisible Sums Difference.java diff --git a/Easy/Divisible and Non-divisible Sums Difference.java b/Easy/Divisible and Non-divisible Sums Difference.java new file mode 100644 index 00000000..a9c53cc8 --- /dev/null +++ b/Easy/Divisible and Non-divisible Sums Difference.java @@ -0,0 +1,8 @@ +class Solution { + public int differenceOfSums(int n, int m) { + int num1 = n * (n + 1) / 2; + int num2 = n / m; + num2 = m * num2 * (num2 + 1) / 2; + return num1 - 2 * num2; + } +} From 13e8601c910dc623108554635fbde041297dba80 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Oct 2023 10:05:54 -0700 Subject: [PATCH 1291/1640] Create Max Dot Product of Two Subsequences.java --- Hard/Max Dot Product of Two Subsequences.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Hard/Max Dot Product of Two Subsequences.java diff --git a/Hard/Max Dot Product of Two Subsequences.java b/Hard/Max Dot Product of Two Subsequences.java new file mode 100644 index 00000000..c2eca127 --- /dev/null +++ b/Hard/Max Dot Product of Two Subsequences.java @@ -0,0 +1,30 @@ +class Solution { + public int maxDotProduct(int[] nums1, int[] nums2) { + int maxOne = Integer.MIN_VALUE; + int maxTwo = Integer.MIN_VALUE; + int minOne = Integer.MAX_VALUE; + int minTwo = Integer.MAX_VALUE; + for (int num : nums1) { + maxOne = Math.max(maxOne, num); + minOne = Math.min(minOne, num); + } + for (int num : nums2) { + maxTwo = Math.max(maxTwo, num); + minTwo = Math.min(minTwo, num); + } + if (maxOne < 0 && minTwo > 0) { + return maxOne * minTwo; + } + if (minOne > 0 && maxTwo < 0) { + return minOne * maxTwo; + } + int[][] dp = new int[nums1.length + 1][nums2.length + 1]; + for (int i = nums1.length - 1; i >= 0; i--) { + for (int j = nums2.length - 1; j >= 0; j--) { + int curr = nums1[i] * nums2[j] + dp[i + 1][j + 1]; + dp[i][j] = Math.max(curr, Math.max(dp[i + 1][j], dp[i][j + 1])); + } + } + return dp[0][0]; + } +} From de95ca123d477a4bdde503892888949c562a2872 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Oct 2023 16:29:49 -0700 Subject: [PATCH 1292/1640] Create Minimum Processing Time.java --- Medium/Minimum Processing Time.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Minimum Processing Time.java diff --git a/Medium/Minimum Processing Time.java b/Medium/Minimum Processing Time.java new file mode 100644 index 00000000..ec9b75e6 --- /dev/null +++ b/Medium/Minimum Processing Time.java @@ -0,0 +1,18 @@ +class Solution { + public int minProcessingTime(List processorTime, List tasks) { + PriorityQueue taskQueue = new PriorityQueue<>(); + PriorityQueue processorQueue = new PriorityQueue<>((a, b) -> b - a); + taskQueue.addAll(tasks); + processorQueue.addAll(processorTime); + int totalTime = Integer.MIN_VALUE; + while (!processorQueue.isEmpty()) { + int startTime = processorQueue.remove(); + int currTime = Integer.MIN_VALUE; + for (int i = 0; i < 4; i++) { + currTime = Math.max(currTime, startTime + taskQueue.remove()); + } + totalTime = Math.max(totalTime, currTime); + } + return totalTime; + } +} From dd344622453fdf611a2f635489f35193fd5e6676 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Oct 2023 17:05:58 -0700 Subject: [PATCH 1293/1640] Update Find First and Last Position of Element in Sorted Array.java --- ...t Position of Element in Sorted Array.java | 54 +++++++++++-------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/Medium/Find First and Last Position of Element in Sorted Array.java b/Medium/Find First and Last Position of Element in Sorted Array.java index a61bd0dc..64e4ecec 100644 --- a/Medium/Find First and Last Position of Element in Sorted Array.java +++ b/Medium/Find First and Last Position of Element in Sorted Array.java @@ -1,27 +1,35 @@ class Solution { - public int[] searchRange(int[] nums, int target) { - return new int[]{binarySearchHelper(nums, target, -1), binarySearchHelper(nums, target, 1)}; - } - - private int binarySearchHelper(int[] nums, int target, int direction) { - int idx = -1; - int start = 0; - int end = nums.length - 1; - while (start <= end) { - int mid = (start + end) / 2; - if (nums[mid] == target) { - idx = idx == -1 ? mid : (direction == -1 ? Math.min(mid, idx) : Math.max(mid, idx)); - if (direction == -1) { - end = mid - 1; - } else { - start = mid + 1; + + private static enum Position { + FIRST, LAST; + } + + public int[] searchRange(int[] nums, int target) { + return new int[]{ + search(nums, target, Position.FIRST), + search(nums, target, Position.LAST) + }; + } + + private static int search(int[] nums, int target, Position position) { + int left = 0; + int right = nums.length - 1; + int idx = -1; + while (left <= right) { + int mid = (left + right) / 2; + if (nums[mid] == target) { + idx = mid; + if (position == Position.FIRST) { + right = mid - 1; + } else { + left = mid + 1; + } + } else if (nums[mid] > target) { + right = mid - 1; + } else { + left = mid + 1; + } } - } else if (nums[mid] > target) { - end = mid - 1; - } else { - start = mid + 1; - } + return idx; } - return idx; - } } From 8fd3a652faf2825a7ce4bdcf0529ef19d8d80fa6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 9 Oct 2023 06:51:27 -0700 Subject: [PATCH 1294/1640] Create Minimum Number of Operations to Make Array Empty.java --- ...Number of Operations to Make Array Empty.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Minimum Number of Operations to Make Array Empty.java diff --git a/Medium/Minimum Number of Operations to Make Array Empty.java b/Medium/Minimum Number of Operations to Make Array Empty.java new file mode 100644 index 00000000..e132e463 --- /dev/null +++ b/Medium/Minimum Number of Operations to Make Array Empty.java @@ -0,0 +1,16 @@ +class Solution { + public int minOperations(int[] nums) { + Map map = Arrays.stream(nums) + .boxed() + .collect( + Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); + int operations = 0; + for (Long value : map.values()) { + if (value == 1) { + return -1; + } + operations += (int) (value / 3 + (value % 3 != 0 ? 1 : 0)); + } + return operations; + } +} From fd343f2277621b311c98f1193206acda1261cd6d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 9 Oct 2023 06:51:51 -0700 Subject: [PATCH 1295/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4eec5fb7..c4fd5e63 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 1400+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1500+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count From 5695ae7d61661d01898fa301f0243411f8d113bb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 10 Oct 2023 07:49:28 -0700 Subject: [PATCH 1296/1640] Create Minimum Number of Operations to Make Array Continuous.java --- ...f Operations to Make Array Continuous.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Hard/Minimum Number of Operations to Make Array Continuous.java diff --git a/Hard/Minimum Number of Operations to Make Array Continuous.java b/Hard/Minimum Number of Operations to Make Array Continuous.java new file mode 100644 index 00000000..f6f07059 --- /dev/null +++ b/Hard/Minimum Number of Operations to Make Array Continuous.java @@ -0,0 +1,25 @@ +class Solution { + public int minOperations(int[] nums) { + Set set = new HashSet<>(); + for (int num : nums) { + set.add(num); + } + int[] arr = new int[set.size()]; + int idx = 0; + for (Integer num : set) { + arr[idx++] = num; + } + Arrays.sort(arr); + int n = nums.length; + int result = n; + int j = 0; + for (int i = 0; i < arr.length; i++) { + while (j < arr.length && arr[j] < arr[i] + n) { + j++; + } + int count = j - i; + result = Math.min(result, n - count); + } + return result; + } +} From cecb540cf1e04614a3365e0a8c9471ffd85df1ff Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 11 Oct 2023 06:18:35 -0700 Subject: [PATCH 1297/1640] Create Number of Flowers in Full Bloom.java --- Hard/Number of Flowers in Full Bloom.java | 25 +++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Hard/Number of Flowers in Full Bloom.java diff --git a/Hard/Number of Flowers in Full Bloom.java b/Hard/Number of Flowers in Full Bloom.java new file mode 100644 index 00000000..37bb43e7 --- /dev/null +++ b/Hard/Number of Flowers in Full Bloom.java @@ -0,0 +1,25 @@ +class Solution { + public int[] fullBloomFlowers(int[][] flowers, int[] people) { + int[] peopleCopy = Arrays.copyOf(people, people.length); + Arrays.sort(peopleCopy); + Arrays.sort(flowers, (a, b) -> Arrays.compare(a, b)); + Map map = new HashMap<>(); + PriorityQueue pq = new PriorityQueue<>(); + int idx = 0; + for (int person : peopleCopy) { + while (idx < flowers.length && flowers[idx][0] <= person) { + pq.add(flowers[idx][1]); + idx++; + } + while (!pq.isEmpty() && pq.peek() < person) { + pq.poll(); + } + map.put(person, pq.size()); + } + int[] result = new int[people.length]; + for (int i = 0; i < people.length; i++) { + result[i] = map.get(people[i]); + } + return result; + } +} From eb05caf390f4313f3f3e494f0cea48bf8cd3e78b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 12 Oct 2023 06:34:01 -0700 Subject: [PATCH 1298/1640] Create Find in Mountain Array.java --- Hard/Find in Mountain Array.java | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Hard/Find in Mountain Array.java diff --git a/Hard/Find in Mountain Array.java b/Hard/Find in Mountain Array.java new file mode 100644 index 00000000..d030c247 --- /dev/null +++ b/Hard/Find in Mountain Array.java @@ -0,0 +1,49 @@ +/** + * // This is MountainArray's API interface. + * // You should not implement it, or speculate about its implementation + * interface MountainArray { + * public int get(int index) {} + * public int length() {} + * } + */ + +class Solution { + public int findInMountainArray(int target, MountainArray mountainArr) { + int n = mountainArr.length(); + int start = 1; + int end = n - 2; + while (start != end) { + int mid = (start + end) / 2; + if (mountainArr.get(mid) < mountainArr.get(mid + 1)) { + start = mid + 1; + } else { + end = mid; + } + } + int peakIndex = start; + start = 0; + end = peakIndex; + while (start != end) { + int mid = (start + end) / 2; + if (mountainArr.get(mid) < target) { + start = mid + 1; + } else { + end = mid; + } + } + if (mountainArr.get(start) == target) { + return start; + } + start = peakIndex + 1; + end = n - 1; + while (start != end) { + int mid = (start + end) / 2; + if (mountainArr.get(mid) > target) { + start = mid + 1; + } else { + end = mid; + } + } + return mountainArr.get(start) == target ? start : -1; + } +} From 8392986ad79601c12810e4cb49a07b8a86f83c4f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 13 Oct 2023 07:00:25 -0700 Subject: [PATCH 1299/1640] Update Min Cost Climbing Stairs.java --- Easy/Min Cost Climbing Stairs.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/Easy/Min Cost Climbing Stairs.java b/Easy/Min Cost Climbing Stairs.java index 7a718918..1db8f19d 100644 --- a/Easy/Min Cost Climbing Stairs.java +++ b/Easy/Min Cost Climbing Stairs.java @@ -1,13 +1,12 @@ class Solution { - public int minCostClimbingStairs(int[] cost) { - int n = cost.length; - int first = cost[0]; - int second = cost[1]; - for (int i = 2; i < n; i++) { - int curr = cost[i] + Math.min(first, second); - first = second; - second = curr; + public int minCostClimbingStairs(int[] cost) { + int stepOneCost = cost[0]; + int stepTwoCost = cost[1]; + for (int i = 2; i < cost.length; i++) { + int currCost = cost[i] + Math.min(stepOneCost, stepTwoCost); + stepOneCost = stepTwoCost; + stepTwoCost = currCost; + } + return Math.min(stepOneCost, stepTwoCost); } - return Math.min(first, second); - } } From b4dc59fb6726a710d856b5acee27501d94085eea Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 14 Oct 2023 07:32:23 -0700 Subject: [PATCH 1300/1640] Create Painting the Walls.java --- Hard/Painting the Walls.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/Painting the Walls.java diff --git a/Hard/Painting the Walls.java b/Hard/Painting the Walls.java new file mode 100644 index 00000000..ceeb36f2 --- /dev/null +++ b/Hard/Painting the Walls.java @@ -0,0 +1,26 @@ +class Solution { + + private static final int INVALID_VALUE = 1000_000_000; + + public int paintWalls(int[] cost, int[] time) { + int n = cost.length; + Integer[][] dp = new Integer[n][n + 1]; + return compute(0, n, cost, time, dp, n); + } + + private int compute(int idx, int remain, int[] cost, int[] time, Integer[][] dp, int n) { + if (remain <= 0) { + return 0; + } + if (idx == n) { + return INVALID_VALUE; + } + if (dp[idx][remain] != null) { + return dp[idx][remain]; + } + int paint = cost[idx] + compute(idx + 1, remain - 1 - time[idx], cost, time, dp, n); + int noPaint = compute(idx + 1, remain, cost, time, dp, n); + dp[idx][remain] = Math.min(paint, noPaint); + return dp[idx][remain]; + } +} From 9ae580aae699a11fbe660b84e740d5002c745db5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 15 Oct 2023 10:58:54 -0700 Subject: [PATCH 1301/1640] Create Last Visited Integers.java --- Easy/Last Visited Integers.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Last Visited Integers.java diff --git a/Easy/Last Visited Integers.java b/Easy/Last Visited Integers.java new file mode 100644 index 00000000..e6a59e34 --- /dev/null +++ b/Easy/Last Visited Integers.java @@ -0,0 +1,17 @@ +class Solution { + public List lastVisitedIntegers(List words) { + List result = new ArrayList<>(); + List numbers = new ArrayList<>(); + int cursor = -1; + for (String word : words) { + if (word.equals("prev")) { + result.add(cursor == -1 ? -1 : numbers.get(cursor)); + cursor = cursor == -1 ? -1 : (cursor - 1); + } else { + numbers.add(Integer.parseInt(word)); + cursor = numbers.size() - 1; + } + } + return result; + } +} From 532b766ba63b509941a680f704d5407faaf7a73d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 15 Oct 2023 16:20:01 -0700 Subject: [PATCH 1302/1640] Create Number of Ways to Stay in the Same Place After Some Steps.java --- ...ay in the Same Place After Some Steps.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Hard/Number of Ways to Stay in the Same Place After Some Steps.java diff --git a/Hard/Number of Ways to Stay in the Same Place After Some Steps.java b/Hard/Number of Ways to Stay in the Same Place After Some Steps.java new file mode 100644 index 00000000..a9ce7edf --- /dev/null +++ b/Hard/Number of Ways to Stay in the Same Place After Some Steps.java @@ -0,0 +1,23 @@ +class Solution { + + private static final int MOD = 1000_000_007; + + public int numWays(int steps, int arrLen) { + arrLen = Math.min(arrLen, steps); + int[][] dp = new int[arrLen][steps + 1]; + dp[0][0] = 1; + for (int i = 1; i <= steps; i++) { + for (int j = arrLen - 1; j >= 0; j--) { + int result = dp[j][i - 1]; + if (j > 0) { + result = (result + dp[j - 1][i - 1]) % MOD; + } + if (j < arrLen - 1) { + result = (result + dp[j + 1][i - 1]) % MOD; + } + dp[j][i] = result; + } + } + return dp[0][steps]; + } +} From 183167b1f1258205128096789ab760266a9358be Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 18 Oct 2023 08:13:45 -0700 Subject: [PATCH 1303/1640] Create Parallel Courses III.java --- Hard/Parallel Courses III.java | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Hard/Parallel Courses III.java diff --git a/Hard/Parallel Courses III.java b/Hard/Parallel Courses III.java new file mode 100644 index 00000000..f557c244 --- /dev/null +++ b/Hard/Parallel Courses III.java @@ -0,0 +1,35 @@ +class Solution { + public int minimumTime(int n, int[][] relations, int[] time) { + Map> map = new HashMap<>(); + int[] indegree = new int[n + 1]; + for (int[] relation : relations) { + int course = relation[0]; + int prereq = relation[1]; + indegree[course]++; + map.computeIfAbsent(prereq, k -> new ArrayList<>()).add(course); + } + Queue queue = new LinkedList<>(); + int[] maxTime = new int[n + 1]; + for (int i = 1; i <= n; i++) { + if (indegree[i] == 0) { + queue.add(i); + maxTime[i] = time[i - 1]; + } + } + while (!queue.isEmpty()) { + int removed = queue.remove(); + for (Integer dependent : map.getOrDefault(removed, new ArrayList<>())) { + maxTime[dependent] = Math.max(maxTime[dependent], maxTime[removed] + time[dependent - 1]); + indegree[dependent]--; + if (indegree[dependent] == 0) { + queue.add(dependent); + } + } + } + int result = 0; + for (int i = 1; i <= n; i++) { + result = Math.max(result, maxTime[i]); + } + return result; + } +} From e7be3158b5dde10e199433f5730620621c5a7c56 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 19 Oct 2023 06:53:50 -0700 Subject: [PATCH 1304/1640] Update Backspace String Compare.java --- Easy/Backspace String Compare.java | 38 +++++++++++++++--------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Easy/Backspace String Compare.java b/Easy/Backspace String Compare.java index 170f9f69..91ef6593 100644 --- a/Easy/Backspace String Compare.java +++ b/Easy/Backspace String Compare.java @@ -1,23 +1,23 @@ class Solution { - public boolean backspaceCompare(String s, String t) { - return formBackSpaceString(s).equals(formBackSpaceString(t)); - } - - private String formBackSpaceString(String s) { - Stack stack = new Stack<>(); - for (char c : s.toCharArray()) { - if (c == '#') { - if (!stack.isEmpty()) { - stack.pop(); - } - } else { - stack.push(c); - } + public boolean backspaceCompare(String s, String t) { + return buildBackspaceString(s).equals(buildBackspaceString(t)); } - StringBuilder sb = new StringBuilder(); - while (!stack.isEmpty()) { - sb.append(stack.pop()); + + private static String buildBackspaceString(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (c == '#') { + if (!stack.isEmpty()) { + stack.pop(); + } + } else { + stack.push(c); + } + } + StringBuilder sb = new StringBuilder(); + for (char c : stack) { + sb.append(c); + } + return sb.toString(); } - return sb.toString(); - } } From b99d324a2f3e2153abc818c647537697ab29c603 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 20 Oct 2023 07:50:48 -0700 Subject: [PATCH 1305/1640] Update Flatten Nested List Iterator.java --- Medium/Flatten Nested List Iterator.java | 45 +++++++++++++----------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/Medium/Flatten Nested List Iterator.java b/Medium/Flatten Nested List Iterator.java index 5081ee2e..087bc1ef 100644 --- a/Medium/Flatten Nested List Iterator.java +++ b/Medium/Flatten Nested List Iterator.java @@ -17,31 +17,34 @@ */ public class NestedIterator implements Iterator { - private Stack stack; - - public NestedIterator(List nestedList) { - this.stack = new Stack<>(); - for (int i = nestedList.size() - 1; i >= 0; i--) { - this.stack.push(nestedList.get(i)); + private Stack stack; + + public NestedIterator(List nestedList) { + this.stack = new Stack<>(); + for (int i = nestedList.size() - 1; i >= 0; i--) { + this.stack.push(nestedList.get(i)); + } } - } - @Override - public Integer next() { - int value = this.stack.pop().getInteger(); - return value; - } + @Override + public Integer next() { + return stack.pop().getInteger(); + } - @Override - public boolean hasNext() { - while (!this.stack.isEmpty() && !this.stack.peek().isInteger()) { - List ni = this.stack.pop().getList(); - for (int i = ni.size() - 1; i >= 0; i--) { - this.stack.push(ni.get(i)); - } + @Override + public boolean hasNext() { + while (!stack.isEmpty() && !stack.peek().isInteger()) { + NestedInteger popped = stack.pop(); + if (popped == null) { + continue; + } + List list = popped.getList(); + for (int i = list.size() - 1; i >= 0; i--) { + stack.push(list.get(i)); + } + } + return !stack.isEmpty(); } - return !this.stack.isEmpty(); - } } /** From 42b485199d6a18e16606d0dec9c89259b87d19a9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 21 Oct 2023 07:53:53 -0700 Subject: [PATCH 1306/1640] Create Constrained Subsequence Sum.java --- Hard/Constrained Subsequence Sum.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Hard/Constrained Subsequence Sum.java diff --git a/Hard/Constrained Subsequence Sum.java b/Hard/Constrained Subsequence Sum.java new file mode 100644 index 00000000..9dabd1d4 --- /dev/null +++ b/Hard/Constrained Subsequence Sum.java @@ -0,0 +1,16 @@ +class Solution { + public int constrainedSubsetSum(int[] nums, int k) { + PriorityQueue pq = new PriorityQueue<>((a, b) -> b[0] - a[0]); + pq.add(new int[]{nums[0], 0}); + int result = nums[0]; + for (int i = 1; i < nums.length; i++) { + while (i - pq.peek()[1] > k) { + pq.remove(); + } + int curr = Math.max(0, pq.peek()[0]) + nums[i]; + result = Math.max(result, curr); + pq.add(new int[]{curr, i}); + } + return result; + } +} From de3fdc9fd167ea78df037aff9d4a914cecb3000d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 Oct 2023 08:52:06 -0700 Subject: [PATCH 1307/1640] Update Power of Four.java --- Easy/Power of Four.java | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/Easy/Power of Four.java b/Easy/Power of Four.java index 18dd30c1..269c7bd7 100644 --- a/Easy/Power of Four.java +++ b/Easy/Power of Four.java @@ -1,19 +1,5 @@ class Solution { - public boolean isPowerOfFour(int n) { - long left = 0; - long right = n / 2 + 1; - while (left <= right) { - long mid = (left + right) / 2; - long pow = (long) (Math.pow(4, mid)); - if (pow == ((long) n)) { - return true; - } - if (pow > ((long) n)) { - right = mid - 1; - } else { - left = mid + 1; - } + public boolean isPowerOfFour(int n) { + return n > 0 && Math.log(n) / Math.log(2) % 2 == 0; } - return false; - } } From e68120ea4f3f69f1fbfe6217e5cec14922e639b3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 Oct 2023 09:13:01 -0700 Subject: [PATCH 1308/1640] Create Minimum Sum of Mountain Triplets I.java --- Easy/Minimum Sum of Mountain Triplets I.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Minimum Sum of Mountain Triplets I.java diff --git a/Easy/Minimum Sum of Mountain Triplets I.java b/Easy/Minimum Sum of Mountain Triplets I.java new file mode 100644 index 00000000..cabcd870 --- /dev/null +++ b/Easy/Minimum Sum of Mountain Triplets I.java @@ -0,0 +1,19 @@ +class Solution { + public int minimumSum(int[] nums) { + int n = nums.length; + int[] smallestRight = new int[n]; + smallestRight[n - 1] = nums[n - 1]; + for (int i = n - 2; i >= 0; i--) { + smallestRight[i] = Math.min(smallestRight[i + 1], nums[i]); + } + int smallestLeft = nums[0]; + int result = Integer.MAX_VALUE; + for (int i = 1; i < n; i++) { + if (smallestLeft < nums[i] && smallestRight[i] < nums[i]) { + result = Math.min(result, nums[i] + smallestRight[i] + smallestLeft); + } + smallestLeft = Math.min(smallestLeft, nums[i]); + } + return result == Integer.MAX_VALUE ? -1 : result; + } +} From c1bb0d540a29b1be62ed24675ae1bf853beace6c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 Oct 2023 17:45:13 -0700 Subject: [PATCH 1309/1640] Update Find Largest Value in Each Tree Row.java --- .../Find Largest Value in Each Tree Row.java | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Medium/Find Largest Value in Each Tree Row.java b/Medium/Find Largest Value in Each Tree Row.java index 49aeca0e..2f0c7883 100644 --- a/Medium/Find Largest Value in Each Tree Row.java +++ b/Medium/Find Largest Value in Each Tree Row.java @@ -4,32 +4,38 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public List largestValues(TreeNode root) { - List list = new ArrayList<>(); - if (root == null) { - return list; - } - Queue queue = new LinkedList<>(); - queue.add(root); - while (!queue.isEmpty()) { - int maxVal = Integer.MIN_VALUE; - int size = queue.size(); - while (size-- > 0) { - TreeNode removed = queue.remove(); - maxVal = Math.max(maxVal, removed.val); - if (removed.left != null) { - queue.add(removed.left); + public List largestValues(TreeNode root) { + if (root == null) { + return new ArrayList<>(); } - if (removed.right != null) { - queue.add(removed.right); + List result = new ArrayList<>(); + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + int maxValue = queue.peek().val; + while (size-- > 0) { + TreeNode removed = queue.remove(); + maxValue = Math.max(maxValue, removed.val); + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + result.add(maxValue); } - } - list.add(maxVal); + return result; } - return list; - } } From 12b5aa03214cbbb2cec061e6e36445d353f8aada Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 24 Oct 2023 16:44:22 -0700 Subject: [PATCH 1310/1640] Create Correct a Binary Tree.java --- Easy/Correct a Binary Tree.java | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Easy/Correct a Binary Tree.java diff --git a/Easy/Correct a Binary Tree.java b/Easy/Correct a Binary Tree.java new file mode 100644 index 00000000..3ec5f055 --- /dev/null +++ b/Easy/Correct a Binary Tree.java @@ -0,0 +1,48 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public TreeNode correctBinaryTree(TreeNode root) { + Queue queue = new LinkedList<>(); + queue.add(new Pair(root, null)); + while (!queue.isEmpty()) { + int size = queue.size(); + Set visited = new HashSet<>(); + for (int i = 0; i < size; i++) { + Pair pair = queue.remove(); + TreeNode node = pair.node(); + TreeNode parent = pair.parent(); + if (visited.contains(node.right)) { + if (parent.left == node) { + parent.left = null; + } else { + parent.right = null; + } + return root; + } + visited.add(node); + if (node.right != null) { + queue.add(new Pair(node.right, node)); + } + if (node.left != null) { + queue.add(new Pair(node.left, node)); + } + } + } + return root; + } + + private static record Pair(TreeNode node, TreeNode parent) {} +} From 608e9a283dba926ee824e6dc0f80e0366b0f9bad Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 25 Oct 2023 08:21:11 -0700 Subject: [PATCH 1311/1640] Create K-th Symbol in Grammar.java --- Medium/K-th Symbol in Grammar.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/K-th Symbol in Grammar.java diff --git a/Medium/K-th Symbol in Grammar.java b/Medium/K-th Symbol in Grammar.java new file mode 100644 index 00000000..da370f11 --- /dev/null +++ b/Medium/K-th Symbol in Grammar.java @@ -0,0 +1,18 @@ +class Solution { + public int kthGrammar(int n, int k) { + return depthFirstSearch(n, k, 0); + } + + private int depthFirstSearch(int n, int k, int root) { + if (n == 1) { + return root; + } + int nodeCount = (int) Math.pow(2, n - 1); + if (k > (nodeCount / 2)) { + int nextRoot = (root == 0) ? 1 : 0; + return depthFirstSearch(n - 1, k - (nodeCount / 2), nextRoot); + } + int nextRoot = (root == 0) ? 0 : 1; + return depthFirstSearch(n - 1, k, nextRoot); + } +} From 0434cd9d2c7670b94a53a1c1cba42c1c3c613b59 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 30 Oct 2023 03:53:00 +0530 Subject: [PATCH 1312/1640] Create Subarrays Distinct Element Sum of Squares I.java --- ...barrays Distinct Element Sum of Squares I.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Subarrays Distinct Element Sum of Squares I.java diff --git a/Easy/Subarrays Distinct Element Sum of Squares I.java b/Easy/Subarrays Distinct Element Sum of Squares I.java new file mode 100644 index 00000000..fa7cee6a --- /dev/null +++ b/Easy/Subarrays Distinct Element Sum of Squares I.java @@ -0,0 +1,15 @@ +class Solution { + public int sumCounts(List nums) { + int sum = 0; + int n = nums.size(); + for (int i = 0; i < n; i++) { + Set set = new HashSet<>(); + for (int j = i; j < n; j++) { + set.add(nums.get(j)); + int size = set.size(); + sum += size * size; + } + } + return sum; + } +} From a7379c9bab2dab58a848e6b2239544c46227d418 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 31 Oct 2023 01:56:26 +0530 Subject: [PATCH 1313/1640] Create Find the K-or of an Array.java --- Easy/Find the K-or of an Array.java | 31 +++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Easy/Find the K-or of an Array.java diff --git a/Easy/Find the K-or of an Array.java b/Easy/Find the K-or of an Array.java new file mode 100644 index 00000000..48343d5e --- /dev/null +++ b/Easy/Find the K-or of an Array.java @@ -0,0 +1,31 @@ +class Solution { + public int findKOr(int[] nums, int k) { + Map map = new HashMap<>(); + for (int num : nums) { + List setBits = getSetBits(num); + for (Integer setBit : setBits) { + map.put(setBit, map.getOrDefault(setBit, 0) + 1); + } + } + int result = 0; + for (int i = 0, p = 1; i < 32; i++, p *= 2) { + if (map.getOrDefault(i, 0) >= k) { + result += p; + } + } + return result; + } + + private static List getSetBits(int num) { + List bits = new ArrayList<>(); + int bit = 0; + while (num > 0) { + if (num % 2 == 1) { + bits.add(bit); + } + num = num / 2; + bit++; + } + return bits; + } +} From 7b6bf88a2086e01e8c047c87b8e92f43a3bd8c80 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 31 Oct 2023 13:20:10 +0530 Subject: [PATCH 1314/1640] Update Find The Original Array of Prefix Xor.java --- .../Find The Original Array of Prefix Xor.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Medium/Find The Original Array of Prefix Xor.java b/Medium/Find The Original Array of Prefix Xor.java index 97baa6e7..46732ae1 100644 --- a/Medium/Find The Original Array of Prefix Xor.java +++ b/Medium/Find The Original Array of Prefix Xor.java @@ -1,11 +1,11 @@ class Solution { - public int[] findArray(int[] pref) { - int n = pref.length; - int[] result = new int[n]; - result[0] = pref[0]; - for (int i = 1; i < n; i++) { - result[i] = pref[i] ^ pref[i - 1]; + public int[] findArray(int[] pref) { + int n = pref.length; + int[] result = new int[n]; + result[0] = pref[0]; + for (int i = 1; i < n; i++) { + result[i] = pref[i - 1] ^ pref[i]; + } + return result; } - return result; - } } From 76b05375450bf34319125ecf1761fa36641125b2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Nov 2023 08:16:42 +0530 Subject: [PATCH 1315/1640] Update Find Mode in Binary Search Tree.java --- Easy/Find Mode in Binary Search Tree.java | 83 +++++++++++++---------- 1 file changed, 46 insertions(+), 37 deletions(-) diff --git a/Easy/Find Mode in Binary Search Tree.java b/Easy/Find Mode in Binary Search Tree.java index a803103b..2b1f2fa0 100644 --- a/Easy/Find Mode in Binary Search Tree.java +++ b/Easy/Find Mode in Binary Search Tree.java @@ -14,44 +14,53 @@ * } */ class Solution { - Integer prev = null; - int count = 1; - int max = 0; - public int[] findMode(TreeNode root) { - if (root == null) { - return new int[0]; + public int[] findMode(TreeNode root) { + ResultWrapper resultWrapper = new ResultWrapper(); + inorder(root, resultWrapper); + return resultWrapper.result.stream().mapToInt(Integer::intValue).toArray(); } - List list = new ArrayList<>(); - traverse(root, list); - int[] ans = new int[list.size()]; - for (int i = 0; i < list.size(); i++) { - ans[i] = list.get(i); + + private void inorder(TreeNode node, ResultWrapper resultWrapper) { + if (node == null) { + return; + } + inorder(node.left, resultWrapper); + int val = node.val; + resultWrapper.recordStreak(val); + resultWrapper.updateResult(val); + inorder(node.right, resultWrapper); } - return ans; - } - - private void traverse(TreeNode root, List list) { - if (root == null) { - return; + + private static class ResultWrapper { + private int maxStreak; + private int currStreak; + private Integer curr; + private List result; + + public ResultWrapper() { + this.maxStreak = 0; + this.currStreak = 0; + this.curr = 0; + this.result = new ArrayList<>(); + } + + public void recordStreak(int num) { + if (num == curr) { + currStreak++; + } else { + currStreak = 1; + curr = num; + } + } + + public void updateResult(int num) { + if (currStreak > maxStreak) { + result.clear(); + maxStreak = currStreak; + } + if (currStreak == maxStreak) { + result.add(num); + } + } } - traverse(root.left, list); - if (prev != null) { - if (root.val == prev) { - count++; - } - else { - count = 1; - } - } - if (count > max) { - max = count; - list.clear(); - list.add(root.val); - } - else if (count == max) { - list.add(root.val); - } - prev = root.val; - traverse(root.right, list); - } } From 220c742237aca2c665bae4307008afca94bb6a71 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 1 Nov 2023 12:40:35 +0530 Subject: [PATCH 1316/1640] Update Campus Bikes.java --- Medium/Campus Bikes.java | 73 ++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 40 deletions(-) diff --git a/Medium/Campus Bikes.java b/Medium/Campus Bikes.java index 9d385afb..129f4fbc 100644 --- a/Medium/Campus Bikes.java +++ b/Medium/Campus Bikes.java @@ -1,46 +1,39 @@ class Solution { - public int[] assignBikes(int[][] workers, int[][] bikes) { - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(Node n1, Node n2) { - int c = n1.dist - n2.dist; - if (c != 0) { - return c; + public int[] assignBikes(int[][] workers, int[][] bikes) { + int workerCount = workers.length; + int bikeCount = bikes.length; + PriorityQueue priorityQueue = new PriorityQueue<>(); + for (int i = 0; i < workerCount; i++) { + for (int j = 0; j < bikeCount; j++) { + priorityQueue.add(new WorkerBikePair(manhattanDistance(workers[i], bikes[j]), i, j)); + } } - c = n1.workIdx - n2.workIdx; - return c != 0 ? c : n1.cycleIdx - n2.cycleIdx; - } - }); - for (int i = 0; i < workers.length; i++) { - for (int j = 0; j < bikes.length; j++) { - pq.add(new Node(getDist(workers[i], bikes[j]), i, j)); - } + Set bikeDone = new HashSet<>(); + int[] result = new int[workerCount]; + Arrays.fill(result, Integer.MIN_VALUE); + while (!priorityQueue.isEmpty()) { + WorkerBikePair removed = priorityQueue.remove(); + if (result[removed.workerIdx] == Integer.MIN_VALUE && !bikeDone.contains(removed.bikeIdx)) { + result[removed.workerIdx] = removed.bikeIdx; + bikeDone.add(removed.bikeIdx); + } + } + return result; } - int[] ans = new int[workers.length]; - boolean[] bikesTaken = new boolean[bikes.length]; - Arrays.fill(ans, Integer.MIN_VALUE); - while (!pq.isEmpty()) { - Node node = pq.remove(); - if (ans[node.workIdx] == Integer.MIN_VALUE && !bikesTaken[node.cycleIdx]) { - ans[node.workIdx] = node.cycleIdx; - bikesTaken[node.cycleIdx] = true; - } + + private record WorkerBikePair(int manhattanDistance, int workerIdx, int bikeIdx) implements Comparable { + @Override + public int compareTo(WorkerBikePair o) { + int c = manhattanDistance - o.manhattanDistance; + if (c != 0) { + return c; + } + c = workerIdx - o.workerIdx; + return c != 0 ? c : bikeIdx - o.bikeIdx; + } } - return ans; - } - - private int getDist(int[] p1, int[] p2) { - return Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]); - } -} -class Node { - int dist; - int workIdx; - int cycleIdx; - - public Node(int dist, int workIdx, int cycleIdx) { - this.dist = dist; - this.workIdx = workIdx; - this.cycleIdx = cycleIdx; - } + private static int manhattanDistance(int[] p1, int[] p2) { + return Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]); + } } From 02b74a08449884c1e9aa374fea854256b34bbe8a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 2 Nov 2023 11:48:18 +0530 Subject: [PATCH 1317/1640] Update Count Nodes Equal to Average of Subtree.java --- ...unt Nodes Equal to Average of Subtree.java | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/Medium/Count Nodes Equal to Average of Subtree.java b/Medium/Count Nodes Equal to Average of Subtree.java index a642fc31..5a6d2d75 100644 --- a/Medium/Count Nodes Equal to Average of Subtree.java +++ b/Medium/Count Nodes Equal to Average of Subtree.java @@ -14,24 +14,23 @@ * } */ class Solution { - public int averageOfSubtree(TreeNode root) { - int[] result = {0}; - helper(root, result); - return result[0]; - } - - private int[] helper(TreeNode root, int[] result) { - if (root == null) { - return new int[]{0, 0}; + public int averageOfSubtree(TreeNode root) { + int[] result = {0}; + recurse(root, result); + return result[0]; } - int[] left = helper(root.left, result); - int[] right = helper(root.right, result); - int sum = left[0] + right[0] + root.val; - int numOfNodes = left[1] + right[1] + 1; - int average = sum / numOfNodes; - if (root.val == average) { - result[0]++; + + private int[] recurse(TreeNode root, int[] result) { + if (root == null) { + return new int[]{0, 0}; + } + int[] left = recurse(root.left, result); + int[] right = recurse(root.right, result); + int sum = left[0] + right[0] + root.val; + int count = left[1] + right[1] + 1; + if (count != 0 && sum / count == root.val) { + result[0]++; + } + return new int[]{sum, count}; } - return new int[]{sum, numOfNodes}; - } } From c69da4fea5e461e849a4361d44a5cdc80e9d24e5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 3 Nov 2023 11:02:37 +0530 Subject: [PATCH 1318/1640] Update and rename Build an Array With Stack Operations.java to Build an Array With Stack Operations.java --- .../Build an Array With Stack Operations.java | 20 ---------------- .../Build an Array With Stack Operations.java | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 20 deletions(-) delete mode 100644 Easy/Build an Array With Stack Operations.java create mode 100644 Medium/Build an Array With Stack Operations.java diff --git a/Easy/Build an Array With Stack Operations.java b/Easy/Build an Array With Stack Operations.java deleted file mode 100644 index c3a57156..00000000 --- a/Easy/Build an Array With Stack Operations.java +++ /dev/null @@ -1,20 +0,0 @@ -class Solution { - public List buildArray(int[] target, int n) { - List ans = new ArrayList<>(); - final String PUSH = "Push"; - final String POP = "Pop"; - int idx = 0; - int curr = 1; - while (idx < target.length) { - ans.add(PUSH); - if (target[idx] == curr) { - idx++; - } - else { - ans.add(POP); - } - curr++; - } - return ans; - } -} diff --git a/Medium/Build an Array With Stack Operations.java b/Medium/Build an Array With Stack Operations.java new file mode 100644 index 00000000..f36177cd --- /dev/null +++ b/Medium/Build an Array With Stack Operations.java @@ -0,0 +1,23 @@ +class Solution { + + private static final String PUSH = "Push"; + private static final String POP = "Pop"; + + public List buildArray(int[] target, int n) { + int idx = 0; + List result = new ArrayList<>(); + for (int i = 1; i <= n; i++) { + if (target[idx] == i) { + idx++; + result.add(PUSH); + } else { + result.add(PUSH); + result.add(POP); + } + if (idx == target.length) { + break; + } + } + return result; + } +} From 08d5d21f043018b65b0d55daac6349464b930e2e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 Nov 2023 03:19:02 +0530 Subject: [PATCH 1319/1640] Update Last Moment Before All Ants Fall Out of a Plank.java --- ...nt Before All Ants Fall Out of a Plank.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Medium/Last Moment Before All Ants Fall Out of a Plank.java b/Medium/Last Moment Before All Ants Fall Out of a Plank.java index 45e59801..e061b5d3 100644 --- a/Medium/Last Moment Before All Ants Fall Out of a Plank.java +++ b/Medium/Last Moment Before All Ants Fall Out of a Plank.java @@ -1,12 +1,12 @@ class Solution { - public int getLastMoment(int n, int[] left, int[] right) { - int res = 0; - for (int ant : left) { - res = Math.max(res, ant); + public int getLastMoment(int n, int[] left, int[] right) { + int result = 0; + for (int num : left) { + result = Math.max(result, num); + } + for (int num : right) { + result = Math.max(result, n - num); + } + return result; } - for (int ant : right) { - res = Math.max(res, n - ant); - } - return res; - } } From bcc80bf2250a3f7fb145217ee8ed802e520e8ce2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Nov 2023 05:46:39 +0530 Subject: [PATCH 1320/1640] Update Seat Reservation Manager.java --- Medium/Seat Reservation Manager.java | 30 +++++++++++++--------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/Medium/Seat Reservation Manager.java b/Medium/Seat Reservation Manager.java index d8825a61..8a7e8edb 100644 --- a/Medium/Seat Reservation Manager.java +++ b/Medium/Seat Reservation Manager.java @@ -1,23 +1,21 @@ class SeatManager { - PriorityQueue pq; - int count; + private PriorityQueue seats; - public SeatManager(int n) { - pq = new PriorityQueue<>(); - count = 1; - } - - public int reserve() { - if (pq.size() == 0) { - return count++; + public SeatManager(int n) { + this.seats = new PriorityQueue<>(); + for (int i = 1; i <= n; i++) { + this.seats.add(i); + } + } + + public int reserve() { + return this.seats.poll(); + } + + public void unreserve(int seatNumber) { + this.seats.add(seatNumber); } - return pq.remove(); - } - - public void unreserve(int seatNumber) { - pq.add(seatNumber); - } } /** From e0b6989d09021e36d274925ae31919ca8f70640d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 8 Nov 2023 10:07:21 +0530 Subject: [PATCH 1321/1640] Update Find the Winner of an Array Game.java --- Medium/Find the Winner of an Array Game.java | 27 ++++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/Medium/Find the Winner of an Array Game.java b/Medium/Find the Winner of an Array Game.java index 0c7130f4..98932a1e 100644 --- a/Medium/Find the Winner of an Array Game.java +++ b/Medium/Find the Winner of an Array Game.java @@ -1,17 +1,16 @@ class Solution { - public int getWinner(int[] arr, int k) { - int currentElement = arr[0]; - int n = arr.length; - int currentWinCount = 0; - for (int i = 1; i < n; i++) { - if (arr[i] > currentElement) { - currentElement = arr[i]; - currentWinCount = 0; - } - if (++currentWinCount == k) { - break; - } + public int getWinner(int[] arr, int k) { + int curr = arr[0]; + int streak = 0; + for (int i = 1; i < arr.length; i++) { + if (curr < arr[i]) { + curr = arr[i]; + streak = 0; + } + if (++streak == k) { + break; + } + } + return curr; } - return currentElement; - } } From 704e7c9009d0a806530dbbb6a563f3a769cf69eb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 Nov 2023 06:27:23 +0530 Subject: [PATCH 1322/1640] Update Count Number of Homogenous Substrings.java --- ...Count Number of Homogenous Substrings.java | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Medium/Count Number of Homogenous Substrings.java b/Medium/Count Number of Homogenous Substrings.java index 64dd8610..4a543690 100644 --- a/Medium/Count Number of Homogenous Substrings.java +++ b/Medium/Count Number of Homogenous Substrings.java @@ -1,18 +1,18 @@ class Solution { - private final int MOD = 1000000007; - public int countHomogenous(String s) { - int count = 0; - int start = 0; - int end = 0; - int n = s.length(); - while (end < n) { - if (s.charAt(start) == s.charAt(end)) { - count = (count + (end - start + 1)) % MOD; - end++; - } else { - start++; - } + + private static final int MOD = 1_000_000_007; + + public int countHomogenous(String s) { + int result = 0; + int streak = 0; + for (int i = 0; i < s.length(); i++) { + if (i == 0 || s.charAt(i) == s.charAt(i - 1)) { + streak++; + } else { + streak = 1; + } + result = (result + streak) % MOD; + } + return result; } - return count; - } } From 0878cdcb6c23c7231b892eec6c24ba8b51186ccc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 10 Nov 2023 06:36:35 +0530 Subject: [PATCH 1323/1640] Update Restore the Array From Adjacent Pairs.java --- ...Restore the Array From Adjacent Pairs.java | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/Medium/Restore the Array From Adjacent Pairs.java b/Medium/Restore the Array From Adjacent Pairs.java index bbe2461c..041f727d 100644 --- a/Medium/Restore the Array From Adjacent Pairs.java +++ b/Medium/Restore the Array From Adjacent Pairs.java @@ -1,25 +1,31 @@ class Solution { - public int[] restoreArray(int[][] adjacentPairs) { - Map> map = new HashMap<>(); - for (int[] pair : adjacentPairs) { - map.computeIfAbsent(pair[0], k -> new ArrayList<>()).add(pair[1]); - map.computeIfAbsent(pair[1], k -> new ArrayList<>()).add(pair[0]); + public int[] restoreArray(int[][] adjacentPairs) { + int n = adjacentPairs.length + 1; + Map> map = new HashMap<>(); + for (int[] pair : adjacentPairs) { + map.computeIfAbsent(pair[0], k -> new ArrayList<>()).add(pair[1]); + map.computeIfAbsent(pair[1], k -> new ArrayList<>()).add(pair[0]); + } + Queue queue = new LinkedList<>(); + int firstElement = map.entrySet() + .stream() + .filter(entry -> entry.getValue().size() == 1) + .map(Map.Entry::getKey) + .findFirst() + .orElse(-1); + queue.add(firstElement); + Set set = new HashSet<>(); + int[] result = new int[n]; + int idx = 0; + while (!queue.isEmpty()) { + int removed = queue.remove(); + if (set.contains(removed)) { + continue; + } + result[idx++] = removed; + set.add(removed); + queue.addAll(map.get(removed)); + } + return result; } - int head = map.keySet().stream().filter(k -> map.get(k).size() == 1).findFirst().orElse(-1); - Set visited = new HashSet<>(); - int[] result = new int[map.size()]; - int idx = 0; - Queue queue = new LinkedList<>(); - queue.add(head); - while (!queue.isEmpty()) { - int removed = queue.remove(); - if (visited.contains(removed)) { - continue; - } - result[idx++] = removed; - visited.add(removed); - queue.addAll(map.get(removed)); - } - return result; - } } From 4bda99c789c57ba49d280c245e92bd9e8491010e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 10 Nov 2023 19:42:56 +0530 Subject: [PATCH 1324/1640] Create Find Champion I.java --- Easy/Find Champion I.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Find Champion I.java diff --git a/Easy/Find Champion I.java b/Easy/Find Champion I.java new file mode 100644 index 00000000..4728f452 --- /dev/null +++ b/Easy/Find Champion I.java @@ -0,0 +1,20 @@ +import java.util.Map.Entry; + +class Solution { + public int findChampion(int[][] grid) { + Map map = new HashMap<>(); + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + if (grid[i][j] == 1) { + map.put(i, map.getOrDefault(i, 0) + 1); + } + } + } + return map.entrySet() + .stream() + .filter(entry -> entry.getValue() == grid.length - 1) + .findFirst() + .map(Entry::getKey) + .orElse(-1); + } +} From f8c730eaa2d92aa3892fe312c732678043b99383 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 11 Nov 2023 07:19:09 +0530 Subject: [PATCH 1325/1640] Create Design Graph With Shortest Path Calculator.java --- ...n Graph With Shortest Path Calculator.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Hard/Design Graph With Shortest Path Calculator.java diff --git a/Hard/Design Graph With Shortest Path Calculator.java b/Hard/Design Graph With Shortest Path Calculator.java new file mode 100644 index 00000000..0b7fddf1 --- /dev/null +++ b/Hard/Design Graph With Shortest Path Calculator.java @@ -0,0 +1,43 @@ +class Graph { + + private final Map> graph; + + public Graph(int n, int[][] edges) { + this.graph = new HashMap<>(); + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(new Connection(edge[1], edge[2])); + } + } + + public void addEdge(int[] edge) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(new Connection(edge[1], edge[2])); + } + + public int shortestPath(int node1, int node2) { + PriorityQueue queue = new PriorityQueue<>(Comparator.comparingInt(a -> a[1])); + queue.add(new int[]{node1, 0}); + Set seen = new HashSet<>(); + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int node = removed[0]; + if (node == node2) { + return removed[1]; + } + if (graph.containsKey(node) && seen.add(node)) { + for (Connection connection : graph.getOrDefault(removed[0], new ArrayList<>())) { + queue.add(new int[]{connection.node, removed[1] + connection.cost}); + } + } + } + return -1; + } + + private record Connection(int node, int cost) { } +} + +/** + * Your Graph object will be instantiated and called as such: + * Graph obj = new Graph(n, edges); + * obj.addEdge(edge); + * int param_2 = obj.shortestPath(node1,node2); + */ From 61a865c37425617198cb1a4e91b0c3d7f9fa0dd9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Nov 2023 07:09:41 +0530 Subject: [PATCH 1326/1640] Create Bus Routes.java --- Hard/Bus Routes.java | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Hard/Bus Routes.java diff --git a/Hard/Bus Routes.java b/Hard/Bus Routes.java new file mode 100644 index 00000000..54c2762a --- /dev/null +++ b/Hard/Bus Routes.java @@ -0,0 +1,39 @@ +class Solution { + public int numBusesToDestination(int[][] routes, int source, int target) { + if (source == target) { + return 0; + } + Map> stopToBusMapping = new HashMap<>(); + for (int i = 0; i < routes.length; i++) { + for (int stop : routes[i]) { + stopToBusMapping.computeIfAbsent(stop, k -> new HashSet<>()).add(i); + } + } + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(); + for (int route : stopToBusMapping.get(source)) { + queue.add(route); + visited.add(route); + } + int buses = 1; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int removed = queue.remove(); + for (int stop : routes[removed]) { + if (stop == target) { + return buses; + } + for (int nextBus : stopToBusMapping.getOrDefault(stop, new HashSet<>())) { + if (!visited.contains(nextBus)) { + visited.add(nextBus); + queue.add(nextBus); + } + } + } + } + buses++; + } + return -1; + } +} From e330385ad3ecff0a0af968108b5e2f2c914188b6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 Nov 2023 09:37:03 +0530 Subject: [PATCH 1327/1640] Create High-Access Employees.java --- Medium/High-Access Employees.java | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Medium/High-Access Employees.java diff --git a/Medium/High-Access Employees.java b/Medium/High-Access Employees.java new file mode 100644 index 00000000..8c881fc8 --- /dev/null +++ b/Medium/High-Access Employees.java @@ -0,0 +1,43 @@ +class Solution { + public List findHighAccessEmployees(List> accessTimeEntries) { + Map> map = new HashMap<>(); + for (List entry : accessTimeEntries) { + String employee = entry.get(0); + String time = entry.get(1); + map.computeIfAbsent(employee, k -> new ArrayList<>()).add(TimeRecord.buildTimeRecord(time)); + } + List result = new ArrayList<>(); + for (String key : map.keySet()) { + List entries = map.get(key); + if (entries.size() < 3) { + continue; + } + Collections.sort(entries); + for (int i = 0; i < entries.size() - 2; i++) { + if (TimeRecord.areWithinSameHour(entries.get(i), entries.get(i + 2))) { + result.add(key); + break; + } + } + } + return result; + } + + private record TimeRecord(int totalMinutes) implements Comparable { + + public static TimeRecord buildTimeRecord(String entry) { + int hour = Integer.parseInt(entry.substring(0, 2)); + int min = Integer.parseInt(entry.substring(2)); + return new TimeRecord(hour * 60 + min); + } + + public static boolean areWithinSameHour(TimeRecord startTime, TimeRecord endTime) { + return endTime.totalMinutes - startTime.totalMinutes < 60; + } + + @Override + public int compareTo(TimeRecord o) { + return this.totalMinutes - o.totalMinutes; + } + } +} From 9e4fc67c04fb3ccdced7fd70f8666fdce7b2ef2b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Nov 2023 15:19:10 +0530 Subject: [PATCH 1328/1640] Update Minimum Amount of Time to Collect Garbage.java --- ...mum Amount of Time to Collect Garbage.java | 49 ++++++++----------- 1 file changed, 20 insertions(+), 29 deletions(-) diff --git a/Medium/Minimum Amount of Time to Collect Garbage.java b/Medium/Minimum Amount of Time to Collect Garbage.java index b0ac91ff..ace2125d 100644 --- a/Medium/Minimum Amount of Time to Collect Garbage.java +++ b/Medium/Minimum Amount of Time to Collect Garbage.java @@ -1,34 +1,25 @@ class Solution { - public int garbageCollection(String[] garbage, int[] travel) { - int[] lastIdx = {-1, -1, -1}; - Map garbageCount = new HashMap<>(); - for (int i = 0; i < garbage.length; i++) { - garbageCount.put(i, new int[3]); - for (char c : garbage[i].toCharArray()) { - if (c == 'M') { - lastIdx[0] = i; - garbageCount.get(i)[0]++; + public int garbageCollection(String[] garbage, int[] travel) { + Map lastIdx = new HashMap<>(); + for (int i = garbage.length - 1; i >= 0; i--) { + if (garbage[i].indexOf('M') != -1) { + lastIdx.putIfAbsent('M', i); + } + if (garbage[i].indexOf('G') != -1) { + lastIdx.putIfAbsent('G', i); + } + if (garbage[i].indexOf('P') != -1) { + lastIdx.putIfAbsent('P', i); + } } - if (c == 'P') { - lastIdx[1] = i; - garbageCount.get(i)[1]++; + int totalTime = 0; + for (int i = 0; i < garbage.length; i++) { + int travelTime = i == 0 ? 0 : travel[i - 1]; + totalTime += garbage[i].length(); + totalTime += lastIdx.getOrDefault('P', -1) >= i ? travelTime : 0; + totalTime += lastIdx.getOrDefault('M', -1) >= i ? travelTime : 0; + totalTime += lastIdx.getOrDefault('G', -1) >= i ? travelTime : 0; } - if (c == 'G') { - lastIdx[2] = i; - garbageCount.get(i)[2]++; - } - } - } - int time = 0; - for (int i = 0; i < 3; i++) { - for (int j = 0; j < garbage.length; j++) { - if (lastIdx[i] < j) { - break; - } - time += j == 0 ? 0 : travel[j - 1]; - time += garbageCount.get(j)[i]; - } + return totalTime; } - return time; - } } From 8914d77227edd07ce15f6ba127c62c56064b5df9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 21 Nov 2023 16:12:26 +0530 Subject: [PATCH 1329/1640] Create Make Three Strings Equal.java --- Easy/Make Three Strings Equal.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Make Three Strings Equal.java diff --git a/Easy/Make Three Strings Equal.java b/Easy/Make Three Strings Equal.java new file mode 100644 index 00000000..a1e7477f --- /dev/null +++ b/Easy/Make Three Strings Equal.java @@ -0,0 +1,13 @@ +class Solution { + public int findMinimumOperations(String s1, String s2, String s3) { + int idx = 0; + while (idx < s1.length() && idx < s2.length() && idx < s3.length() && + s1.charAt(idx) == s2.charAt(idx) && s1.charAt(idx) == s3.charAt(idx)) { + idx++; + } + if (idx == 0) { + return -1; + } + return s1.length() + s2.length() + s3.length() - 3 * idx; + } +} From 25c398f7c1ed198fcc31255e01f170c7122c60a8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Nov 2023 12:01:35 -0800 Subject: [PATCH 1330/1640] Create Find Words Containing Character.java --- Easy/Find Words Containing Character.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Find Words Containing Character.java diff --git a/Easy/Find Words Containing Character.java b/Easy/Find Words Containing Character.java new file mode 100644 index 00000000..ba268c41 --- /dev/null +++ b/Easy/Find Words Containing Character.java @@ -0,0 +1,8 @@ +class Solution { + public List findWordsContaining(String[] words, char x) { + return IntStream.range(0, words.length) + .filter(i -> words[i].indexOf(x) != -1) + .boxed() + .collect(Collectors.toList()); + } +} From 36dc3534b788bf76b2737914790b9ee9b39d1713 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 27 Nov 2023 03:42:23 -0800 Subject: [PATCH 1331/1640] Create Matrix Similarity After Cyclic Shifts.java --- Easy/Matrix Similarity After Cyclic Shifts.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Matrix Similarity After Cyclic Shifts.java diff --git a/Easy/Matrix Similarity After Cyclic Shifts.java b/Easy/Matrix Similarity After Cyclic Shifts.java new file mode 100644 index 00000000..624bcf08 --- /dev/null +++ b/Easy/Matrix Similarity After Cyclic Shifts.java @@ -0,0 +1,17 @@ +class Solution { + public boolean areSimilar(int[][] mat, int k) { + for (int j = 0; j < mat.length; j++) { + if (j % 2 != 0) { + continue; + } + int[] row = mat[j]; + int n = row.length; + for (int i = 0; i < n; i++) { + if (row[i] != row[(i + k) % n]) { + return false; + } + } + } + return true; + } +} From ed44c4e4543e05065d3f0bde106af011d5a05ea2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 1 Dec 2023 14:44:04 -0800 Subject: [PATCH 1332/1640] Update Check If Two String Arrays are Equivalent.java --- ...k If Two String Arrays are Equivalent.java | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/Easy/Check If Two String Arrays are Equivalent.java b/Easy/Check If Two String Arrays are Equivalent.java index 70a73e1a..880301c2 100644 --- a/Easy/Check If Two String Arrays are Equivalent.java +++ b/Easy/Check If Two String Arrays are Equivalent.java @@ -1,27 +1,24 @@ class Solution { - public boolean arrayStringsAreEqual(String[] word1, String[] word2) { - int wordIdxOne = 0; - int wordIdxTwo = 0; - int idxOne = 0; - int idxTwo = 0; - while (wordIdxOne < word1.length && wordIdxTwo < word2.length) { - if (idxOne == word1[wordIdxOne].length() || idxTwo == word2[wordIdxTwo].length()) { - if (idxOne == word1[wordIdxOne].length()) { - wordIdxOne++; - idxOne = 0; + public boolean arrayStringsAreEqual(String[] word1, String[] word2) { + int idxOne = 0; + int idxTwo = 0; + int wordIdxOne = 0; + int wordIdxTwo = 0; + while (idxOne < word1.length && idxTwo < word2.length) { + if (word1[idxOne].charAt(wordIdxOne) != word2[idxTwo].charAt(wordIdxTwo)) { + return false; + } + wordIdxOne++; + wordIdxTwo++; + if (wordIdxOne == word1[idxOne].length()) { + wordIdxOne = 0; + idxOne++; + } + if (wordIdxTwo == word2[idxTwo].length()) { + wordIdxTwo = 0; + idxTwo++; + } } - if (idxTwo == word2[wordIdxTwo].length()) { - wordIdxTwo++; - idxTwo = 0; - } - } else { - if (word1[wordIdxOne].charAt(idxOne) != word2[wordIdxTwo].charAt(idxTwo)) { - return false; - } - idxOne++; - idxTwo++; - } + return idxOne == word1.length && idxTwo == word2.length; } - return wordIdxOne == word1.length && wordIdxTwo == word2.length; - } } From 25e2990898b09abcbcaf3dd3ba7e2a40d9cac394 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Dec 2023 11:08:00 -0800 Subject: [PATCH 1333/1640] Update Find Words That Can Be Formed by Characters.java --- ...ords That Can Be Formed by Characters.java | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/Easy/Find Words That Can Be Formed by Characters.java b/Easy/Find Words That Can Be Formed by Characters.java index 1dce1552..23550740 100644 --- a/Easy/Find Words That Can Be Formed by Characters.java +++ b/Easy/Find Words That Can Be Formed by Characters.java @@ -1,27 +1,24 @@ class Solution { - public int countCharacters(String[] words, String chars) { - Map frequency = getFrequencyMap(chars); - return Arrays.stream(words) - .filter(word -> canBeFormed(word, frequency)) - .map(word -> word.length()) - .reduce(0, Integer::sum); - } - - private boolean canBeFormed(String word, Map frequency) { - Map wordFrequency = getFrequencyMap(word); - for (Character key : wordFrequency.keySet()) { - if (frequency.getOrDefault(key, 0) < wordFrequency.get(key)) { - return false; - } + public int countCharacters(String[] words, String chars) { + Map targetMap = buildFrequencyMap(chars); + return Arrays.stream(words) + .filter(word -> doesIntersect(buildFrequencyMap(word), targetMap)) + .mapToInt(String::length) + .sum(); } - return true; - } - - private Map getFrequencyMap(String s) { - Map frequency = new HashMap<>(); - for (char c : s.toCharArray()) { - frequency.put(c, frequency.getOrDefault(c, 0) + 1); + + private static boolean doesIntersect(Map currMap, Map targetMap) { + for (Character key : currMap.keySet()) { + if (targetMap.getOrDefault(key, 0L) < currMap.get(key)) { + return false; + } + } + return true; + } + + private static Map buildFrequencyMap(String s) { + return s.chars() + .mapToObj(c -> (char) c) + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); } - return frequency; - } } From 9c60e43d7b6899b24275415833d32bb18997e1a4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Dec 2023 08:30:56 -0800 Subject: [PATCH 1334/1640] Create Find the Peaks.java --- Easy/Find the Peaks.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Find the Peaks.java diff --git a/Easy/Find the Peaks.java b/Easy/Find the Peaks.java new file mode 100644 index 00000000..f6120cd5 --- /dev/null +++ b/Easy/Find the Peaks.java @@ -0,0 +1,11 @@ +class Solution { + public List findPeaks(int[] mountain) { + List result = new ArrayList<>(); + for (int i = 1; i < mountain.length - 1; i++) { + if (mountain[i] > mountain[i - 1] && mountain[i] > mountain[i + 1]) { + result.add(i); + } + } + return result; + } +} From f52aafa642c12afd1446f7aa5e3626af9138779c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Dec 2023 11:56:24 -0800 Subject: [PATCH 1335/1640] Create Count Complete Substrings.java --- Medium/Count Complete Substrings.java | 54 +++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Medium/Count Complete Substrings.java diff --git a/Medium/Count Complete Substrings.java b/Medium/Count Complete Substrings.java new file mode 100644 index 00000000..995cf4b0 --- /dev/null +++ b/Medium/Count Complete Substrings.java @@ -0,0 +1,54 @@ +class Solution { + public int countCompleteSubstrings(String word, int k) { + int count = 0; + StringBuilder sb = new StringBuilder(); + int n = word.length(); + for (int i = 0; i < n; i++) { + sb.append(word.charAt(i)); + if (i < n - 1 && Math.abs(word.charAt(i) - word.charAt(i + 1)) > 2) { + count += calculateSubstrings(sb.toString(), k); + sb.setLength(0); + } + } + count += calculateSubstrings(sb.toString(), k); + return count; + } + + private int calculateSubstrings(String s, int k) { + int count = 0; + int n = s.length(); + for (int i = 1; i <= 26; i++) { + int len = k * i; + int[] freq = new int[26]; + if (len > n) { + break; + } + for (int j = 0; j < len; j++) { + freq[s.charAt(j) - 'a']++; + } + if (check(freq, i, k)) { + count++; + } + for (int j = len; j < n; j++) { + freq[s.charAt(j - len) - 'a']--; + freq[s.charAt(j) - 'a']++; + if (check(freq, i, k)) { + count++; + } + } + } + return count; + } + + private boolean check(int[] freq, int i, int k) { + for (int value : freq) { + if (value == 0) { + continue; + } + if (value != k) { + return false; + } + } + return true; + } +} From ee241fbceafe5625316b337b7b5ec6dc7e72f5bb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 8 Dec 2023 10:18:30 -0800 Subject: [PATCH 1336/1640] Update Maximum Average Subtree.java --- Medium/Maximum Average Subtree.java | 44 ++++++++++++++++------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/Medium/Maximum Average Subtree.java b/Medium/Maximum Average Subtree.java index 97c54cf6..873f4f01 100644 --- a/Medium/Maximum Average Subtree.java +++ b/Medium/Maximum Average Subtree.java @@ -4,28 +4,32 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - double maxAvg; - public double maximumAverageSubtree(TreeNode root) { - maxAvg = 0.0; - helper(root); - return maxAvg; - } - - private int[] helper(TreeNode root) { - int[] data = new int[2]; - if (root == null) { - return data; + public double maximumAverageSubtree(TreeNode root) { + double[] result = {0.0}; + traverse(root, result); + return result[0]; + } + + private double[] traverse(TreeNode root, double[] result) { + if (root == null) { + return new double[]{0.0, 0.0}; + } + double[] leftValues = traverse(root.left, result); + double[] rightValues = traverse(root.right, result); + double sum = root.val + leftValues[0] + rightValues[0]; + double count = 1 + leftValues[1] + rightValues[1]; + double avg = sum / count; + result[0] = Math.max(result[0], avg); + return new double[]{sum, count}; } - int[] dataLeft = helper(root.left); - int[] dataRight = helper(root.right); - data[0] += root.val + dataLeft[0] + dataRight[0]; - data[1] += 1 + dataLeft[1] + dataRight[1]; - double avg = ((double) data[0]) / data[1]; - maxAvg = Math.max(maxAvg, avg); - return data; - } } From 36bbae100bd2b067bb375ccd1aab62de83b2c681 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 10 Dec 2023 11:11:31 -0800 Subject: [PATCH 1337/1640] Create Find Common Elements Between Two Arrays.java --- ...nd Common Elements Between Two Arrays.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Easy/Find Common Elements Between Two Arrays.java diff --git a/Easy/Find Common Elements Between Two Arrays.java b/Easy/Find Common Elements Between Two Arrays.java new file mode 100644 index 00000000..4a6041ba --- /dev/null +++ b/Easy/Find Common Elements Between Two Arrays.java @@ -0,0 +1,26 @@ +class Solution { + public int[] findIntersectionValues(int[] nums1, int[] nums2) { + Map map1 = buildFrequencyMap(nums1); + Map map2 = buildFrequencyMap(nums2); + int[] result = new int[2]; + for (Integer key : map1.keySet()) { + if (map2.containsKey(key)) { + result[0] += map1.get(key); + } + } + for (Integer key : map2.keySet()) { + if (map1.containsKey(key)) { + result[1] += map2.get(key); + } + } + return result; + } + + private static Map buildFrequencyMap(int[] nums) { + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + return map; + } +} From 4a2ba34f2c830c227a65736e87e6b4a5b76e58a6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 10 Dec 2023 11:15:13 -0800 Subject: [PATCH 1338/1640] Create Count Tested Devices After Test Operations.java --- .../Count Tested Devices After Test Operations.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Count Tested Devices After Test Operations.java diff --git a/Easy/Count Tested Devices After Test Operations.java b/Easy/Count Tested Devices After Test Operations.java new file mode 100644 index 00000000..1f6cdb0f --- /dev/null +++ b/Easy/Count Tested Devices After Test Operations.java @@ -0,0 +1,13 @@ +class Solution { + public int countTestedDevices(int[] batteryPercentages) { + int count = 0; + int diff = 0; + for (int batteryPercentage : batteryPercentages) { + if (Math.max(0, batteryPercentage - diff) > 0) { + count++; + diff++; + } + } + return count; + } +} From 9187cd95bed0cb1601d31b9a862e70b4f77ab5be Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Dec 2023 12:26:58 -0800 Subject: [PATCH 1339/1640] Create Remove Adjacent Almost-Equal Characters.java --- .../Remove Adjacent Almost-Equal Characters.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Remove Adjacent Almost-Equal Characters.java diff --git a/Medium/Remove Adjacent Almost-Equal Characters.java b/Medium/Remove Adjacent Almost-Equal Characters.java new file mode 100644 index 00000000..46bdf2ab --- /dev/null +++ b/Medium/Remove Adjacent Almost-Equal Characters.java @@ -0,0 +1,14 @@ +class Solution { + public int removeAlmostEqualCharacters(String word) { + int count = 0; + for (int i = 0; i < word.length() - 1; i++) { + char curr = word.charAt(i); + char next = word.charAt(i + 1); + if (Math.abs(curr - next) <= 1) { + count++; + i++; + } + } + return count; + } +} From 1355423f65b4d3b6e4aa5ad40ecb660d4b0ecb93 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 13 Dec 2023 17:26:24 -0800 Subject: [PATCH 1340/1640] Create Difference Between Ones and Zeros in Row and Column.java --- ...ween Ones and Zeros in Row and Column.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Difference Between Ones and Zeros in Row and Column.java diff --git a/Medium/Difference Between Ones and Zeros in Row and Column.java b/Medium/Difference Between Ones and Zeros in Row and Column.java new file mode 100644 index 00000000..641b0b38 --- /dev/null +++ b/Medium/Difference Between Ones and Zeros in Row and Column.java @@ -0,0 +1,23 @@ +class Solution { + public int[][] onesMinusZeros(int[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + int[][] rowCount = new int[rows][2]; + int[][] colCount = new int[cols][2]; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + rowCount[i][0] += grid[i][j] == 1 ? 1 : 0; + rowCount[i][1] += grid[i][j] != 1 ? 1 : 0; + colCount[j][0] += grid[i][j] == 1 ? 1 : 0; + colCount[j][1] += grid[i][j] != 1 ? 1 : 0; + } + } + int[][] result = new int[rows][cols]; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + result[i][j] = rowCount[i][0] + colCount[j][0] - rowCount[i][1] - colCount[j][1]; + } + } + return result; + } +} From 02ccf71e0e466866b7e4d088332de2c7f4ecab03 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Dec 2023 07:39:12 -0800 Subject: [PATCH 1341/1640] Create Double Modular Exponentiation.java --- Medium/Double Modular Exponentiation.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Double Modular Exponentiation.java diff --git a/Medium/Double Modular Exponentiation.java b/Medium/Double Modular Exponentiation.java new file mode 100644 index 00000000..6dada495 --- /dev/null +++ b/Medium/Double Modular Exponentiation.java @@ -0,0 +1,23 @@ +class Solution { + public List getGoodIndices(int[][] variables, int target) { + List result = new ArrayList<>(); + for (int i = 0; i < variables.length; i++) { + int a = variables[i][0]; + int b = variables[i][1]; + int c = variables[i][2]; + int m = variables[i][3]; + int base = 1; + for (int j = 0; j < b; j++) { + base = (base * a) % 10; + } + int value = 1; + for (int j = 0; j < c; j++) { + value = (value * base) % m; + } + if (value == target) { + result.add(i); + } + } + return result; + } +} From 847953331f0961ef8e7ba965f170bf78443f66c8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Dec 2023 17:53:24 -0800 Subject: [PATCH 1342/1640] Update Destination City.java --- Easy/Destination City.java | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/Easy/Destination City.java b/Easy/Destination City.java index c9f08cbc..f6e330ab 100644 --- a/Easy/Destination City.java +++ b/Easy/Destination City.java @@ -1,17 +1,12 @@ class Solution { - public String destCity(List> paths) { - Set outgoingPathCities = new HashSet<>(); - Set cities = new HashSet<>(); - for (List path : paths) { - outgoingPathCities.add(path.get(0)); - cities.add(path.get(0)); - cities.add(path.get(1)); + public String destCity(List> paths) { + Set cities = new HashSet<>(); + Set outgoingCities = new HashSet<>(); + for (List path : paths) { + cities.addAll(path); + outgoingCities.add(path.get(0)); + } + cities.removeAll(outgoingCities); + return cities.iterator().next(); } - for (String city : cities) { - if (!outgoingPathCities.contains(city)) { - return city; - } - } - return ""; - } } From a144dfd7beed7b924afcbaa04dd00742c93ad710 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Dec 2023 08:21:20 -0800 Subject: [PATCH 1343/1640] Create Design a Food Rating System.java --- Medium/Design a Food Rating System.java | 53 +++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Medium/Design a Food Rating System.java diff --git a/Medium/Design a Food Rating System.java b/Medium/Design a Food Rating System.java new file mode 100644 index 00000000..71c55477 --- /dev/null +++ b/Medium/Design a Food Rating System.java @@ -0,0 +1,53 @@ +class FoodRatings { + + private final Map foodToRating; + + private final Map foodToCuisine; + + private final Map> cuisineToFood; + + public FoodRatings(String[] foods, String[] cuisines, int[] ratings) { + this.foodToRating = new HashMap<>(); + this.foodToCuisine = new HashMap<>(); + this.cuisineToFood = new HashMap<>(); + for (int i = 0; i < foods.length; i++) { + String food = foods[i]; + String cuisine = cuisines[i]; + int rating = ratings[i]; + foodToRating.put(food, rating); + foodToCuisine.put(food, cuisine); + cuisineToFood.computeIfAbsent(cuisine, k -> new PriorityQueue<>()).add(new Food(food, rating)); + } + } + + public void changeRating(String food, int newRating) { + this.foodToRating.put(food, newRating); + String cuisine = foodToCuisine.get(food); + cuisineToFood.get(cuisine).add(new Food(food, newRating)); + } + + public String highestRated(String cuisine) { + Food highestRatedFood = cuisineToFood.get(cuisine).peek(); + while (foodToRating.get(highestRatedFood.name) != highestRatedFood.rating) { + cuisineToFood.get(cuisine).poll(); + highestRatedFood = cuisineToFood.get(cuisine).peek(); + } + return highestRatedFood.name; + } + + private record Food(String name, int rating) implements Comparable { + @Override + public int compareTo(Food o) { + int c = o.rating - rating; + return c == 0 ? name.compareTo(o.name) : c; + } + } +} + + +/** + * Your FoodRatings object will be instantiated and called as such: + * FoodRatings obj = new FoodRatings(foods, cuisines, ratings); + * obj.changeRating(food,newRating); + * String param_2 = obj.highestRated(cuisine); + */ From 6a5b18f6201ffcd24d488c9fb6018381fc93d771 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Dec 2023 11:44:36 -0800 Subject: [PATCH 1344/1640] Create Find Missing and Repeated Values.java --- Easy/Find Missing and Repeated Values.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Easy/Find Missing and Repeated Values.java diff --git a/Easy/Find Missing and Repeated Values.java b/Easy/Find Missing and Repeated Values.java new file mode 100644 index 00000000..52cf256e --- /dev/null +++ b/Easy/Find Missing and Repeated Values.java @@ -0,0 +1,21 @@ +class Solution { + public int[] findMissingAndRepeatedValues(int[][] grid) { + int n = grid.length; + int[] frequency = new int[n * n + 1]; + for (int[] row : grid) { + for (int num : row) { + frequency[num]++; + } + } + int[] result = new int[2]; + for (int i = 1; i <= n * n; i++) { + if (frequency[i] == 0) { + result[1] = i; + } + if (frequency[i] == 2) { + result[0] = i; + } + } + return result; + } +} From 9f0730eb747f6e3d8cc383a009529f3b8f1a2a97 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 18 Dec 2023 09:32:47 -0800 Subject: [PATCH 1345/1640] Create Divide Array Into Arrays With Max Difference.java --- ...ide Array Into Arrays With Max Difference.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Divide Array Into Arrays With Max Difference.java diff --git a/Medium/Divide Array Into Arrays With Max Difference.java b/Medium/Divide Array Into Arrays With Max Difference.java new file mode 100644 index 00000000..77959768 --- /dev/null +++ b/Medium/Divide Array Into Arrays With Max Difference.java @@ -0,0 +1,15 @@ +class Solution { + public int[][] divideArray(int[] nums, int k) { + Arrays.sort(nums); + int n = nums.length; + int[][] result = new int[n / 3][3]; + int idx = 0; + for (int i = 2; i < nums.length; i += 3) { + if (nums[i] - nums[i - 2] > k) { + return new int[][]{}; + } + result[idx++] = new int[]{nums[i - 2], nums[i - 1], nums[i]}; + } + return result; + } +} From 3b43dac141a1cc49ef215ebedbb158c93784d8eb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 19 Dec 2023 07:36:03 -0800 Subject: [PATCH 1346/1640] Update Image Smoother.java --- Easy/Image Smoother.java | 64 +++++++++++++--------------------------- 1 file changed, 21 insertions(+), 43 deletions(-) diff --git a/Easy/Image Smoother.java b/Easy/Image Smoother.java index 9f0d68f0..ede06daf 100644 --- a/Easy/Image Smoother.java +++ b/Easy/Image Smoother.java @@ -1,49 +1,27 @@ class Solution { - public int[][] imageSmoother(int[][] M) { - - int[][] res = new int[M.length][M[0].length]; - for (int i=0;i= 0) { - count++; - sum += M[i][j-1]; - } - if(j+1 < M[0].length) { - count++; - sum += M[i][j+1]; - } - if(i-1 >= 0) { - count++; - sum += M[i-1][j]; - } - if(i+1 < M.length) { - count++; - sum += M[i+1][j]; - } - if(i+1 < M.length && j+1 < M[0].length) { - count++; - sum += M[i+1][j+1]; - } - if(i+1 < M.length && j-1 >= 0) { - count++; - sum += M[i+1][j-1]; - } - if(i-1 >= 0 && j-1 >= 0) { - count++; - sum += M[i-1][j-1]; - } - if(i-1 >= 0 && j+1 < M[0].length) { - count++; - sum += M[i-1][j+1]; - } - - res[i][j] = (int)Math.floor(sum/count); + for (int[] dir : DIRS) { + int row = i + dir[0]; + int col = j + dir[1]; + if (row >= 0 && row < rows && col >= 0 && col < cols) { + sum += img[row][col]; + count++; + } + } + double smoothImage = sum / count; + result[i][j] = (int) smoothImage; } } - - return res; + return result; } } From 8f41cdff81fd1d5b35ebe3867a8ffb3e605e0814 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 21 Dec 2023 07:31:40 -0800 Subject: [PATCH 1347/1640] Create Widest Vertical Area Between Two Points Containing No Points.java --- ... Area Between Two Points Containing No Points.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Widest Vertical Area Between Two Points Containing No Points.java diff --git a/Medium/Widest Vertical Area Between Two Points Containing No Points.java b/Medium/Widest Vertical Area Between Two Points Containing No Points.java new file mode 100644 index 00000000..d2e07d21 --- /dev/null +++ b/Medium/Widest Vertical Area Between Two Points Containing No Points.java @@ -0,0 +1,11 @@ +class Solution { + public int maxWidthOfVerticalArea(int[][] points) { + Arrays.sort(points, (a, b) -> a[0] - b[0]); + int maxWidth = 0; + for (int i = 1; i < points.length; i++) { + int width = points[i][0] - points[i - 1][0]; + maxWidth = Math.max(maxWidth, width); + } + return maxWidth; + } +} From 6e84385d2034cfc65946e25bb5d7a5b2151b7644 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Dec 2023 08:10:18 -0800 Subject: [PATCH 1348/1640] Create Maximum Score After Splitting a String.java --- .../Maximum Score After Splitting a String.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Maximum Score After Splitting a String.java diff --git a/Easy/Maximum Score After Splitting a String.java b/Easy/Maximum Score After Splitting a String.java new file mode 100644 index 00000000..60649ebf --- /dev/null +++ b/Easy/Maximum Score After Splitting a String.java @@ -0,0 +1,17 @@ +class Solution { + public int maxScore(String s) { + int n = s.length(); + int ones = 0; + for (int i = 0; i < n; i++) { + ones += s.charAt(i) == '1' ? 1 : 0; + } + int score = 0; + int zeros = 0; + for (int i = 0; i < n - 1; i++) { + ones -= s.charAt(i) == '1' ? 1 : 0; + zeros += s.charAt(i) == '0' ? 1 : 0; + score = Math.max(score, zeros + ones); + } + return score; + } +} From e8a9a698819cd069512fd6523f6cffe85142344f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Dec 2023 12:26:39 -0800 Subject: [PATCH 1349/1640] Update Longest Substring with At Most Two Distinct Characters.java --- ... with At Most Two Distinct Characters.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Medium/Longest Substring with At Most Two Distinct Characters.java b/Medium/Longest Substring with At Most Two Distinct Characters.java index 2af3a613..04f60a83 100644 --- a/Medium/Longest Substring with At Most Two Distinct Characters.java +++ b/Medium/Longest Substring with At Most Two Distinct Characters.java @@ -1,22 +1,22 @@ class Solution { - public int lengthOfLongestSubstringTwoDistinct(String s) { - Map map = new HashMap<>(); - int startIdx = 0; - int endIdx = 0; - int n = s.length(); - int maxLength = 0; - while (endIdx < n) { - map.put(s.charAt(endIdx), map.getOrDefault(s.charAt(endIdx), 0) + 1); - while (startIdx < endIdx && map.size() > 2) { - map.put(s.charAt(startIdx), map.getOrDefault(s.charAt(startIdx), 0) - 1); - if (map.get(s.charAt(startIdx)) <= 0) { - map.remove(s.charAt(startIdx)); + public int lengthOfLongestSubstringTwoDistinct(String s) { + int max = 0; + int start = 0; + int end = 0; + int n = s.length(); + Map map = new HashMap<>(); + while (end < n) { + map.put(s.charAt(end), map.getOrDefault(s.charAt(end), 0) + 1); + end++; + while (start < end && map.size() > 2) { + map.put(s.charAt(start), map.getOrDefault(s.charAt(start), 0) - 1); + if (map.get(s.charAt(start)) == 0) { + map.remove(s.charAt(start)); + } + start++; + } + max = Math.max(max, end - start); } - startIdx++; - } - endIdx++; - maxLength = Math.max(endIdx - startIdx, maxLength); + return max; } - return maxLength; - } } From feecd250c72dac3916b910fe417c20a596d113b3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Dec 2023 08:40:33 -0800 Subject: [PATCH 1350/1640] Update Path Crossing.java --- Easy/Path Crossing.java | 44 ++++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/Easy/Path Crossing.java b/Easy/Path Crossing.java index 32b241c3..e3f7d9a9 100644 --- a/Easy/Path Crossing.java +++ b/Easy/Path Crossing.java @@ -1,21 +1,29 @@ class Solution { - int[][] dirs = {{0, 1}, {0, -1}, {-1, 0}, {1, 0}}; - public boolean isPathCrossing(String path) { - Set set = new HashSet<>(); - int currX = 0; - int currY = 0; - String dirSymbol = "NSEW"; - set.add(currX + "|" + currY); - for (char c : path.toCharArray()) { - int dirIdx = dirSymbol.indexOf(c); - currX += dirs[dirIdx][0]; - currY += dirs[dirIdx][1]; - String hash = currX + "|" + currY; - if (set.contains(hash)) { - return true; - } - set.add(hash); + public boolean isPathCrossing(String path) { + Set visited = new HashSet<>(); + visited.add("0|0"); + int x = 0; + int y = 0; + for (Character step : path.toCharArray()) { + switch (step) { + case 'N': + x++; + break; + case 'S': + x--; + break; + case 'E': + y--; + break; + case 'W': + y++; + break; + } + String key = x + "|" + y; + if (!visited.add(key)) { + return true; + } + } + return false; } - return false; - } } From 85f5352083dcee5950f3ad52194876b7a7464c23 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 24 Dec 2023 07:20:23 -0800 Subject: [PATCH 1351/1640] Update Minimum Changes To Make Alternating Binary String.java --- ...ges To Make Alternating Binary String.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/Easy/Minimum Changes To Make Alternating Binary String.java b/Easy/Minimum Changes To Make Alternating Binary String.java index 539d9a42..95f9aaae 100644 --- a/Easy/Minimum Changes To Make Alternating Binary String.java +++ b/Easy/Minimum Changes To Make Alternating Binary String.java @@ -1,11 +1,16 @@ class Solution { - public int minOperations(String s) { - int numOfChanges = 0; - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) - '0' != i % 2) { - numOfChanges++; - } + public int minOperations(String s) { + int startZero = 0; + int startOne = 0; + for (int i = 0; i < s.length(); i++) { + if (i % 2 == 0) { + startOne += s.charAt(i) == '0' ? 1 : 0; + startZero += s.charAt(i) == '1' ? 1 : 0; + } else { + startOne += s.charAt(i) == '1' ? 1 : 0; + startZero += s.charAt(i) == '0' ? 1 : 0; + } + } + return Math.min(startZero, startOne); } - return Math.min(numOfChanges, s.length() - numOfChanges); - } } From 3552e0f598b987be4f311c1e536cbc072108a122 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Dec 2023 07:43:32 -0800 Subject: [PATCH 1352/1640] Update Number of Dice Rolls With Target Sum.java --- .../Number of Dice Rolls With Target Sum.java | 50 ++++++++++--------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/Medium/Number of Dice Rolls With Target Sum.java b/Medium/Number of Dice Rolls With Target Sum.java index 6e600168..e192518a 100644 --- a/Medium/Number of Dice Rolls With Target Sum.java +++ b/Medium/Number of Dice Rolls With Target Sum.java @@ -1,27 +1,31 @@ class Solution { - Map map = new HashMap<>(); - final int MODULO = 1000000007; - public int numRollsToTarget(int d, int f, int target) { - if (d == 0 && target == 0) { - return 1; + + private static final int MOD = 1000_000_007; + + public int numRollsToTarget(int n, int k, int target) { + Map map = new HashMap<>(); + return helper(n, k, target, map); } - if (d == 0 || target == 0) { - return 0; + + private int helper(int n, int k, int target, Map map) { + if (n == 0 && target == 0) { + return 1; + } + if (n == 0 || target == 0) { + return 0; + } + int key = n * 1000 + target; + if (map.containsKey(key)) { + return map.get(key); + } + int result = 0; + for (int i = 1; i <= k; i++) { + if (target < i) { + break; + } + result = (result + helper(n - 1, k, target - i, map)) % MOD; + } + map.put(key, result); + return result; } - String key = d + "|" + target; - if (map.containsKey(key)) { - return map.get(key); - } - int res = 0; - for (int i = 1; i <= f; i++) { - if (target >= i) { - res = (res + numRollsToTarget(d - 1, f, target - i)) % MODULO; - } - else { - break; - } - } - map.put(key, res); - return map.get(key); - } } From 7891aaa65276452f74a335c3095da57d4362f84c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Dec 2023 07:47:30 -0800 Subject: [PATCH 1353/1640] Create Minimum Number Game.java --- Easy/Minimum Number Game.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Minimum Number Game.java diff --git a/Easy/Minimum Number Game.java b/Easy/Minimum Number Game.java new file mode 100644 index 00000000..a3377cb7 --- /dev/null +++ b/Easy/Minimum Number Game.java @@ -0,0 +1,11 @@ +class Solution { + public int[] numberGame(int[] nums) { + int[] result = new int[nums.length]; + Arrays.sort(nums); + for (int i = 0; i < nums.length; i += 2) { + result[i] = nums[i + 1]; + result[i + 1] = nums[i]; + } + return result; + } +} From c4505bfb84748231912291819dd8eead17dfb16b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Dec 2023 17:28:19 -0800 Subject: [PATCH 1354/1640] Update Minimum Time to Make Rope Colorful.java --- .../Minimum Time to Make Rope Colorful.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/Medium/Minimum Time to Make Rope Colorful.java b/Medium/Minimum Time to Make Rope Colorful.java index 97cc34e1..3fdc7e26 100644 --- a/Medium/Minimum Time to Make Rope Colorful.java +++ b/Medium/Minimum Time to Make Rope Colorful.java @@ -1,19 +1,19 @@ class Solution { - public int minCost(String colors, int[] neededTime) { - int totalTime = 0; - int left = 0; - int right = 0; - while (right < colors.length()) { - int currTotal = 0; - int currMax = 0; - while (left < neededTime.length && colors.charAt(right) == colors.charAt(left)) { - currTotal += neededTime[left]; - currMax = Math.max(currMax, neededTime[left]); - left++; - } - totalTime += currTotal - currMax; - right = left; + public int minCost(String colors, int[] neededTime) { + Stack stack = new Stack<>(); + int cost = 0; + for (int i = 0; i < colors.length(); i++) { + if (stack.isEmpty() || colors.charAt(i) != colors.charAt(stack.peek())) { + stack.push(i); + continue; + } + if (neededTime[i] > neededTime[stack.peek()]) { + cost += neededTime[stack.pop()]; + stack.push(i); + } else { + cost += neededTime[i]; + } + } + return cost; } - return totalTime; - } } From ddcb14efbe1a54349dca61da5587fdcf283d2186 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Dec 2023 10:18:05 -0800 Subject: [PATCH 1355/1640] Update String Compression II.java --- Hard/String Compression II.java | 115 +++++++++++++++----------------- 1 file changed, 52 insertions(+), 63 deletions(-) diff --git a/Hard/String Compression II.java b/Hard/String Compression II.java index d2f3d371..ac420adf 100644 --- a/Hard/String Compression II.java +++ b/Hard/String Compression II.java @@ -1,69 +1,58 @@ class Solution { - - /** - * First dimension : Current index - * Second dimension : Amount of available deletions - * Third dimension : Index of previous character - * Fourth dimension : Consecutive count of previous character - */ - private static int[][][][] dp = new int[100][101][100][26]; - - public int getLengthOfOptimalCompression(String s, int k) { - int n = s.length(); - for(int i = 0; i < n; i++) { - for(int j = 0; j <= k; j++) { - for(int z = 0; z < n; z++) { - for(int l = 0; l < 26; l++) { - dp[i][j][z][l]=-1; - } + + private static int[][][][] dp = new int[100][101][100][26]; + + public int getLengthOfOptimalCompression(String s, int k) { + int n = s.length(); + for (int i = 0; i < n; i++) { + for (int j = 0; j <= k; j++) { + for (int x = 0; x < n; x++) { + for (int y = 0; y < 26; y++) { + dp[i][j][x][y] = -1; + } + } + } } - } + return solver(s.toCharArray(), 0, k, 0, s.charAt(0)); } - return best(s.toCharArray(), /* idx= */ 0, k, /* count= */ 0, /* prevChar= */ s.charAt(0)); - } - - private int best(char[] letters, int idx, int k, int count, char prevChar) { - if (idx == letters.length) { - return countNumberOfLetters(count); - } - if (dp[idx][k][count][prevChar - 'a'] != -1) { - return dp[idx][k][count][prevChar - 'a']; - } - if (k == 0) { - int result = 0; - if (letters[idx] == prevChar) { - result = best(letters, idx + 1, k, count + 1, prevChar); - } else { - result = countNumberOfLetters(count) + best(letters, idx + 1, k, 1, letters[idx]); - } - dp[idx][k][count][prevChar - 'a'] = result; - return result; - } - int result = 0; - if (letters[idx] == prevChar) { - result = Math.min( - best(letters, idx + 1, k, count + 1, prevChar), // Delete and recurse forward - best(letters, idx + 1, k - 1, count, prevChar)); // Don't delete and recurse forward - } else { - result = Math.min( - countNumberOfLetters(count) + best(letters, idx + 1, k, /* count= */ 1, /* prevChar= */ letters[idx]), // Don't delete current char and recurse forward with new count - best(letters, idx + 1, k - 1, count, prevChar)); // Delete current character and recurse forward - } - dp[idx][k][count][prevChar - 'a'] = result; - return result; - } - - private static int countNumberOfLetters(int count) { - if (count == 0) { - return count; + + private int solver(char[] letters, int idx, int k, int currFrequency, char prevChar) { + if (idx == letters.length) { + return getLetterCount(currFrequency); + } + if (dp[idx][k][currFrequency][prevChar - 'a'] != -1) { + return dp[idx][k][currFrequency][prevChar - 'a']; + } + int result = 0; + if (letters[idx] == prevChar) { + result = k == 0 ? + solver(letters, idx + 1, k, currFrequency + 1, prevChar) : + Math.min( + solver(letters, idx + 1, k , currFrequency + 1, prevChar), // don't delete + solver(letters, idx + 1, k - 1 , currFrequency, prevChar) // delete + ); + } else { + result = k == 0 ? + getLetterCount(currFrequency) + solver(letters, idx + 1, k, 1, letters[idx]) : + Math.min( + getLetterCount(currFrequency) + solver(letters, idx + 1, k, 1, letters[idx]), // don't delete + solver(letters, idx + 1, k - 1, currFrequency, prevChar) // delete + ); + } + return dp[idx][k][currFrequency][prevChar - 'a'] = result; } - int numberOfDigits = 1; - if (count > 9) { - numberOfDigits = 2; - } - if (count > 99) { - numberOfDigits = 3; + + private static int getLetterCount(int frequency) { + if (frequency == 0) { + return 0; + } + int digits = 1; + if (frequency > 9) { + digits = 2; + } + if (frequency > 99) { + digits = 3; + } + return frequency == 1 ? 1 : (digits + 1); } - return count == 1 ? 1 : (numberOfDigits + 1); - } } From bd407202de2446c8dfa576516865b4b2034e140d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Dec 2023 10:44:34 -0800 Subject: [PATCH 1356/1640] Update Minimum Difficulty of a Job Schedule.java --- .../Minimum Difficulty of a Job Schedule.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Hard/Minimum Difficulty of a Job Schedule.java b/Hard/Minimum Difficulty of a Job Schedule.java index 58722245..ebc94cc7 100644 --- a/Hard/Minimum Difficulty of a Job Schedule.java +++ b/Hard/Minimum Difficulty of a Job Schedule.java @@ -1,30 +1,30 @@ class Solution { - public int minDifficulty(int[] jobDifficulty, int d) { - int n = jobDifficulty.length; - if (n < d) { - return -1; + + private static final int INVALID_VALUE = 300_001; + + public int minDifficulty(int[] jobDifficulty, int d) { + if (jobDifficulty.length < d) { + return -1; + } + Integer[][][] dp = new Integer[jobDifficulty.length][d + 1][1001]; + return dfs(jobDifficulty, 0, d, 0, dp); } - Integer[][] dp = new Integer[n][d + 1]; - return minDifficulty(/* index= */0, d, jobDifficulty, dp); - } - - private int minDifficulty(int index, int dLeft, int[] jobDifficulty, Integer[][] dp) { - if (dp[index][dLeft] != null) { - return dp[index][dLeft]; + + private int dfs(int[] jobDifficulty, int idx, int d, int currMax, Integer[][][] dp) { + if (idx == jobDifficulty.length) { + return d == 0 ? 0 : INVALID_VALUE; + } + if (d == 0) { + return INVALID_VALUE; + } + if (dp[idx][d][currMax] != null) { + return dp[idx][d][currMax]; + } + currMax = Math.max(currMax, jobDifficulty[idx]); + int result = Math.min(dfs( + jobDifficulty, idx + 1, d, currMax, dp), // continue same sequence + currMax + dfs(jobDifficulty, idx + 1, d - 1, 0, dp) // break sequence + ); + return dp[idx][d][currMax] = result; } - if (dLeft == 1) { - int result = 0; - for (int j = index; j < jobDifficulty.length; j++) { - result = Math.max(result, jobDifficulty[j]); - } - return result; - } - int result = Integer.MAX_VALUE; - int dailyMaxJobDiff = 0; - for (int j = index; j < jobDifficulty.length - dLeft + 1; j++) { - dailyMaxJobDiff = Math.max(dailyMaxJobDiff, jobDifficulty[j]); - result = Math.min(result, dailyMaxJobDiff + minDifficulty(j + 1, dLeft - 1, jobDifficulty, dp)); - } - return dp[index][dLeft] = result; - } } From 815d3e73700a4af1bec530035ac8264ebd4bb041 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 29 Dec 2023 10:58:42 -0800 Subject: [PATCH 1357/1640] Create Valid Palindrome III.java --- Hard/Valid Palindrome III.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Hard/Valid Palindrome III.java diff --git a/Hard/Valid Palindrome III.java b/Hard/Valid Palindrome III.java new file mode 100644 index 00000000..dc97a304 --- /dev/null +++ b/Hard/Valid Palindrome III.java @@ -0,0 +1,26 @@ +class Solution { + public boolean isValidPalindrome(String s, int k) { + int n = s.length(); + Integer[][] dp = new Integer[n][n]; + return isValidPalindrome(s, 0, n - 1, dp) <= k; + } + + private int isValidPalindrome(String s, int left, int right, Integer[][] dp) { + if (left == right) { + return 0; + } + if (left == right - 1) { + return s.charAt(left) != s.charAt(right) ? 1 : 0; + } + if (dp[left][right] != null) { + return dp[left][right]; + } + if (s.charAt(left) == s.charAt(right)) { + return isValidPalindrome(s, left + 1, right - 1, dp); // move both pointers + } + return dp[left][right] = 1 + Math.min( + isValidPalindrome(s, left + 1, right, dp), // move only left pointer + isValidPalindrome(s, left, right - 1, dp) // move only right pointer + ); + } +} From 5fff8fb179026d7a7bafb646479e42345f7330df Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Dec 2023 17:55:12 -0800 Subject: [PATCH 1358/1640] Update Largest Substring Between Two Equal Characters.java --- ... Substring Between Two Equal Characters.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Easy/Largest Substring Between Two Equal Characters.java b/Easy/Largest Substring Between Two Equal Characters.java index fa0d8495..24371003 100644 --- a/Easy/Largest Substring Between Two Equal Characters.java +++ b/Easy/Largest Substring Between Two Equal Characters.java @@ -1,12 +1,11 @@ class Solution { - public int maxLengthBetweenEqualCharacters(String s) { - Map startIndex = new HashMap<>(); - int largestSubstringLength = -1; - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - startIndex.putIfAbsent(c, i); - largestSubstringLength = Math.max(largestSubstringLength, i - startIndex.get(c) - 1); + public int maxLengthBetweenEqualCharacters(String s) { + Map map = new HashMap<>(); + int maxLength = -1; + for (int i = 0; i < s.length(); i++) { + map.putIfAbsent(s.charAt(i), i); + maxLength = Math.max(maxLength, i - map.get(s.charAt(i)) - 1); + } + return maxLength; } - return largestSubstringLength; - } } From f408c474be863412fa785f556a718d8fb771ba2b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Dec 2023 15:49:41 -0800 Subject: [PATCH 1359/1640] Create Check if Bitwise OR Has Trailing Zeros.java --- Easy/Check if Bitwise OR Has Trailing Zeros.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Easy/Check if Bitwise OR Has Trailing Zeros.java diff --git a/Easy/Check if Bitwise OR Has Trailing Zeros.java b/Easy/Check if Bitwise OR Has Trailing Zeros.java new file mode 100644 index 00000000..b1aedc22 --- /dev/null +++ b/Easy/Check if Bitwise OR Has Trailing Zeros.java @@ -0,0 +1,7 @@ +class Solution { + public boolean hasTrailingZeros(int[] nums) { + return Arrays.stream(nums) + .filter(num -> Integer.numberOfTrailingZeros(num) > 0) + .count() >= 2; + } +} From d506f5543729c389424c5a2566977f0bb805fc27 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 1 Jan 2024 08:48:41 -0800 Subject: [PATCH 1360/1640] Update Assign Cookies.java --- Easy/Assign Cookies.java | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/Easy/Assign Cookies.java b/Easy/Assign Cookies.java index 6ff366ad..32b09bf6 100644 --- a/Easy/Assign Cookies.java +++ b/Easy/Assign Cookies.java @@ -1,15 +1,13 @@ class Solution { - public int findContentChildren(int[] g, int[] s) { - Arrays.sort(g); - Arrays.sort(s); - int gIdx = 0; - int sIdx = 0; - while (sIdx < s.length && gIdx < g.length) { - if (s[sIdx] >= g[gIdx]) { - gIdx++; - } - sIdx++; + public int findContentChildren(int[] greed, int[] cookieSize) { + Arrays.sort(greed); + Arrays.sort(cookieSize); + int idx = 0; + for (int i = 0; i < cookieSize.length && idx < greed.length; i++) { + if (cookieSize[i] >= greed[idx]) { + idx++; + } + } + return idx; } - return gIdx; - } } From 62bf7ccabb4ea9bc3ea9f060f58e872d0b91664b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 2 Jan 2024 13:14:49 -0800 Subject: [PATCH 1361/1640] Update Campus Bikes II.java --- Medium/Campus Bikes II.java | 48 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/Medium/Campus Bikes II.java b/Medium/Campus Bikes II.java index 82de40c4..692725d0 100644 --- a/Medium/Campus Bikes II.java +++ b/Medium/Campus Bikes II.java @@ -1,30 +1,28 @@ class Solution { - int minDist; - public int assignBikes(int[][] workers, int[][] bikes) { - minDist = Integer.MAX_VALUE; - dfs(new boolean[bikes.length], workers, 0, bikes, 0); - return minDist; - } - - private void dfs(boolean[] visited, int[][] workers, int currIdx, int[][] bikes, int distance) { - if (currIdx >= workers.length) { - minDist = Math.min(minDist, distance); - return; + public int assignBikes(int[][] workers, int[][] bikes) { + Integer[] dp = new Integer[1024]; + return minDistance(workers, bikes, 0, 0, dp); } - if (distance > minDist) { - return; + + private int minDistance(int[][] workers, int[][] bikes, int workerIdx, int mask, Integer[] dp) { + if (workerIdx >= workers.length) { + return 0; + } + if (dp[mask] != null) { + return dp[mask]; + } + int distance = Integer.MAX_VALUE; + for (int i = 0; i < bikes.length; i++) { + // if bike is available + if ((mask & (1 << i)) == 0) { + // assign the bike & traverse for remaining bikes + distance = Math.min(distance, calculateManhattanDistance(workers[workerIdx], bikes[i]) + minDistance(workers, bikes, workerIdx + 1, mask | (1 << i), dp)); + } + } + return dp[mask] = distance; } - for (int i = 0; i < bikes.length; i++) { - if (visited[i]) { - continue; - } - visited[i] = true; - dfs(visited, workers, currIdx + 1, bikes, distance + getManahattanDist(bikes[i], workers[currIdx])); - visited[i] = false; + + private static int calculateManhattanDistance(int[] worker, int[] bike) { + return Math.abs(worker[0] - bike[0]) + Math.abs(worker[1] - bike[1]); } - } - - private int getManahattanDist(int[] p1, int[] p2) { - return Math.abs(p1[0] - p2[0]) + Math.abs(p1[1] - p2[1]); - } } From ff19e288647f03ad4855db273e5598377087648e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 3 Jan 2024 07:45:58 -0800 Subject: [PATCH 1362/1640] Update Number of Laser Beams in a Bank.java --- Medium/Number of Laser Beams in a Bank.java | 26 +++++++++++---------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/Medium/Number of Laser Beams in a Bank.java b/Medium/Number of Laser Beams in a Bank.java index 9a03ad92..ce39e8bd 100644 --- a/Medium/Number of Laser Beams in a Bank.java +++ b/Medium/Number of Laser Beams in a Bank.java @@ -1,15 +1,17 @@ class Solution { - public int numberOfBeams(String[] bank) { - int prevLaserCount = 0; - int totalNumberOfBeams = 0; - for (String beam : bank) { - if (beam.indexOf('1') != -1) { - int currentBeamCount = (int) beam.chars().mapToObj(c -> (char) c).filter(c -> c == '1') - .count(); - totalNumberOfBeams += prevLaserCount * currentBeamCount; - prevLaserCount = currentBeamCount; - } + public int numberOfBeams(String[] bank) { + int beamCount = 0; + int prevLaserCount = 0; + for (String row : bank) { + int count = 0; + for (char c : row.toCharArray()) { + count += c == '1' ? 1 : 0; + } + if (count > 0) { + beamCount += prevLaserCount * count; + prevLaserCount = count; + } + } + return beamCount; } - return totalNumberOfBeams; - } } From 9cfddc49e9f473e101c449edc549ea8ab82f26be Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Jan 2024 08:17:53 -0800 Subject: [PATCH 1363/1640] Update Minimum Number of Operations to Make Array Empty.java --- ...mum Number of Operations to Make Array Empty.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Medium/Minimum Number of Operations to Make Array Empty.java b/Medium/Minimum Number of Operations to Make Array Empty.java index e132e463..69754a8d 100644 --- a/Medium/Minimum Number of Operations to Make Array Empty.java +++ b/Medium/Minimum Number of Operations to Make Array Empty.java @@ -1,15 +1,15 @@ class Solution { public int minOperations(int[] nums) { - Map map = Arrays.stream(nums) - .boxed() - .collect( - Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())); + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } int operations = 0; - for (Long value : map.values()) { + for (Integer value : map.values()) { if (value == 1) { return -1; } - operations += (int) (value / 3 + (value % 3 != 0 ? 1 : 0)); + operations += value / 3 + (value % 3 == 0 ? 0 : 1); } return operations; } From b4e3fc80af398a79b1ab054619676fc67e988a8c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 5 Jan 2024 07:26:21 -0800 Subject: [PATCH 1364/1640] Update Longest Increasing Subsequence.java --- Medium/Longest Increasing Subsequence.java | 29 +++++++++++----------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Medium/Longest Increasing Subsequence.java b/Medium/Longest Increasing Subsequence.java index a4607634..b56c14ef 100644 --- a/Medium/Longest Increasing Subsequence.java +++ b/Medium/Longest Increasing Subsequence.java @@ -1,19 +1,18 @@ class Solution { - public int lengthOfLIS(int[] nums) { - List subsequence = new ArrayList<>(); - subsequence.add(nums[0]); - for (int i = 1; i < nums.length; i++) { - int currNum = nums[i]; - if (currNum > subsequence.get(subsequence.size() - 1)) { - subsequence.add(currNum); - } else { - int idx = 0; - while (currNum > subsequence.get(idx)) { - idx++; + public int lengthOfLIS(int[] nums) { + List subsequence = new ArrayList<>(); + subsequence.add(nums[0]); + for (int i = 1; i < nums.length; i++) { + if (nums[i] > subsequence.get(subsequence.size() - 1)) { + subsequence.add(nums[i]); + } else { + int idx = 0; + while (nums[i] > subsequence.get(idx)) { + idx++; + } + subsequence.set(idx, nums[i]); + } } - subsequence.set(idx, currNum); - } + return subsequence.size(); } - return subsequence.size(); - } } From d376fe1e6c95798c21db6276c2b111909916079a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 6 Jan 2024 12:39:41 -0800 Subject: [PATCH 1365/1640] Update Maximum Profit in Job Scheduling.java --- Hard/Maximum Profit in Job Scheduling.java | 46 +++++++++++++++------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/Hard/Maximum Profit in Job Scheduling.java b/Hard/Maximum Profit in Job Scheduling.java index f95e58ab..8a785d43 100644 --- a/Hard/Maximum Profit in Job Scheduling.java +++ b/Hard/Maximum Profit in Job Scheduling.java @@ -1,28 +1,46 @@ class Solution { public int jobScheduling(int[] startTime, int[] endTime, int[] profit) { - int n = startTime.length; + int n = profit.length; int[][] jobs = new int[n][3]; for (int i = 0; i < n; i++) { jobs[i] = new int[]{startTime[i], endTime[i], profit[i]}; } Arrays.sort(jobs, (a, b) -> a[0] - b[0]); - Integer[] cache = new Integer[n]; - return dfs(0, jobs, cache); + for (int i = 0; i < n; i++) { + startTime[i] = jobs[i][0]; + } + int[] dp = new int[n + 1]; + Arrays.fill(dp, -1); + return findMaxProfit(jobs, startTime, 0, n, dp); } - - private int dfs(int idx, int[][] jobs, Integer[] cache) { - if (idx == jobs.length) { + + private int findMaxProfit(int[][] jobs, int[] startTime, int position, int n, int[] dp) { + if (position == n) { return 0; } - if (cache[idx] != null) { - return cache[idx]; + if (dp[position] != -1) { + return dp[position]; } - int nextIdx = idx + 1; - while (nextIdx < jobs.length && jobs[idx][1] > jobs[nextIdx][0]) { - nextIdx++; + int nextPosition = binarySearch(startTime, jobs[position][1]); + return dp[position] = Math.max( + findMaxProfit(jobs, startTime, position + 1, n, dp), // skip executing current job + jobs[position][2] + findMaxProfit(jobs, startTime, nextPosition, n, dp) // execute current job & move to next position + ); + } + + private static int binarySearch(int[] startTime, int endTime) { + int left = 0; + int right = startTime.length - 1; + int nextPosition = startTime.length; + while (left <= right) { + int mid = (left + right) / 2; + if (startTime[mid] >= endTime) { + nextPosition = mid; + right = mid - 1; + } else { + left = mid + 1; + } } - int jobScheduled = jobs[idx][2] + dfs(nextIdx, jobs, cache); - int jobNotScheduled = dfs(idx + 1, jobs, cache); - return cache[idx] = Math.max(jobScheduled, jobNotScheduled); + return nextPosition; } } From 252fe13a578923364fbbd04c90e6a57ec3690051 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 7 Jan 2024 07:12:24 -0800 Subject: [PATCH 1366/1640] Create Arithmetic Slices II - Subsequence.java --- Hard/Arithmetic Slices II - Subsequence.java | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Hard/Arithmetic Slices II - Subsequence.java diff --git a/Hard/Arithmetic Slices II - Subsequence.java b/Hard/Arithmetic Slices II - Subsequence.java new file mode 100644 index 00000000..f193579f --- /dev/null +++ b/Hard/Arithmetic Slices II - Subsequence.java @@ -0,0 +1,22 @@ +class Solution { + public int numberOfArithmeticSlices(int[] nums) { + int n = nums.length; + Map[] count = new Map[n]; + int result = 0; + for (int i = 0; i < n; i++) { + count[i] = new HashMap<>(); + for (int j = 0; j < i; j++) { + long delta = ((long) nums[i]) - ((long) nums[j]); + if (delta < Integer.MIN_VALUE || delta > Integer.MAX_VALUE) { + continue; + } + int diff = (int) delta; + int sum = count[j].getOrDefault(diff, 0); + int current = count[i].getOrDefault(diff, 0); + count[i].put(diff, current + sum + 1); + result += sum; + } + } + return result; + } +} From 0d7a11224ce1f94eb8d7c7792773bce5f04ea7d8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Jan 2024 08:03:57 -0800 Subject: [PATCH 1367/1640] Update Leaf-Similar Trees.java --- Easy/Leaf-Similar Trees.java | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/Easy/Leaf-Similar Trees.java b/Easy/Leaf-Similar Trees.java index 1ac4d480..082f6583 100644 --- a/Easy/Leaf-Similar Trees.java +++ b/Easy/Leaf-Similar Trees.java @@ -15,22 +15,28 @@ */ class Solution { public boolean leafSimilar(TreeNode root1, TreeNode root2) { - StringBuilder leavesOne = new StringBuilder(); - StringBuilder leavesTwo = new StringBuilder(); - populateLeaves(root1, leavesOne); - populateLeaves(root2, leavesTwo); - return leavesOne.toString().equals(leavesTwo.toString()); + return getLeaves(root1).equals(getLeaves(root2)); } - - private void populateLeaves(TreeNode root, StringBuilder leaves) { + + private static List getLeaves(TreeNode root) { if (root == null) { - return; + return new ArrayList<>(); } - if (root.left == null && root.right == null) { - leaves.append(root.val).append(","); - return; + List result = new ArrayList<>(); + Stack stack = new Stack<>(); + stack.push(root); + while (!stack.isEmpty()) { + TreeNode removed = stack.pop(); + if (removed.left == null && removed.right == null) { + result.add(removed.val); + } + if (removed.right != null) { + stack.push(removed.right); + } + if (removed.left != null) { + stack.push(removed.left); + } } - populateLeaves(root.left, leaves); - populateLeaves(root.right, leaves); + return result; } } From f3474fb10dea8798e8ec54960f22227fb8e8cac2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Jan 2024 17:44:14 -0800 Subject: [PATCH 1368/1640] Create Amount of Time for Binary Tree to Be Infected.java --- ...f Time for Binary Tree to Be Infected.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Medium/Amount of Time for Binary Tree to Be Infected.java diff --git a/Medium/Amount of Time for Binary Tree to Be Infected.java b/Medium/Amount of Time for Binary Tree to Be Infected.java new file mode 100644 index 00000000..8d5540ab --- /dev/null +++ b/Medium/Amount of Time for Binary Tree to Be Infected.java @@ -0,0 +1,65 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int amountOfTime(TreeNode root, int start) { + Map nodeToParent = new HashMap<>(); + buildNodeToParentRelationship(root, null, nodeToParent); + TreeNode startNode = nodeToParent.keySet() + .stream() + .filter(node -> node.val == start) + .findFirst() + .orElse(null); + return calculateInfectionTime(nodeToParent, startNode); + } + + private void buildNodeToParentRelationship(TreeNode root, TreeNode parent, Map nodeToParent) { + if (root == null) { + return; + } + nodeToParent.put(root, parent); + buildNodeToParentRelationship(root.left, root, nodeToParent); + buildNodeToParentRelationship(root.right, root, nodeToParent); + } + + private int calculateInfectionTime(Map nodeToParent, TreeNode startNode) { + int time = 0; + Set isInfected = new HashSet<>(); + Queue queue = new LinkedList<>(); + queue.add(startNode); + isInfected.add(startNode.val); + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + TreeNode removed = queue.remove(); + TreeNode parent = nodeToParent.get(removed); + if (nodeToParent.get(removed) != null && isInfected.add(nodeToParent.get(removed).val)) { + queue.add(nodeToParent.get(removed)); + } + if (removed.left != null && isInfected.add(removed.left.val)) { + queue.add(removed.left); + } + if (removed.right != null && isInfected.add(removed.right.val)) { + queue.add(removed.right); + } + } + if (queue.isEmpty()) { + break; + } + time++; + } + return time; + } +} From f7fd40e1c516f53c01658e7e4787de5f363c03f5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 12 Jan 2024 07:24:46 -0800 Subject: [PATCH 1369/1640] Update Determine if String Halves Are Alike.java --- .../Determine if String Halves Are Alike.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Easy/Determine if String Halves Are Alike.java b/Easy/Determine if String Halves Are Alike.java index 218ce0ed..f7c9a995 100644 --- a/Easy/Determine if String Halves Are Alike.java +++ b/Easy/Determine if String Halves Are Alike.java @@ -1,14 +1,20 @@ class Solution { - private static final String VOWELS = "aeiouAEIOU"; - public boolean halvesAreAlike(String s) { - return getVowelCount(s.substring(0, s.length() / 2)).equals(getVowelCount(s.substring(s.length() / 2))); - } - - private Long getVowelCount(String s) { - return s.chars().mapToObj(c -> (char) c).filter(Solution::isVowel).count(); - } - - private static boolean isVowel(char c) { - return VOWELS.indexOf(c) != -1; - } + + private static final Set VOWELS = Set.of( + 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' + ); + + public boolean halvesAreAlike(String s) { + int count = 0; + int n = s.length(); + for (int i = 0; i < n / 2; i++) { + if (VOWELS.contains(s.charAt(i))) { + count++; + } + if (VOWELS.contains(s.charAt(i + n / 2))) { + count--; + } + } + return count == 0; + } } From d00ccb6645f0e465f2b504340b622a28b4091fcc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 14 Jan 2024 08:28:46 -0800 Subject: [PATCH 1370/1640] Update Determine if Two Strings Are Close.java --- .../Determine if Two Strings Are Close.java | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Medium/Determine if Two Strings Are Close.java b/Medium/Determine if Two Strings Are Close.java index 96a5181a..3a43fd6a 100644 --- a/Medium/Determine if Two Strings Are Close.java +++ b/Medium/Determine if Two Strings Are Close.java @@ -1,30 +1,30 @@ class Solution { - public boolean closeStrings(String word1, String word2) { - if (word1.length() != word2.length()) { - return false; + public boolean closeStrings(String word1, String word2) { + if (word1.length() != word2.length()) { + return false; + } + int[] frequencyOne = getFrequencyArray(word1); + int[] frequencyTwo = getFrequencyArray(word2); + for (int i = 0; i < 26; i++) { + if (frequencyOne[i] == 0 && frequencyTwo[i] != 0) { + return false; + } + } + Arrays.sort(frequencyOne); + Arrays.sort(frequencyTwo); + for (int i = 0; i < 26; i++) { + if (frequencyOne[i] != frequencyTwo[i]) { + return false; + } + } + return true; } - int[] frequencyOne = getFrequencyArray(word1); - int[] frequencyTwo = getFrequencyArray(word2); - for (int i = 0; i < frequencyOne.length; i++) { - if (frequencyOne[i] == 0 && frequencyTwo[i] != 0) { - return false; - } + + private static int[] getFrequencyArray(String s) { + int[] frequency = new int[26]; + for (int i = 0; i < s.length(); i++) { + frequency[s.charAt(i) - 'a']++; + } + return frequency; } - Arrays.sort(frequencyOne); - Arrays.sort(frequencyTwo); - for (int i = 0; i < frequencyOne.length; i++) { - if (frequencyOne[i] != frequencyTwo[i]) { - return false; - } - } - return true; - } - - private int[] getFrequencyArray(String s) { - int[] frequency = new int[26]; - for (char c : s.toCharArray()) { - frequency[c - 'a']++; - } - return frequency; - } } From 17c91bf727afa5efbf612dc66c3b408392cc74d2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 Jan 2024 08:05:08 -0800 Subject: [PATCH 1371/1640] Update Find Players With Zero or One Losses.java --- .../Find Players With Zero or One Losses.java | 40 +++++++++---------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/Medium/Find Players With Zero or One Losses.java b/Medium/Find Players With Zero or One Losses.java index f3f14ff5..1692f1e5 100644 --- a/Medium/Find Players With Zero or One Losses.java +++ b/Medium/Find Players With Zero or One Losses.java @@ -1,24 +1,22 @@ class Solution { - public List> findWinners(int[][] matches) { - Map lossCount = new HashMap<>(); - Set players = new HashSet<>(); - for (int[] match : matches) { - lossCount.put(match[1], lossCount.getOrDefault(match[1], 0) + 1); - players.add(match[0]); - players.add(match[1]); + public List> findWinners(int[][] matches) { + Map playerToLossCount = new HashMap<>(); + for (int[] match : matches) { + int winner = match[0]; + int loser = match[1]; + playerToLossCount.putIfAbsent(winner, 0); + playerToLossCount.put(loser, playerToLossCount.getOrDefault(loser, 0) + 1); + } + List> result = new ArrayList<>( + Arrays.asList(new ArrayList<>(), new ArrayList<>()) + ); + for (Map.Entry entry : playerToLossCount.entrySet()) { + if (entry.getValue() <= 1) { + result.get(entry.getValue()).add(entry.getKey()); + } + } + Collections.sort(result.get(0)); + Collections.sort(result.get(1)); + return result; } - List noLoss = new ArrayList<>(); - List exactlyOneLoss = new ArrayList<>(); - for (Integer player : players) { - if (!lossCount.containsKey(player)) { - noLoss.add(player); - } - if (lossCount.getOrDefault(player, 0) == 1) { - exactlyOneLoss.add(player); - } - } - Collections.sort(noLoss); - Collections.sort(exactlyOneLoss); - return Arrays.asList(noLoss, exactlyOneLoss); - } } From 290f75fa9e8d3840aeafc27141b7dd7000225c12 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 15 Jan 2024 13:13:06 -0800 Subject: [PATCH 1372/1640] Update Single-Row Keyboard.java --- Easy/Single-Row Keyboard.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Easy/Single-Row Keyboard.java b/Easy/Single-Row Keyboard.java index 5a59a1d6..f09a641c 100644 --- a/Easy/Single-Row Keyboard.java +++ b/Easy/Single-Row Keyboard.java @@ -1,16 +1,15 @@ class Solution { - public int calculateTime(String keyboard, String word) { - Map map = new HashMap<>(); - int pos = 0; - for (char c : keyboard.toCharArray()) { - map.put(c, pos++); + public int calculateTime(String keyboard, String word) { + Map map = new HashMap<>(); + for (int i = 0; i < 26; i++) { + map.put(keyboard.charAt(i), i); + } + int position = 0; + int time = 0; + for (char c : word.toCharArray()) { + time += Math.abs(position - map.get(c)); + position = map.get(c); + } + return time; } - int total = 0; - int currPos = 0; - for (char c : word.toCharArray()) { - total += Math.abs(currPos - map.get(c)); - currPos = map.get(c); - } - return total; - } } From 509b60fc8bb7ab11209af0cb4da088432b40679c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 16 Jan 2024 08:02:23 -0800 Subject: [PATCH 1373/1640] Update Insert Delete GetRandom O(1).java --- Medium/Insert Delete GetRandom O(1).java | 61 ++++++++++++------------ 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/Medium/Insert Delete GetRandom O(1).java b/Medium/Insert Delete GetRandom O(1).java index 3b9b44ae..9ef0fc92 100644 --- a/Medium/Insert Delete GetRandom O(1).java +++ b/Medium/Insert Delete GetRandom O(1).java @@ -1,40 +1,41 @@ class RandomizedSet { - private List randomizedSet; - private Map indexMap; - private int currSize; - - public RandomizedSet() { - this.randomizedSet = new ArrayList<>(); - this.indexMap = new HashMap<>(); - this.currSize = 0; - } + private final List values; + private final Map valToIndexMap; - public boolean insert(int val) { - if (this.indexMap.containsKey(val)) { - return false; + public RandomizedSet() { + this.values = new ArrayList<>(); + this.valToIndexMap = new HashMap<>(); } - this.randomizedSet.add(val); - this.indexMap.put(val, this.currSize++); - return true; - } - public boolean remove(int val) { - if (!this.indexMap.containsKey(val)) { - return false; + public boolean insert(int val) { + if (valToIndexMap.containsKey(val)) { + return false; + } + values.add(val); + valToIndexMap.put(val, values.size() - 1); + return true; } - int valIdx = this.indexMap.get(val); - this.indexMap.put(this.randomizedSet.get(this.currSize - 1), valIdx); - this.randomizedSet.set(valIdx, this.randomizedSet.get(this.currSize - 1)); - this.randomizedSet.remove(this.currSize - 1); - this.indexMap.remove(val); - this.currSize--; - return true; - } - public int getRandom() { - return this.randomizedSet.get(new Random().nextInt(this.currSize)); - } + public boolean remove(int val) { + if (!valToIndexMap.containsKey(val)) { + return false; + } + int valIdx = valToIndexMap.get(val); + int valAtLastIdx = values.get(values.size() - 1); + // update index for last element + values.set(valIdx, valAtLastIdx); + valToIndexMap.put(valAtLastIdx, valIdx); + // remove value + values.remove(values.size() - 1); + valToIndexMap.remove(val); + return true; + } + + public int getRandom() { + int idx = new Random().nextInt(values.size()); + return values.get(idx); + } } /** From cb64d7eb820a18aabb0569c53cf9bfa56e9d81a7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 18 Jan 2024 07:55:19 -0800 Subject: [PATCH 1374/1640] Update Climbing Stairs.java --- Easy/Climbing Stairs.java | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Easy/Climbing Stairs.java b/Easy/Climbing Stairs.java index f2ff9386..ad49acda 100644 --- a/Easy/Climbing Stairs.java +++ b/Easy/Climbing Stairs.java @@ -1,14 +1,19 @@ class Solution { - public int climbStairs(int n) { - if (n == 1) { - return 1; + public int climbStairs(int n) { + Integer[] dp = new Integer[n + 1]; + return climbStairs(dp, n); } - int[] dp = new int[n + 1]; - dp[1] = 1; - dp[2] = 2; - for (int i = 3; i <= n; i++) { - dp[i] = dp[i - 1] + dp[i - 2]; + + private int climbStairs(Integer[] dp, int n) { + if (n == 1) { + return 1; + } + if (n == 2) { + return 2; + } + if (dp[n] != null) { + return dp[n]; + } + return dp[n] = climbStairs(dp, n - 1) + climbStairs(dp, n - 2); } - return dp[n]; - } } From 8c794995f324ad1bc8e7a92673ce2e24af14c2a5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 19 Jan 2024 09:12:22 -0800 Subject: [PATCH 1375/1640] Update Minimum Falling Path Sum.java --- Medium/Minimum Falling Path Sum.java | 52 ++++++++++++++++------------ 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/Medium/Minimum Falling Path Sum.java b/Medium/Minimum Falling Path Sum.java index 040759bf..255081b9 100644 --- a/Medium/Minimum Falling Path Sum.java +++ b/Medium/Minimum Falling Path Sum.java @@ -1,27 +1,33 @@ class Solution { - public int minFallingPathSum(int[][] matrix) { - int minFallingSum = Integer.MAX_VALUE; - Integer[][] dp = new Integer[matrix.length][matrix[0].length]; - for (int i = 0; i < matrix.length; i++) { - minFallingSum = Math.min(minFallingSum, findMinFallingPathSumHelper(matrix, 0, i, dp)); + private static final int[][] DIRS = {{1, -1}, {1, 0}, {1, 1}}; + + public int minFallingPathSum(int[][] matrix) { + int rows = matrix.length; + int cols = matrix[0].length; + Integer[][] dp = new Integer[rows + 1][cols + 1]; + int result = Integer.MAX_VALUE; + for (int i = 0; i < cols; i++) { + result = Math.min(result, recurse(matrix, 0, i, rows, cols, dp)); + } + return result; } - return minFallingSum; - } - - private int findMinFallingPathSumHelper(int[][] matrix, int row, int col, Integer[][] dp) { - if (col < 0 || col == matrix.length) { - return Integer.MAX_VALUE; + + private int recurse(int[][] matrix, int row, int col, int rows, int cols, Integer[][] dp) { + if (row == rows - 1) { + return matrix[row][col]; + } + if (dp[row][col] != null) { + return dp[row][col]; + } + int result = Integer.MAX_VALUE; + for (int[] dir : DIRS) { + int newRow = row + dir[0]; + int newCol = col + dir[1]; + if (newRow < 0 || newCol < 0 || newRow >= rows || newCol >= cols) { + continue; + } + result = Math.min(result, matrix[row][col] + recurse(matrix, newRow, newCol, rows, cols, dp)); + } + return dp[row][col] = result; } - if (row == matrix.length - 1) { - return matrix[row][col]; - } - if (dp[row][col] != null) { - return dp[row][col]; - } - int leftSum = findMinFallingPathSumHelper(matrix, row + 1, col, dp); - int middleSum = findMinFallingPathSumHelper(matrix, row + 1, col + 1, dp); - int rightSum = findMinFallingPathSumHelper(matrix, row + 1, col - 1, dp); - dp[row][col] = Math.min(leftSum, Math.min(middleSum, rightSum)) + matrix[row][col]; - return dp[row][col]; - } } From acd2e4ea9cbead40873afc7eec9643986ec7df85 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Jan 2024 08:32:44 -0800 Subject: [PATCH 1376/1640] Create Divide an Array Into Subarrays With Minimum Cost I.java --- ... Array Into Subarrays With Minimum Cost I.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Divide an Array Into Subarrays With Minimum Cost I.java diff --git a/Easy/Divide an Array Into Subarrays With Minimum Cost I.java b/Easy/Divide an Array Into Subarrays With Minimum Cost I.java new file mode 100644 index 00000000..7b214fa7 --- /dev/null +++ b/Easy/Divide an Array Into Subarrays With Minimum Cost I.java @@ -0,0 +1,15 @@ +class Solution { + public int minimumCost(int[] nums) { + int minOne = Integer.MAX_VALUE; + int minTwo = Integer.MAX_VALUE; + for (int i = 1; i < nums.length; i++) { + if (nums[i] < minOne) { + minTwo = minOne; + minOne = nums[i]; + } else if (nums[i] < minTwo) { + minTwo = nums[i]; + } + } + return nums[0] + minOne + minTwo; + } +} From 640cd980c384f2891851638cf30b5949f828e4d0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Jan 2024 08:39:26 -0800 Subject: [PATCH 1377/1640] Create Count Elements With Maximum Frequency.java --- Easy/Count Elements With Maximum Frequency.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Count Elements With Maximum Frequency.java diff --git a/Easy/Count Elements With Maximum Frequency.java b/Easy/Count Elements With Maximum Frequency.java new file mode 100644 index 00000000..0f023200 --- /dev/null +++ b/Easy/Count Elements With Maximum Frequency.java @@ -0,0 +1,17 @@ +class Solution { + public int maxFrequencyElements(int[] nums) { + Map map = new HashMap<>(); + int maxFrequency = 0; + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + maxFrequency = Math.max(maxFrequency, map.get(num)); + } + int count = 0; + for (int num : nums) { + if (map.get(num) == maxFrequency) { + count++; + } + } + return count; + } +} From eb1a80cf33928453335bcee28120011da2d80654 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 21 Jan 2024 09:18:41 -0800 Subject: [PATCH 1378/1640] Update House Robber.java --- Medium/House Robber.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Medium/House Robber.java b/Medium/House Robber.java index 8837a99d..3ebdc59b 100644 --- a/Medium/House Robber.java +++ b/Medium/House Robber.java @@ -1,14 +1,11 @@ class Solution { - public int rob(int[] nums) { - if (nums.length == 1) { - return nums[0]; + public int rob(int[] nums) { + int n = nums.length; + int[] dp = new int[n + 1]; + dp[1] = nums[0]; + for (int i = 1; i < n; i++) { + dp[i + 1] = Math.max(dp[i], dp[i - 1] + nums[i]); + } + return dp[n]; } - int[] dp = new int[nums.length]; - dp[0] = nums[0]; - dp[1] = Math.max(nums[0], nums[1]); - for (int i = 2; i < nums.length; i++) { - dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]); - } - return dp[nums.length - 1]; - } } From c674418fc8b72aa72b59557cb3541841d2b70b72 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 21 Jan 2024 18:07:48 -0800 Subject: [PATCH 1379/1640] Update Set Mismatch.java --- Easy/Set Mismatch.java | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Easy/Set Mismatch.java b/Easy/Set Mismatch.java index 9660688d..eac82238 100644 --- a/Easy/Set Mismatch.java +++ b/Easy/Set Mismatch.java @@ -1,18 +1,19 @@ class Solution { - public int[] findErrorNums(int[] nums) { - int[] result = new int[2]; - Set set = new HashSet<>(); - int n = nums.length; - for (int num : nums) { - if (!set.add(num)) { - result[0] = num; - } + public int[] findErrorNums(int[] nums) { + int n = nums.length; + int[] result = new int[2]; + Set set = new HashSet<>(); + for (int i = 1; i <= n; i++) { + if (!set.add(nums[i - 1])) { + result[0] = nums[i - 1]; + } + } + for (int i = 1; i <= n; i++) { + if (!set.contains(i)) { + result[1] = i; + break; + } + } + return result; } - for (int i = 1; i <= n; i++) { - if (!set.contains(i)) { - result[1] = i; - } - } - return result; - } } From 1c8632fdf47f5a2ef31fc1208399bd3a15a25e83 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Jan 2024 09:24:10 -0800 Subject: [PATCH 1380/1640] Create Minimum Number of Pushes to Type Word I.java --- Easy/Minimum Number of Pushes to Type Word I.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Minimum Number of Pushes to Type Word I.java diff --git a/Easy/Minimum Number of Pushes to Type Word I.java b/Easy/Minimum Number of Pushes to Type Word I.java new file mode 100644 index 00000000..0a6bbc24 --- /dev/null +++ b/Easy/Minimum Number of Pushes to Type Word I.java @@ -0,0 +1,14 @@ +class Solution { + public int minimumPushes(String word) { + int pushes = 0; + int idx = 0; + int multiple = 1; + while (idx < word.length()) { + int count = Math.min(8, word.length() - idx); + pushes += count * multiple; + multiple++; + idx += count; + } + return pushes; + } +} From 828c46fe3336aae41adfd56827c01a4f72d424f7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Jan 2024 18:47:26 -0800 Subject: [PATCH 1381/1640] Create Maximum Length of a Concatenated String with Unique Characters.java --- ...tenated String with Unique Characters.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Maximum Length of a Concatenated String with Unique Characters.java diff --git a/Medium/Maximum Length of a Concatenated String with Unique Characters.java b/Medium/Maximum Length of a Concatenated String with Unique Characters.java new file mode 100644 index 00000000..65ca06dc --- /dev/null +++ b/Medium/Maximum Length of a Concatenated String with Unique Characters.java @@ -0,0 +1,26 @@ +class Solution { + public int maxLength(List arr) { + return backtrack(arr, 0, new HashMap<>()); + } + + private int backtrack(List arr, int idx, Map map) { + if (map.values().stream().anyMatch(val -> val > 1)) { + return 0; + } + int result = map.size(); + for (int i = idx; i < arr.size(); i++) { + char[] chars = arr.get(i).toCharArray(); + for (char c : chars) { + map.put(c, map.getOrDefault(c, 0) + 1); + } + result = Math.max(result, backtrack(arr, i + 1, map)); + for (char c : chars) { + map.put(c, map.get(c) - 1); + if (map.get(c) == 0) { + map.remove(c); + } + } + } + return result; + } +} From 6b0aba9576f5f097cd78ef11144be0b9617c875b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 24 Jan 2024 07:01:26 -0800 Subject: [PATCH 1382/1640] Update Pseudo-Palindromic Paths in a Binary Tree.java --- ...do-Palindromic Paths in a Binary Tree.java | 65 +++++++++---------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/Medium/Pseudo-Palindromic Paths in a Binary Tree.java b/Medium/Pseudo-Palindromic Paths in a Binary Tree.java index 04cbe822..87acbbf4 100644 --- a/Medium/Pseudo-Palindromic Paths in a Binary Tree.java +++ b/Medium/Pseudo-Palindromic Paths in a Binary Tree.java @@ -14,43 +14,38 @@ * } */ class Solution { - public int pseudoPalindromicPaths (TreeNode root) { - Queue queue = new LinkedList<>(); - NodePathPair nodePathPair = new NodePathPair(root, 0); - queue.add(nodePathPair); - int count = 0; - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - NodePathPair removed = queue.remove(); - TreeNode node = removed.node; - int path = removed.path; - // XOR operation ensures that the bit corresponding to the number only appears in the - // path if it has occurred odd number of times. - // 1 << node.val decides the bit of the value - path = path ^ (1 << node.val); - if (node.left == null && node.right == null) { - // Subtracting 1 means setting rightmost 1 bit to 0 and setting all lower bits to 1 - count += (path & (path - 1)) == 0 ? 1 : 0; - } - if (node.left != null) { - queue.add(new NodePathPair(node.left, path)); + public int pseudoPalindromicPaths (TreeNode root) { + int[] result = {0}; + Map map = new HashMap<>(); + helper(root, map, result); + return result[0]; + } + + private void helper(TreeNode root, Map map, int[] result) { + if (root == null) { + return; } - if (node.right != null) { - queue.add(new NodePathPair(node.right, path)); + map.put(root.val, map.getOrDefault(root.val, 0) + 1); + if (root.left == null && root.right == null) { + if (isPseudoPalindromic(map)) { + result[0]++; + } } - } + helper(root.left, map, result); + helper(root.right, map, result); + map.put(root.val, map.getOrDefault(root.val, 0) - 1); } - return count; - } - - private static class NodePathPair { - TreeNode node; - Integer path; - - public NodePathPair(TreeNode node, int path) { - this.node = node; - this.path = path; + + private static boolean isPseudoPalindromic(Map map) { + boolean oddFound = false; + for (Integer key : map.keySet()) { + if (map.get(key) % 2 != 0) { + if (oddFound) { + return false; + } + oddFound = true; + } + } + return true; } - } } From 0d3ab9b8f111e098b98e89b8c2ea28ec69a71f14 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 25 Jan 2024 07:25:30 -0800 Subject: [PATCH 1383/1640] Create Longest Common Subsequence.java --- Medium/Longest Common Subsequence.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Longest Common Subsequence.java diff --git a/Medium/Longest Common Subsequence.java b/Medium/Longest Common Subsequence.java new file mode 100644 index 00000000..43fc5464 --- /dev/null +++ b/Medium/Longest Common Subsequence.java @@ -0,0 +1,17 @@ +class Solution { + public int longestCommonSubsequence(String text1, String text2) { + int n = text1.length(); + int m = text2.length(); + int[][] dp = new int[n + 1][m + 1]; + for (int i = 0; i < n; i++) { + for (int j = 0; j < m; j++) { + if (text1.charAt(i) == text2.charAt(j)) { + dp[i + 1][j + 1] = 1 + dp[i][j]; + } else { + dp[i + 1][j + 1] = Math.max(dp[i + 1][j], dp[i][j + 1]); + } + } + } + return dp[n][m]; + } +} From 740bcab2ec19b8021bbf58b3c9b59bc21112df17 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 26 Jan 2024 07:06:02 -0800 Subject: [PATCH 1384/1640] Update Out of Boundary Paths.java --- Medium/Out of Boundary Paths.java | 52 +++++++++++++------------------ 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/Medium/Out of Boundary Paths.java b/Medium/Out of Boundary Paths.java index 7179a63c..fc7e9a26 100644 --- a/Medium/Out of Boundary Paths.java +++ b/Medium/Out of Boundary Paths.java @@ -1,34 +1,26 @@ class Solution { - private final int MODULUS = 1000000000 + 7; - - public int findPaths(int m, int n, int maxMove, int startRow, int startColumn) { - int dp[][] = new int[m][n]; - dp[startRow][startColumn] = 1; - int count = 0; - for (int currMove = 1; currMove <= maxMove; currMove++) { - int[][] temp = new int[m][n]; - for (int i = 0; i < m; i++) { - for (int j = 0; j < n; j++) { - if (i == m - 1) { - count = (count + dp[i][j]) % MODULUS; - } - if (j == n - 1) { - count = (count + dp[i][j]) % MODULUS; - } - if (i == 0) { - count = (count + dp[i][j]) % MODULUS; - } - if (j == 0) { - count = (count + dp[i][j]) % MODULUS; - } - temp[i][j] = ( - ((i > 0 ? dp[i - 1][j] : 0) + (i < m - 1 ? dp[i + 1][j] : 0)) % MODULUS + - ((j > 0 ? dp[i][j - 1] : 0) + (j < n - 1 ? dp[i][j + 1] : 0)) % MODULUS - ) % MODULUS; + + private static final int MOD = 1000_000_007; + + public int findPaths(int m, int n, int maxMove, int startRow, int startColumn) { + Integer[][][] dp = new Integer[m][n][maxMove + 1]; + return findPaths(m, n, maxMove, startRow, startColumn, dp); + } + + public int findPaths(int m, int n, int maxMove, int startRow, int startColumn, Integer[][][] dp) { + if (startRow == m || startColumn == n || startRow < 0 || startColumn < 0) { + return 1; + } + if (maxMove == 0) { + return 0; + } + if (dp[startRow][startColumn][maxMove] != null) { + return dp[startRow][startColumn][maxMove]; } - } - dp = temp; + return dp[startRow][startColumn][maxMove] = ( + (findPaths(m, n, maxMove - 1, startRow - 1, startColumn, dp) + + findPaths(m, n, maxMove - 1, startRow + 1, startColumn, dp)) % MOD + + (findPaths(m, n, maxMove - 1, startRow, startColumn - 1, dp) + + findPaths(m, n, maxMove - 1, startRow, startColumn + 1, dp)) % MOD) % MOD; } - return count; - } } From 3291f2ecc3947705ee3e6fd6247f5326b315c6bf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 27 Jan 2024 12:00:40 -0800 Subject: [PATCH 1385/1640] Create Find if Array Can Be Sorted.java --- Medium/Find if Array Can Be Sorted.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Find if Array Can Be Sorted.java diff --git a/Medium/Find if Array Can Be Sorted.java b/Medium/Find if Array Can Be Sorted.java new file mode 100644 index 00000000..8b08e457 --- /dev/null +++ b/Medium/Find if Array Can Be Sorted.java @@ -0,0 +1,18 @@ +class Solution { + public boolean canSortArray(int[] nums) { + int lastGroupHighest = 0; + int highest = nums[0]; + boolean bitChange = false; + for (int i = 1; i < nums.length; i++) { + bitChange = Integer.bitCount(highest) != Integer.bitCount(nums[i]); + if (bitChange) { + lastGroupHighest = highest; + } + highest = Math.max(nums[i], highest); + if (nums[i] < lastGroupHighest) { + return false; + } + } + return true; + } +} From 3809df81774e8b2715db2718caf40fd11d2f111c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Jan 2024 14:58:26 -0800 Subject: [PATCH 1386/1640] Create Number of Changing Keys.java --- Easy/Number of Changing Keys.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Number of Changing Keys.java diff --git a/Easy/Number of Changing Keys.java b/Easy/Number of Changing Keys.java new file mode 100644 index 00000000..bb6bc939 --- /dev/null +++ b/Easy/Number of Changing Keys.java @@ -0,0 +1,11 @@ +class Solution { + public int countKeyChanges(String s) { + int changes = 0; + for (int i = 1; i < s.length(); i++) { + if (Character.toLowerCase(s.charAt(i)) != Character.toLowerCase(s.charAt(i - 1))) { + changes++; + } + } + return changes; + } +} From f3af4a0a7924a50f74f90bc28f6d311f54ba2401 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 29 Jan 2024 07:14:19 -0800 Subject: [PATCH 1387/1640] Update Implement Queue using Stacks.java --- Easy/Implement Queue using Stacks.java | 38 +++++++++++++------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Easy/Implement Queue using Stacks.java b/Easy/Implement Queue using Stacks.java index fd2b165e..a84da8b6 100644 --- a/Easy/Implement Queue using Stacks.java +++ b/Easy/Implement Queue using Stacks.java @@ -1,38 +1,38 @@ class MyQueue { - - private final Stack stackOne; - private final Stack stackTwo; + + private final Stack first; + private final Stack second; public MyQueue() { - this.stackOne = new Stack<>(); - this.stackTwo = new Stack<>(); + this.first = new Stack<>(); + this.second = new Stack<>(); } public void push(int x) { - this.stackOne.push(x); + first.push(x); } public int pop() { - exchangeElements(stackOne, stackTwo); - int popped = stackTwo.pop(); - exchangeElements(stackTwo, stackOne); - return popped; + move(first, second); + int result = second.pop(); + move(second, first); + return result; } public int peek() { - exchangeElements(stackOne, stackTwo); - int peeked = stackTwo.peek(); - exchangeElements(stackTwo, stackOne); - return peeked; + move(first, second); + int result = second.peek(); + move(second, first); + return result; } public boolean empty() { - return stackOne.isEmpty(); + return first.isEmpty(); } - - private void exchangeElements(Stack stack1, Stack stack2) { - while (!stack1.isEmpty()) { - stack2.push(stack1.pop()); + + private void move(Stack from, Stack to) { + while (!from.isEmpty()) { + to.push(from.pop()); } } } From 68968bac1eeeb4e0f24937c271095903740c072a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 29 Jan 2024 11:35:45 -0800 Subject: [PATCH 1388/1640] Create Find the Maximum Number of Elements in Subset.java --- ... Maximum Number of Elements in Subset.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Find the Maximum Number of Elements in Subset.java diff --git a/Medium/Find the Maximum Number of Elements in Subset.java b/Medium/Find the Maximum Number of Elements in Subset.java new file mode 100644 index 00000000..4c419cbc --- /dev/null +++ b/Medium/Find the Maximum Number of Elements in Subset.java @@ -0,0 +1,19 @@ +class Solution { + public int maximumLength(int[] nums) { + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + int result = map.containsKey(1) ? (map.get(1) % 2 == 0 ? map.get(1) - 1 : map.get(1)) : 1; + for (int num : nums) { + int count = 0; + while (map.containsKey(num) && map.get(num) >= 2 && num != 1) { + count += 2; + num *= num; + } + count += map.containsKey(num) ? 1 : -1; + result = Math.max(result, count); + } + return result; + } +} From 51add04ec8213bdf8e559dc13e9acc2abfe613a3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 30 Jan 2024 11:28:23 -0800 Subject: [PATCH 1389/1640] Update and rename Paint House.java to Paint House.java --- Easy/Paint House.java | 18 ------------------ Medium/Paint House.java | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 18 deletions(-) delete mode 100644 Easy/Paint House.java create mode 100644 Medium/Paint House.java diff --git a/Easy/Paint House.java b/Easy/Paint House.java deleted file mode 100644 index 797243d2..00000000 --- a/Easy/Paint House.java +++ /dev/null @@ -1,18 +0,0 @@ -class Solution { - public int minCost(int[][] costs) { - if (costs.length == 0) { - return 0; - } - - for (int i=1; i Date: Tue, 30 Jan 2024 17:33:11 -0800 Subject: [PATCH 1390/1640] Update Daily Temperatures.java --- Medium/Daily Temperatures.java | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Medium/Daily Temperatures.java b/Medium/Daily Temperatures.java index ce3bdca3..5189f7ee 100644 --- a/Medium/Daily Temperatures.java +++ b/Medium/Daily Temperatures.java @@ -1,14 +1,15 @@ class Solution { - public int[] dailyTemperatures(int[] T) { - Stack stack = new Stack<>(); - int[] ans = new int[T.length]; - for (int i = T.length - 1; i >= 0; i--) { - while (!stack.isEmpty() && T[stack.peek()] <= T[i]) { - stack.pop(); - } - ans[i] = stack.isEmpty() ? 0 : (stack.peek() - i); - stack.push(i); + public int[] dailyTemperatures(int[] temperatures) { + int n = temperatures.length; + int[] result = new int[n]; + Stack stack = new Stack<>(); + for (int i = n - 1; i >= 0; i--) { + while (!stack.isEmpty() && temperatures[i] >= temperatures[stack.peek()]) { + stack.pop(); + } + result[i] = stack.isEmpty() ? 0 : stack.peek() - i; + stack.push(i); + } + return result; } - return ans; - } } From ee38423f1584b5428766a8139ea1cf767951955e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 1 Feb 2024 15:45:24 -0800 Subject: [PATCH 1391/1640] Update Flip Game.java --- Easy/Flip Game.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Easy/Flip Game.java b/Easy/Flip Game.java index 75a364a0..097acf18 100644 --- a/Easy/Flip Game.java +++ b/Easy/Flip Game.java @@ -1,11 +1,11 @@ class Solution { - public List generatePossibleNextMoves(String currentState) { - List list = new ArrayList<>(); - for (int i = 1; i < currentState.length(); i++) { - if (currentState.charAt(i) == '+' && currentState.charAt(i - 1) == '+') { - list.add(currentState.substring(0, i - 1) + "--" + currentState.substring(i + 1)); - } + public List generatePossibleNextMoves(String currentState) { + List moves = new ArrayList<>(); + for (int i = 0; i < currentState.length() - 1; i++) { + if (currentState.substring(i, i + 2).equals("++")) { + moves.add(currentState.substring(0, i) + "--" + currentState.substring(i + 2)); + } + } + return moves; } - return list; - } } From ba9744b0007d0636891813045a159536116d9052 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Feb 2024 09:22:23 -0800 Subject: [PATCH 1392/1640] Create Partition Array for Maximum Sum.java --- Medium/Partition Array for Maximum Sum.java | 25 +++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Partition Array for Maximum Sum.java diff --git a/Medium/Partition Array for Maximum Sum.java b/Medium/Partition Array for Maximum Sum.java new file mode 100644 index 00000000..4868c1c3 --- /dev/null +++ b/Medium/Partition Array for Maximum Sum.java @@ -0,0 +1,25 @@ +class Solution { + public int maxSumAfterPartitioning(int[] arr, int k) { + Integer[] dp = new Integer[arr.length]; + return maxSum(arr, k, dp, 0); + } + + private int maxSum(int[] arr, int k, Integer[] dp, int start) { + int n = arr.length; + if (start >= n) { + return 0; + } + if (dp[start] != null) { + return dp[start]; + } + int currMax = 0; + int result = 0; + int end = Math.min(n, start + k); + for (int i = start; i < end; i++) { + currMax = Math.max(currMax, arr[i]); + result = Math.max(result, + currMax * (i - start + 1) + maxSum(arr, k, dp, i + 1)); + } + return dp[start] = result; + } +} From 3d8dca2a27d18271fcf80f80b6de4b20c3be03d8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Feb 2024 09:30:43 -0800 Subject: [PATCH 1393/1640] Create Type of Triangle II.java --- Easy/Type of Triangle II.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Type of Triangle II.java diff --git a/Easy/Type of Triangle II.java b/Easy/Type of Triangle II.java new file mode 100644 index 00000000..09f0cb88 --- /dev/null +++ b/Easy/Type of Triangle II.java @@ -0,0 +1,15 @@ +class Solution { + public String triangleType(int[] nums) { + Arrays.sort(nums); + if (nums[0] + nums[1] <= nums[2]) { + return "none"; + } + if (nums[0] == nums[1] && nums[1] == nums[2]) { + return "equilateral"; + } + if (nums[0] == nums[1] || nums[1] == nums[2] || nums[0] == nums[2]) { + return "isosceles"; + } + return "scalene"; + } +} From 0e0fd4fc584279fa718e5d41dcd50799c834c671 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Feb 2024 17:20:24 -0800 Subject: [PATCH 1394/1640] Update Minimum Window Substring.java --- Hard/Minimum Window Substring.java | 66 +++++++++++++++--------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/Hard/Minimum Window Substring.java b/Hard/Minimum Window Substring.java index 2e8bb271..40cfa2ce 100644 --- a/Hard/Minimum Window Substring.java +++ b/Hard/Minimum Window Substring.java @@ -1,38 +1,38 @@ class Solution { - public String minWindow(String s, String t) { - Map map = new HashMap<>(); - for (char c : t.toCharArray()) { - map.put(c, map.getOrDefault(c, 0) + 1); - } - int count = map.size(); - int start = 0; - int end = 0; - int minWindowLength = Integer.MAX_VALUE; - int minWindowStart = 0; - int minWindowEnd = 0; - 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) { - count--; - } - } - while (count == 0 && start < end) { - if (end - start < minWindowLength) { - minWindowLength = end - start; - minWindowStart = start; - minWindowEnd = end; + public String minWindow(String s, String t) { + Map map = new HashMap<>(); + for (char c : t.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); } - char temp = s.charAt(start++); - if (map.containsKey(temp)) { - map.put(temp, map.get(temp) + 1); - if (map.get(temp) == 1) { - count++; - } + int targetSize = map.size(); + int start = 0; + int minLength = Integer.MAX_VALUE; + int minStart = -1; + int minEnd = -1; + int n = s.length(); + for (int i = 0; i < n; i++) { + if (map.containsKey(s.charAt(i))) { + map.put(s.charAt(i), map.get(s.charAt(i)) - 1); + if (map.get(s.charAt(i)) == 0) { + targetSize--; + } + } + while (start <= i && targetSize == 0) { + int currLength = i - start; + if (minLength > currLength) { + minLength = currLength; + minStart = start; + minEnd = i + 1; + } + if (map.containsKey(s.charAt(start))) { + map.put(s.charAt(start), map.get(s.charAt(start)) + 1); + if (map.get(s.charAt(start)) == 1) { + targetSize++; + } + } + start++; + } } - } + return minLength == Integer.MAX_VALUE ? "" : s.substring(minStart, minEnd); } - return s.substring(minWindowStart, minWindowEnd); - } } From a34609dbc45bde03ae818da284ff60751f1c2955 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 4 Feb 2024 08:36:19 -0800 Subject: [PATCH 1395/1640] Create Ant on the Boundary.java --- Easy/Ant on the Boundary.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Ant on the Boundary.java diff --git a/Easy/Ant on the Boundary.java b/Easy/Ant on the Boundary.java new file mode 100644 index 00000000..25e95d0a --- /dev/null +++ b/Easy/Ant on the Boundary.java @@ -0,0 +1,13 @@ +class Solution { + public int returnToBoundaryCount(int[] nums) { + int currPosition = 0; + int count = 0; + for (int num : nums) { + currPosition += num; + if (currPosition == 0) { + count++; + } + } + return count; + } +} From a17462d2ec5648f87f6aebba8e697440832586a4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 Feb 2024 09:36:17 -0800 Subject: [PATCH 1396/1640] Update and rename Paint Fence.java to Paint Fence.java --- Easy/Paint Fence.java | 12 ------------ Medium/Paint Fence.java | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+), 12 deletions(-) delete mode 100644 Easy/Paint Fence.java create mode 100644 Medium/Paint Fence.java diff --git a/Easy/Paint Fence.java b/Easy/Paint Fence.java deleted file mode 100644 index 72ea89e6..00000000 --- a/Easy/Paint Fence.java +++ /dev/null @@ -1,12 +0,0 @@ -class Solution { - public int numWays(int n, int k) { - int[] ways = new int[Math.max(n + 1, 3)]; - ways[0] = 0; - ways[1] = k; - ways[2] = k * k; - for (int i = 3; i <= n; i++) { - ways[i] = (ways[i - 1] * (k - 1)) + (ways[i - 2] * (k - 1)); - } - return ways[n]; - } -} diff --git a/Medium/Paint Fence.java b/Medium/Paint Fence.java new file mode 100644 index 00000000..39c72ffa --- /dev/null +++ b/Medium/Paint Fence.java @@ -0,0 +1,20 @@ +class Solution { + public int numWays(int n, int k) { + Map map = new HashMap<>(); + return numWays(n, k, map); + } + + private int numWays(int n, int k, Map map) { + if (n == 1) { + return k; + } + if (n == 2) { + return k * k; + } + if (map.containsKey(n)) { + return map.get(n); + } + map.put(n, (k - 1) * (numWays(n - 1, k, map) + numWays(n - 2, k, map))); + return map.get(n); + } +} From 17a14ddd732392cccb9b1cfe6fbd35b6f9e0e1c8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Feb 2024 08:35:13 -0800 Subject: [PATCH 1397/1640] Create Cherry Pickup II.java --- Hard/Cherry Pickup II.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Hard/Cherry Pickup II.java diff --git a/Hard/Cherry Pickup II.java b/Hard/Cherry Pickup II.java new file mode 100644 index 00000000..1786e8cc --- /dev/null +++ b/Hard/Cherry Pickup II.java @@ -0,0 +1,32 @@ +class Solution { + public int cherryPickup(int[][] grid) { + int m = grid.length; + int n = grid[0].length; + Integer[][][] cache = new Integer[m][n][n]; + return recurse(0, 0, n - 1, grid, cache); + } + + private int recurse(int row, int colOne, int colTwo, int[][] grid, Integer[][][] cache) { + if (colOne < 0 || colOne >= grid[0].length || colTwo < 0 || colTwo >= grid[0].length) { + return 0; + } + if (cache[row][colOne][colTwo] != null) { + return cache[row][colOne][colTwo]; + } + int result = 0; + result += grid[row][colOne]; + if (colOne != colTwo) { + result += grid[row][colTwo]; + } + if (row != grid.length - 1) { + int max = 0; + for (int c1 = colOne - 1; c1 <= colOne + 1; c1++) { + for (int c2 = colTwo - 1; c2 <= colTwo + 1; c2++) { + max = Math.max(max, recurse(row + 1, c1, c2, grid, cache)); + } + } + result += max; + } + return cache[row][colOne][colTwo] = result; + } +} From 35f002278987a3c1a67ef84799bfc07172c0f181 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Feb 2024 08:44:51 -0800 Subject: [PATCH 1398/1640] Create Modify the Matrix.java --- Easy/Modify the Matrix.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Easy/Modify the Matrix.java diff --git a/Easy/Modify the Matrix.java b/Easy/Modify the Matrix.java new file mode 100644 index 00000000..f238aa68 --- /dev/null +++ b/Easy/Modify the Matrix.java @@ -0,0 +1,16 @@ +class Solution { + public int[][] modifiedMatrix(int[][] matrix) { + int rows = matrix.length; + int cols = matrix[0].length; + for (int c = 0; c < cols; c++) { + int max = -1; + for (int r = 0; r < rows; r++) { + max = Math.max(max, matrix[r][c]); + } + for (int r = 0; r < rows; r++) { + matrix[r][c] = matrix[r][c] == -1 ? max : matrix[r][c]; + } + } + return matrix; + } +} From 21490738b68c45bcdf1555a024afbbd73790d4f7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 12 Feb 2024 16:23:24 -0800 Subject: [PATCH 1399/1640] Update Find First Palindromic String in the Array.java --- .../Find First Palindromic String in the Array.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Easy/Find First Palindromic String in the Array.java b/Easy/Find First Palindromic String in the Array.java index ba990c09..e215ab8d 100644 --- a/Easy/Find First Palindromic String in the Array.java +++ b/Easy/Find First Palindromic String in the Array.java @@ -1,9 +1,8 @@ class Solution { - public String firstPalindrome(String[] words) { - return Arrays.stream(words).filter(Solution::isPalindrome).findFirst().orElse(""); - } - - public static boolean isPalindrome(String s) { - return new StringBuilder().append(s).reverse().toString().equals(s); - } + public String firstPalindrome(String[] words) { + return Arrays.stream(words) + .filter(word -> word.equals(new StringBuilder(word).reverse().toString())) + .findFirst() + .orElse(""); + } } From e9713200867ee54d79dcd980c35754a893f4bde7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 13 Feb 2024 18:44:00 -0800 Subject: [PATCH 1400/1640] Update Rearrange Array Elements by Sign.java --- Medium/Rearrange Array Elements by Sign.java | 33 +++++++++----------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/Medium/Rearrange Array Elements by Sign.java b/Medium/Rearrange Array Elements by Sign.java index d2eb68e7..83857f13 100644 --- a/Medium/Rearrange Array Elements by Sign.java +++ b/Medium/Rearrange Array Elements by Sign.java @@ -1,21 +1,18 @@ class Solution { - public int[] rearrangeArray(int[] nums) { - List positive = new ArrayList<>(); - List negative = new ArrayList<>(); - for (int num : nums) { - if (num > 0) { - positive.add(num); - } else { - negative.add(num); - } + public int[] rearrangeArray(int[] nums) { + int n = nums.length; + int[] result = new int[n]; + int posIndex = 0; + int negIndex = 1; + for (int i = 0; i < n; i++) { + if (nums[i] > 0) { + result[posIndex] = nums[i]; + posIndex += 2; + } else { + result[negIndex] = nums[i]; + negIndex += 2; + } + } + return result; } - int positiveIdx = 0; - int negativeIdx = 0; - boolean positiveFlag = true; - for (int i = 0; i < nums.length; i++) { - nums[i] = positiveFlag ? positive.get(positiveIdx++) : negative.get(negativeIdx++); - positiveFlag = !positiveFlag; - } - return nums; - } } From 44b4003e764421409f071f0f4ee2367cdf65af6f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Feb 2024 07:51:41 -0800 Subject: [PATCH 1401/1640] Create Find Polygon With the Largest Perimeter.java --- .../Find Polygon With the Largest Perimeter.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Find Polygon With the Largest Perimeter.java diff --git a/Medium/Find Polygon With the Largest Perimeter.java b/Medium/Find Polygon With the Largest Perimeter.java new file mode 100644 index 00000000..8b368cb2 --- /dev/null +++ b/Medium/Find Polygon With the Largest Perimeter.java @@ -0,0 +1,15 @@ +class Solution { + public long largestPerimeter(int[] nums) { + Arrays.sort(nums); + int n = nums.length; + long prefixSum = 0; + long result = -1; + for (int i = 0; i < n; i++) { + if (i >= 2 && nums[i] < prefixSum) { + result = nums[i] + prefixSum; + } + prefixSum += nums[i]; + } + return result; + } +} From 93ab03af6feba7c6fe6653a97c7224f71fcc1318 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 15 Feb 2024 08:18:50 -0800 Subject: [PATCH 1402/1640] Update Remove Interval.java --- Medium/Remove Interval.java | 47 ++++++++++++++++++++++++++----------- 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/Medium/Remove Interval.java b/Medium/Remove Interval.java index 0405621d..e64370e0 100644 --- a/Medium/Remove Interval.java +++ b/Medium/Remove Interval.java @@ -1,18 +1,37 @@ class Solution { - public List> removeInterval(int[][] intervals, int[] toBeRemoved) { - List> result = new ArrayList<>(); - for (int[] interval : intervals) { - if (interval[0] > toBeRemoved[1] || interval[1] < toBeRemoved[0]) { - result.add(Arrays.asList(interval[0], interval[1])); - } else { - if (interval[0] < toBeRemoved[0]) { - result.add(Arrays.asList(interval[0], toBeRemoved[0])); + public List> removeInterval(int[][] intervals, int[] toBeRemoved) { + List> result = new ArrayList<>(); + int n = intervals.length; + int removeStart = toBeRemoved[0]; + int removeEnd = toBeRemoved[1]; + for (int i = 0; i < n; i++) { + int currStart = intervals[i][0]; + int currEnd = intervals[i][1]; + // complete overlap hence skipping complete interval + if (currStart >= removeStart && currEnd <= removeEnd) { + continue; + } + // no overlap hence adding complete interval + if ((currStart <= removeStart && currEnd <= removeStart) || (currStart >= removeEnd && currEnd >= removeEnd)) { + result.add(List.of(currStart, currEnd)); + continue; + } + // partial overlaps + if (currStart <= removeStart) { + int newStart = Math.min(currStart, removeStart); + int newEnd = Math.max(currStart, removeStart); + if (newStart != newEnd) { + result.add(List.of(newStart, newEnd)); + } + } + if (currEnd >= removeEnd) { + int newStart = Math.min(currEnd, removeEnd); + int newEnd = Math.max(currEnd, removeEnd); + if (newStart != newEnd) { + result.add(List.of(newStart, newEnd)); + } + } } - if (interval[1] > toBeRemoved[1]) { - result.add(Arrays.asList(toBeRemoved[1], interval[1])); - } - } + return result; } - return result; - } } From 27c4b6e881ec76385a72b729b47d0859be16f69b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 16 Feb 2024 07:40:47 -0800 Subject: [PATCH 1403/1640] Update Least Number of Unique Integers after K Removals.java --- ...r of Unique Integers after K Removals.java | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/Medium/Least Number of Unique Integers after K Removals.java b/Medium/Least Number of Unique Integers after K Removals.java index 30b56fac..c6755d8e 100644 --- a/Medium/Least Number of Unique Integers after K Removals.java +++ b/Medium/Least Number of Unique Integers after K Removals.java @@ -1,28 +1,19 @@ class Solution { - public int findLeastNumOfUniqueInts(int[] arr, int k) { - Map map = new HashMap<>(); - List list = new ArrayList<>(); - for (int num : arr) { - if (!map.containsKey(num)) { - list.add(num); - } - map.put(num, map.getOrDefault(num, 0) + 1); + public int findLeastNumOfUniqueInts(int[] arr, int k) { + Map map = new HashMap<>(); + for (int num : arr) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + PriorityQueue pq = new PriorityQueue<>((a, b) -> map.get(a).compareTo(map.get(b))); + pq.addAll(map.keySet()); + while (k > 0 && !pq.isEmpty()) { + int count = map.get(pq.peek()); + if (count > k) { + break; + } + k -= count; + pq.poll(); + } + return pq.size(); } - Collections.sort(list, new Comparator(){ - public int compare(Integer o1, Integer o2) { - return map.get(o1) - map.get(o2); - } - }); - for (Integer num : list) { - int count = map.get(num); - k -= count; - if (k >= 0) { - map.remove(num); - } - else { - break; - } - } - return map.size(); - } } From d39e2e130ed7d4bc456ccfce11ba7a41a5f410be Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 17 Feb 2024 08:33:11 -0800 Subject: [PATCH 1404/1640] Update Furthest Building You Can Reach.java --- Medium/Furthest Building You Can Reach.java | 30 +++++++++++---------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Medium/Furthest Building You Can Reach.java b/Medium/Furthest Building You Can Reach.java index 2c901072..1e110678 100644 --- a/Medium/Furthest Building You Can Reach.java +++ b/Medium/Furthest Building You Can Reach.java @@ -1,18 +1,20 @@ class Solution { - public int furthestBuilding(int[] heights, int bricks, int ladders) { - PriorityQueue pq = new PriorityQueue<>(); - for (int i = 1; i < heights.length; i++) { - int diff = heights[i] - heights[i - 1]; - if (diff > 0) { - pq.add(diff); - if (pq.size() > ladders) { - bricks -= pq.poll(); + public int furthestBuilding(int[] heights, int bricks, int ladders) { + PriorityQueue pq = new PriorityQueue<>((a, b) -> b - a); + for (int i = 1; i < heights.length; i++) { + int diff = heights[i] - heights[i - 1]; + if (diff > 0) { + pq.add(diff); + bricks -= diff; + if (bricks < 0) { + if (ladders == 0) { + return i - 1; + } + ladders--; + bricks += pq.poll(); + } + } } - if (bricks < 0) { - return i - 1; - } - } + return heights.length - 1; } - return heights.length - 1; - } } From 6a44f83154dbdb7757dad9f585403e8002cdefd6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 17 Feb 2024 09:05:35 -0800 Subject: [PATCH 1405/1640] Create Maximum Number of Operations With the Same Score I.java --- ...umber of Operations With the Same Score I.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Maximum Number of Operations With the Same Score I.java diff --git a/Easy/Maximum Number of Operations With the Same Score I.java b/Easy/Maximum Number of Operations With the Same Score I.java new file mode 100644 index 00000000..22f6648d --- /dev/null +++ b/Easy/Maximum Number of Operations With the Same Score I.java @@ -0,0 +1,15 @@ +class Solution { + public int maxOperations(int[] nums) { + int score = -1; + int operations = 0; + for (int i = 0; i <= nums.length - 2; i += 2) { + int currScore = nums[i] + nums[i + 1]; + if (score != -1 && score != currScore) { + break; + } + score = currScore; + operations++; + } + return operations; + } +} From e84e665fe0f5a8cf8ff7462b24f4146839f6d9a4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 17 Feb 2024 14:13:07 -0800 Subject: [PATCH 1406/1640] Create Apply Operations to Make String Empty.java --- .../Apply Operations to Make String Empty.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Apply Operations to Make String Empty.java diff --git a/Medium/Apply Operations to Make String Empty.java b/Medium/Apply Operations to Make String Empty.java new file mode 100644 index 00000000..c378a060 --- /dev/null +++ b/Medium/Apply Operations to Make String Empty.java @@ -0,0 +1,18 @@ +class Solution { + public String lastNonEmptyString(String s) { + Map map = new HashMap<>(); + int maxFrequency = 0; + for (int i = 0; i < s.length(); i++) { + map.put(s.charAt(i), map.getOrDefault(s.charAt(i), 0) + 1); + maxFrequency = Math.max(maxFrequency, map.get(s.charAt(i))); + } + StringBuilder result = new StringBuilder(); + for (int i = s.length() - 1; i >= 0; i--) { + if (map.get(s.charAt(i)) == maxFrequency) { + result.append(s.charAt(i)); + map.put(s.charAt(i), map.get(s.charAt(i)) - 1); + } + } + return result.reverse().toString(); + } +} From fb2b1babb63940655fd664a7b394652c44d0b6e9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 18 Feb 2024 13:22:50 -0800 Subject: [PATCH 1407/1640] Create Meeting Rooms III.java --- Hard/Meeting Rooms III.java | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Hard/Meeting Rooms III.java diff --git a/Hard/Meeting Rooms III.java b/Hard/Meeting Rooms III.java new file mode 100644 index 00000000..48167f8c --- /dev/null +++ b/Hard/Meeting Rooms III.java @@ -0,0 +1,31 @@ +class Solution { + public int mostBooked(int n, int[][] meetings) { + Arrays.sort(meetings, Comparator.comparingInt(o -> o[0])); + PriorityQueue ongoingMeetings = new PriorityQueue<>(Comparator.comparingInt(a -> a[0])); + int[] frequency = new int[n]; + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> o1[0] == o2[0] ? (int) (o1[1] - o2[1]) : (int) (o1[0] - o2[0])); + for (int i = 0; i < n; i++) { + pq.add(new long[]{0, i}); + } + for (int[] meeting : meetings) { + int startTime = meeting[0]; + while (pq.peek()[0] < startTime) { + pq.add(new long[]{startTime, pq.poll()[1]}); + } + long[] finishedMeeting = pq.poll(); + int room = (int) finishedMeeting[1]; + long endTime = finishedMeeting[0] + (meeting[1] - meeting[0]); + frequency[room]++; + pq.add(new long[]{endTime, room}); + } + int maxCount = 0; + int roomWithMaxCount = 0; + for (int i = 0; i < n; i++) { + if (frequency[i] > maxCount) { + maxCount = frequency[i]; + roomWithMaxCount = i; + } + } + return roomWithMaxCount; + } +} From cb1e04e3a9d3add7f138f9cbf7668db4cb86714c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 19 Feb 2024 09:28:35 -0800 Subject: [PATCH 1408/1640] Create Count Prefix and Suffix Pairs I.java --- Easy/Count Prefix and Suffix Pairs I.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Count Prefix and Suffix Pairs I.java diff --git a/Easy/Count Prefix and Suffix Pairs I.java b/Easy/Count Prefix and Suffix Pairs I.java new file mode 100644 index 00000000..919d41d1 --- /dev/null +++ b/Easy/Count Prefix and Suffix Pairs I.java @@ -0,0 +1,14 @@ +class Solution { + public int countPrefixSuffixPairs(String[] words) { + int count = 0; + for (int i = 0; i < words.length; i++) { + String target = words[i]; + for (int j = i + 1; j < words.length; j++) { + if (words[j].startsWith(target) && words[j].endsWith(target)) { + count++; + } + } + } + return count; + } +} From 97306e9c4c504de09d9e22dec3f9b9a6ec8e40f1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Feb 2024 07:25:19 -0800 Subject: [PATCH 1409/1640] Create Find the Length of the Longest Common Prefix.java --- ...e Length of the Longest Common Prefix.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 Medium/Find the Length of the Longest Common Prefix.java diff --git a/Medium/Find the Length of the Longest Common Prefix.java b/Medium/Find the Length of the Longest Common Prefix.java new file mode 100644 index 00000000..a626cd3a --- /dev/null +++ b/Medium/Find the Length of the Longest Common Prefix.java @@ -0,0 +1,52 @@ +class Solution { + public int longestCommonPrefix(int[] arr1, int[] arr2) { + TrieNodeManager nodeManager = new TrieNodeManager(); + for (int num : arr1) { + nodeManager.index(String.valueOf(num)); + } + int maxLength = 0; + for (int num : arr2) { + int length = nodeManager.find(String.valueOf(num)); + maxLength = Math.max(maxLength, length); + } + return maxLength; + } + + private static class TrieNodeManager { + + private Node root; + + public TrieNodeManager() { + this.root = new Node(); + } + + public void index(String s) { + Node curr = root; + for (char c : s.toCharArray()) { + if (!curr.children.containsKey(c)) { + curr.children.put(c, new Node()); + } + curr = curr.children.get(c); + } + } + + public int find(String s) { + Node curr = root; + for (int i = 0; i < s.length(); i++) { + if (!curr.children.containsKey(s.charAt(i))) { + return i; + } + curr = curr.children.get(s.charAt(i)); + } + return s.length(); + } + + class Node { + Map children; + + public Node() { + this.children = new HashMap<>(); + } + } + } +} From 4422419e6f9e31a87188c8ec4fedc064a1956d6f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 24 Feb 2024 14:01:33 -0800 Subject: [PATCH 1410/1640] Create Find All People With Secret.java --- Hard/Find All People With Secret.java | 39 +++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Hard/Find All People With Secret.java diff --git a/Hard/Find All People With Secret.java b/Hard/Find All People With Secret.java new file mode 100644 index 00000000..b18f289a --- /dev/null +++ b/Hard/Find All People With Secret.java @@ -0,0 +1,39 @@ +class Solution { + public List findAllPeople(int n, int[][] meetings, int firstPerson) { + Map> graph = new HashMap<>(); + for (int[] meeting : meetings) { + int x = meeting[0]; + int y = meeting[1]; + int time = meeting[2]; + graph.computeIfAbsent(x, k -> new ArrayList<>()).add(new int[]{time, y}); + graph.computeIfAbsent(y, k -> new ArrayList<>()).add(new int[]{time, x}); + } + int[] earliestTime = new int[n]; + Arrays.fill(earliestTime, Integer.MAX_VALUE); + earliestTime[0] = 0; + earliestTime[firstPerson] = 0; + Queue queue = new LinkedList<>(); + queue.add(new int[]{0, 0}); + queue.add(new int[]{firstPerson, 0}); + while (!queue.isEmpty()) { + int[] removed = queue.poll(); + int person = removed[0]; + int time = removed[1]; + for (int[] conn : graph.getOrDefault(person, new ArrayList<>())) { + int t = conn[0]; + int p = conn[1]; + if (t >= time && earliestTime[p] > t) { + earliestTime[p] = t; + queue.add(new int[]{p, t}); + } + } + } + List result = new ArrayList<>(); + for (int i = 0; i < n; i++) { + if (earliestTime[i] != Integer.MAX_VALUE) { + result.add(i); + } + } + return result; + } +} From 4aef2f9bf3a0d8ad311bc2aba12aaa760fa81944 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Feb 2024 13:15:29 -0800 Subject: [PATCH 1411/1640] Create Greatest Common Divisor Traversal.java --- Hard/Greatest Common Divisor Traversal.java | 80 +++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 Hard/Greatest Common Divisor Traversal.java diff --git a/Hard/Greatest Common Divisor Traversal.java b/Hard/Greatest Common Divisor Traversal.java new file mode 100644 index 00000000..81ab07de --- /dev/null +++ b/Hard/Greatest Common Divisor Traversal.java @@ -0,0 +1,80 @@ +class Solution { + + private static final int MAX = 100_000; + + public boolean canTraverseAllPairs(int[] nums) { + int n = nums.length; + if (n == 1) { + return true; + } + boolean[] exists = new boolean[MAX + 1]; + for (int num : nums) { + exists[num] = true; + } + if (exists[1]) { + return false; + } + int[] sieve = new int[MAX + 1]; + for (int i = 2; i <= MAX; i++) { + if (sieve[i] == 0) { + for (int j = i; j <= MAX; j += i) { + sieve[j] = i; + } + } + } + Union union = new Union(2 * MAX + 1); + for (int num : nums) { + int curr = num; + while (curr > 1) { + int prime = sieve[curr]; + int root = prime + MAX; + if (union.find(root) != union.find(num)) { + union.merge(root, num); + } + while (curr % prime == 0) { + curr /= prime; + } + } + } + int count = 0; + for (int i = 2; i <= MAX; i++) { + if (exists[i] && union.find(i) == i) { + count++; + } + } + return count == 1; + } + + private class Union { + private final int[] union; + private final int[] size; + + public Union(int n) { + this.union = new int[n + 1]; + this.size = new int[n + 1]; + for (int i = 0; i <= n; i++) { + union[i] = i; + size[i] = 1; + } + } + + public int find(int num) { + return union[num] == num ? num : (union[num] = find(union[num])); + } + + public void merge(int x, int y) { + int findX = find(x); + int findY = find(y); + if (findX == findY) { + return; + } + if (size[findX] > size[findY]) { + int temp = findX; + findX = findY; + findY = temp; + } + union[findX] = findY; + size[findY] += size[findX]; + } + } +} From 252eda75201e61ac7b6ecb3173725ceee8cb22f9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Feb 2024 15:41:18 -0800 Subject: [PATCH 1412/1640] Create Split the Array.java --- Easy/Split the Array.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/Split the Array.java diff --git a/Easy/Split the Array.java b/Easy/Split the Array.java new file mode 100644 index 00000000..607a2de0 --- /dev/null +++ b/Easy/Split the Array.java @@ -0,0 +1,10 @@ +class Solution { + public boolean isPossibleToSplit(int[] nums) { + return Arrays.stream(nums) + .boxed() + .collect(Collectors.groupingBy(Function.identity(), HashMap::new, Collectors.counting())) + .values() + .stream() + .allMatch(v -> v <= 2); + } +} From 1743d9da0de4b2a368612ff63d99ec878da0447d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Feb 2024 16:55:42 -0800 Subject: [PATCH 1413/1640] Update Tree Diameter.java --- Medium/Tree Diameter.java | 63 ++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/Medium/Tree Diameter.java b/Medium/Tree Diameter.java index 28dca810..87d5eab9 100644 --- a/Medium/Tree Diameter.java +++ b/Medium/Tree Diameter.java @@ -1,36 +1,39 @@ class Solution { - public int treeDiameter(int[][] edges) { - Map> graph = new HashMap<>(); - for (int[] edge : edges) { - graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); - graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + public int treeDiameter(int[][] edges) { + int n = edges.length; + List> graph = new ArrayList<>(); + boolean[] visited = new boolean[n + 1]; + for (int i = 0; i < n + 1; i++) { + graph.add(new HashSet<>()); + } + for (int[] edge : edges) { + int nodeOne = edge[0]; + int nodeTwo = edge[1]; + graph.get(nodeOne).add(nodeTwo); + graph.get(nodeTwo).add(nodeOne); + } + int[] diameter = {0}; + dfs(0, visited, graph, diameter); + return diameter[0]; } - int farthestNode = bfsHelper(graph, 0)[0]; - return bfsHelper(graph, farthestNode)[1]; - } - private int[] bfsHelper(Map> graph, int node) { - int farthestNode = 0; - int steps = 0; - Queue queue = new LinkedList<>(); - queue.add(node); - Set visited = new HashSet<>(); - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int removedNode = queue.remove(); - visited.add(removedNode); - farthestNode = removedNode; - for (Integer peer : graph.getOrDefault(removedNode, new ArrayList<>())) { - if (!visited.contains(peer)) { - queue.add(peer); - } + private int dfs(int node, boolean[] visited, List> graph, int[] diameter) { + int highestDistance = 0; + int secondHighestDistance = 0; + visited[node] = true; + for (Integer conn : graph.get(node)) { + int distance = 0; + if (!visited[conn]) { + distance = 1 + dfs(conn, visited, graph, diameter); + } + if (distance > highestDistance) { + secondHighestDistance = highestDistance; + highestDistance = distance; + } else if (distance > secondHighestDistance) { + secondHighestDistance = distance; + } } - } - if (!queue.isEmpty()) { - steps++; - } + diameter[0] = Math.max(diameter[0], highestDistance + secondHighestDistance); + return highestDistance; } - return new int[]{farthestNode, steps}; - } } From f57b3dbaccdc73c0b0f467c89bcd6066ae298008 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 28 Feb 2024 19:09:51 -0800 Subject: [PATCH 1414/1640] Update Even Odd Tree.java --- Medium/Even Odd Tree.java | 55 ++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/Medium/Even Odd Tree.java b/Medium/Even Odd Tree.java index 0d3a4886..574ddf6b 100644 --- a/Medium/Even Odd Tree.java +++ b/Medium/Even Odd Tree.java @@ -14,36 +14,31 @@ * } */ class Solution { - public boolean isEvenOddTree(TreeNode root) { - Queue queue = new LinkedList<>(); - queue.add(root); - int remainderExpected = 1; - while (!queue.isEmpty()) { - int size = queue.size(); - Integer prev = null; - while (size-- > 0) { - TreeNode removed = queue.remove(); - if (removed.val % 2 != remainderExpected) { - return false; + public boolean isEvenOddTree(TreeNode root) { + Queue queue = new LinkedList<>(); + queue.add(root); + boolean even = true; + while (!queue.isEmpty()) { + int size = queue.size(); + int prev = even ? Integer.MIN_VALUE : Integer.MAX_VALUE; + while (size-- > 0) { + TreeNode removed = queue.remove(); + if ((even && removed.val % 2 == 0) || (!even && removed.val % 2 != 0)) { + return false; + } + if ((even && removed.val <= prev) || (!even && removed.val >= prev)) { + return false; + } + prev = removed.val; + if (removed.left != null) { + queue.add(removed.left); + } + if (removed.right != null) { + queue.add(removed.right); + } + } + even = !even; } - if (prev != null) { - if (remainderExpected == 1 && removed.val <= prev) { - return false; - } - if (remainderExpected == 0 && removed.val >= prev) { - return false; - } - } - prev = removed.val; - if (removed.left != null) { - queue.add(removed.left); - } - if (removed.right != null) { - queue.add(removed.right); - } - } - remainderExpected = remainderExpected == 1 ? 0 : 1; + return true; } - return true; - } } From 1f6ead115dcbd62dab8dd3dc29110146a7398266 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 29 Feb 2024 18:06:03 -0800 Subject: [PATCH 1415/1640] Create Winner of the Linked List Game.java --- Easy/Winner of the Linked List Game.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Easy/Winner of the Linked List Game.java diff --git a/Easy/Winner of the Linked List Game.java b/Easy/Winner of the Linked List Game.java new file mode 100644 index 00000000..198fdd75 --- /dev/null +++ b/Easy/Winner of the Linked List Game.java @@ -0,0 +1,23 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public String gameResult(ListNode head) { + ListNode curr = head; + int count = 0; + while (curr != null) { + int even = curr.val; + int odd = curr.next.val; + count += even == odd ? 0 : (even > odd ? 1 : -1); + curr = curr.next.next; + } + return count == 0 ? "Tie" : (count > 0 ? "Even" : "Odd"); + } +} From e3de53f51a0f667f77047d6d2f4a74528aac578d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Mar 2024 10:15:32 -0800 Subject: [PATCH 1416/1640] Update Squares of a Sorted Array.java --- Easy/Squares of a Sorted Array.java | 36 +++++++++++------------------ 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/Easy/Squares of a Sorted Array.java b/Easy/Squares of a Sorted Array.java index 046fcf9c..08f5faa6 100644 --- a/Easy/Squares of a Sorted Array.java +++ b/Easy/Squares of a Sorted Array.java @@ -1,26 +1,18 @@ class Solution { - public int[] sortedSquares(int[] nums) { - int negativeIdx = 0; - int positiveIdx = nums.length - 1; - int[] result = new int[nums.length]; - int resultIdx = nums.length - 1; - while(resultIdx >= 0) { - if (nums[negativeIdx] < 0 && nums[positiveIdx] >= 0) { - if (Math.abs(nums[negativeIdx]) > nums[positiveIdx]) { - result[resultIdx--] = nums[negativeIdx] * nums[negativeIdx]; - negativeIdx++; - } else { - result[resultIdx--] = nums[positiveIdx] * nums[positiveIdx]; - positiveIdx--; + public int[] sortedSquares(int[] nums) { + int n = nums.length; + int start = 0; + int end = n - 1; + int[] result = new int[n]; + for (int i = n - 1; i >= 0; i--) { + if (Math.abs(nums[start]) >= Math.abs(nums[end])) { + result[i] = nums[start] * nums[start]; + start++; + } else { + result[i] = nums[end] * nums[end]; + end--; + } } - } else if (nums[negativeIdx] < 0 && nums[positiveIdx] < 0) { - result[resultIdx--] = nums[negativeIdx] * nums[negativeIdx]; - negativeIdx++; - } else { - result[resultIdx--] = nums[positiveIdx] * nums[positiveIdx]; - positiveIdx--; - } + return result; } - return result; - } } From 92e8246b5ef50a7836df342cfc4501945a34e75a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 2 Mar 2024 13:59:35 -0800 Subject: [PATCH 1417/1640] Create Minimum Operations to Exceed Threshold Value I.java --- ...um Operations to Exceed Threshold Value I.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Minimum Operations to Exceed Threshold Value I.java diff --git a/Easy/Minimum Operations to Exceed Threshold Value I.java b/Easy/Minimum Operations to Exceed Threshold Value I.java new file mode 100644 index 00000000..6f792f07 --- /dev/null +++ b/Easy/Minimum Operations to Exceed Threshold Value I.java @@ -0,0 +1,15 @@ +class Solution { + public int minOperations(int[] nums, int k) { + Map map = new HashMap<>(); + for (int num : nums) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + PriorityQueue pq = new PriorityQueue<>(); + pq.addAll(map.keySet()); + int count = 0; + while (!pq.isEmpty() && pq.peek() < k) { + count += map.get(pq.poll()); + } + return count; + } +} From db0976a8fdac0400635473c7baf879afe4d1bfcc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Mar 2024 10:27:35 -0800 Subject: [PATCH 1418/1640] Create Distribute Elements Into Two Arrays I.java --- ...Distribute Elements Into Two Arrays I.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Easy/Distribute Elements Into Two Arrays I.java diff --git a/Easy/Distribute Elements Into Two Arrays I.java b/Easy/Distribute Elements Into Two Arrays I.java new file mode 100644 index 00000000..9b4bd7d1 --- /dev/null +++ b/Easy/Distribute Elements Into Two Arrays I.java @@ -0,0 +1,26 @@ +class Solution { + public int[] resultArray(int[] nums) { + int start = 0; + int end = nums.length - 1; + int[] result = new int[nums.length]; + result[start++] = nums[0]; + result[end--] = nums[1]; + for (int i = 2; i < nums.length; i++) { + if (result[start - 1] > result[end + 1]) { + result[start++] = nums[i]; + } else { + result[end--] = nums[i]; + } + } + int left = end + 1; + int right = nums.length - 1; + while (left < right) { + int temp = result[left]; + result[left] = result[right]; + result[right] = temp; + left++; + right--; + } + return result; + } +} From 72203227b5ac66f2bf797225432a1cff1f3e35c4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 3 Mar 2024 16:54:35 -0800 Subject: [PATCH 1419/1640] Update Bag of Tokens.java --- Medium/Bag of Tokens.java | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Medium/Bag of Tokens.java b/Medium/Bag of Tokens.java index d86085c3..1a409e0c 100644 --- a/Medium/Bag of Tokens.java +++ b/Medium/Bag of Tokens.java @@ -1,23 +1,23 @@ class Solution { - public int bagOfTokensScore(int[] tokens, int power) { - int score = 0; - Arrays.sort(tokens); - int leftIdx = 0; - int rightIdx = tokens.length - 1; - int currScore = 0; - while (leftIdx <= rightIdx) { - if (power >= tokens[leftIdx]) { - currScore++; - power -= tokens[leftIdx++]; - } else { - if (currScore == 0) { - break; + public int bagOfTokensScore(int[] tokens, int power) { + int score = 0; + int currScore = 0; + Arrays.sort(tokens); + int left = 0; + int right = tokens.length - 1; + while (left <= right) { + if (power >= tokens[left]) { + currScore++; + power -= tokens[left++]; + } else { + if (currScore == 0) { + break; + } + currScore--; + power += tokens[right--]; + } + score = Math.max(score, currScore); } - currScore--; - power += tokens[rightIdx--]; - } - score = Math.max(score, currScore); + return score; } - return score; - } } From 2c002d2b2318319224e92cad2f06ea1eea6dc2e9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Mar 2024 18:27:00 -0800 Subject: [PATCH 1420/1640] Create Minimum Length of String After Deleting Similar Ends.java --- ...h of String After Deleting Similar Ends.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Minimum Length of String After Deleting Similar Ends.java diff --git a/Medium/Minimum Length of String After Deleting Similar Ends.java b/Medium/Minimum Length of String After Deleting Similar Ends.java new file mode 100644 index 00000000..bc1c6c89 --- /dev/null +++ b/Medium/Minimum Length of String After Deleting Similar Ends.java @@ -0,0 +1,17 @@ +class Solution { + public int minimumLength(String s) { + int start = 0; + int end = s.length() - 1; + while (start < end && s.charAt(start) == s.charAt(end)) { + char startChar = s.charAt(start); + char endChar = s.charAt(end); + while (start <= end && s.charAt(start) == startChar) { + start++; + } + while (end > start && s.charAt(end) == endChar) { + end--; + } + } + return end - start + 1; + } +} From 8c7400fb11c6eb1b5964d89374021a6292f0c0aa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 8 Mar 2024 06:34:57 -0800 Subject: [PATCH 1421/1640] Create Linked List Frequency.java --- Medium/Linked List Frequency.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Linked List Frequency.java diff --git a/Medium/Linked List Frequency.java b/Medium/Linked List Frequency.java new file mode 100644 index 00000000..1c5a1739 --- /dev/null +++ b/Medium/Linked List Frequency.java @@ -0,0 +1,25 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode frequenciesOfElements(ListNode head) { + Map map = new HashMap<>(); + for (ListNode curr = head; curr != null; curr = curr.next) { + map.put(curr.val, map.getOrDefault(curr.val, 0) + 1); + } + ListNode dummy = new ListNode(-1); + ListNode curr = dummy; + for (Integer key : map.keySet()) { + curr.next = new ListNode(map.get(key)); + curr = curr.next; + } + return dummy.next; + } +} From 4ecc1187000ae9cd7d8eb20cd84265081c11ba5c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 9 Mar 2024 16:21:59 -0800 Subject: [PATCH 1422/1640] Update Intersection of Two Arrays.java --- Easy/Intersection of Two Arrays.java | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/Easy/Intersection of Two Arrays.java b/Easy/Intersection of Two Arrays.java index d05f4468..24a47d60 100644 --- a/Easy/Intersection of Two Arrays.java +++ b/Easy/Intersection of Two Arrays.java @@ -1,25 +1,8 @@ class Solution { - public int[] intersection(int[] nums1, int[] nums2) { - boolean[][] found = new boolean[1001][2]; - for (int num : nums1) { - found[num][0] = true; + public int[] intersection(int[] nums1, int[] nums2) { + Set set1 = Arrays.stream(nums1).boxed().collect(Collectors.toSet()); + Set set2 = Arrays.stream(nums2).boxed().collect(Collectors.toSet()); + set1.retainAll(set2); + return set1.stream().mapToInt(Integer::intValue).toArray(); } - int count = 0; - for (int num : nums2) { - if (!found[num][1]) { - if (found[num][0]) { - count++; - } - } - found[num][1] = true; - } - int[] result = new int[count]; - int idx = 0; - for (int i = 1; i <= 1000; i++) { - if (found[i][0] && found[i][1]) { - result[idx++] = i; - } - } - return result; - } } From 6a885d7bc246222d2f47f5e1fd45afd740c6daf7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 10 Mar 2024 16:08:15 -0700 Subject: [PATCH 1423/1640] Create Apple Redistribution into Boxes.java --- Easy/Apple Redistribution into Boxes.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Apple Redistribution into Boxes.java diff --git a/Easy/Apple Redistribution into Boxes.java b/Easy/Apple Redistribution into Boxes.java new file mode 100644 index 00000000..d84bd8a8 --- /dev/null +++ b/Easy/Apple Redistribution into Boxes.java @@ -0,0 +1,20 @@ +class Solution { + public int minimumBoxes(int[] apple, int[] capacity) { + int totalApples = 0; + for (int count : apple) { + totalApples += count; + } + Arrays.sort(capacity); + int idx = capacity.length - 1; + int currCapacity = capacity[idx--]; + while (totalApples > 0) { + int applesDeleted = Math.min(currCapacity, totalApples); + totalApples -= applesDeleted; + currCapacity -= applesDeleted; + if (currCapacity == 0 && totalApples > 0) { + currCapacity = capacity[idx--]; + } + } + return capacity.length - idx - 1; + } +} From c0bd347683b4a68f38987495e8f4deca4efe2ec6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 11 Mar 2024 17:46:11 -0700 Subject: [PATCH 1424/1640] Update Remove Zero Sum Consecutive Nodes from Linked List.java --- ...um Consecutive Nodes from Linked List.java | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/Medium/Remove Zero Sum Consecutive Nodes from Linked List.java b/Medium/Remove Zero Sum Consecutive Nodes from Linked List.java index 9807ca95..6f55accd 100644 --- a/Medium/Remove Zero Sum Consecutive Nodes from Linked List.java +++ b/Medium/Remove Zero Sum Consecutive Nodes from Linked List.java @@ -9,25 +9,24 @@ * } */ class Solution { - public ListNode removeZeroSumSublists(ListNode head) { - ListNode dummy = new ListNode(0); - ListNode curr = head; - dummy.next = head; - Map map = new HashMap<>(); - int prefixSum = 0; - map.put(0, dummy); - while (curr != null) { - prefixSum += curr.val; - map.put(prefixSum, curr); - curr = curr.next; + public ListNode removeZeroSumSublists(ListNode head) { + ListNode dummy = new ListNode(0, head); + ListNode curr = dummy; + int prefixSum = 0; + Map map = new HashMap<>(); + map.put(0, curr); + while (curr != null) { + prefixSum += curr.val; + map.put(prefixSum, curr); + curr = curr.next; + } + prefixSum = 0; + curr = dummy; + while (curr != null) { + prefixSum += curr.val; + curr.next = map.get(prefixSum).next; + curr = curr.next; + } + return dummy.next; } - prefixSum = 0; - curr = dummy; - while (curr != null) { - prefixSum += curr.val; - curr.next = map.get(prefixSum).next; - curr = curr.next; - } - return dummy.next; - } } From c6160261c59698337b83083c2d6789a4527f90c4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Mar 2024 09:08:21 -0700 Subject: [PATCH 1425/1640] Create Find the Sum of Encrypted Integers.java --- Easy/Find the Sum of Encrypted Integers.java | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Easy/Find the Sum of Encrypted Integers.java diff --git a/Easy/Find the Sum of Encrypted Integers.java b/Easy/Find the Sum of Encrypted Integers.java new file mode 100644 index 00000000..6cee31bc --- /dev/null +++ b/Easy/Find the Sum of Encrypted Integers.java @@ -0,0 +1,21 @@ +class Solution { + public int sumOfEncryptedInt(int[] nums) { + int sum = 0; + for (int num : nums) { + sum += getEncryptedSum(num); + } + return sum; + } + + private static int getEncryptedSum(int num) { + int count = 0; + int max = 0; + while (num > 0) { + int digit = num % 10; + num /= 10; + count++; + max = Math.max(digit, max); + } + return Integer.parseInt(String.join("", Collections.nCopies(count, String.valueOf(max)))); + } +} From bc153969bf4bd1e700cbf3878130aeae1790322b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Mar 2024 09:18:11 -0700 Subject: [PATCH 1426/1640] Update Insert Interval.java --- Medium/Insert Interval.java | 45 +++++++++++++------------------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/Medium/Insert Interval.java b/Medium/Insert Interval.java index a263b710..a90a6884 100644 --- a/Medium/Insert Interval.java +++ b/Medium/Insert Interval.java @@ -1,32 +1,19 @@ class Solution { - public int[][] insert(int[][] intervals, int[] newInterval) { - List result = new ArrayList<>(); - int idx = 0; - int newStart = newInterval[0]; - int newEnd = newInterval[1]; - while (idx < intervals.length && newStart > intervals[idx][0]) { - result.add(intervals[idx++]); + public int[][] insert(int[][] intervals, int[] newInterval) { + List result = new ArrayList<>(); + int idx = 0; + while (idx < intervals.length && intervals[idx][1] < newInterval[0]) { + result.add(intervals[idx++]); + } + while (idx < intervals.length && newInterval[1] >= intervals[idx][0]) { + newInterval[0] = Math.min(newInterval[0], intervals[idx][0]); + newInterval[1] = Math.max(newInterval[1], intervals[idx][1]); + idx++; + } + result.add(newInterval); + while (idx < intervals.length) { + result.add(intervals[idx++]); + } + return result.toArray(new int[result.size()][]); } - int[] currInterval = new int[2]; - if (result.isEmpty() || result.get(result.size() - 1)[1] < newStart) { - result.add(newInterval); - } else { - currInterval = result.remove(result.size() - 1); - currInterval[1] = Math.max(currInterval[1], newEnd); - result.add(currInterval); - } - while (idx < intervals.length) { - currInterval = intervals[idx++]; - int start = currInterval[0]; - int end = currInterval[1]; - if (result.get(result.size() - 1)[1] < start) { - result.add(currInterval); - } else { - currInterval = result.remove(result.size() - 1); - currInterval[1] = Math.max(currInterval[1], end); - result.add(currInterval); - } - } - return result.toArray(new int[result.size()][2]); - } } From 25205b87a44faf2e93bbd658db93d834e1fe7b7e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 19 Mar 2024 17:43:37 -0700 Subject: [PATCH 1427/1640] Update Merge In Between Linked Lists.java --- Medium/Merge In Between Linked Lists.java | 39 ++++++++++------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/Medium/Merge In Between Linked Lists.java b/Medium/Merge In Between Linked Lists.java index 5e3b814a..9f36b5a8 100644 --- a/Medium/Merge In Between Linked Lists.java +++ b/Medium/Merge In Between Linked Lists.java @@ -9,27 +9,22 @@ * } */ class Solution { - public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) { - ListNode currList1 = list1; - // Stop just before a and record the pointer - for (int i = 0; i < a - 1; i++) { - currList1 = currList1.next; + public ListNode mergeInBetween(ListNode list1, int a, int b, ListNode list2) { + ListNode curr = list1; + for (int i = 1; i < a; i++) { + curr = curr.next; + } + ListNode start = curr; + for (int i = a - 1; i <= b; i++) { + curr = curr.next; + } + ListNode end = curr; + start.next = list2; + curr = list2; + while (curr.next != null) { + curr = curr.next; + } + curr.next = end; + return list1; } - ListNode currCopy = currList1; - // Cover a to b - for (int i = a; i <= b; i++) { - currList1 = currList1.next; - } - // Record what is remaining after b - ListNode remaining = currList1.next; - // Find end of list2 - ListNode list2End = list2; - while (list2End != null && list2End.next != null) { - list2End = list2End.next; - } - // Pointer manipulation - currCopy.next = list2; - list2End.next = remaining; - return list1; - } } From d7bef6088335dd3c0ab9ee007605c45acba13137 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 22 Mar 2024 07:34:22 -0700 Subject: [PATCH 1428/1640] Update Palindrome Linked List.java --- Easy/Palindrome Linked List.java | 62 +++++++++++++++----------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/Easy/Palindrome Linked List.java b/Easy/Palindrome Linked List.java index 946427e6..11c23754 100644 --- a/Easy/Palindrome Linked List.java +++ b/Easy/Palindrome Linked List.java @@ -9,39 +9,35 @@ * } */ class Solution { - public boolean isPalindrome(ListNode head) { - if (head.next == null) { - return true; + public boolean isPalindrome(ListNode head) { + ListNode slow = head; + ListNode fast = head; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + } + ListNode secondHalf = slow; + secondHalf = reverse(secondHalf); + ListNode firstHalf = head; + while (secondHalf != null && firstHalf != null) { + if (firstHalf.val != secondHalf.val) { + return false; + } + firstHalf = firstHalf.next; + secondHalf = secondHalf.next; + } + return true; } - ListNode slow = head; - ListNode fast = head; - ListNode prev = null; - while (fast != null && fast.next != null) { - prev = slow; - fast = fast.next.next; - slow = slow.next; + + private ListNode reverse(ListNode node) { + ListNode curr = node; + ListNode prev = null; + while (curr != null) { + ListNode next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; } - ListNode revNode = reverse(slow); - while (revNode != null) { - if (revNode.val != head.val) { - return false; - } - revNode = revNode.next; - head = head.next; - } - return true; - } - - private ListNode reverse(ListNode node) { - ListNode prev = null; - ListNode curr = node; - ListNode next = node; - while (curr != null) { - next = curr.next; - curr.next = prev; - prev = curr; - curr = next; - } - return prev; - } } From 72b581013e7ef90f5eb6dd41217441b74f3f9ee9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 23 Mar 2024 10:02:57 -0700 Subject: [PATCH 1429/1640] Update Reorder List.java --- Medium/Reorder List.java | 58 ++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/Medium/Reorder List.java b/Medium/Reorder List.java index 769a555d..99b9ea19 100644 --- a/Medium/Reorder List.java +++ b/Medium/Reorder List.java @@ -9,35 +9,35 @@ * } */ class Solution { - public void reorderList(ListNode head) { - ListNode slow = head; - ListNode fast = head; - while (fast != null && fast.next != null) { - slow = slow.next; - fast = fast.next.next; + public void reorderList(ListNode head) { + ListNode slow = head; + ListNode fast = head; + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + } + ListNode secondHalf = reverse(slow.next); + slow.next = null; + ListNode firstHalf = head; + while (firstHalf != null && secondHalf != null) { + ListNode firstNext = firstHalf.next; + ListNode secondNext = secondHalf.next; + firstHalf.next = secondHalf; + secondHalf.next = firstNext; + firstHalf = firstNext; + secondHalf = secondNext; + } } - ListNode secondHalf = reverse(slow.next); - slow.next = null; - ListNode firstHalf = head; - while (firstHalf != null && secondHalf != null) { - ListNode firstHalfNext = firstHalf.next; - ListNode secondHalfNext = secondHalf.next; - firstHalf.next = secondHalf; - secondHalf.next = firstHalfNext; - firstHalf = firstHalfNext; - secondHalf = secondHalfNext; + + private ListNode reverse(ListNode node) { + ListNode curr = node; + ListNode prev = null; + while (curr != null) { + ListNode next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; } - } - - private ListNode reverse(ListNode node) { - ListNode curr = node; - ListNode prev = null; - while (curr != null) { - ListNode next = curr.next; - curr.next = prev; - prev = curr; - curr = next; - } - return prev; - } } From 664bac5a16760e895044e8afe0dacfabe9349ecd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 26 Mar 2024 07:48:20 -0700 Subject: [PATCH 1430/1640] Update First Missing Positive.java --- Hard/First Missing Positive.java | 49 ++++++++++++++++---------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/Hard/First Missing Positive.java b/Hard/First Missing Positive.java index 91b5b6fd..3b501319 100644 --- a/Hard/First Missing Positive.java +++ b/Hard/First Missing Positive.java @@ -1,28 +1,27 @@ class Solution { - public int firstMissingPositive(int[] nums) { - int n = nums.length; - int idx = 0; - while (idx < n) { - if (nums[idx] > 0 && nums[idx] < n && nums[nums[idx]] != nums[idx]) { - swap(nums, idx, nums[idx]); - } - else { - idx++; - } + public int firstMissingPositive(int[] nums) { + int n = nums.length; + for (int i = 0; i < n; i++) { + if (nums[i] < 0) { + nums[i] = 0; + } + } + for (int i = 0; i < n; i++) { + int val = Math.abs(nums[i]); + if (val >= 1 && val <= n) { + int idx = val - 1; + if (nums[idx] > 0) { + nums[idx] *= -1; + } else if (nums[idx] == 0) { + nums[idx] = -1 * (n + 1); + } + } + } + for (int i = 1; i <= n; i++) { + if (nums[i - 1] >= 0) { + return i; + } + } + return n + 1; } - idx = 1; - while (idx < n && nums[idx] == idx) { - idx++; - } - if (n == 0 || idx < n) { - return idx; - } - return nums[0] == idx ? idx + 1 : idx; - } - - private void swap(int[] nums, int i, int j) { - int temp = nums[i]; - nums[i] = nums[j]; - nums[j] = temp; - } } From 8b593fc716250d0856671800b0551d6f12fe40b4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 27 Mar 2024 07:20:23 -0700 Subject: [PATCH 1431/1640] Update Subarray Product Less Than K.java --- Medium/Subarray Product Less Than K.java | 32 +++++++++++++----------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/Medium/Subarray Product Less Than K.java b/Medium/Subarray Product Less Than K.java index 68ba3e13..3f53dc87 100644 --- a/Medium/Subarray Product Less Than K.java +++ b/Medium/Subarray Product Less Than K.java @@ -1,18 +1,20 @@ class Solution { - public int numSubarrayProductLessThanK(int[] nums, int k) { - if (k <= 1) { - return 0; + public int numSubarrayProductLessThanK(int[] nums, int k) { + if (k <= 1) { + return 0; + } + int prod = 1; + int start = 0; + int end = 0; + int n = nums.length; + int result = 0; + while (end < n) { + prod *= nums[end++]; + while (start < end && prod >= k) { + prod /= nums[start++]; + } + result += end - start; + } + return result; } - int prod = 1; - int ans = 0; - int left = 0; - for (int right = 0; right < nums.length; right++) { - prod *= nums[right]; - while (prod >= k) { - prod /= nums[left++]; - } - ans += right - left + 1; - } - return ans; - } } From ff9986ab91a0879c360e7b1d56a7090c866c3ea9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 27 Mar 2024 07:25:40 -0700 Subject: [PATCH 1432/1640] Create Maximum Length Substring With Two Occurrences.java --- ...Length Substring With Two Occurrences.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Maximum Length Substring With Two Occurrences.java diff --git a/Easy/Maximum Length Substring With Two Occurrences.java b/Easy/Maximum Length Substring With Two Occurrences.java new file mode 100644 index 00000000..44e281b1 --- /dev/null +++ b/Easy/Maximum Length Substring With Two Occurrences.java @@ -0,0 +1,19 @@ +class Solution { + public int maximumLengthSubstring(String s) { + Map map = new HashMap<>(); + int start = 0; + int end = 0; + int n = s.length(); + int result = 0; + while (end < n) { + map.put(s.charAt(end), map.getOrDefault(s.charAt(end), 0) + 1); + while (start <= end && map.get(s.charAt(end)) > 2) { + map.put(s.charAt(start), map.get(s.charAt(start)) - 1); + start++; + } + end++; + result = Math.max(result, end - start); + } + return result; + } +} From 530e5b4b75ac9062b59a9924c5366cfb52aa7e3c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 27 Mar 2024 17:38:50 -0700 Subject: [PATCH 1433/1640] Create Length of Longest Subarray With at Most K Frequency.java --- ...est Subarray With at Most K Frequency.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Length of Longest Subarray With at Most K Frequency.java diff --git a/Medium/Length of Longest Subarray With at Most K Frequency.java b/Medium/Length of Longest Subarray With at Most K Frequency.java new file mode 100644 index 00000000..82d8f62d --- /dev/null +++ b/Medium/Length of Longest Subarray With at Most K Frequency.java @@ -0,0 +1,19 @@ +class Solution { + public int maxSubarrayLength(int[] nums, int k) { + int start = 0; + int end = 0; + int result = 0; + int n = nums.length; + Map map = new HashMap<>(); + while (end < n) { + map.put(nums[end], map.getOrDefault(nums[end], 0) + 1); + while (start < end && map.get(nums[end]) > k) { + map.put(nums[start], map.get(nums[start]) - 1); + start++; + } + end++; + result = Math.max(result, end - start); + } + return result; + } +} From 52cbe7ef9fa491f84d99711ec99e9e2e2e1445b4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 28 Mar 2024 17:33:01 -0700 Subject: [PATCH 1434/1640] Create Count Subarrays Where Max Element Appears at Least K Times.java --- ... Max Element Appears at Least K Times.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Count Subarrays Where Max Element Appears at Least K Times.java diff --git a/Medium/Count Subarrays Where Max Element Appears at Least K Times.java b/Medium/Count Subarrays Where Max Element Appears at Least K Times.java new file mode 100644 index 00000000..d917693d --- /dev/null +++ b/Medium/Count Subarrays Where Max Element Appears at Least K Times.java @@ -0,0 +1,24 @@ +class Solution { + public long countSubarrays(int[] nums, int k) { + int maxElement = 0; + for (int num : nums) { + maxElement = Math.max(maxElement, num); + } + long result = 0; + int start = 0; + int maxElementsInWindow = 0; + for (int end = 0; end < nums.length; end++) { + if (nums[end] == maxElement) { + maxElementsInWindow++; + } + while (k == maxElementsInWindow) { + if (nums[start] == maxElement) { + maxElementsInWindow--; + } + start++; + } + result += start; + } + return result; + } +} From a79f2a05a0beceb70618d587dffb0962fb9a06e6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 30 Mar 2024 08:30:07 -0700 Subject: [PATCH 1435/1640] Update Subarrays with K Different Integers.java --- Hard/Subarrays with K Different Integers.java | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/Hard/Subarrays with K Different Integers.java b/Hard/Subarrays with K Different Integers.java index 42224709..0a1d5559 100644 --- a/Hard/Subarrays with K Different Integers.java +++ b/Hard/Subarrays with K Different Integers.java @@ -1,29 +1,23 @@ class Solution { - public int subarraysWithKDistinct(int[] A, int K) { - return atMostK(A, K) - atMostK(A, K - 1); - } - - private int atMostK(int[] A, int K) { - int start = 0; - int end = 0; - int n = A.length; - Map map = new HashMap<>(); - int count = 0; - while (end < n) { - if (map.getOrDefault(A[end], 0) == 0) { - K--; - } - map.put(A[end], map.getOrDefault(A[end], 0) + 1); - while (K < 0) { - map.put(A[start], map.getOrDefault(A[start], 0) - 1); - if (map.get(A[start]) == 0) { - K++; + public int subarraysWithKDistinct(int[] nums, int k) { + return slidingWindowAtMost(nums, k) - slidingWindowAtMost(nums, k - 1); + } + + private int slidingWindowAtMost(int[] nums, int k) { + Map map = new HashMap<>(); + int left = 0; + int count = 0; + for (int right = 0; right < nums.length; right++) { + map.put(nums[right], map.getOrDefault(nums[right], 0) + 1); + while (map.size() > k) { + map.put(nums[left], map.get(nums[left]) - 1); + if (map.get(nums[left]) == 0) { + map.remove(nums[left]); + } + left++; + } + count += right - left + 1; } - start++; - } - count += end - start + 1; - end++; + return count; } - return count; - } } From 74ecc816f061f2f8b20ed25592b5bb82da1eebef Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Mar 2024 07:29:37 -0700 Subject: [PATCH 1436/1640] Create Harshad Number.java --- Easy/Harshad Number.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Harshad Number.java diff --git a/Easy/Harshad Number.java b/Easy/Harshad Number.java new file mode 100644 index 00000000..c02c40bf --- /dev/null +++ b/Easy/Harshad Number.java @@ -0,0 +1,15 @@ +class Solution { + public int sumOfTheDigitsOfHarshadNumber(int x) { + int digitSum = getDigitSum(x); + return x % digitSum == 0 ? digitSum : -1; + } + + private static int getDigitSum(int num) { + int sum = 0; + while (num > 0) { + sum += num % 10; + num /= 10; + } + return sum; + } +} From 8688def7aadb96379ae1585b8066ef0c4129fee8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Mar 2024 07:33:58 -0700 Subject: [PATCH 1437/1640] Create Shortest Subarray With OR at Least K I.java --- .../Shortest Subarray With OR at Least K I.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Shortest Subarray With OR at Least K I.java diff --git a/Easy/Shortest Subarray With OR at Least K I.java b/Easy/Shortest Subarray With OR at Least K I.java new file mode 100644 index 00000000..0032852b --- /dev/null +++ b/Easy/Shortest Subarray With OR at Least K I.java @@ -0,0 +1,17 @@ +class Solution { + public int minimumSubarrayLength(int[] nums, int k) { + int n = nums.length; + int result = Integer.MAX_VALUE; + for (int i = 0; i < n; i++) { + int curr = 0; + for (int j = i; j < n; j++) { + curr |= nums[j]; + if (curr >= k) { + result = Math.min(result, j - i + 1); + break; + } + } + } + return result == Integer.MAX_VALUE ? -1 : result; + } +} From b9cb5afa67287356efd12abdfc62adca0cdcb505 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Mar 2024 07:43:09 -0700 Subject: [PATCH 1438/1640] Create Minimum Levels to Gain More Points.java --- Medium/Minimum Levels to Gain More Points.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Minimum Levels to Gain More Points.java diff --git a/Medium/Minimum Levels to Gain More Points.java b/Medium/Minimum Levels to Gain More Points.java new file mode 100644 index 00000000..c7fd7222 --- /dev/null +++ b/Medium/Minimum Levels to Gain More Points.java @@ -0,0 +1,17 @@ +class Solution { + public int minimumLevels(int[] possible) { + int n = possible.length; + int totalScore = 0; + for (int i = n - 1; i >= 0; i--) { + totalScore += possible[i] == 1 ? 1 : -1; + } + int score = 0; + for (int i = 0; i < n - 1; i++) { + score += possible[i] == 1 ? 1 : -1; + if (score > totalScore - score) { + return i + 1; + } + } + return -1; + } +} From 01afcab2ae6b64f994a82b049ce5a3a78305ebb7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Mar 2024 07:49:08 -0700 Subject: [PATCH 1439/1640] Create Water Bottles II.java --- Medium/Water Bottles II.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Water Bottles II.java diff --git a/Medium/Water Bottles II.java b/Medium/Water Bottles II.java new file mode 100644 index 00000000..d9205f31 --- /dev/null +++ b/Medium/Water Bottles II.java @@ -0,0 +1,12 @@ +class Solution { + public int maxBottlesDrunk(int numBottles, int numExchange) { + int total = numBottles; + while (numBottles >= numExchange) { + numBottles -= numExchange; + numExchange++; + total++; + numBottles++; + } + return total; + } +} From 06832e167e97e1c0ca6f86aa0c8c54dc321a3c31 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 31 Mar 2024 07:49:25 -0700 Subject: [PATCH 1440/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c4fd5e63..a90fb07e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 1500+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1600+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count From 1e074c2fc9157c916f40e745ce9bd6d9f9b73245 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 2 Apr 2024 06:15:30 -0700 Subject: [PATCH 1441/1640] Update Isomorphic Strings.java --- Easy/Isomorphic Strings.java | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/Easy/Isomorphic Strings.java b/Easy/Isomorphic Strings.java index 6b870650..b9813b64 100644 --- a/Easy/Isomorphic Strings.java +++ b/Easy/Isomorphic Strings.java @@ -1,12 +1,18 @@ class Solution { - public boolean isIsomorphic(String s, String t) { - int[] position = new int[512]; - for (int i = 0; i < s.length(); i++) { - if (position[s.charAt(i)] != position[t.charAt(i) + 256]) { - return false; - } - position[s.charAt(i)] = position[t.charAt(i) + 256] = i + 1; + public boolean isIsomorphic(String s, String t) { + return mapString(s).equals(mapString(t)); + } + + private static String mapString(String s) { + Map map = new HashMap<>(); + int count = 0; + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + if (!map.containsKey(c)) { + map.put(c, count++); + } + sb.append(map.get(c)).append("|"); + } + return sb.toString(); } - return true; - } } From 02a4635a3dc7bcbee0ce07e31339840db4a2ea4f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 4 Apr 2024 06:40:55 -0700 Subject: [PATCH 1442/1640] Update Maximum Nesting Depth of the Parentheses.java --- ...ximum Nesting Depth of the Parentheses.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Easy/Maximum Nesting Depth of the Parentheses.java b/Easy/Maximum Nesting Depth of the Parentheses.java index 19a50736..8ce9eac2 100644 --- a/Easy/Maximum Nesting Depth of the Parentheses.java +++ b/Easy/Maximum Nesting Depth of the Parentheses.java @@ -1,11 +1,13 @@ class Solution { - public int maxDepth(String s) { - int currCount = 0; - int maxCount = 0; - for (char c : s.toCharArray()) { - currCount += c == '(' ? 1 : (c == ')' ? -1 : 0); - maxCount = Math.max(maxCount, currCount); + public int maxDepth(String s) { + int count = 0; + int result = 0; + for (char c : s.toCharArray()) { + if (c == '(' || c == ')') { + count += c == '(' ? 1 : -1; + } + result = Math.max(result, count); + } + return result; } - return maxCount; - } } From 0b9bea2ac20b3e7f0ac3debde30d3885926ac8ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 5 Apr 2024 06:56:58 -0700 Subject: [PATCH 1443/1640] Update Make The String Great.java --- Easy/Make The String Great.java | 34 +++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/Easy/Make The String Great.java b/Easy/Make The String Great.java index a7cb7882..32b4684a 100644 --- a/Easy/Make The String Great.java +++ b/Easy/Make The String Great.java @@ -1,18 +1,24 @@ class Solution { - public String makeGood(String s) { - Stack stack = new Stack<>(); - for (char c : s.toCharArray()) { - if (!stack.isEmpty() && Math.abs(stack.peek() - c) == 32) { - stack.pop(); - } - else { - stack.push(c); - } + public String makeGood(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (!stack.isEmpty() && isBad(c, stack.peek())) { + stack.pop(); + continue; + } + stack.push(c); + } + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.reverse().toString(); } - StringBuilder sb = new StringBuilder(); - while (!stack.isEmpty()) { - sb.append(stack.pop()); + + private static boolean isBad(char c1, char c2) { + if (c1 == c2) { + return false; + } + return Character.toLowerCase(c1) == Character.toLowerCase(c2); } - return sb.reverse().toString(); - } } From 60c654266ebd4e48c453ae1529a5e767d11a1fc6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 5 Apr 2024 17:17:04 -0700 Subject: [PATCH 1444/1640] Update Minimum Remove to Make Valid Parentheses.java --- ...imum Remove to Make Valid Parentheses.java | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/Medium/Minimum Remove to Make Valid Parentheses.java b/Medium/Minimum Remove to Make Valid Parentheses.java index 45734d11..7d5be988 100644 --- a/Medium/Minimum Remove to Make Valid Parentheses.java +++ b/Medium/Minimum Remove to Make Valid Parentheses.java @@ -1,27 +1,28 @@ class Solution { - public String minRemoveToMakeValid(String s) { - Stack stack = new Stack<>(); - Set validIndexes = new HashSet<>(); - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) == '(') { - stack.add(i); - } else if (s.charAt(i) == ')') { - if (!stack.isEmpty()) { - validIndexes.add(stack.pop()); - validIndexes.add(i); + public String minRemoveToMakeValid(String s) { + char[] letters = s.toCharArray(); + Stack stack = new Stack<>(); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (c == '(') { + stack.push(i); + } else if (c == ')') { + if (stack.isEmpty()) { + letters[i] = '-'; + } else { + stack.pop(); + } + } } - } - } - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < s.length(); i++) { - if (s.charAt(i) == '(' || s.charAt(i) == ')') { - if (validIndexes.contains(i)) { - sb.append(s.charAt(i)); + while (!stack.isEmpty()) { + letters[stack.pop()] = '-'; + } + StringBuilder sb = new StringBuilder(); + for (char c : letters) { + if (c != '-') { + sb.append(c); + } } - } else { - sb.append(s.charAt(i)); - } + return sb.toString(); } - return sb.toString(); - } } From adeed10feaa5927ac9055ca0912690250abe5942 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 14 Apr 2024 15:56:31 -0700 Subject: [PATCH 1445/1640] Create Score of a String.java --- Easy/Score of a String.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Score of a String.java diff --git a/Easy/Score of a String.java b/Easy/Score of a String.java new file mode 100644 index 00000000..fafcca05 --- /dev/null +++ b/Easy/Score of a String.java @@ -0,0 +1,9 @@ +class Solution { + public int scoreOfString(String s) { + int score = 0; + for (int i = 1; i < s.length(); i++) { + score += Math.abs(s.charAt(i) - s.charAt(i - 1)); + } + return score; + } +} From 21b2ab22036c4aaf54a4faffcbf504ecf9c1c334 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 20 Apr 2024 08:51:46 -0700 Subject: [PATCH 1446/1640] Create Find All Groups of Farmland.java --- Medium/Find All Groups of Farmland.java | 49 +++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Medium/Find All Groups of Farmland.java diff --git a/Medium/Find All Groups of Farmland.java b/Medium/Find All Groups of Farmland.java new file mode 100644 index 00000000..130db6a1 --- /dev/null +++ b/Medium/Find All Groups of Farmland.java @@ -0,0 +1,49 @@ +class Solution { + + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int[][] findFarmland(int[][] land) { + int rows = land.length; + int cols = land[0].length; + boolean[][] visited = new boolean[rows][cols]; + List result = new ArrayList<>(); + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (land[i][j] == 1 && !visited[i][j]) { + traverse(land, i, j, visited, result); + } + } + } + return result.stream() + .map(int[]::clone) + .toArray(int[][]::new); + } + + private static void traverse(int[][] land, int i, int j, boolean[][] visited, List result) { + int rows = land.length; + int cols = land[0].length; + Queue queue = new LinkedList<>(); + int[] leftMost = {i, j}; + int[] rightMost = {i, j}; + queue.add(new int[]{i, j}); + visited[i][j] = true; + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int x = removed[0]; + int y = removed[1]; + leftMost[0] = Math.min(leftMost[0], x); + leftMost[1] = Math.min(leftMost[1], y); + rightMost[0] = Math.max(rightMost[0], x); + rightMost[1] = Math.max(rightMost[1], y); + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + if (newX >= 0 && newY >= 0 && newX < rows && newY < cols && !visited[newX][newY] && land[newX][newY] == 1) { + queue.add(new int[]{newX, newY}); + visited[newX][newY] = true; + } + } + } + result.add(new int[]{leftMost[0], leftMost[1], rightMost[0], rightMost[1]}); + } +} From 3e2b8bf6164d6751ebdc3e6f1394890237652c46 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 21 Apr 2024 08:43:27 -0700 Subject: [PATCH 1447/1640] Create Count the Number of Special Characters I.java --- ...nt the Number of Special Characters I.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Count the Number of Special Characters I.java diff --git a/Easy/Count the Number of Special Characters I.java b/Easy/Count the Number of Special Characters I.java new file mode 100644 index 00000000..44c9950f --- /dev/null +++ b/Easy/Count the Number of Special Characters I.java @@ -0,0 +1,20 @@ +class Solution { + public int numberOfSpecialChars(String word) { + boolean[] upperPresent = new boolean[26]; + boolean[] lowerPresent = new boolean[26]; + for (char c : word.toCharArray()) { + if (Character.isUpperCase(c)) { + upperPresent[c - 'A'] = true; + } else { + lowerPresent[c - 'a'] = true; + } + } + int count = 0; + for (int i = 0; i < 26; i++) { + if (upperPresent[i] && lowerPresent[i]) { + count++; + } + } + return count; + } +} From e1fcc313d62a9e158251ff7c0a2c932e96116917 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Apr 2024 08:07:39 -0700 Subject: [PATCH 1448/1640] Update Open The Lock.java --- Medium/Open The Lock.java | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/Medium/Open The Lock.java b/Medium/Open The Lock.java index 926e8521..f692f0ba 100644 --- a/Medium/Open The Lock.java +++ b/Medium/Open The Lock.java @@ -1,40 +1,38 @@ class Solution { public int openLock(String[] deadends, String target) { Set deadEndSet = new HashSet<>(Arrays.asList(deadends)); - if (deadEndSet.contains(target) || deadEndSet.contains("0000")) { + String startingPoint = "0000"; + if (deadEndSet.contains(startingPoint)) { return -1; } Queue queue = new LinkedList<>(); - Set seen = new HashSet<>(); - queue.add("0000"); - seen.add("0000"); - int steps = 0; + Set visited = new HashSet<>(); + queue.add(startingPoint); + visited.add(startingPoint); + int attempts = 0; int[] rotations = {-1, 1}; while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { String removed = queue.remove(); if (removed.equals(target)) { - return steps; + return attempts; } if (deadEndSet.contains(removed)) { continue; } for (int j = 0; j < 4; j++) { for (int rotation : rotations) { - int changedVal = ((removed.charAt(j) - '0') + rotation + 10) % 10; - String newRotation = new StringBuilder() - .append(removed.substring(0,j)) .append(changedVal) - .append(removed.substring(j + 1)) - .toString(); - if (!seen.contains(newRotation)) { - seen.add(newRotation); + int newValue = ((removed.charAt(j) - '0') + rotation + 10) % 10; + String newRotation = removed.substring(0, j) + newValue + removed.substring(j + 1); + if (!visited.contains(newRotation)) { + visited.add(newRotation); queue.add(newRotation); } } } } - steps++; + attempts++; } return -1; } From 54c637a6a466971146178fac306a5743e93b4e04 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Apr 2024 12:20:02 -0700 Subject: [PATCH 1449/1640] Create Make a Square with the Same Color.java --- Easy/Make a Square with the Same Color.java | 40 +++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Easy/Make a Square with the Same Color.java diff --git a/Easy/Make a Square with the Same Color.java b/Easy/Make a Square with the Same Color.java new file mode 100644 index 00000000..2f5524d8 --- /dev/null +++ b/Easy/Make a Square with the Same Color.java @@ -0,0 +1,40 @@ +class Solution { + + int[][] DIRS = {{0, 0}, {0, 1}, {1, 0}, {1, 1}}; + + public boolean canMakeSquare(char[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (isPossible(grid, i, j, rows, cols)) { + return true; + } + } + } + return false; + } + + private boolean isPossible(char[][] grid, int i, int j, int rows, int cols) { + int white = 0; + int black = 0; + int invalid = 0; + for (int[] dir : DIRS) { + int newX = i + dir[0]; + int newY = j + dir[1]; + if (newX >= 0 && newY >= 0 && newX < rows && newY < cols) { + white += grid[newX][newY] == 'W' ? 1 : 0; + black += grid[newX][newY] == 'B' ? 1 : 0; + } else { + invalid++; + } + } + if (invalid > 0) { + return false; + } + if (white == 4 || black == 4) { + return true; + } + return white == 1 || black == 1; + } +} From d3bf7af949dd8ae6070428bdef205271b2ddaaf8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Apr 2024 12:23:29 -0700 Subject: [PATCH 1450/1640] Create Find the Integer Added to Array I.java --- Easy/Find the Integer Added to Array I.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Find the Integer Added to Array I.java diff --git a/Easy/Find the Integer Added to Array I.java b/Easy/Find the Integer Added to Array I.java new file mode 100644 index 00000000..c5d551e3 --- /dev/null +++ b/Easy/Find the Integer Added to Array I.java @@ -0,0 +1,11 @@ +class Solution { + public int addedInteger(int[] nums1, int[] nums2) { + int minOne = nums1[0]; + int minTwo = nums2[0]; + for (int i = 0; i < nums1.length; i++) { + minOne = Math.min(minOne, nums1[i]); + minTwo = Math.min(minTwo, nums2[i]); + } + return minTwo - minOne; + } +} From 87b15483c21a902223014ca5058913891334648e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 2 May 2024 06:48:01 -0700 Subject: [PATCH 1451/1640] Create Right Triangles.java --- Medium/Right Triangles.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Right Triangles.java diff --git a/Medium/Right Triangles.java b/Medium/Right Triangles.java new file mode 100644 index 00000000..d94804b3 --- /dev/null +++ b/Medium/Right Triangles.java @@ -0,0 +1,25 @@ +class Solution { + public long numberOfRightTriangles(int[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + int[] rowCount = new int[rows]; + int[] colCount = new int[cols]; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (grid[i][j] == 1) { + rowCount[i]++; + colCount[j]++; + } + } + } + long triangles = 0; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (grid[i][j] == 1) { + triangles += (rowCount[i] - 1) * (colCount[j] - 1); + } + } + } + return triangles; + } +} From 3830eea78d5a4f45645f7c401bb8da7e0253a4aa Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 5 May 2024 16:42:39 -0700 Subject: [PATCH 1452/1640] Create Valid Word.java --- Easy/Valid Word.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Easy/Valid Word.java diff --git a/Easy/Valid Word.java b/Easy/Valid Word.java new file mode 100644 index 00000000..c9611bbd --- /dev/null +++ b/Easy/Valid Word.java @@ -0,0 +1,21 @@ +class Solution { + + private static final Set VOWELS = Set.of('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'); + + public boolean isValid(String word) { + boolean vowelFound = false; + boolean consonantFound = false; + for (char c : word.toCharArray()) { + if (Character.isLetter(c)) { + if (VOWELS.contains(c)) { + vowelFound = true; + } else { + consonantFound = true; + } + } else if (!Character.isDigit(c)) { + return false; + } + } + return word.length() >= 3 && vowelFound && consonantFound; + } +} From 1f3c0a22ddaaf3eaff62d92b893fecbddb9a28d2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 6 May 2024 19:45:36 -0700 Subject: [PATCH 1453/1640] Create Double a Number Represented as a Linked List.java --- ...a Number Represented as a Linked List.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Medium/Double a Number Represented as a Linked List.java diff --git a/Medium/Double a Number Represented as a Linked List.java b/Medium/Double a Number Represented as a Linked List.java new file mode 100644 index 00000000..9e2bcbaa --- /dev/null +++ b/Medium/Double a Number Represented as a Linked List.java @@ -0,0 +1,40 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode doubleIt(ListNode head) { + ListNode rev = reverse(head); + ListNode curr = rev; + int carry = 0; + while (curr != null) { + int val = curr.val * 2 + carry; + carry = val / 10; + curr.val = val % 10; + if (curr.next == null && carry != 0) { + curr.next = new ListNode(carry); + break; + } + curr = curr.next; + } + return reverse(rev); + } + + private ListNode reverse(ListNode curr) { + ListNode next = null; + ListNode prev = null; + while (curr != null) { + next = curr.next; + curr.next = prev; + prev = curr; + curr = next; + } + return prev; + } +} From 84dbd76dbe62e9fba04a461f29e5ace81f6359ab Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 May 2024 08:01:29 -0700 Subject: [PATCH 1454/1640] Create All O`one Data Structure.java --- Hard/All O`one Data Structure.java | 108 +++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Hard/All O`one Data Structure.java diff --git a/Hard/All O`one Data Structure.java b/Hard/All O`one Data Structure.java new file mode 100644 index 00000000..211e4f01 --- /dev/null +++ b/Hard/All O`one Data Structure.java @@ -0,0 +1,108 @@ +class AllOne { + private final NodeList head; + private final NodeList tail; + private final Map countToNodeMapping; + private final Map keyToCountMapping; + + public AllOne() { + head = new NodeList(Integer.MIN_VALUE); + tail = new NodeList(Integer.MAX_VALUE); + head.next = tail; + tail.prev = head; + countToNodeMapping = new HashMap<>(); + keyToCountMapping = new HashMap<>(); + } + + public void inc(String key) { + if (keyToCountMapping.containsKey(key)) { + updateKey(key, 1); + } else { + keyToCountMapping.put(key, 1); + if (head.next.count != 1) { + addNodeAfter(new NodeList(1), head); + } + head.next.keys.add(key); + countToNodeMapping.put(1, head.next); + } + } + + public void dec(String key) { + if (keyToCountMapping.containsKey(key)) { + int count = keyToCountMapping.get(key); + if (count == 1) { + keyToCountMapping.remove(key); + removeKey(countToNodeMapping.get(count), key); + } else { + updateKey(key, -1); + } + } + } + + public String getMaxKey() { + return tail.prev == head ? "" : tail.prev.keys.iterator().next(); + } + + public String getMinKey() { + return head.next == tail ? "" : head.next.keys.iterator().next(); + } + + private void updateKey(String key, int diff) { + int count = keyToCountMapping.get(key); + keyToCountMapping.put(key, count + diff); + NodeList currNode = countToNodeMapping.get(count); + NodeList newNode; + if (countToNodeMapping.containsKey(count + diff)) { + newNode = countToNodeMapping.get(count + diff); + } else { + newNode = new NodeList(count + diff); + countToNodeMapping.put(count + diff, newNode); + // If diff == 1 then new node will have count greater than currNode else it will have count less than currNode + addNodeAfter(newNode, diff == 1 ? currNode : currNode.prev); + } + newNode.keys.add(key); + removeKey(currNode, key); + } + + private void removeKey(NodeList nodeList, String key) { + nodeList.keys.remove(key); + if (nodeList.keys.isEmpty()) { + removeNodeList(nodeList); + countToNodeMapping.remove(nodeList.count); + } + } + + private void removeNodeList(NodeList nodeList) { + nodeList.prev.next = nodeList.next; + nodeList.next.prev = nodeList.prev; + nodeList.next = null; + nodeList.prev = null; + } + + private void addNodeAfter(NodeList node, NodeList prevNode) { + node.prev = prevNode; + node.next = prevNode.next; + prevNode.next.prev = node; + prevNode.next = node; + } + + private static class NodeList { + int count; + Set keys; + NodeList next; + NodeList prev; + + public NodeList(int count) { + this.count = count; + keys = new HashSet<>(); + } + } +} + +/** + * Your AllOne object will be instantiated and called as such: + * AllOne obj = new AllOne(); + * obj.inc(key); + * obj.dec(key); + * String param_3 = obj.getMaxKey(); + * String param_4 = obj.getMinKey(); + */ From 81ceecf8e1c2faa599d807c92e532642856d1a6b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 9 May 2024 08:07:32 -0700 Subject: [PATCH 1455/1640] Create Maximize Happiness of Selected Children.java --- .../Maximize Happiness of Selected Children.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Maximize Happiness of Selected Children.java diff --git a/Medium/Maximize Happiness of Selected Children.java b/Medium/Maximize Happiness of Selected Children.java new file mode 100644 index 00000000..01e3aeff --- /dev/null +++ b/Medium/Maximize Happiness of Selected Children.java @@ -0,0 +1,15 @@ +class Solution { + public long maximumHappinessSum(int[] happiness, int k) { + Arrays.sort(happiness); + int turnCount = 0; + long happinessSum = 0; + int idx = happiness.length - 1; + while (k-- > 0) { + int currentHappiness = Math.max(0, happiness[idx] - turnCount); + happinessSum += currentHappiness; + turnCount++; + idx--; + } + return happinessSum; + } +} From 076472a2df68fb1908dc23c50a07ffbaa92749a2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 May 2024 07:31:05 -0700 Subject: [PATCH 1456/1640] Create Check if Grid Satisfies Conditions.java --- Easy/Check if Grid Satisfies Conditions.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Check if Grid Satisfies Conditions.java diff --git a/Easy/Check if Grid Satisfies Conditions.java b/Easy/Check if Grid Satisfies Conditions.java new file mode 100644 index 00000000..93891460 --- /dev/null +++ b/Easy/Check if Grid Satisfies Conditions.java @@ -0,0 +1,17 @@ +class Solution { + public boolean satisfiesConditions(int[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + for (int i = 0; i < rows; i++) { + for (int j = 0; j < cols; j++) { + if (i + 1 < rows && grid[i][j] != grid[i + 1][j]) { + return false; + } + if (j + 1 < cols && grid[i][j] == grid[i][j + 1]) { + return false; + } + } + } + return true; + } +} From f93fb78f11158ccf99e8af4c60c0867d57dde076 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 13 May 2024 07:14:12 -0700 Subject: [PATCH 1457/1640] Update Score After Flipping Matrix.java --- Medium/Score After Flipping Matrix.java | 66 ++++++++----------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/Medium/Score After Flipping Matrix.java b/Medium/Score After Flipping Matrix.java index c369309d..54c3f3ac 100644 --- a/Medium/Score After Flipping Matrix.java +++ b/Medium/Score After Flipping Matrix.java @@ -1,59 +1,33 @@ class Solution { - public int matrixScore(int[][] A) { - for (int i=0; i actualSum) { - for (int j=0; j numOnes) { - for (int j=0; j rows-countZero) { + for(int i = 0; i < rows; i++) { + grid[i][j] = 1 - grid[i][j]; } } } - - int maxSum = 0; - for (int[] arr : A) { - maxSum += getDecimalValue(arr, false); - } - - return maxSum; - } - - private int getDecimalValue(int[] arr, boolean isToggled) { - int sum = 0; - int pow = 0; - - for (int i=arr.length-1; i>=0; i--) { - if (isToggled) { - sum += Math.pow(2, pow) * (arr[i] ^ 1); - } - else { - sum += Math.pow(2, pow) * arr[i]; + int score = 0; + for (int[] row : grid) { + for (int j = 0; j < cols; j++) { + score += row[j] << (cols - j - 1); } - - pow++; } - - return sum; + return score; } } From ba2453e99cc45ac28c447b4e0c50e97cf8dae161 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 19 May 2024 07:11:10 -0700 Subject: [PATCH 1458/1640] Create Special Array I.java --- Easy/Special Array I.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 Easy/Special Array I.java diff --git a/Easy/Special Array I.java b/Easy/Special Array I.java new file mode 100644 index 00000000..5057f626 --- /dev/null +++ b/Easy/Special Array I.java @@ -0,0 +1,10 @@ +class Solution { + public boolean isArraySpecial(int[] nums) { + for (int i = 1; i < nums.length; i++) { + if (nums[i] % 2 == nums[i - 1] % 2) { + return false; + } + } + return true; + } +} From fc9d892f1be05e0b508276ebfa9529de36b4dbdb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 21 May 2024 08:14:13 -0700 Subject: [PATCH 1459/1640] Update Minimum Knight Moves.java --- Medium/Minimum Knight Moves.java | 52 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/Medium/Minimum Knight Moves.java b/Medium/Minimum Knight Moves.java index e1352ac4..35759df8 100644 --- a/Medium/Minimum Knight Moves.java +++ b/Medium/Minimum Knight Moves.java @@ -1,30 +1,30 @@ class Solution { - private final int[][] DIRS = {{1, 2}, {2, 1}, {1, -2}, {-2, 1}, {2, -1}, {-2, -1}, {-1, -2}, {-1, 2}}; - - public int minKnightMoves(int x, int y) { - int numOfSteps = 0; - boolean[][] visited = new boolean[607][607]; - Queue queue = new LinkedList<>(); - queue.add(new int[]{0, 0}); - while (!queue.isEmpty()) { - int size = queue.size(); - while (size-- > 0) { - int[] removed = queue.remove(); - if (removed[0] == x && removed[1] == y) { - return numOfSteps; + + private static final int[][] MOVES = {{1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, -2}, {-2, -1}, {-2, 1}, {-1, 2}}; + + public int minKnightMoves(int x, int y) { + boolean[][] visited = new boolean[607][607]; + Queue queue = new LinkedList<>(); + queue.add(new int[]{0, 0}); + int steps = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + if (removed[0] == x && removed[1] == y) { + return steps; + } + for (int[] move : MOVES) { + int newX = removed[0] + move[0]; + int newY = removed[1] + move[1]; + if (!visited[newX + 302][newY + 302]) { + visited[newX + 302][newY + 302] = true; + queue.add(new int[]{newX, newY}); + } + } + } + steps++; } - for (int[] dir : DIRS) { - int newX = removed[0] + dir[0]; - int newY = removed[1] + dir[1]; - if (visited[newX + 302][newY + 302]) { - continue; - } - visited[newX + 302][newY + 302] = true; - queue.add(new int[]{newX, newY}); - } - } - numOfSteps++; + return steps; } - return numOfSteps; - } } From 9d417554f8b3db6c721f4f9ee5e4c2e9f3d4055a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 23 May 2024 07:41:33 -0700 Subject: [PATCH 1460/1640] Create The Number of Beautiful Subsets.java --- Medium/The Number of Beautiful Subsets.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/The Number of Beautiful Subsets.java diff --git a/Medium/The Number of Beautiful Subsets.java b/Medium/The Number of Beautiful Subsets.java new file mode 100644 index 00000000..7057a18d --- /dev/null +++ b/Medium/The Number of Beautiful Subsets.java @@ -0,0 +1,20 @@ +class Solution { + public int beautifulSubsets(int[] nums, int k) { + Map freqMap = new HashMap<>(); + Arrays.sort(nums); + return countBeautifulSubsets(nums, k, freqMap, 0) - 1; + } + + private int countBeautifulSubsets(int[] nums, int k, Map freqMap, int idx) { + if (idx == nums.length) { + return 1; + } + int count = countBeautifulSubsets(nums, k, freqMap, idx + 1); + if (freqMap.getOrDefault(nums[idx] - k, 0) == 0) { + freqMap.put(nums[idx], freqMap.getOrDefault(nums[idx], 0) + 1); + count += countBeautifulSubsets(nums, k, freqMap, idx + 1); + freqMap.put(nums[idx], freqMap.getOrDefault(nums[idx], 0) - 1); + } + return count; + } +} From 447d746712a16287560af23e523a2641ac847f5e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 29 May 2024 07:17:12 -0700 Subject: [PATCH 1461/1640] Create Number of Steps to Reduce a Number in Binary Representation to One.java --- ...umber in Binary Representation to One.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Number of Steps to Reduce a Number in Binary Representation to One.java diff --git a/Medium/Number of Steps to Reduce a Number in Binary Representation to One.java b/Medium/Number of Steps to Reduce a Number in Binary Representation to One.java new file mode 100644 index 00000000..00a8296a --- /dev/null +++ b/Medium/Number of Steps to Reduce a Number in Binary Representation to One.java @@ -0,0 +1,27 @@ +class Solution { + public int numSteps(String s) { + int operations = 0; + StringBuilder sb = new StringBuilder(s); + while (sb.length() > 1) { + int n = sb.length(); + if (sb.charAt(n - 1) == '0') { + // divide by 2 + sb.deleteCharAt(n - 1); + } else { + // add 1 + int idx = n - 1; + while (idx >= 0 && sb.charAt(idx) != '0') { + sb.setCharAt(idx, '0'); + idx--; + } + if (idx < 0) { + sb.insert(0, '1'); + } else { + sb.setCharAt(idx, '1'); + } + } + operations++; + } + return operations; + } +} From f967067bddf85a35522c0246e0a85386d0514cb8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 29 May 2024 07:20:42 -0700 Subject: [PATCH 1462/1640] Create Find the Number of Good Pairs I.java --- Easy/Find the Number of Good Pairs I.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Find the Number of Good Pairs I.java diff --git a/Easy/Find the Number of Good Pairs I.java b/Easy/Find the Number of Good Pairs I.java new file mode 100644 index 00000000..143d6abd --- /dev/null +++ b/Easy/Find the Number of Good Pairs I.java @@ -0,0 +1,13 @@ +class Solution { + public int numberOfPairs(int[] nums1, int[] nums2, int k) { + int count = 0; + for (int i = 0; i < nums1.length; i++) { + for (int j = 0; j < nums2.length; j++) { + if (nums1[i] % (nums2[j] * k) == 0) { + count++; + } + } + } + return count; + } +} From 010f42b1f2319b3f4f430b0377df571bf8998248 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 29 May 2024 07:22:58 -0700 Subject: [PATCH 1463/1640] Create Find the XOR of Numbers Which Appear Twice.java --- Easy/Find the XOR of Numbers Which Appear Twice.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/Find the XOR of Numbers Which Appear Twice.java diff --git a/Easy/Find the XOR of Numbers Which Appear Twice.java b/Easy/Find the XOR of Numbers Which Appear Twice.java new file mode 100644 index 00000000..baa845bc --- /dev/null +++ b/Easy/Find the XOR of Numbers Which Appear Twice.java @@ -0,0 +1,12 @@ +class Solution { + public int duplicateNumbersXOR(int[] nums) { + Set set = new HashSet<>(); + int xor = 0; + for (int num : nums) { + if (!set.add(num)) { + xor = xor ^ num; + } + } + return xor; + } +} From b4ddaff710706d5bd1804fd0a5de1ad1f7d36008 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 1 Jun 2024 07:30:52 -0700 Subject: [PATCH 1464/1640] Create Longest Common Subsequence Between Sorted Arrays.java --- ... Common Subsequence Between Sorted Arrays.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Longest Common Subsequence Between Sorted Arrays.java diff --git a/Medium/Longest Common Subsequence Between Sorted Arrays.java b/Medium/Longest Common Subsequence Between Sorted Arrays.java new file mode 100644 index 00000000..d050d3fd --- /dev/null +++ b/Medium/Longest Common Subsequence Between Sorted Arrays.java @@ -0,0 +1,15 @@ +class Solution { + public List longestCommonSubsequence(int[][] arrays) { + List result = new ArrayList<>(); + Map map = new HashMap<>(); + for (int[] arr : arrays) { + for (int num : arr) { + map.put(num, map.getOrDefault(num, 0) + 1); + if (map.get(num) == arrays.length) { + result.add(num); + } + } + } + return result; + } +} From 210a81b9ad3d8a5ebb84ce6b546845641389dfe9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Jun 2024 07:31:09 -0700 Subject: [PATCH 1465/1640] Create Minimum Number of Chairs in a Waiting Room.java --- Easy/Minimum Number of Chairs in a Waiting Room.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Minimum Number of Chairs in a Waiting Room.java diff --git a/Easy/Minimum Number of Chairs in a Waiting Room.java b/Easy/Minimum Number of Chairs in a Waiting Room.java new file mode 100644 index 00000000..d7db8060 --- /dev/null +++ b/Easy/Minimum Number of Chairs in a Waiting Room.java @@ -0,0 +1,11 @@ +class Solution { + public int minimumChairs(String s) { + int requiredChairCount = 0; + int currChairCount = 0; + for (char c : s.toCharArray()) { + currChairCount += c == 'E' ? 1 : -1; + requiredChairCount = Math.max(requiredChairCount, currChairCount); + } + return requiredChairCount; + } +} From 4b1a03b1fdf1cb4b387ee4ff9b60d649971e3ab2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 6 Jun 2024 07:16:35 -0700 Subject: [PATCH 1466/1640] Update Hand of Straights.java --- Medium/Hand of Straights.java | 53 ++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/Medium/Hand of Straights.java b/Medium/Hand of Straights.java index ceff444a..5f407cf0 100644 --- a/Medium/Hand of Straights.java +++ b/Medium/Hand of Straights.java @@ -1,29 +1,32 @@ class Solution { - public boolean isNStraightHand(int[] hand, int W) { - if (hand.length % W != 0) { - return false; - } - Map counterMap = new HashMap<>(); - Set set = new TreeSet<>(); - for (int num : hand) { - counterMap.put(num, counterMap.getOrDefault(num, 0) + 1); - set.add(num); - } - Iterator iter = set.iterator(); - Integer curr = iter.next(); - while (counterMap.get(curr) > 0) { - int temp = curr; - for (int i = 0; i < W; i++) { - if (counterMap.getOrDefault(temp, 0) == 0) { - return false; + public boolean isNStraightHand(int[] hand, int groupSize) { + if (hand.length % groupSize != 0) { + return false; + } + Map map = new HashMap<>(); + for (int num : hand) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + PriorityQueue pq = new PriorityQueue<>(map.keySet()); + while (!pq.isEmpty()) { + List temp = new ArrayList<>(); + int prev = -1; + for (int i = 0; i < groupSize; i++) { + if (pq.isEmpty()) { + return false; + } + int removed = pq.remove(); + map.put(removed, map.get(removed) - 1); + if (map.get(removed) > 0) { + temp.add(removed); + } + if (prev != -1 && removed != prev + 1) { + return false; + } + prev = removed; + } + pq.addAll(temp); } - counterMap.put(temp, counterMap.get(temp) - 1); - temp++; - } - while (iter.hasNext() && counterMap.get(curr) == 0) { - curr = iter.next(); - } + return true; } - return true; - } } From b8a29e6a085598af7c6d2190d18ca55a6cf29b74 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Jun 2024 09:45:41 -0700 Subject: [PATCH 1467/1640] Create Substrings That Begin and End With the Same Letter.java --- ...ings That Begin and End With the Same Letter.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Medium/Substrings That Begin and End With the Same Letter.java diff --git a/Medium/Substrings That Begin and End With the Same Letter.java b/Medium/Substrings That Begin and End With the Same Letter.java new file mode 100644 index 00000000..62c93389 --- /dev/null +++ b/Medium/Substrings That Begin and End With the Same Letter.java @@ -0,0 +1,12 @@ +class Solution { + public long numberOfSubstrings(String s) { + int n = s.length(); + long result = 0; + long[] prefixCount = new long[26]; + for (int i = 0; i < n; i++) { + prefixCount[s.charAt(i) - 'a']++; + result += prefixCount[s.charAt(i) - 'a']; + } + return result; + } +} From 91e35a8936aa0ff52ad594953550c2d52bf51edd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Jun 2024 09:50:21 -0700 Subject: [PATCH 1468/1640] Create Clear Digits.java --- Easy/Clear Digits.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Clear Digits.java diff --git a/Easy/Clear Digits.java b/Easy/Clear Digits.java new file mode 100644 index 00000000..1d308863 --- /dev/null +++ b/Easy/Clear Digits.java @@ -0,0 +1,15 @@ +class Solution { + public String clearDigits(String s) { + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + if (Character.isDigit(c)) { + if (!sb.isEmpty()) { + sb.deleteCharAt(sb.length() - 1); + } + } else { + sb.append(c); + } + } + return sb.toString(); + } +} From 55d0ecf0bbc7bdd6ce5f35d61f761718679a9f0f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Jun 2024 09:54:37 -0700 Subject: [PATCH 1469/1640] Create Find the Child Who Has the Ball After K Seconds.java --- Easy/Find the Child Who Has the Ball After K Seconds.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Easy/Find the Child Who Has the Ball After K Seconds.java diff --git a/Easy/Find the Child Who Has the Ball After K Seconds.java b/Easy/Find the Child Who Has the Ball After K Seconds.java new file mode 100644 index 00000000..6a4c8193 --- /dev/null +++ b/Easy/Find the Child Who Has the Ball After K Seconds.java @@ -0,0 +1,7 @@ +class Solution { + public int numberOfChild(int n, int k) { + int factor = k / (n - 1); + int remainder = k % (n - 1); + return factor % 2 == 0 ? remainder : n - 1 - remainder; + } +} From 1cebeb3b089d01a796ed508a225ebdc7622d6a6f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Jun 2024 06:58:16 -0700 Subject: [PATCH 1470/1640] Create Find the N-th Value After K Seconds.java --- Medium/Find the N-th Value After K Seconds.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Find the N-th Value After K Seconds.java diff --git a/Medium/Find the N-th Value After K Seconds.java b/Medium/Find the N-th Value After K Seconds.java new file mode 100644 index 00000000..e457d0eb --- /dev/null +++ b/Medium/Find the N-th Value After K Seconds.java @@ -0,0 +1,15 @@ +class Solution { + + private final int MOD = 1000_000_007; + + public int valueAfterKSeconds(int n, int k) { + int[] arr = new int[n]; + Arrays.fill(arr, 1); + while (k-- > 0) { + for (int i = 1; i < n; i++) { + arr[i] = (arr[i] + arr[i - 1]) % MOD; + } + } + return arr[n - 1]; + } +} From 27aee486fa9a7ff0ca0cd9ff340e2c01e4bd1837 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Jun 2024 07:05:31 -0700 Subject: [PATCH 1471/1640] Create Find The First Player to win K Games in a Row.java --- ... First Player to win K Games in a Row.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Find The First Player to win K Games in a Row.java diff --git a/Medium/Find The First Player to win K Games in a Row.java b/Medium/Find The First Player to win K Games in a Row.java new file mode 100644 index 00000000..fe26c684 --- /dev/null +++ b/Medium/Find The First Player to win K Games in a Row.java @@ -0,0 +1,24 @@ +class Solution { + public int findWinningPlayer(int[] skills, int k) { + Map indexMap = new HashMap<>(); + for (int i = 0; i < skills.length; i++) { + indexMap.put(skills[i], i); + } + Map winCountMap = new HashMap<>(); + Deque deque = new ArrayDeque<>(); + for (int num : skills) { + deque.addFirst(num); + } + while (deque.size() > 1) { + int first = deque.pollLast(); + int second = deque.pollLast(); + int winner = Math.max(first, second); + winCountMap.put(winner, winCountMap.getOrDefault(winner, 0) + 1); + deque.addLast(winner); + if (winCountMap.get(winner) == k) { + return indexMap.get(winner); + } + } + return indexMap.get(deque.poll()); + } +} From fd3899c2bb07e8518e8d2113f0fbe4439cc9efdd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 14 Jun 2024 08:42:34 -0700 Subject: [PATCH 1472/1640] Create Minimum Increment to Make Array Unique.java --- Medium/Minimum Increment to Make Array Unique.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Minimum Increment to Make Array Unique.java diff --git a/Medium/Minimum Increment to Make Array Unique.java b/Medium/Minimum Increment to Make Array Unique.java new file mode 100644 index 00000000..7be5a583 --- /dev/null +++ b/Medium/Minimum Increment to Make Array Unique.java @@ -0,0 +1,13 @@ +class Solution { + public int minIncrementForUnique(int[] nums) { + Arrays.sort(nums); + int increments = 0; + for (int i = 1; i < nums.length; i++) { + if (nums[i] <= nums[i - 1]) { + increments += nums[i - 1] + 1 - nums[i]; + nums[i] = nums[i - 1] + 1; + } + } + return increments; + } +} From a47c0009db592d3f446566f53352857df356918f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 15 Jun 2024 17:26:31 -0700 Subject: [PATCH 1473/1640] Create Patching Array.java --- Hard/Patching Array.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Hard/Patching Array.java diff --git a/Hard/Patching Array.java b/Hard/Patching Array.java new file mode 100644 index 00000000..6bf2a8ed --- /dev/null +++ b/Hard/Patching Array.java @@ -0,0 +1,16 @@ +class Solution { + public int minPatches(int[] nums, int n) { + int patches = 0; + long miss = 1; + int idx = 0; + while (miss <= n) { + if (idx < nums.length && nums[idx] <= miss) { + miss += nums[idx++]; + } else { + miss += miss; + patches++; + } + } + return patches; + } +} From 31a4de9251647d7d234fb336337751dd7152282b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 16 Jun 2024 07:30:21 -0700 Subject: [PATCH 1474/1640] Create Count Pairs That Form a Complete Day I.java --- Easy/Count Pairs That Form a Complete Day I.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Count Pairs That Form a Complete Day I.java diff --git a/Easy/Count Pairs That Form a Complete Day I.java b/Easy/Count Pairs That Form a Complete Day I.java new file mode 100644 index 00000000..785a5937 --- /dev/null +++ b/Easy/Count Pairs That Form a Complete Day I.java @@ -0,0 +1,11 @@ +class Solution { + public int countCompleteDayPairs(int[] hours) { + int count = 0; + Map map = new HashMap<>(); + for (int hour : hours) { + count += map.getOrDefault((24 - hour % 24) % 24, 0); + map.put(hour % 24, map.getOrDefault(hour % 24, 0) + 1); + } + return count; + } +} From 33be1b9c03a87638dd9b6e377216ff771e5f915c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 17 Jun 2024 06:33:01 -0700 Subject: [PATCH 1475/1640] Update and rename Sum of Square Numbers.java to Sum of Square Numbers.java --- Easy/Sum of Square Numbers.java | 17 ----------------- Medium/Sum of Square Numbers.java | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 17 deletions(-) delete mode 100644 Easy/Sum of Square Numbers.java create mode 100644 Medium/Sum of Square Numbers.java diff --git a/Easy/Sum of Square Numbers.java b/Easy/Sum of Square Numbers.java deleted file mode 100644 index 61e26dde..00000000 --- a/Easy/Sum of Square Numbers.java +++ /dev/null @@ -1,17 +0,0 @@ -class Solution { - public boolean judgeSquareSum(int c) { - int left = 0; - int right = (int) Math.sqrt(c); - while (left <= right) { - int currSquareSum = left * left + right * right; - if (currSquareSum < c) { - left++; - } else if (currSquareSum > c) { - right--; - } else { - return true; - } - } - return false; - } -} diff --git a/Medium/Sum of Square Numbers.java b/Medium/Sum of Square Numbers.java new file mode 100644 index 00000000..13f138c2 --- /dev/null +++ b/Medium/Sum of Square Numbers.java @@ -0,0 +1,18 @@ +class Solution { + public boolean judgeSquareSum(int c) { + long left = 0; + long right = (long) Math.sqrt(c); + while (left <= right) { + long sum = left * left + right * right; + if (sum == c) { + return true; + } + if (sum > c) { + right--; + } else { + left++; + } + } + return false; + } +} From afa6897e96bfbbdb962b93586795c73bee61c0ec Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 19 Jun 2024 13:30:47 -0700 Subject: [PATCH 1476/1640] Create Minimum Number of Days to Make m Bouquets.java --- ...mum Number of Days to Make m Bouquets.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Medium/Minimum Number of Days to Make m Bouquets.java diff --git a/Medium/Minimum Number of Days to Make m Bouquets.java b/Medium/Minimum Number of Days to Make m Bouquets.java new file mode 100644 index 00000000..83578712 --- /dev/null +++ b/Medium/Minimum Number of Days to Make m Bouquets.java @@ -0,0 +1,37 @@ +class Solution { + public int minDays(int[] bloomDay, int m, int k) { + int left = 0; + int right = 0; + for (int day : bloomDay) { + right = Math.max(right, day); + } + int days = -1; + while (left <= right) { + int mid = (left + right) / 2; + if (numberOfBouquet(bloomDay, mid, k) >= m) { + days = mid; + right = mid - 1; + } else { + left = mid + 1; + } + } + return days; + } + + private int numberOfBouquet(int[] bloomDay, int mid, int k) { + int bouquetCount = 0; + int count = 0; + for (int i = 0; i < bloomDay.length; i++) { + if (bloomDay[i] <= mid) { + count++; + } else { + count = 0; + } + if (count == k) { + bouquetCount++; + count = 0; + } + } + return bouquetCount; + } +} From 865f81f10f77b149e5e6619ef81884ff8f4b8834 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 20 Jun 2024 14:07:47 -0700 Subject: [PATCH 1477/1640] Create Magnetic Force Between Two Balls.java --- Medium/Magnetic Force Between Two Balls.java | 32 ++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Magnetic Force Between Two Balls.java diff --git a/Medium/Magnetic Force Between Two Balls.java b/Medium/Magnetic Force Between Two Balls.java new file mode 100644 index 00000000..9ca9708b --- /dev/null +++ b/Medium/Magnetic Force Between Two Balls.java @@ -0,0 +1,32 @@ +class Solution { + public int maxDistance(int[] position, int m) { + int result = 0; + int n = position.length; + Arrays.sort(position); + int left = 1; + int right = (int) Math.ceil(position[n - 1] / (m - 1.0)); + while (left <= right) { + int mid = (left + right) / 2; + if (isPossible(position, mid, m)) { + result = mid; + left = mid + 1; + } else { + right = mid - 1; + } + } + return result; + } + + private boolean isPossible(int[] position, int distance, int m) { + int prevBall = position[0]; + int ballCount = 1; + for (int i = 1; i < position.length && ballCount < m; i++) { + int curr = position[i]; + if (curr - prevBall >= distance) { + ballCount++; + prevBall = curr; + } + } + return ballCount == m; + } +} From 397b6b81b5f0cf0f9809e9b72e969743f81e7ab5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Jun 2024 08:48:10 -0700 Subject: [PATCH 1478/1640] Create Count Number of Nice Subarrays.java --- Medium/Count Number of Nice Subarrays.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Count Number of Nice Subarrays.java diff --git a/Medium/Count Number of Nice Subarrays.java b/Medium/Count Number of Nice Subarrays.java new file mode 100644 index 00000000..e2648bd3 --- /dev/null +++ b/Medium/Count Number of Nice Subarrays.java @@ -0,0 +1,14 @@ +class Solution { + public int numberOfSubarrays(int[] nums, int k) { + int sum = 0; + int count = 0; + Map map = new HashMap<>(); + map.put(sum, 1); + for (int i = 0; i < nums.length; i++) { + sum += nums[i] % 2; + count += map.getOrDefault(sum - k, 0); + map.put(sum, map.getOrDefault(sum, 0) + 1); + } + return count; + } +} From 2c963723a148f3d328299c9aa14263a243ba20ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Jun 2024 10:49:45 -0700 Subject: [PATCH 1479/1640] Create Find Minimum Operations to Make All Elements Divisible by Three.java --- ...tions to Make All Elements Divisible by Three.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Find Minimum Operations to Make All Elements Divisible by Three.java diff --git a/Easy/Find Minimum Operations to Make All Elements Divisible by Three.java b/Easy/Find Minimum Operations to Make All Elements Divisible by Three.java new file mode 100644 index 00000000..c8d6f59e --- /dev/null +++ b/Easy/Find Minimum Operations to Make All Elements Divisible by Three.java @@ -0,0 +1,11 @@ +class Solution { + public int minimumOperations(int[] nums) { + int count = 0; + for (int num : nums) { + if (num % 3 != 0) { + count++; + } + } + return count; + } +} From d5206efa86285870633ce24b787c615174e262bc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Jun 2024 10:59:45 -0700 Subject: [PATCH 1480/1640] Create Count Substrings Without Repeating Character.java --- ...ubstrings Without Repeating Character.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Count Substrings Without Repeating Character.java diff --git a/Medium/Count Substrings Without Repeating Character.java b/Medium/Count Substrings Without Repeating Character.java new file mode 100644 index 00000000..6ffcf7cd --- /dev/null +++ b/Medium/Count Substrings Without Repeating Character.java @@ -0,0 +1,19 @@ +class Solution { + public int numberOfSpecialSubstrings(String s) { + int start = 0; + int end = 0; + int n = s.length(); + int result = 0; + Map map = new HashMap<>(); + while (end < n) { + map.put(s.charAt(end), map.getOrDefault(s.charAt(end), 0) + 1); + while (start < end && map.get(s.charAt(end)) > 1) { + map.put(s.charAt(start), map.get(s.charAt(start)) - 1); + start++; + } + end++; + result += end - start; + } + return result; + } +} From 1063dfd5b34ccff45628bd431e23aa294b43ff40 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 24 Jun 2024 07:46:06 -0700 Subject: [PATCH 1481/1640] Create Minimum Average of Smallest and Largest Elements.java --- ... Average of Smallest and Largest Elements.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Easy/Minimum Average of Smallest and Largest Elements.java diff --git a/Easy/Minimum Average of Smallest and Largest Elements.java b/Easy/Minimum Average of Smallest and Largest Elements.java new file mode 100644 index 00000000..f1fd9e2d --- /dev/null +++ b/Easy/Minimum Average of Smallest and Largest Elements.java @@ -0,0 +1,15 @@ +class Solution { + public double minimumAverage(int[] nums) { + double minAverage = Double.MAX_VALUE; + Arrays.sort(nums); + int left = 0; + int right = nums.length - 1; + while (left < right) { + double average = (nums[left] + nums[right]) / 2.0; + minAverage = Math.min(minAverage, average); + left++; + right--; + } + return minAverage; + } +} From 35ee9b003d7dd5e17a732680fd195e2a75fe2c37 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 25 Jun 2024 07:18:51 -0700 Subject: [PATCH 1482/1640] Create Find the Minimum Area to Cover All Ones I.java --- ... the Minimum Area to Cover All Ones I.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Find the Minimum Area to Cover All Ones I.java diff --git a/Medium/Find the Minimum Area to Cover All Ones I.java b/Medium/Find the Minimum Area to Cover All Ones I.java new file mode 100644 index 00000000..538bf894 --- /dev/null +++ b/Medium/Find the Minimum Area to Cover All Ones I.java @@ -0,0 +1,24 @@ +class Solution { + public int minimumArea(int[][] grid) { + int minRow = Integer.MAX_VALUE; + int minCol = Integer.MAX_VALUE; + int maxRow = Integer.MIN_VALUE; + int maxCol = Integer.MIN_VALUE; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[0].length; j++) { + if (grid[i][j] == 1) { + minRow = Math.min(minRow, i); + minCol = Math.min(minCol, j); + maxRow = Math.max(maxRow, i); + maxCol = Math.max(maxCol, j); + } + } + } + if (minRow == Integer.MAX_VALUE) { + return 0; + } + int length = maxRow - minRow + 1; + int breadth = maxCol - minCol + 1; + return length * breadth; + } +} From acfa4c155ad1e7a95a28695f1d142b6fe80fbd7d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 25 Jun 2024 18:09:27 -0700 Subject: [PATCH 1483/1640] Update Balance a Binary Search Tree.java --- Medium/Balance a Binary Search Tree.java | 54 ++++++++++++++---------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/Medium/Balance a Binary Search Tree.java b/Medium/Balance a Binary Search Tree.java index 9fbf14ce..dd07996e 100644 --- a/Medium/Balance a Binary Search Tree.java +++ b/Medium/Balance a Binary Search Tree.java @@ -14,29 +14,37 @@ * } */ class Solution { - public TreeNode balanceBST(TreeNode root) { - List sortedList = new ArrayList<>(); - inorderTraversal(root, sortedList); - return buildBST(sortedList, 0, sortedList.size() - 1); - } - - private TreeNode buildBST(List sortedList, int start, int end) { - if (start > end) { - return null; + public TreeNode balanceBST(TreeNode root) { + List inorder = getInorderNodes(root); + return createBST(inorder, 0, inorder.size() - 1); } - int mid = (start + end) / 2; - TreeNode root = new TreeNode(sortedList.get(mid)); - root.left = buildBST(sortedList, start, mid - 1); - root.right = buildBST(sortedList, mid + 1, end); - return root; - } - - private void inorderTraversal(TreeNode root, List sortedList) { - if (root == null) { - return; + + private List getInorderNodes(TreeNode root) { + Stack stack = new Stack<>(); + while (root != null) { + stack.push(root); + root = root.left; + } + List list = new ArrayList<>(); + while (!stack.isEmpty()) { + TreeNode node = stack.pop(); + list.add(node.val); + TreeNode rightNode = node.right; + while (rightNode != null) { + stack.push(rightNode); + rightNode = rightNode.left; + } + } + return list; + } + + private TreeNode createBST(List list, int start, int end) { + if (start > end) { + return null; + } + int mid = (start + end) / 2; + TreeNode leftTree = createBST(list, start, mid - 1); + TreeNode rightTree = createBST(list, mid + 1, end); + return new TreeNode(list.get(mid), leftTree, rightTree); } - inorderTraversal(root.left, sortedList); - sortedList.add(root.val); - inorderTraversal(root.right, sortedList); - } } From a116f9b3c5fa4477a54e5ebef4531f46ddfecdd5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 26 Jun 2024 07:21:54 -0700 Subject: [PATCH 1484/1640] Create Minimum Operations to Make Binary Array Elements Equal to One I.java --- ... Binary Array Elements Equal to One I.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Minimum Operations to Make Binary Array Elements Equal to One I.java diff --git a/Medium/Minimum Operations to Make Binary Array Elements Equal to One I.java b/Medium/Minimum Operations to Make Binary Array Elements Equal to One I.java new file mode 100644 index 00000000..4b5b20a1 --- /dev/null +++ b/Medium/Minimum Operations to Make Binary Array Elements Equal to One I.java @@ -0,0 +1,19 @@ +class Solution { + public int minOperations(int[] nums) { + int count = 0; + for (int i = 0; i <= nums.length - 3; i++) { + if (nums[i] == 0) { + nums[i] = nums[i] == 0 ? 1 : 0; + nums[i + 1] = nums[i + 1] == 0 ? 1 : 0; + nums[i + 2] = nums[i + 2] == 0 ? 1 : 0; + count++; + } + } + for (int i = nums.length - 3; i < nums.length; i++) { + if (nums[i] == 0) { + return -1; + } + } + return count; + } +} From f981b3283fbd6a9bd483a813cd1c502c3e27de67 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 27 Jun 2024 06:32:40 -0700 Subject: [PATCH 1485/1640] Update Find Center of Star Graph.java --- Medium/Find Center of Star Graph.java | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Medium/Find Center of Star Graph.java b/Medium/Find Center of Star Graph.java index f3f6de5a..8270ad2d 100644 --- a/Medium/Find Center of Star Graph.java +++ b/Medium/Find Center of Star Graph.java @@ -1,13 +1,16 @@ -import java.util.Map.Entry; - class Solution { - public int findCenter(int[][] edges) { - Map> map = new HashMap<>(); - for (int[] edge : edges) { - map.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); - map.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); + public int findCenter(int[][] edges) { + Map map = new HashMap<>(); + int n = edges.length; + for (int[] edge : edges) { + map.put(edge[0], map.getOrDefault(edge[0], 0) + 1); + map.put(edge[1], map.getOrDefault(edge[1], 0) + 1); + } + for (Integer key : map.keySet()) { + if (map.get(key) == n) { + return key; + } + } + return -1; } - return map.entrySet().stream().filter(entry -> entry.getValue().size() == edges.length).map( - Entry::getKey).findFirst().orElse(-1); - } } From 41b043a398434deca08dd2d99c179d1fc1c2a3a9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 29 Jun 2024 12:53:22 -0700 Subject: [PATCH 1486/1640] Update All Ancestors of a Node in a Directed Acyclic Graph.java --- ...of a Node in a Directed Acyclic Graph.java | 54 +++++++++++-------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/Medium/All Ancestors of a Node in a Directed Acyclic Graph.java b/Medium/All Ancestors of a Node in a Directed Acyclic Graph.java index 60ab5900..36063815 100644 --- a/Medium/All Ancestors of a Node in a Directed Acyclic Graph.java +++ b/Medium/All Ancestors of a Node in a Directed Acyclic Graph.java @@ -1,26 +1,36 @@ class Solution { - public List> getAncestors(int n, int[][] edges) { - Map> graph = new HashMap<>(); - for (int[] edge : edges) { - graph.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); - } - List> result = new ArrayList<>(); - for (int i = 0; i < n; i++) { - List ancestors = new ArrayList<>(); - Set visited = new HashSet<>(); - Queue queue = new LinkedList<>(graph.getOrDefault(i, new ArrayList<>())); - while (!queue.isEmpty()) { - int removed = queue.remove(); - if (visited.contains(removed)) { - continue; + public List> getAncestors(int n, int[][] edges) { + Map> graph = new HashMap<>(); + int[] indegree = new int[n]; + for (int[] edge : edges) { + graph.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); + indegree[edge[1]]++; + } + Queue queue = new LinkedList<>(); + Map> ancestors = new HashMap<>(); + for (int i = 0; i < n; i++) { + if (indegree[i] == 0) { + queue.offer(i); + } + } + while (!queue.isEmpty()) { + int node = queue.poll(); + ancestors.computeIfAbsent(node, k -> new HashSet<>()); + for (int dependents : graph.getOrDefault(node, Collections.emptyList())) { + ancestors.computeIfAbsent(dependents, k -> new HashSet<>()).add(node); + ancestors.get(dependents).addAll(ancestors.get(node)); + indegree[dependents]--; + if (indegree[dependents] == 0) { + queue.offer(dependents); + } + } + } + List> result = new ArrayList<>(); + for (int i = 0; i < n; i++) { + List currNodeAncestors = new ArrayList<>(ancestors.getOrDefault(i, Collections.emptySet())); + currNodeAncestors.sort(Comparator.naturalOrder()); + result.add(currNodeAncestors); } - ancestors.add(removed); - visited.add(removed); - queue.addAll(graph.getOrDefault(removed, new ArrayList<>())); - } - Collections.sort(ancestors); - result.add(ancestors); + return result; } - return result; - } } From 60879733e7648f86e0b1fbc071ad7f72ea520c35 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 1 Jul 2024 07:21:18 -0700 Subject: [PATCH 1487/1640] Update The Earliest Moment When Everyone Become Friends.java --- ...t Moment When Everyone Become Friends.java | 78 ++++++++----------- 1 file changed, 33 insertions(+), 45 deletions(-) diff --git a/Medium/The Earliest Moment When Everyone Become Friends.java b/Medium/The Earliest Moment When Everyone Become Friends.java index 578a04cb..8de3e818 100644 --- a/Medium/The Earliest Moment When Everyone Become Friends.java +++ b/Medium/The Earliest Moment When Everyone Become Friends.java @@ -1,54 +1,42 @@ class Solution { - public int earliestAcq(int[][] logs, int n) { - Arrays.sort(logs, Comparator.comparingInt(o -> o[0])); - DisjointSet disjointSet = new DisjointSet(n); - for (int[] log : logs) { - disjointSet.union(log[1], log[2]); - if (disjointSet.unionCount == 1) { - return log[0]; - } + public int earliestAcq(int[][] logs, int n) { + Arrays.sort(logs, Comparator.comparingInt(a -> a[0])); + UnionFind uf = new UnionFind(n); + for (int[] log : logs) { + uf.union(log[1], log[2]); + if (uf.count == 1) { + return log[0]; + } + } + return -1; } - return -1; - } - - private static final class DisjointSet { - private final int[] root; - private final int[] rank; - public int unionCount; - - public DisjointSet(int size) { - this.root = new int[size]; - this.rank = new int[size]; - for (int i = 0; i < size; i++) { - this.root[i] = i; - this.rank[i] = 1; - } - this.unionCount = size; - } + static class UnionFind { + private final int[] parent; + private int count; - public void union(int nodeOne, int nodeTwo) { - int rootOne = find(nodeOne); - int rootTwo = find(nodeTwo); - if (rootOne != rootTwo) { - if (this.rank[rootOne] > this.rank[rootTwo]) { - this.root[rootTwo] = rootOne; - } else if (this.rank[rootOne] < this.rank[rootTwo]) { - this.root[rootOne] = rootTwo; - } else { - this.root[rootTwo] = rootOne; - this.rank[rootOne]++; + public UnionFind(int n) { + parent = new int[n]; + count = n; + for (int i = 0; i < n; i++) { + parent[i] = i; + } } - this.unionCount--; - } - } + public int find(int node) { + if (parent[node] != node) { + parent[node] = find(parent[node]); + } + return parent[node]; + } - public int find(int node) { - if (node == root[node]) { - return node; - } - return root[node] = find(root[node]); + public void union(int x, int y) { + int rootX = find(x); + int rootY = find(y); + if (rootX != rootY) { + parent[rootX] = rootY; + count--; + } + } } - } } From 568f9bad22717e799a2aa1b910df29b14f92f5a2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 3 Jul 2024 07:40:43 -0700 Subject: [PATCH 1488/1640] Create Minimum Difference Between Largest and Smallest Value in Three Moves.java --- ...argest and Smallest Value in Three Moves.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Minimum Difference Between Largest and Smallest Value in Three Moves.java diff --git a/Medium/Minimum Difference Between Largest and Smallest Value in Three Moves.java b/Medium/Minimum Difference Between Largest and Smallest Value in Three Moves.java new file mode 100644 index 00000000..2722191a --- /dev/null +++ b/Medium/Minimum Difference Between Largest and Smallest Value in Three Moves.java @@ -0,0 +1,16 @@ +class Solution { + public int minDifference(int[] nums) { + int n = nums.length; + if (n <= 4) { + return 0; + } + Arrays.sort(nums); + int minDiff = Integer.MAX_VALUE; + int left = 0; + int right = n - 4; + while (left < 4) { + minDiff = Math.min(minDiff, nums[right++] - nums[left++]); + } + return minDiff; + } +} From 86ad1a23993e937706f6572c2b10bc6ba012ee07 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 8 Jul 2024 13:39:33 -0700 Subject: [PATCH 1489/1640] Create Find the Winner of the Circular Game.java --- Medium/Find the Winner of the Circular Game.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Find the Winner of the Circular Game.java diff --git a/Medium/Find the Winner of the Circular Game.java b/Medium/Find the Winner of the Circular Game.java new file mode 100644 index 00000000..816b3aa4 --- /dev/null +++ b/Medium/Find the Winner of the Circular Game.java @@ -0,0 +1,15 @@ +class Solution { + public int findTheWinner(int n, int k) { + Queue circle = new LinkedList<>(); + for (int i = 1; i <= n; i++) { + circle.add(i); + } + while (circle.size() > 1) { + for (int i = 0; i < k - 1; i++) { + circle.add(circle.remove()); + } + circle.remove(); + } + return circle.peek(); + } +} From be7bd21bae156c80b5d304f095e4c1c7c3c1a9ba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 9 Jul 2024 16:31:31 -0700 Subject: [PATCH 1490/1640] Update Remove Duplicates From an Unsorted Linked List.java --- ...plicates From an Unsorted Linked List.java | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/Medium/Remove Duplicates From an Unsorted Linked List.java b/Medium/Remove Duplicates From an Unsorted Linked List.java index e62d60c7..18308224 100644 --- a/Medium/Remove Duplicates From an Unsorted Linked List.java +++ b/Medium/Remove Duplicates From an Unsorted Linked List.java @@ -9,31 +9,29 @@ * } */ class Solution { - public ListNode deleteDuplicatesUnsorted(ListNode head) { - Map map = new HashMap<>(); - ListNode curr = head; - while (curr != null) { - map.put(curr.val, map.getOrDefault(curr.val, 0) + 1); - curr = curr.next; - } - curr = head; - ListNode newHead = null; - ListNode prev = null; - while (curr != null) { - if (map.get(curr.val) > 1) { - ListNode nextNode = curr.next; - if (prev != null) { - prev.next = nextNode; + public ListNode deleteDuplicatesUnsorted(ListNode head) { + Map map = new HashMap<>(); + ListNode curr = head; + while (curr != null) { + map.put(curr.val, map.getOrDefault(curr.val, 0) + 1); + curr = curr.next; } - curr = nextNode; - } else { - if (newHead == null) { - newHead = curr; + curr = head; + ListNode prev = null; + ListNode newHead = null; + while (curr != null) { + if (map.get(curr.val) > 1) { + if (prev != null) { + prev.next = curr.next; + } + } else { + prev = curr; + if (newHead == null) { + newHead = curr; + } + } + curr = curr.next; } - prev = curr; - curr = curr.next; - } + return newHead; } - return newHead; - } } From 3625ba91340dcefb6ff2183a75d4c7e333dc7481 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 12 Jul 2024 06:50:40 -0700 Subject: [PATCH 1491/1640] Create Maximum Score From Removing Substrings.java --- ...aximum Score From Removing Substrings.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Medium/Maximum Score From Removing Substrings.java diff --git a/Medium/Maximum Score From Removing Substrings.java b/Medium/Maximum Score From Removing Substrings.java new file mode 100644 index 00000000..0f7ccf87 --- /dev/null +++ b/Medium/Maximum Score From Removing Substrings.java @@ -0,0 +1,29 @@ +class Solution { + public int maximumGain(String s, int x, int y) { + int score = 0; + String firstPass = removeSubstring(s, x > y ? "ab" : "ba"); + int removeCount = (s.length() - firstPass.length()) / 2; + score += removeCount * Math.max(x, y); + String secondPass = removeSubstring(firstPass, x > y ? "ba" : "ab"); + removeCount = (firstPass.length() - secondPass.length()) / 2; + score += removeCount * Math.min(x, y); + return score; + } + + private String removeSubstring(String s, String target) { + Stack stack = new Stack<>(); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (c == target.charAt(1) && !stack.isEmpty() && stack.peek() == target.charAt(0)) { + stack.pop(); + } else { + stack.push(c); + } + } + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.reverse().toString(); + } +} From df3dac19974910cc81c4c737a0ee85245adf5685 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 13 Jul 2024 10:03:58 -0700 Subject: [PATCH 1492/1640] Create Robot Collisions.java --- Hard/Robot Collisions.java | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Hard/Robot Collisions.java diff --git a/Hard/Robot Collisions.java b/Hard/Robot Collisions.java new file mode 100644 index 00000000..4202122c --- /dev/null +++ b/Hard/Robot Collisions.java @@ -0,0 +1,38 @@ +class Solution { + public List survivedRobotsHealths(int[] positions, int[] healths, String directions) { + int n = positions.length; + Integer[] indices = new Integer[n]; + for (int i = 0; i < n; i++) { + indices[i] = i; + } + Arrays.sort(indices, (a, b) -> Integer.compare(positions[a], positions[b])); + Stack stack = new Stack<>(); + for (Integer index : indices) { + if (directions.charAt(index) == 'R') { + stack.push(index); + } else { + while (!stack.isEmpty() && healths[index] > 0) { + int poppedIndex = stack.pop(); + if (healths[poppedIndex] > healths[index]) { + healths[poppedIndex]--; + healths[index] = 0; + stack.push(poppedIndex); + } else if (healths[poppedIndex] < healths[index]) { + healths[index]--; + healths[poppedIndex] = 0; + } else { + healths[poppedIndex] = 0; + healths[index] = 0; + } + } + } + } + List result = new ArrayList<>(); + for (int i = 0; i < n; i++) { + if (healths[i] > 0) { + result.add(healths[i]); + } + } + return result; + } +} From 62f366439d3bdf7e63794356eb1c544a3b5afef4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 13 Jul 2024 17:34:13 -0700 Subject: [PATCH 1493/1640] Create Maximum Points After Enemy Battles.java --- Medium/Maximum Points After Enemy Battles.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Maximum Points After Enemy Battles.java diff --git a/Medium/Maximum Points After Enemy Battles.java b/Medium/Maximum Points After Enemy Battles.java new file mode 100644 index 00000000..2358cd8f --- /dev/null +++ b/Medium/Maximum Points After Enemy Battles.java @@ -0,0 +1,16 @@ +class Solution { + public long maximumPoints(int[] enemyEnergies, int currentEnergy) { + long sum = 0; + int minimumEnergy = Integer.MAX_VALUE; + for (int energy : enemyEnergies) { + sum += energy; + minimumEnergy = Math.min(minimumEnergy, energy); + } + if (currentEnergy < minimumEnergy) { + return 0; + } + long totalEnergy = currentEnergy; + totalEnergy += sum - minimumEnergy; + return totalEnergy / minimumEnergy; + } +} From 57435b89c7cbca66b994cf2f3c05de888bf3c924 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 17 Jul 2024 07:12:38 -0700 Subject: [PATCH 1494/1640] Update Delete Nodes And Return Forest.java --- Medium/Delete Nodes And Return Forest.java | 53 +++++++++++----------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/Medium/Delete Nodes And Return Forest.java b/Medium/Delete Nodes And Return Forest.java index c3ec8f1b..344770b5 100644 --- a/Medium/Delete Nodes And Return Forest.java +++ b/Medium/Delete Nodes And Return Forest.java @@ -14,33 +14,34 @@ * } */ class Solution { - public List delNodes(TreeNode root, int[] to_delete) { - List result = new ArrayList<>(); - Set deleteSet = Arrays.stream(to_delete).boxed().collect(Collectors.toSet()); - helper(root, deleteSet, result, null); - return result; - } - - private void helper(TreeNode node, Set deleteSet, List result, TreeNode parent) { - if (node == null) { - return; + public List delNodes(TreeNode root, int[] toDelete) { + Set set = new HashSet<>(); + for (int val : toDelete) { + set.add(val); + } + List result = new ArrayList<>(); + recurse(root, result, set, null); + return result; } - TreeNode nextParent = null; - if (deleteSet.contains(node.val)) { - if (parent != null) { - if (parent.left == node) { - parent.left = null; - } else { - parent.right = null; + + private void recurse(TreeNode root, List result, Set set, TreeNode parent) { + if (root == null) { + return; + } + if (set.contains(root.val)) { + if (parent != null && parent.left == root) { + parent.left = null; + } else if (parent != null && parent.right == root) { + parent.right = null; + } + recurse(root.left, result, set, null); + recurse(root.right, result, set, null); + return; + } + if (parent == null) { + result.add(root); } - } - } else { - if (parent == null) { - result.add(node); - } - nextParent = node; + recurse(root.left, result, set, root); + recurse(root.right, result, set, root); } - helper(node.left, deleteSet, result, nextParent); - helper(node.right, deleteSet, result, nextParent); - } } From e69114728912b48564c236b4744428d4aecccfb2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 22 Jul 2024 07:35:17 -0700 Subject: [PATCH 1495/1640] Create Number of Good Leaf Nodes Pairs.java --- Medium/Number of Good Leaf Nodes Pairs.java | 59 +++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Medium/Number of Good Leaf Nodes Pairs.java diff --git a/Medium/Number of Good Leaf Nodes Pairs.java b/Medium/Number of Good Leaf Nodes Pairs.java new file mode 100644 index 00000000..c54d967f --- /dev/null +++ b/Medium/Number of Good Leaf Nodes Pairs.java @@ -0,0 +1,59 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int countPairs(TreeNode root, int distance) { + Map> graph = new HashMap<>(); + Set leaves = new HashSet<>(); + traverse(root, null, graph, leaves); + int result = 0; + for (TreeNode leaf : leaves) { + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(); + queue.add(leaf); + visited.add(leaf); + for (int i = 0; i <= distance; i++) { + int size = queue.size(); + while (size-- > 0) { + TreeNode curr = queue.remove(); + if (leaves.contains(curr) && curr != leaf) { + result++; + } + for (TreeNode neighbor : graph.getOrDefault(curr, new ArrayList<>())) { + if (visited.add(neighbor)) { + queue.add(neighbor); + } + } + } + } + } + return result / 2; + } + + private void traverse(TreeNode node, TreeNode parent, Map> graph, Set leaves) { + if (node == null) { + return; + } + if (node.left == null && node.right == null) { + leaves.add(node); + } + if (parent != null) { + graph.computeIfAbsent(parent, k -> new ArrayList<>()).add(node); + graph.computeIfAbsent(node, k -> new ArrayList<>()).add(parent); + } + traverse(node.left, node, graph, leaves); + traverse(node.right, node, graph, leaves); + } +} From 9800de288ad74098afb62b6eebe3ffa044f9604a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 28 Jul 2024 13:44:49 -0700 Subject: [PATCH 1496/1640] Create Find if Digit Game Can Be Won.java --- Easy/Find if Digit Game Can Be Won.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Find if Digit Game Can Be Won.java diff --git a/Easy/Find if Digit Game Can Be Won.java b/Easy/Find if Digit Game Can Be Won.java new file mode 100644 index 00000000..22c76892 --- /dev/null +++ b/Easy/Find if Digit Game Can Be Won.java @@ -0,0 +1,14 @@ +class Solution { + public boolean canAliceWin(int[] nums) { + int singleDigitSum = 0; + int doubleDigitSum = 0; + for (int num : nums) { + if (String.valueOf(num).length() > 1) { + doubleDigitSum += num; + } else { + singleDigitSum += num; + } + } + return singleDigitSum > doubleDigitSum || doubleDigitSum > singleDigitSum; + } +} From c977c77ff129b5957082b1134361538b9ef997d1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Aug 2024 09:43:37 -0700 Subject: [PATCH 1497/1640] Create Make Two Arrays Equal by Reversing Subarrays.java --- ...wo Arrays Equal by Reversing Subarrays.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Make Two Arrays Equal by Reversing Subarrays.java diff --git a/Easy/Make Two Arrays Equal by Reversing Subarrays.java b/Easy/Make Two Arrays Equal by Reversing Subarrays.java new file mode 100644 index 00000000..62ce7dca --- /dev/null +++ b/Easy/Make Two Arrays Equal by Reversing Subarrays.java @@ -0,0 +1,18 @@ +class Solution { + public boolean canBeEqual(int[] target, int[] arr) { + Map map = new HashMap<>(); + for (int num : target) { + map.put(num, map.getOrDefault(num, 0) + 1); + } + for (int num : arr) { + if (!map.containsKey(num)) { + return false; + } + map.put(num, map.get(num) - 1); + if (map.get(num) == 0) { + map.remove(num); + } + } + return map.isEmpty(); + } +} From cf1d49ca0da00b6e50a10a2a0a440609a7d13601 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 3 Aug 2024 17:32:33 -0700 Subject: [PATCH 1498/1640] Update Range Sum of Sorted Subarray Sums.java --- Medium/Range Sum of Sorted Subarray Sums.java | 43 +++++++++---------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/Medium/Range Sum of Sorted Subarray Sums.java b/Medium/Range Sum of Sorted Subarray Sums.java index c8dad58b..9b7504b7 100644 --- a/Medium/Range Sum of Sorted Subarray Sums.java +++ b/Medium/Range Sum of Sorted Subarray Sums.java @@ -1,26 +1,23 @@ class Solution { - final int MOD = 100000007; - public int rangeSum(int[] nums, int n, int left, int right) { - PriorityQueue pq = new PriorityQueue<>(new Comparator(){ - public int compare(int[] o1, int[] o2) { - return o1[0] - o2[0]; - } - }); - for (int i = 0; i < n; i++) { - pq.add(new int[]{nums[i], i + 1}); + private static final int MOD = 1000_000_007; + + public int rangeSum(int[] nums, int n, int left, int right) { + Queue pq = new PriorityQueue<>(Comparator.comparingInt(o -> o[0])); + for (int i = 0; i < n; i++) { + pq.add(new int[]{nums[i], i + 1}); + } + int sum = 0; + for (int i = 1; i <= right; i++) { + int[] removed = pq.poll(); + if (i >= left) { + sum = (sum + removed[0]) % MOD; + } + if (removed[1] < n) { + removed[0] = removed[0] + nums[removed[1]]; + removed[1]++; + pq.add(removed); + } + } + return sum; } - int sum = 0; - for (int i = 1; i <= right; i++) { - int[] removed = pq.poll(); - if (i >= left) { - sum = (sum + removed[0]) % MOD; - } - if (removed[1] < n) { - removed[0] = removed[0] + nums[removed[1]]; - removed[1]++; - pq.add(removed); - } - } - return sum; - } } From b082bd05c66faa3219ce3252834d273131100a28 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 4 Aug 2024 11:14:17 -0700 Subject: [PATCH 1499/1640] Create Design Neighbor Sum Service.java --- Easy/Design Neighbor Sum Service.java | 50 +++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 Easy/Design Neighbor Sum Service.java diff --git a/Easy/Design Neighbor Sum Service.java b/Easy/Design Neighbor Sum Service.java new file mode 100644 index 00000000..93446e53 --- /dev/null +++ b/Easy/Design Neighbor Sum Service.java @@ -0,0 +1,50 @@ +class neighborSum { + + private static final int[][] ADJACENT_DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + private static final int[][] DIAGONAL_DIRS = {{1, -1}, {-1, 1}, {1, 1}, {-1, -1}}; + + private final int[][] grid; + private final int numRows; + private final int numCols; + private final Map valueToCoordinateMap; + + public neighborSum(int[][] grid) { + this.numRows = grid.length; + this.numCols = grid[0].length; + this.valueToCoordinateMap = new HashMap<>(); + this.grid = new int[numRows][numCols]; + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < numCols; j++) { + this.grid[i][j] = grid[i][j]; + this.valueToCoordinateMap.put(grid[i][j], new int[]{i, j}); + } + } + } + + public int adjacentSum(int value) { + return calculateSum(valueToCoordinateMap.get(value), ADJACENT_DIRS); + } + + public int diagonalSum(int value) { + return calculateSum(valueToCoordinateMap.get(value), DIAGONAL_DIRS); + } + + private int calculateSum(int[] coordinate, int[][] directions) { + int sum = 0; + for (int[] dir : directions) { + int newX = dir[0] + coordinate[0]; + int newY = dir[1] + coordinate[1]; + if (newX >= 0 && newX < numRows && newY >= 0 && newY < numCols) { + sum += grid[newX][newY]; + } + } + return sum; + } +} + +/** + * Your neighborSum object will be instantiated and called as such: + * neighborSum obj = new neighborSum(grid); + * int param_1 = obj.adjacentSum(value); + * int param_2 = obj.diagonalSum(value); + */ From d9d2a0cfdccbb6d2c0439839abfce89e534ec0f0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 5 Aug 2024 07:45:47 -0700 Subject: [PATCH 1500/1640] Create Find the Number of Winning Players.java --- Easy/Find the Number of Winning Players.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Find the Number of Winning Players.java diff --git a/Easy/Find the Number of Winning Players.java b/Easy/Find the Number of Winning Players.java new file mode 100644 index 00000000..fd4ea2ba --- /dev/null +++ b/Easy/Find the Number of Winning Players.java @@ -0,0 +1,14 @@ +class Solution { + public int winningPlayerCount(int n, int[][] pick) { + Map> map = new HashMap<>(); + Set winners = new HashSet<>(); + for (int[] p : pick) { + map.computeIfAbsent(p[0], k -> new HashMap<>()); + map.get(p[0]).put(p[1], map.get(p[0]).getOrDefault(p[1], 0) + 1); + if (map.get(p[0]).get(p[1]) > p[0]) { + winners.add(p[0]); + } + } + return winners.size(); + } +} From ed0f41e4e3f6c4a2bf7b60609d5c4d8ea214e049 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 5 Aug 2024 18:17:23 -0700 Subject: [PATCH 1501/1640] Create Minimum Number of Pushes to Type Word II.java --- ...imum Number of Pushes to Type Word II.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Minimum Number of Pushes to Type Word II.java diff --git a/Medium/Minimum Number of Pushes to Type Word II.java b/Medium/Minimum Number of Pushes to Type Word II.java new file mode 100644 index 00000000..71ec90f6 --- /dev/null +++ b/Medium/Minimum Number of Pushes to Type Word II.java @@ -0,0 +1,23 @@ +class Solution { + public int minimumPushes(String word) { + Map map = new HashMap<>(); + for (char c : word.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); + } + PriorityQueue pq = new PriorityQueue<>((a, b) -> map.get(b).compareTo(map.get(a))); + pq.addAll(map.keySet()); + int count = 0; + int typeMultiple = 1; + int counter = 0; + while (!pq.isEmpty()) { + char removed = pq.poll(); + count += typeMultiple * map.get(removed); + counter++; + if (counter == 8) { + counter = 0; + typeMultiple++; + } + } + return count; + } +} From 961e9f70e34b77d1d2cf69c745e9ec46cb27cf58 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 Aug 2024 08:13:34 -0700 Subject: [PATCH 1502/1640] Create Shortest Distance After Road Addition Queries I.java --- ...istance After Road Addition Queries I.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 Medium/Shortest Distance After Road Addition Queries I.java diff --git a/Medium/Shortest Distance After Road Addition Queries I.java b/Medium/Shortest Distance After Road Addition Queries I.java new file mode 100644 index 00000000..19a2ea74 --- /dev/null +++ b/Medium/Shortest Distance After Road Addition Queries I.java @@ -0,0 +1,39 @@ +class Solution { + public int[] shortestDistanceAfterQueries(int n, int[][] queries) { + Map> graph = new HashMap<>(); + for (int i = 0; i < n - 1; i++) { + graph.computeIfAbsent(i, k -> new HashSet<>()).add(i + 1); + } + int[] result = new int[queries.length]; + for (int i = 0; i < queries.length; i++) { + int[] query = queries[i]; + graph.computeIfAbsent(query[0], k -> new HashSet<>()).add(query[1]); + result[i] = findDistance(graph, n - 1); + } + return result; + } + + private int findDistance(Map> graph, int target) { + Queue queue = new LinkedList<>(); + Set visited = new HashSet<>(); + queue.add(0); + int distance = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + for (int i = 0; i < size; i++) { + Integer node = queue.poll(); + if (node == target) { + return distance; + } + for (Integer neighbor : graph.get(node)) { + if (!visited.contains(neighbor)) { + queue.add(neighbor); + visited.add(node); + } + } + } + distance++; + } + return -1; + } +} From c0e0d7de8dc5b583bf1086c5d96f4f9345a4ee69 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Aug 2024 15:55:40 -0700 Subject: [PATCH 1503/1640] Create Snake in Matrix.java --- Easy/Snake in Matrix.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Snake in Matrix.java diff --git a/Easy/Snake in Matrix.java b/Easy/Snake in Matrix.java new file mode 100644 index 00000000..5dce2568 --- /dev/null +++ b/Easy/Snake in Matrix.java @@ -0,0 +1,22 @@ +class Solution { + + private static final Map COMMAND_TO_DIRECTION = Map.of( + "UP", new int[]{-1, 0}, + "DOWN", new int[]{1, 0}, + "LEFT", new int[]{0, -1}, + "RIGHT", new int[]{0, 1} + ); + + public int finalPositionOfSnake(int n, List commands) { + int position = 0; + int x = 0; + int y = 0; + for (String command : commands) { + int[] change = COMMAND_TO_DIRECTION.get(command); + x += change[0]; + y += change[1]; + position = x * n + y; + } + return position; + } +} From 0a57dc54af4305a89540e031d7da72c6dcae9548 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 11 Aug 2024 16:28:37 -0700 Subject: [PATCH 1504/1640] Create Count the Number of Good Nodes.java --- Medium/Count the Number of Good Nodes.java | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Medium/Count the Number of Good Nodes.java diff --git a/Medium/Count the Number of Good Nodes.java b/Medium/Count the Number of Good Nodes.java new file mode 100644 index 00000000..d100513d --- /dev/null +++ b/Medium/Count the Number of Good Nodes.java @@ -0,0 +1,34 @@ +class Solution { + public int countGoodNodes(int[][] edges) { + Map> map = new HashMap<>(); + for (int[] edge : edges) { + map.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); + map.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); + } + int[] result = {0}; + recurse(map, result, 0, -1); + return result[0]; + } + + private int recurse(Map> map, int[] result, int node, int prevNode) { + int count = -1; + int total = 1; + boolean flag = true; + for (Integer conn : map.getOrDefault(node, new HashSet<>())) { + if (conn == prevNode) { + continue; + } + int temp = recurse(map, result, conn, node); + total += temp; + if (count == -1) { + count = temp; + } else if (count != temp) { + flag = false; + } + } + if (flag) { + result[0]++; + } + return total; + } +} From 8b69a0991f768cb0e7eee430604c769bd24c90e9 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 14 Aug 2024 16:50:03 -0700 Subject: [PATCH 1505/1640] Create Find K-th Smallest Pair Distance.java --- Hard/Find K-th Smallest Pair Distance.java | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Hard/Find K-th Smallest Pair Distance.java diff --git a/Hard/Find K-th Smallest Pair Distance.java b/Hard/Find K-th Smallest Pair Distance.java new file mode 100644 index 00000000..6d84cfa8 --- /dev/null +++ b/Hard/Find K-th Smallest Pair Distance.java @@ -0,0 +1,31 @@ +class Solution { + public int smallestDistancePair(int[] nums, int k) { + Arrays.sort(nums); + int n = nums.length; + int left = 0; + int right = nums[n - 1] - nums[0]; + while (left < right) { + int mid = (left + right) / 2; + int count = countPairs(nums, mid); + if (count < k) { + left = mid + 1; + } else { + right = mid; + } + } + return left; + } + + private int countPairs(int[] nums, int distance) { + int count = 0; + int n = nums.length; + int left = 0; + for (int i = 0; i < n; i++) { + while (nums[i] - nums[left] > distance) { + left++; + } + count += i - left; + } + return count; + } +} From dbff4c4f75e097d5189d566d4bcc28b163efaa1c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 16 Aug 2024 15:05:13 -0700 Subject: [PATCH 1506/1640] Update and rename Maximum Distance in Arrays.java to Maximum Distance in Arrays.java --- Easy/Maximum Distance in Arrays.java | 17 ----------------- Medium/Maximum Distance in Arrays.java | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) delete mode 100644 Easy/Maximum Distance in Arrays.java create mode 100644 Medium/Maximum Distance in Arrays.java diff --git a/Easy/Maximum Distance in Arrays.java b/Easy/Maximum Distance in Arrays.java deleted file mode 100644 index 71a4581d..00000000 --- a/Easy/Maximum Distance in Arrays.java +++ /dev/null @@ -1,17 +0,0 @@ -class Solution { - public static int maxDistance(List> arrays) { - int min = arrays.get(0).get(0); - int max = arrays.get(0).get(arrays.get(0).size()-1); - int result = Integer.MIN_VALUE; - - for (int i=1; i> arrays) { + int result = 0; + int n = arrays.get(0).size(); + int min = arrays.get(0).get(0); + int max = arrays.get(0).get(n - 1); + for (int i = 1; i < arrays.size(); i++) { + n = arrays.get(i).size(); + result = Math.max(result, + Math.max(Math.abs(arrays.get(i).get(n - 1) - min), + Math.abs(max - arrays.get(i).get(0)))); + min = Math.min(min, arrays.get(i).get(0)); + max = Math.max(max, arrays.get(i).get(n - 1)); + } + return result; + } +} From bad1223b35eb5306161d677a54157e84114727dc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Aug 2024 08:29:45 -0700 Subject: [PATCH 1507/1640] Create Count Substrings That Satisfy K-Constraint I.java --- ...ubstrings That Satisfy K-Constraint I.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Easy/Count Substrings That Satisfy K-Constraint I.java diff --git a/Easy/Count Substrings That Satisfy K-Constraint I.java b/Easy/Count Substrings That Satisfy K-Constraint I.java new file mode 100644 index 00000000..9f44425d --- /dev/null +++ b/Easy/Count Substrings That Satisfy K-Constraint I.java @@ -0,0 +1,21 @@ +class Solution { + public int countKConstraintSubstrings(String s, int k) { + Map map = new HashMap<>(); + int start = 0; + int end = 0; + int n = s.length(); + int result = 0; + while (end < n) { + map.put(s.charAt(end), map.getOrDefault(s.charAt(end), 0) + 1); + end++; + while (start < end && map.getOrDefault('0', 0) > k && map.getOrDefault('1', 0) > k) { + map.put(s.charAt(start), map.get(s.charAt(start)) - 1); + start++; + } + if (map.getOrDefault('0', 0) <= k || map.getOrDefault('1', 0) <= k) { + result += end - start; + } + } + return result; + } +} From 700f9c3e8889b5c97cf03ba4f4859f451422078c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 Aug 2024 17:38:24 -0700 Subject: [PATCH 1508/1640] Create Find the Power of K-Size Subarrays I.java --- Easy/Find the Power of K-Size Subarrays I.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Find the Power of K-Size Subarrays I.java diff --git a/Easy/Find the Power of K-Size Subarrays I.java b/Easy/Find the Power of K-Size Subarrays I.java new file mode 100644 index 00000000..975c1a3a --- /dev/null +++ b/Easy/Find the Power of K-Size Subarrays I.java @@ -0,0 +1,18 @@ +class Solution { + public int[] resultsArray(int[] nums, int k) { + if (k == 1) { + return nums; + } + int n = nums.length; + int[] result = new int[n - k + 1]; + Arrays.fill(result, -1); + int count = 1; + for (int i = 0; i < nums.length - 1; i++) { + count = (nums[i + 1] - nums[i] == 1) ? count + 1 : 1; + if (count >= k) { + result[i - k + 2] = nums[i + 1]; + } + } + return result; + } +} From 9f4be8534e7a2658e69fc80c9f52722451071f04 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 22 Aug 2024 17:22:21 -0700 Subject: [PATCH 1509/1640] Create Fraction Addition and Subtraction.java --- Medium/Fraction Addition and Subtraction.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Medium/Fraction Addition and Subtraction.java diff --git a/Medium/Fraction Addition and Subtraction.java b/Medium/Fraction Addition and Subtraction.java new file mode 100644 index 00000000..3d26da63 --- /dev/null +++ b/Medium/Fraction Addition and Subtraction.java @@ -0,0 +1,42 @@ +class Solution { + public String fractionAddition(String expression) { + int numerator = 0; + int denominator = 1; + int idx = 0; + int n = expression.length(); + while (idx < n) { + int currNumerator = 0; + int currDenominator = 0; + boolean negative = false; + if (expression.charAt(idx) == '-' || expression.charAt(idx) == '+') { + negative = expression.charAt(idx) == '-' ? true : false; + idx++; + } + while (Character.isDigit(expression.charAt(idx))) { + currNumerator = currNumerator * 10 + Character.getNumericValue(expression.charAt(idx)); + idx++; + } + if (negative) { + currNumerator *= -1; + } + idx++; + while (idx < n && Character.isDigit(expression.charAt(idx))) { + currDenominator = currDenominator * 10 + Character.getNumericValue(expression.charAt(idx)); + idx++; + } + numerator = numerator * currDenominator + currNumerator * denominator; + denominator = denominator * currDenominator; + } + int gcd = Math.abs(gcd(numerator, denominator)); + numerator /= gcd; + denominator /= gcd; + return numerator + "/" + denominator; + } + + private int gcd(int a, int b) { + if (a == 0) { + return b; + } + return gcd(b % a, a); + } +} From 17c7839ced9bc02a8ad2595706989700a1caab41 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 25 Aug 2024 17:23:09 -0700 Subject: [PATCH 1510/1640] Create Final Array State After K Multiplication Operations I.java --- ...e After K Multiplication Operations I.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Easy/Final Array State After K Multiplication Operations I.java diff --git a/Easy/Final Array State After K Multiplication Operations I.java b/Easy/Final Array State After K Multiplication Operations I.java new file mode 100644 index 00000000..da5670de --- /dev/null +++ b/Easy/Final Array State After K Multiplication Operations I.java @@ -0,0 +1,25 @@ +class Solution { + public int[] getFinalState(int[] nums, int k, int multiplier) { + int n = nums.length; + PriorityQueue pq = new PriorityQueue<>(Comparator.comparingInt((int[] o) -> o[0]) + .thenComparingInt(o -> o[1])); + for (int i = 0; i < n; i++) { + pq.add(new int[]{nums[i], i}); + } + while (k-- > 0) { + int[] removed = pq.remove(); + int value = removed[0]; + int index = removed[1]; + int newValue = value * multiplier; + pq.add(new int[]{newValue, index}); + } + int[] result = new int[n]; + while (!pq.isEmpty()) { + int[] removed = pq.remove(); + int value = removed[0]; + int index = removed[1]; + result[index] = value; + } + return result; + } +} From d717b453af22cd7a8f21cf3db668b30edbb7734e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 Sep 2024 07:36:13 -0700 Subject: [PATCH 1511/1640] Create Add Two Polynomials Represented as Linked Lists.java --- ...lynomials Represented as Linked Lists.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Medium/Add Two Polynomials Represented as Linked Lists.java diff --git a/Medium/Add Two Polynomials Represented as Linked Lists.java b/Medium/Add Two Polynomials Represented as Linked Lists.java new file mode 100644 index 00000000..f7eafe3a --- /dev/null +++ b/Medium/Add Two Polynomials Represented as Linked Lists.java @@ -0,0 +1,43 @@ +/** + * Definition for polynomial singly-linked list. + * class PolyNode { + * int coefficient, power; + * PolyNode next = null; + + * PolyNode() {} + * PolyNode(int x, int y) { this.coefficient = x; this.power = y; } + * PolyNode(int x, int y, PolyNode next) { this.coefficient = x; this.power = y; this.next = next; } + * } + */ + +class Solution { + public PolyNode addPoly(PolyNode poly1, PolyNode poly2) { + Map powerToValue = new HashMap<>(); + populateMap(powerToValue, poly1); + populateMap(powerToValue, poly2); + List powerKeys = new ArrayList<>(powerToValue.keySet()); + Collections.sort(powerKeys); + PolyNode dummy = new PolyNode(); + PolyNode curr = dummy; + for (int i = powerKeys.size() - 1; i >= 0; i--) { + if (powerToValue.get(powerKeys.get(i)) == 0) { + continue; + } + PolyNode node = new PolyNode(powerToValue.get(powerKeys.get(i)), powerKeys.get(i)); + curr.next = node; + curr = curr.next; + } + return dummy.next; + } + + private void populateMap(Map powerToValue, PolyNode poly) { + while (poly != null) { + PolyNode node = poly; + int power = node.power; + if (node.coefficient != 0) { + powerToValue.put(power, powerToValue.getOrDefault(power, 0) + node.coefficient); + } + poly = poly.next; + } + } +} From abc7fd46d0bd7d89fb9534dc4487f107a4293a21 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 1 Sep 2024 17:39:57 -0700 Subject: [PATCH 1512/1640] Update Find the Student that Will Replace the Chalk.java --- ...e Student that Will Replace the Chalk.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/Medium/Find the Student that Will Replace the Chalk.java b/Medium/Find the Student that Will Replace the Chalk.java index 8ee73065..bdf79d9a 100644 --- a/Medium/Find the Student that Will Replace the Chalk.java +++ b/Medium/Find the Student that Will Replace the Chalk.java @@ -1,17 +1,23 @@ class Solution { - public int chalkReplacer(int[] chalk, int k) { - int initialResult = chalkReplacerHelper(chalk, k); - return initialResult != -1 ? initialResult - : chalkReplacerHelper(chalk, k % Arrays.stream(chalk).sum()); - } - - private int chalkReplacerHelper(int[] chalk, int k) { - for (int i = 0; i < chalk.length; i++) { - if (k - chalk[i] < 0) { - return i; - } - k -= chalk[i]; + public int chalkReplacer(int[] chalk, int k) { + int n = chalk.length; + long[] prefixSum = new long[n]; + prefixSum[0] = chalk[0]; + for (int i = 1; i < n; i++) { + prefixSum[i] = chalk[i] + prefixSum[i - 1]; + } + long total = prefixSum[n - 1]; + long remaining = k % total; + int left = 0; + int right = n - 1; + while (left < right) { + int mid = (left + right) / 2; + if (prefixSum[mid] <= remaining) { + left = mid + 1; + } else { + right = mid; + } + } + return right; } - return -1; - } } From 391f4c4f861b0e95ae7281346e190c2b3ef7dff4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 Sep 2024 06:11:54 -0700 Subject: [PATCH 1513/1640] Update Sum of Digits of String After Convert.java --- ...Sum of Digits of String After Convert.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Easy/Sum of Digits of String After Convert.java b/Easy/Sum of Digits of String After Convert.java index c86c724c..3b78aaae 100644 --- a/Easy/Sum of Digits of String After Convert.java +++ b/Easy/Sum of Digits of String After Convert.java @@ -1,17 +1,18 @@ class Solution { - public int getLucky(String s, int k) { - StringBuilder sb = new StringBuilder(); - for (char c : s.toCharArray()) { - sb.append(c - 'a' + 1); + public int getLucky(String s, int k) { + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + sb.append(c - 'a' + 1); + } + while (k-- > 0) { + String temp = sb.toString(); + sb.setLength(0); + int val = 0; + for (char c : temp.toCharArray()) { + val += Character.getNumericValue(c); + } + sb.append(val); + } + return Integer.parseInt(sb.toString()); } - String num = sb.toString(); - while (k-- > 0) { - int sum = 0; - for (char c : num.toCharArray()) { - sum += Character.getNumericValue(c); - } - num = String.valueOf(sum); - } - return Integer.parseInt(num); - } } From e1dcfeaa1f25a8985962ec1f2544cf93fef7823d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 Sep 2024 18:14:48 -0700 Subject: [PATCH 1514/1640] Create Walking Robot Simulation.java --- Medium/Walking Robot Simulation.java | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Medium/Walking Robot Simulation.java diff --git a/Medium/Walking Robot Simulation.java b/Medium/Walking Robot Simulation.java new file mode 100644 index 00000000..bfc2784f --- /dev/null +++ b/Medium/Walking Robot Simulation.java @@ -0,0 +1,41 @@ +class Solution { + private static final int[][] DIRECTIONS = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; + private static final int HASH_MULTIPLIER = 60001; + + public int robotSim(int[] commands, int[][] obstacles) { + Set obstacleSet = new HashSet<>(); + for (int[] obstacle : obstacles) { + obstacleSet.add(hashCoordinates(obstacle[0], obstacle[1])); + } + int maxDistance = 0; + int currentDirection = 0; + int x = 0; + int y = 0; + for (int command : commands) { + if (command == -1) { + currentDirection = (currentDirection + 1) % 4; + continue; + } + if (command == -2) { + currentDirection = (currentDirection + 3) % 4; + continue; + } + int[] direction = DIRECTIONS[currentDirection]; + for (int i = 0; i < command; i++) { + int nextX = x + direction[0]; + int nextY = y + direction[1]; + if (obstacleSet.contains(hashCoordinates(nextX, nextY))) { + break; + } + x = nextX; + y = nextY; + } + maxDistance = Math.max(maxDistance, x * x + y * y); + } + return maxDistance; + } + + private static int hashCoordinates(int x, int y) { + return x + HASH_MULTIPLIER * y; + } +} From 0dd2c3bc6121d307e42223df055bc7d0e1d01bb7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Sep 2024 08:11:01 -0700 Subject: [PATCH 1515/1640] Create Diagonal Traverse II.java --- Medium/Diagonal Traverse II.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Diagonal Traverse II.java diff --git a/Medium/Diagonal Traverse II.java b/Medium/Diagonal Traverse II.java new file mode 100644 index 00000000..dabfc5ef --- /dev/null +++ b/Medium/Diagonal Traverse II.java @@ -0,0 +1,26 @@ +class Solution { + public int[] findDiagonalOrder(List> nums) { + Queue queue = new LinkedList<>(); + List result = new ArrayList<>(); + queue.add(new int[]{0, 0}); + while (!queue.isEmpty()) { + int[] removed = queue.remove(); + int x = removed[0]; + int y = removed[1]; + result.add(nums.get(x).get(y)); + // move down in column first + if (y == 0 && x + 1 < nums.size()) { + queue.add(new int[]{x + 1, y}); + } + // then pick the next element in row + if (y + 1 < nums.get(x).size()) { + queue.add(new int[]{x, y + 1}); + } + } + int[] ans = new int[result.size()]; + for (int i = 0; i < result.size(); i++) { + ans[i] = result.get(i); + } + return ans; + } +} From d214eff088dc8dc903de22e3f672e7ebce83f633 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Sep 2024 08:25:09 -0700 Subject: [PATCH 1516/1640] Create Sum of All Subset XOR Totals.java --- Easy/Sum of All Subset XOR Totals.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Easy/Sum of All Subset XOR Totals.java diff --git a/Easy/Sum of All Subset XOR Totals.java b/Easy/Sum of All Subset XOR Totals.java new file mode 100644 index 00000000..fe82567a --- /dev/null +++ b/Easy/Sum of All Subset XOR Totals.java @@ -0,0 +1,14 @@ +class Solution { + public int subsetXORSum(int[] nums) { + return recurse(nums, 0, 0); + } + + private int recurse(int[] nums, int idx, int currXor) { + if (idx == nums.length) { + return currXor; + } + int performXor = recurse(nums, idx + 1, currXor ^ nums[idx]); + int notPerformXor = recurse(nums, idx + 1, currXor); + return performXor + notPerformXor; + } +} From a13c10b8f5ed445486e4668b5981486212488422 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Sep 2024 09:52:37 -0700 Subject: [PATCH 1517/1640] Update Lowest Common Ancestor of a Binary Tree III.java --- ... Common Ancestor of a Binary Tree III.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/Medium/Lowest Common Ancestor of a Binary Tree III.java b/Medium/Lowest Common Ancestor of a Binary Tree III.java index 26269fcc..098b0f86 100644 --- a/Medium/Lowest Common Ancestor of a Binary Tree III.java +++ b/Medium/Lowest Common Ancestor of a Binary Tree III.java @@ -9,30 +9,30 @@ class Node { */ class Solution { - public Node lowestCommonAncestor(Node p, Node q) { - int pDepth = getDepth(p); - int qDepth = getDepth(q); - while (pDepth > qDepth) { - pDepth--; - p = p.parent; + public Node lowestCommonAncestor(Node p, Node q) { + int pDepth = getDepth(p); + int qDepth = getDepth(q); + while (pDepth > qDepth) { + pDepth--; + p = p.parent; + } + while (qDepth > pDepth) { + qDepth--; + q = q.parent; + } + while (p != q) { + p = p.parent; + q = q.parent; + } + return p; } - while (pDepth < qDepth) { - qDepth--; - q = q.parent; - } - while (p != q) { - p = p.parent; - q = q.parent; - } - return p; - } - - private int getDepth(Node node) { - int depth = 0; - while (node != null) { - depth++; - node = node.parent; + + private int getDepth(Node node) { + int depth = 0; + while (node != null) { + depth++; + node = node.parent; + } + return depth; } - return depth; - } } From 0a57a4f4521e99065dd2c7cdeaad99732ef85b9a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Sep 2024 17:22:56 -0700 Subject: [PATCH 1518/1640] Update Find Missing Observations.java --- Medium/Find Missing Observations.java | 32 +++++++++++++++------------ 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/Medium/Find Missing Observations.java b/Medium/Find Missing Observations.java index 7b738edc..fe724572 100644 --- a/Medium/Find Missing Observations.java +++ b/Medium/Find Missing Observations.java @@ -1,17 +1,21 @@ class Solution { - public int[] missingRolls(int[] rolls, int mean, int n) { - int currSum = Arrays.stream(rolls).sum(); - int missingSum = mean * (n + rolls.length) - currSum; - if (missingSum > n * 6 || missingSum < n) { - return new int[]{}; + public int[] missingRolls(int[] rolls, int mean, int n) { + int m = rolls.length; + int sum = 0; + for (int roll : rolls) { + sum += roll; + } + int expectedSum = mean * (n + m); + int remaining = expectedSum - sum; + if (remaining > 6 * n || remaining < n) { + return new int[]{}; + } + int[] result = new int[n]; + Arrays.fill(result, remaining / n); + remaining = remaining % n; + for (int i = 0; i < remaining; i++) { + result[i]++; + } + return result; } - int[] ans = new int[n]; - int part = missingSum / n; - int remainder = missingSum % n; - Arrays.fill(ans, part); - for (int i = 0; i < remainder; i++) { - ans[i]++; - } - return ans; - } } From 4137cce7391bef40a4fff4400dcf863c0115596f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Sep 2024 17:30:29 -0700 Subject: [PATCH 1519/1640] Update Buildings With an Ocean View.java --- Medium/Buildings With an Ocean View.java | 25 ++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Medium/Buildings With an Ocean View.java b/Medium/Buildings With an Ocean View.java index b9735daa..6d52576e 100644 --- a/Medium/Buildings With an Ocean View.java +++ b/Medium/Buildings With an Ocean View.java @@ -1,13 +1,18 @@ class Solution { - public int[] findBuildings(int[] heights) { - List oceanViewBuildings = new ArrayList<>(); - int maxHeight = 0; - for (int i = heights.length - 1; i >= 0; i--) { - if (heights[i] > maxHeight) { - oceanViewBuildings.add(i); - } - maxHeight = Math.max(maxHeight, heights[i]); + public int[] findBuildings(int[] heights) { + List result = new ArrayList<>(); + int maxHeight = -1; + for (int i = heights.length - 1; i >= 0; i--) { + if (heights[i] > maxHeight) { + result.add(i); + } + maxHeight = Math.max(maxHeight, heights[i]); + } + int[] ans = new int[result.size()]; + Collections.reverse(result); + for (int i = 0; i < result.size(); i++) { + ans[i] = result.get(i); + } + return ans; } - return oceanViewBuildings.stream().sorted().mapToInt(Integer::valueOf).toArray(); - } } From 88ca3f65bd13f7af1d3836e56dc7fed521893d80 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 6 Sep 2024 07:05:29 -0700 Subject: [PATCH 1520/1640] Create Delete Nodes From Linked List Present in Array.java --- ...des From Linked List Present in Array.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/Delete Nodes From Linked List Present in Array.java diff --git a/Medium/Delete Nodes From Linked List Present in Array.java b/Medium/Delete Nodes From Linked List Present in Array.java new file mode 100644 index 00000000..ff184902 --- /dev/null +++ b/Medium/Delete Nodes From Linked List Present in Array.java @@ -0,0 +1,31 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public ListNode modifiedList(int[] nums, ListNode head) { + Set set = new HashSet<>(); + for (int num : nums) { + set.add(num); + } + while (head != null && set.contains(head.val)) { + head = head.next; + } + ListNode newHead = head; + ListNode curr = head; + while (curr.next != null) { + if (set.contains(curr.next.val)) { + curr.next = curr.next.next; + } else { + curr = curr.next; + } + } + return newHead; + } +} From fb8b21f8a92f46d47a505e1e05a2a66429afda05 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 6 Sep 2024 07:42:55 -0700 Subject: [PATCH 1521/1640] Create Making A Large Island.java --- Hard/Making A Large Island.java | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Hard/Making A Large Island.java diff --git a/Hard/Making A Large Island.java b/Hard/Making A Large Island.java new file mode 100644 index 00000000..d1026bd7 --- /dev/null +++ b/Hard/Making A Large Island.java @@ -0,0 +1,68 @@ +class Solution { + + private static final int[][] DIRS = {{-1, 0}, {0, -1}, {1, 0}, {0, 1}}; + + public int largestIsland(int[][] grid) { + int n = grid.length; + int tag = 2; + int result = 0; + Map tagToAreaMapping = new HashMap<>(); + // Calculate area without changing 0 to 1 & tag each island for future reference + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (grid[i][j] == 1) { + tagToAreaMapping.put(tag, dfs(grid, i, j, tag)); + result = Math.max(result, tagToAreaMapping.get(tag)); + tag++; + } + } + } + // Now start changing each 0 to 1 & add the area of all connected islands by referencing their tags + for (int i = 0; i < n; i++) { + for (int j = 0; j < n; j++) { + if (grid[i][j] == 0) { + Set visited = new HashSet<>(); + int currArea = 1; + List moves = getMoves(i, j, n); + for (int[] move : moves) { + int x = move[0]; + int y = move[1]; + int currTag = grid[x][y]; + if (currTag > 1 && visited.add(currTag)) { + currArea += tagToAreaMapping.get(currTag); + } + } + result = Math.max(result, currArea); + } + } + } + return result; + } + + private int dfs(int[][] grid, int x, int y, int tag) { + int area = 1; + int n = grid.length; + grid[x][y] = tag; + List moves = getMoves(x, y, n); + for (int[] move : moves) { + int i = move[0]; + int j = move[1]; + if (grid[i][j] == 1) { + area += dfs(grid, i, j, tag); + } + } + return area; + } + + private List getMoves(int x, int y, int n) { + List moves = new ArrayList<>(); + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + if (newX >= 0 && newX < n && newY >= 0 && newY < n) { + moves.add(new int[]{newX, newY}); + } + } + return moves; + } +} From 5028a9e5f102e02eaa78f86313087d21181fb841 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 6 Sep 2024 08:43:03 -0700 Subject: [PATCH 1522/1640] Create Max Consecutive Ones III.java --- Medium/Max Consecutive Ones III.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Max Consecutive Ones III.java diff --git a/Medium/Max Consecutive Ones III.java b/Medium/Max Consecutive Ones III.java new file mode 100644 index 00000000..cec14a87 --- /dev/null +++ b/Medium/Max Consecutive Ones III.java @@ -0,0 +1,23 @@ +class Solution { + public int longestOnes(int[] nums, int k) { + int start = 0; + int end = 0; + int flipped = 0; + int n = nums.length; + int max = 0; + while (end < nums.length) { + if (nums[end] == 0) { + flipped++; + } + end++; + while (start < end && flipped > k) { + if (nums[start] == 0) { + flipped--; + } + start++; + } + max = Math.max(max, end - start); + } + return max; + } +} From b54f9b0024f91c558910d8724bc601bd3400cf4c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 6 Sep 2024 09:03:57 -0700 Subject: [PATCH 1523/1640] Update Valid Number.java --- Hard/Valid Number.java | 106 +++++++++++++++-------------------------- 1 file changed, 39 insertions(+), 67 deletions(-) diff --git a/Hard/Valid Number.java b/Hard/Valid Number.java index d9a68285..1cdebfa8 100644 --- a/Hard/Valid Number.java +++ b/Hard/Valid Number.java @@ -1,90 +1,62 @@ class Solution { - public boolean isNumber(String s) { - s = s.trim(); - char[] ch = s.toCharArray(); + public boolean isNumber(String s) { int idx = 0; - int n = ch.length; - boolean signFound = false; - boolean decimalFound = false; - boolean numFound = false; - boolean expoFound = false; - + boolean isDecimal = false; + boolean isDigit = false; + boolean digitsBeforeDecimal = false; + boolean digitsAfterDecimal = false; + int n = s.length(); + if (s.charAt(idx) == '-' || s.charAt(idx) == '+') { + idx++; + } while (idx < n) { - if (ch[idx] == '+' || ch[idx] == '-') { - if (numFound || signFound || decimalFound) { + if (s.charAt(idx) == '.') { + if (isDecimal) { return false; } - - signFound = true; - } - else if (ch[idx] == '.') { - if (decimalFound) { + isDecimal = true; + } else if (s.charAt(idx) == 'e' || s.charAt(idx) == 'E') { + if (!isDigit) { return false; } - decimalFound = true; - } - else if (Character.isLetter(ch[idx])) { - if (ch[idx] == 'e') { - if (!numFound) { - return false; - } - idx++; - expoFound = true; - break; - } - else { + boolean valid = isValidExponent(s, idx + 1); + if (!valid) { return false; } - } - else if (Character.isDigit(ch[idx])) { - numFound = true; - } - else if (ch[idx] == ' ') { - if (numFound || signFound || decimalFound) { - return false; + break; + } else if (Character.isDigit(s.charAt(idx))) { + if (isDecimal) { + digitsAfterDecimal = true; + } else { + digitsBeforeDecimal = true; } + isDigit = true; + } else { + return false; } - idx++; } - - if (!numFound) { - return false; + if (isDecimal) { + return digitsBeforeDecimal || digitsAfterDecimal; } + return isDigit; + } - if (expoFound && idx == n) { + private boolean isValidExponent(String s, int idx) { + if (idx == s.length()) { return false; } - - signFound = false; - numFound = false; - while (idx < n) { - if (ch[idx] == '.') { - return false; - } - else if (ch[idx] == '+' || ch[idx] == '-') { - if (signFound) { - return false; - } - if (numFound) { - return false; - } - signFound = true; - } - else if (Character.isDigit(ch[idx])) { - numFound = true; - } - else { + if (s.charAt(idx) == '-' || s.charAt(idx) == '+') { + idx++; + } + boolean digitFound = false; + while (idx < s.length()) { + if (!Character.isDigit(s.charAt(idx))) { return false; } - + digitFound = true; idx++; } - - if (expoFound && !numFound) { - return false; - } - - return true; + return digitFound; } } From 6a4ac34e8808f4eff237a7d4d4a95eb79d8e3a47 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 7 Sep 2024 14:32:30 -0700 Subject: [PATCH 1524/1640] Update Exclusive Time of Functions.java --- Medium/Exclusive Time of Functions.java | 50 +++++++++++-------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/Medium/Exclusive Time of Functions.java b/Medium/Exclusive Time of Functions.java index 8212e0c0..cd85e84c 100644 --- a/Medium/Exclusive Time of Functions.java +++ b/Medium/Exclusive Time of Functions.java @@ -1,33 +1,25 @@ class Solution { - public int[] exclusiveTime(int n, List logs) { - int[] result = new int[n]; - Stack stack = new Stack<>(); - for (String log : logs) { - Log currentLog = new Log(log); - if (currentLog.isStart) { - stack.push(currentLog); - } else { - Log topLog = stack.pop(); - result[topLog.id] += currentLog.time - topLog.time + 1 - topLog.overLappingTime; - if (!stack.isEmpty()) { - stack.peek().overLappingTime += currentLog.time - topLog.time + 1; + public int[] exclusiveTime(int n, List logs) { + Stack stack = new Stack<>(); + int[] result = new int[n]; + int lastTimestamp = 0; + for (String log : logs) { + String[] split = log.split(":"); + int id = Integer.parseInt(split[0]); + int timestamp = Integer.parseInt(split[2]); + if (split[1].equals("start")) { + // We consider timestamp as part of current computation + if (!stack.isEmpty()) { + result[stack.peek()] += timestamp - lastTimestamp; + } + stack.push(id); + lastTimestamp = timestamp; + } else { + // We consider timestamp as part of previous computation + result[stack.pop()] += timestamp - lastTimestamp + 1; + lastTimestamp = timestamp + 1; + } } - } + return result; } - return result; - } - - private static class Log { - public int id; - public boolean isStart; - public int time; - public int overLappingTime; - - public Log(String log) { - String[] split = log.split(":"); - this.id = Integer.parseInt(split[0]); - this.isStart = split[1].equals("start"); - this.time = Integer.parseInt(split[2]); - } - } } From 6f1feb4a469506b8555f0b0ef8f0e367535874ee Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 7 Sep 2024 16:08:59 -0700 Subject: [PATCH 1525/1640] Update Product of Two Run-Length Encoded Arrays.java --- ...duct of Two Run-Length Encoded Arrays.java | 64 ++++++++----------- 1 file changed, 28 insertions(+), 36 deletions(-) diff --git a/Medium/Product of Two Run-Length Encoded Arrays.java b/Medium/Product of Two Run-Length Encoded Arrays.java index 7aa0b117..4aab9bc8 100644 --- a/Medium/Product of Two Run-Length Encoded Arrays.java +++ b/Medium/Product of Two Run-Length Encoded Arrays.java @@ -1,39 +1,31 @@ class Solution { - public List> findRLEArray(int[][] encoded1, int[][] encoded2) { - int idxOne = 0; - int idxTwo = 0; - List> result = new ArrayList<>(); - while (idxOne < encoded1.length && idxTwo < encoded2.length) { - int valueOne = encoded1[idxOne][0]; - int frequencyOne = 0; - while (idxOne < encoded1.length && encoded1[idxOne][0] == valueOne) { - frequencyOne += encoded1[idxOne++][1]; - } - idxOne--; - encoded1[idxOne][1] = frequencyOne; - int valueTwo = encoded2[idxTwo][0]; - int frequencyTwo = 0; - while (idxTwo < encoded2.length && encoded2[idxTwo][0] == valueTwo) { - frequencyTwo += encoded2[idxTwo++][1]; - } - idxTwo--; - encoded2[idxTwo][1] = frequencyTwo; - int prod = encoded1[idxOne][0] * encoded2[idxTwo][0]; - int frequency = Math.min(encoded1[idxOne][1], encoded2[idxTwo][1]); - if (result.size() > 0 && result.get(result.size() - 1).get(0) == prod) { - result.get(result.size() - 1).set(1, result.get(result.size() - 1).get(1) + frequency); - } else { - result.add(Arrays.asList(prod, frequency)); - } - encoded1[idxOne][1] -= frequency; - encoded2[idxTwo][1] -= frequency; - if (encoded1[idxOne][1] == 0) { - idxOne++; - } - if (encoded2[idxTwo][1] == 0) { - idxTwo++; - } + public List> findRLEArray(int[][] encoded1, int[][] encoded2) { + int idxOne = 0; + int idxTwo = 0; + List> result = new ArrayList<>(); + while (idxOne < encoded1.length && idxTwo < encoded2.length) { + int valOne = encoded1[idxOne][0]; + int valTwo = encoded2[idxTwo][0]; + int countOne = encoded1[idxOne][1]; + int countTwo = encoded2[idxTwo][1]; + int value = valOne * valTwo; + int count = Math.min(countOne, countTwo); + encoded1[idxOne][1] -= count; + encoded2[idxTwo][1] -= count; + if (encoded1[idxOne][1] == 0) { + idxOne++; + } + if (encoded2[idxTwo][1] == 0) { + idxTwo++; + } + if (!result.isEmpty() && result.get(result.size() - 1).get(0) == value) { + int existingCount = result.get(result.size() - 1).get(1); + int newCount = existingCount + count; + result.get(result.size() - 1).set(1, newCount); + } else { + result.add(Arrays.asList(value, count)); + } + } + return result; } - return result; - } } From f4665a1b78411741240061f2a93b5dc4a7999410 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Sep 2024 11:56:52 -0700 Subject: [PATCH 1526/1640] Update Minimum Time to Collect All Apples in a Tree.java --- ... Time to Collect All Apples in a Tree.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/Medium/Minimum Time to Collect All Apples in a Tree.java b/Medium/Minimum Time to Collect All Apples in a Tree.java index 24feb762..0e54b3ec 100644 --- a/Medium/Minimum Time to Collect All Apples in a Tree.java +++ b/Medium/Minimum Time to Collect All Apples in a Tree.java @@ -1,25 +1,27 @@ class Solution { - public int minTime(int n, int[][] edges, List hasApple) { - Map> tree = new HashMap<>(); - for (int[] edge : edges) { - tree.computeIfAbsent(edge[0], k -> new HashSet<>()).add(edge[1]); - tree.computeIfAbsent(edge[1], k -> new HashSet<>()).add(edge[0]); + public int minTime(int n, int[][] edges, List hasApple) { + Map> map = new HashMap<>(); + for (int[] edge : edges) { + map.computeIfAbsent(edge[0], k -> new ArrayList<>()).add(edge[1]); + map.computeIfAbsent(edge[1], k -> new ArrayList<>()).add(edge[0]); + } + return recurse(0, -1, map, hasApple); } - Set visited = new HashSet<>(); - return dfs(0, hasApple, visited, tree); - } - - private int dfs(int node, List hasApple, Set visited, Map> tree) { - visited.add(node); - int result = 0; - for (Integer child : tree.getOrDefault(node, new HashSet<>())) { - if (!visited.contains(child)) { - result += dfs(child, hasApple, visited, tree); - } + + private int recurse(int node, int parent, Map> graph, List hasApple) { + if (!graph.containsKey(node)) { + return 0; + } + int time = 0; + for (Integer conn: graph.get(node)) { + if (conn == parent) { + continue; + } + int connTime = recurse(conn, node, graph, hasApple); + if (connTime > 0 || hasApple.get(conn)) { + time += connTime + 2; + } + } + return time; } - if ((result > 0 || hasApple.get(node)) && node != 0) { - result += 2; - } - return result; - } } From 56554ae1b5bbc84477ce970a0e70578697429c5b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Sep 2024 12:08:47 -0700 Subject: [PATCH 1527/1640] Update Meeting Scheduler.java --- Medium/Meeting Scheduler.java | 37 ++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/Medium/Meeting Scheduler.java b/Medium/Meeting Scheduler.java index d5bf6b16..aeb5d8e9 100644 --- a/Medium/Meeting Scheduler.java +++ b/Medium/Meeting Scheduler.java @@ -1,21 +1,22 @@ class Solution { - public List minAvailableDuration(int[][] slots1, int[][] slots2, int duration) { - Arrays.sort(slots1, Comparator.comparingInt(o -> o[0])); - Arrays.sort(slots2, Comparator.comparingInt(o -> o[0])); - int idxOne = 0; - int idxTwo = 0; - while (idxOne < slots1.length && idxTwo < slots2.length) { - int maxStart = Math.max(slots1[idxOne][0], slots2[idxTwo][0]); - int minEnd = Math.min(slots1[idxOne][1], slots2[idxTwo][1]); - if (minEnd - maxStart >= duration) { - return Arrays.asList(maxStart, maxStart + duration); - } - if (slots1[idxOne][1] > slots2[idxTwo][1]) { - idxTwo++; - } else { - idxOne++; - } + public List minAvailableDuration(int[][] slots1, int[][] slots2, int duration) { + Arrays.sort(slots1, Comparator.comparingInt(o -> o[0])); + Arrays.sort(slots2, Comparator.comparingInt(o -> o[0])); + int idxOne = 0; + int idxTwo = 0; + while (idxOne < slots1.length && idxTwo < slots2.length) { + int maxStart = Math.max(slots1[idxOne][0], slots2[idxTwo][0]); + int minEnd = Math.min(slots1[idxOne][1], slots2[idxTwo][1]); + if (minEnd - maxStart >= duration) { + return List.of(maxStart, maxStart + duration); + } + if (minEnd == slots1[idxOne][1]) { + idxOne++; + } + if (minEnd == slots2[idxTwo][1]) { + idxTwo++; + } + } + return Collections.emptyList(); } - return new ArrayList<>(); - } } From 3ba562353c17ddfcc35c87757145c3bfd5a21558 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Sep 2024 15:49:02 -0700 Subject: [PATCH 1528/1640] Create Alternating Groups I.java --- Easy/Alternating Groups I.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Alternating Groups I.java diff --git a/Easy/Alternating Groups I.java b/Easy/Alternating Groups I.java new file mode 100644 index 00000000..9730d5ea --- /dev/null +++ b/Easy/Alternating Groups I.java @@ -0,0 +1,18 @@ +class Solution { + public int numberOfAlternatingGroups(int[] colors) { + int count = 0; + int n = colors.length; + for (int i = 0; i < n - 2; i++) { + if (colors[i + 1] != colors[i] && colors[i + 1] != colors[i + 2]) { + count++; + } + } + if (colors[n - 2] != colors[n - 1] && colors[n - 2] == colors[0]) { + count++; + } + if (colors[n - 1] != colors[0] && colors[n - 1] == colors[1]) { + count++; + } + return count; + } +} From bd41f382ab668b5de9e605ed0fc4d75d4843e183 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Sep 2024 15:54:49 -0700 Subject: [PATCH 1529/1640] Update Base 7.java --- Easy/Base 7.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Easy/Base 7.java b/Easy/Base 7.java index 210d6c39..8da9a029 100644 --- a/Easy/Base 7.java +++ b/Easy/Base 7.java @@ -1,16 +1,15 @@ class Solution { - public String convertToBase7(int num) { - StringBuilder sb = new StringBuilder(); - char sign = num < 0 ? '-' : ' '; - num = Math.abs(num); - while (num > 0) { - sb.append(num % 7); - num /= 7; + public String convertToBase7(int num) { + StringBuilder sb = new StringBuilder(); + boolean isNegative = num < 0; + num = Math.abs(num); + while (num > 0) { + sb.append(num % 7); + num /= 7; + } + if (isNegative) { + sb.append('-'); + } + return sb.isEmpty() ? "0" : sb.reverse().toString(); } - String representation = sb.length() == 0 ? "0" : sb.reverse().toString(); - if (sign == '-') { - return sign + representation; - } - return representation; - } } From 238c35b45c0b2d09e497e165945b749b9a2d651c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 8 Sep 2024 16:17:19 -0700 Subject: [PATCH 1530/1640] Create Faulty Sensor.java --- Easy/Faulty Sensor.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Faulty Sensor.java diff --git a/Easy/Faulty Sensor.java b/Easy/Faulty Sensor.java new file mode 100644 index 00000000..dabed6c0 --- /dev/null +++ b/Easy/Faulty Sensor.java @@ -0,0 +1,13 @@ +class Solution { + public int badSensor(int[] sensor1, int[] sensor2) { + int idx = 0; + int n = sensor1.length; + while (idx < n && sensor1[idx] == sensor2[idx]) { + idx++; + } + while (idx + 1 < n && sensor1[idx] == sensor2[idx + 1] && sensor1[idx + 1] == sensor2[idx]) { + idx++; + } + return idx >= n - 1 ? -1 : sensor1[idx] == sensor2[idx + 1] ? 1 : 2; + } +} From fe13960db86695574eb4afdbd214fad5bbc9acba Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 9 Sep 2024 08:38:15 -0700 Subject: [PATCH 1531/1640] Update Palindrome Partitioning.java --- Medium/Palindrome Partitioning.java | 40 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Medium/Palindrome Partitioning.java b/Medium/Palindrome Partitioning.java index 1171f009..de89ed16 100644 --- a/Medium/Palindrome Partitioning.java +++ b/Medium/Palindrome Partitioning.java @@ -1,27 +1,31 @@ class Solution { - public List> partition(String a) { - List> ans = new ArrayList<>(); - helper(ans, new ArrayList(), a, 0); - return ans; + public List> partition(String s) { + List> result = new ArrayList<>(); + backtrack(result, new ArrayList<>(), s, 0); + return result; } - - private void helper(List> ans, List temp, String a, int idx) { - if (idx == a.length()) { - ans.add(new ArrayList<>(temp)); + + private void backtrack(List> result, List currentList, + String s, int idx) { + if (idx == s.length()) { + result.add(new ArrayList<>(currentList)); return; } - for (int i=idx; i Date: Mon, 9 Sep 2024 08:48:50 -0700 Subject: [PATCH 1532/1640] Update Largest BST Subtree.java --- Medium/Largest BST Subtree.java | 52 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/Medium/Largest BST Subtree.java b/Medium/Largest BST Subtree.java index 45c83c6f..18ddfeaf 100644 --- a/Medium/Largest BST Subtree.java +++ b/Medium/Largest BST Subtree.java @@ -4,43 +4,41 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { public int largestBSTSubtree(TreeNode root) { - return largestBSTSubtreeHelper(root); - } - - private int largestBSTSubtreeHelper(TreeNode root) { - if (isBST(root)) { - return getNodeCount(root); - } - - return Math.max(-1, Math.max(largestBSTSubtreeHelper(root.left), largestBSTSubtreeHelper(root.right))); - } - - private boolean isBST(TreeNode root) { - return isBSTHelper(root, Integer.MAX_VALUE, Integer.MIN_VALUE); - } - - private boolean isBSTHelper(TreeNode root, int max, int min) { if (root == null) { - return true; + return 0; } - - if (root.val >= max || root.val <= min) { - return false; + int[] isBstResult = isBst(root, Integer.MIN_VALUE, Integer.MAX_VALUE); + if (isBstResult[0] == 1) { + return isBstResult[1]; } - - return isBSTHelper(root.left, root.val, min) && isBSTHelper(root.right, max, root.val); + return Math.max(largestBSTSubtree(root.left), largestBSTSubtree(root.right)); } - private int getNodeCount(TreeNode root) { + private int[] isBst(TreeNode root, int minValue, int maxValue) { if (root == null) { - return 0; + return new int[]{1, 0}; + } + int[] result = new int[2]; + if (!(root.val > minValue && root.val < maxValue)) { + return result; + } + int[] leftIsBst = isBst(root.left, minValue, root.val); + int[] rightIsBst = isBst(root.right, root.val, maxValue); + if (leftIsBst[0] == 1 && rightIsBst[0] == 1) { + result[0] = 1; + result[1] = 1 + leftIsBst[1] + rightIsBst[1]; } - - return 1 + getNodeCount(root.left) + getNodeCount(root.right); + return result; } } From ad5efe48ef18c914dfc941fd0e201aa6da5e0452 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 9 Sep 2024 09:03:48 -0700 Subject: [PATCH 1533/1640] Update One Edit Distance.java --- Medium/One Edit Distance.java | 59 ++++++++++++++--------------------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/Medium/One Edit Distance.java b/Medium/One Edit Distance.java index dc32eede..662a41d1 100644 --- a/Medium/One Edit Distance.java +++ b/Medium/One Edit Distance.java @@ -1,39 +1,28 @@ class Solution { - public boolean isOneEditDistance(String s, String t) { - int lengthDiff = Math.abs(s.length() - t.length()); - if (s.equals(t) || lengthDiff > 1) { - return false; - } - if (s.length() == 0 || t.length() == 0) { - return true; - } - int idxOne = 0; - int idxTwo = 0; - boolean changeDone = false; - while (idxOne < s.length() && idxTwo < t.length()) { - if (s.charAt(idxOne) == t.charAt(idxTwo)) { - idxOne++; - idxTwo++; - continue; - } - if (changeDone) { - return false; - } - if (lengthDiff != 0) { - if (s.length() > t.length()) { - idxOne++; - } else { - idxTwo++; + public boolean isOneEditDistance(String s, String t) { + int diff = Math.abs(s.length() - t.length()); + if (s.equals(t) || diff > 1) { + return false; } - } else { - idxOne++; - idxTwo++; - } - changeDone = true; - } - if (changeDone && (idxOne != s.length() || idxTwo != t.length())) { - return false; + int idx = 0; + while (idx < s.length() && idx < t.length()) { + if (s.charAt(idx) != t.charAt(idx)) { + // Replace character + if (s.substring(idx + 1).equals(t.substring(idx + 1))) { + return true; + } + // Delete 1 character from s + if (s.substring(idx + 1).equals(t.substring(idx))) { + return true; + } + // Delete 1 character from t + if (s.substring(idx).equals(t.substring(idx + 1))) { + return true; + } + return false; + } + idx++; + } + return true; } - return true; - } } From c968c70d73ca733683e6f14aaa54d4513531e7ca Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 9 Sep 2024 17:47:51 -0700 Subject: [PATCH 1534/1640] Create Spiral Matrix IV.java --- Medium/Spiral Matrix IV.java | 45 ++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Medium/Spiral Matrix IV.java diff --git a/Medium/Spiral Matrix IV.java b/Medium/Spiral Matrix IV.java new file mode 100644 index 00000000..5136b493 --- /dev/null +++ b/Medium/Spiral Matrix IV.java @@ -0,0 +1,45 @@ +/** + * Definition for singly-linked list. + * public class ListNode { + * int val; + * ListNode next; + * ListNode() {} + * ListNode(int val) { this.val = val; } + * ListNode(int val, ListNode next) { this.val = val; this.next = next; } + * } + */ +class Solution { + public int[][] spiralMatrix(int m, int n, ListNode head) { + int[][] result = new int[m][n]; + for (int i = 0; i < m; i++) { + Arrays.fill(result[i], -1); + } + int topRow = 0; + int bottomRow = m - 1; + int leftColumn = 0; + int rightColumn = n - 1; + while (head != null) { + for (int col = leftColumn; col <= rightColumn && head != null; col++) { + result[topRow][col] = head.val; + head = head.next; + } + topRow++; + for (int row = topRow; row <= bottomRow && head != null; row++) { + result[row][rightColumn] = head.val; + head = head.next; + } + rightColumn--; + for (int col = rightColumn; col >= leftColumn && head != null; col--) { + result[bottomRow][col] = head.val; + head = head.next; + } + bottomRow--; + for (int row = bottomRow; row >= topRow && head != null; row--) { + result[row][leftColumn] = head.val; + head = head.next; + } + leftColumn++; + } + return result; + } +} From aebf179f19b50136a7d8e2738a5ced9de4a9a22f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 10 Sep 2024 07:33:58 -0700 Subject: [PATCH 1535/1640] Update Shuffle String.java --- Easy/Shuffle String.java | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/Easy/Shuffle String.java b/Easy/Shuffle String.java index 10340050..f38bf1c2 100644 --- a/Easy/Shuffle String.java +++ b/Easy/Shuffle String.java @@ -1,24 +1,10 @@ class Solution { - public String restoreString(String s, int[] indices) { - char[] letters = s.toCharArray(); - for (int i = 0; i < indices.length; i++) { - while (indices[i] != i) { - swapLetter(letters, i, indices[i]); - swapIndex(indices, i, indices[i]); - } + public String restoreString(String s, int[] indices) { + char[] result = new char[s.length()]; + for (int i = 0; i < s.length(); i++) { + int index = indices[i]; + result[index] = s.charAt(i); + } + return String.valueOf(result); } - return String.valueOf(letters); - } - - private void swapLetter(char[] arr, int idxOne, int idxTwo) { - char temp = arr[idxOne]; - arr[idxOne] = arr[idxTwo]; - arr[idxTwo] = temp; - } - - private void swapIndex(int[] arr, int idxOne, int idxTwo) { - int temp = arr[idxOne]; - arr[idxOne] = arr[idxTwo]; - arr[idxTwo] = temp; - } } From 94209cf76f7ab258a49eebe18c04e38ad76cf345 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 10 Sep 2024 07:34:47 -0700 Subject: [PATCH 1536/1640] Update Minimum Time Visiting All Points.java --- Easy/Minimum Time Visiting All Points.java | 24 +++++++++++++--------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/Easy/Minimum Time Visiting All Points.java b/Easy/Minimum Time Visiting All Points.java index 774ac97c..ee1a85b1 100644 --- a/Easy/Minimum Time Visiting All Points.java +++ b/Easy/Minimum Time Visiting All Points.java @@ -1,13 +1,17 @@ class Solution { - public int minTimeToVisitAllPoints(int[][] points) { - int time = 0; - for (int i = 1; i < points.length; i++) { - int[] prevPoint = points[i - 1]; - int[] currPoint = points[i]; - time += Math.max( - Math.abs(prevPoint[0] - currPoint[0]), Math.abs(prevPoint[1] - currPoint[1]) - ); + public int minTimeToVisitAllPoints(int[][] points) { + int time = 0; + int idx = 0; + while (idx < points.length - 1) { + time += calculateTime(points[idx], points[idx + 1]); + idx++; + } + return time; + } + + private static int calculateTime(int[] p1, int[] p2) { + int x = Math.abs(p1[0] - p2[0]); + int y = Math.abs(p1[1] - p2[1]); + return Math.max(x, y); } - return time; - } } From c8457b18c67c6944a3fd05e0266e5b9e2f66091c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 10 Sep 2024 11:02:34 -0700 Subject: [PATCH 1537/1640] Update Reverse Vowels of a String.java --- Easy/Reverse Vowels of a String.java | 42 ++++++++++++++-------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Easy/Reverse Vowels of a String.java b/Easy/Reverse Vowels of a String.java index c1ea0294..ea10d13c 100644 --- a/Easy/Reverse Vowels of a String.java +++ b/Easy/Reverse Vowels of a String.java @@ -1,24 +1,24 @@ class Solution { - public String reverseVowels(String s) { - int left = 0; - int right = s.length() - 1; - String vowels = "aeiouAEIOU"; - char[] chars = s.toCharArray(); - while (left < right) { - int vowelIndexLeft = vowels.indexOf(chars[left]); - int vowelIndexRight = vowels.indexOf(chars[right]); - if (vowelIndexLeft != -1 && vowelIndexRight != -1) { - char temp = chars[left]; - chars[left++] = chars[right]; - chars[right--] = temp; - } - else if (vowelIndexRight == -1) { - right--; - } - else { - left++; - } + + private static final Set VOWELS = Set.of('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'); + + public String reverseVowels(String s) { + int left = 0; + int right = s.length() - 1; + char[] chars = s.toCharArray(); + while (left <= right) { + if (VOWELS.contains(chars[left]) && VOWELS.contains(chars[right])) { + char temp = chars[left]; + chars[left] = chars[right]; + chars[right] = temp; + left++; + right--; + } else if (!VOWELS.contains(chars[left])) { + left++; + } else if (!VOWELS.contains(chars[right])) { + right--; + } + } + return String.valueOf(chars); } - return String.valueOf(chars); - } } From f029595755aa34a81caae72c31ad1a629cfd9fda Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 12 Sep 2024 08:30:42 -0700 Subject: [PATCH 1538/1640] Update Maximum Size Subarray Sum Equals k.java --- .../Maximum Size Subarray Sum Equals k.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/Medium/Maximum Size Subarray Sum Equals k.java b/Medium/Maximum Size Subarray Sum Equals k.java index 97d37973..dce7007a 100644 --- a/Medium/Maximum Size Subarray Sum Equals k.java +++ b/Medium/Maximum Size Subarray Sum Equals k.java @@ -1,18 +1,17 @@ class Solution { - public int maxSubArrayLen(int[] nums, int k) { - Map map = new HashMap<>(); - int res = 0; - int sum = 0; - for (int i = 0; i < nums.length; i++) { - sum += nums[i]; - if (sum == k) { - res = i + 1; - } - else if (map.containsKey(sum - k)) { - res = Math.max(res, i - map.get(sum - k)); - } - map.putIfAbsent(sum, i); + public int maxSubArrayLen(int[] nums, int k) { + Map map = new HashMap<>(); + int prefixSum = 0; + int max = 0; + for (int i = 0; i < nums.length; i++) { + prefixSum += nums[i]; + if (prefixSum == k) { + max = i + 1; + } else if (map.containsKey(prefixSum - k)) { + max = Math.max(max, i - map.get(prefixSum - k)); + } + map.putIfAbsent(prefixSum, i); + } + return max; } - return res; - } } From 08ae7d68bdaea6e4d8a1141b5d2a7574e3c47cdb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 13 Sep 2024 09:12:25 -0700 Subject: [PATCH 1539/1640] Create XOR Queries of a Subarray.java --- Medium/XOR Queries of a Subarray.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/XOR Queries of a Subarray.java diff --git a/Medium/XOR Queries of a Subarray.java b/Medium/XOR Queries of a Subarray.java new file mode 100644 index 00000000..0bdfc9ca --- /dev/null +++ b/Medium/XOR Queries of a Subarray.java @@ -0,0 +1,24 @@ +class Solution { + public int[] xorQueries(int[] arr, int[][] queries) { + int n = arr.length; + int[] prefixXors = new int[n]; + int xor = 0; + for (int i = 0; i < n; i++) { + xor = xor ^ arr[i]; + prefixXors[i] = xor; + } + n = queries.length; + int[] result = new int[n]; + for (int i = 0; i < n; i++) { + int[] query = queries[i]; + int left = query[0]; + int right = query[1]; + int xorResult = prefixXors[right]; + if (left != 0) { + xorResult = xorResult ^ prefixXors[left - 1]; + } + result[i] = xorResult; + } + return result; + } +} From ec93192b5b6d0d395679043110bef3b3df155d43 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 14 Sep 2024 10:33:16 -0700 Subject: [PATCH 1540/1640] Create Longest Subarray With Maximum Bitwise AND.java --- ...est Subarray With Maximum Bitwise AND.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Longest Subarray With Maximum Bitwise AND.java diff --git a/Medium/Longest Subarray With Maximum Bitwise AND.java b/Medium/Longest Subarray With Maximum Bitwise AND.java new file mode 100644 index 00000000..63c1ca55 --- /dev/null +++ b/Medium/Longest Subarray With Maximum Bitwise AND.java @@ -0,0 +1,20 @@ +class Solution { + public int longestSubarray(int[] nums) { + int result = 0; + int max = 0; + int count = 0; + for (int num : nums) { + if (max < num) { + max = num; + result = count = 0; + } + if (max == num) { + count++; + } else { + count = 0; + } + result = Math.max(result, count); + } + return result; + } +} From 4e3321b796755556dbcb22ca263ca558b2fbf626 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 15 Sep 2024 08:56:53 -0700 Subject: [PATCH 1541/1640] Create Find the Longest Substring Containing Vowels in Even Counts.java --- ...ring Containing Vowels in Even Counts.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Medium/Find the Longest Substring Containing Vowels in Even Counts.java diff --git a/Medium/Find the Longest Substring Containing Vowels in Even Counts.java b/Medium/Find the Longest Substring Containing Vowels in Even Counts.java new file mode 100644 index 00000000..66e33ef9 --- /dev/null +++ b/Medium/Find the Longest Substring Containing Vowels in Even Counts.java @@ -0,0 +1,22 @@ +class Solution { + public int findTheLongestSubstring(String s) { + int prefixXor = 0; + char[] frequency = new char[26]; + frequency['a' - 'a'] = 1; + frequency['e' - 'a'] = 2; + frequency['i' - 'a'] = 4; + frequency['o' - 'a'] = 8; + frequency['u' - 'a'] = 16; + int[] indexMap = new int[32]; + Arrays.fill(indexMap, -1); + int result = 0; + for (int i = 0; i < s.length(); i++) { + prefixXor ^= frequency[s.charAt(i) - 'a']; + if (indexMap[prefixXor] == -1 && prefixXor != 0) { + indexMap[prefixXor] = i; + } + result = Math.max(result, i - indexMap[prefixXor]); + } + return result; + } +} From f6c5fbcf06e1cc589de81072d148ee5933d7b72d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 15 Sep 2024 21:30:25 -0700 Subject: [PATCH 1542/1640] Create Find Indices of Stable Mountains.java --- Easy/Find Indices of Stable Mountains.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Find Indices of Stable Mountains.java diff --git a/Easy/Find Indices of Stable Mountains.java b/Easy/Find Indices of Stable Mountains.java new file mode 100644 index 00000000..3e0fbd79 --- /dev/null +++ b/Easy/Find Indices of Stable Mountains.java @@ -0,0 +1,11 @@ +class Solution { + public List stableMountains(int[] height, int threshold) { + List result = new ArrayList<>(); + for (int i = 1; i < height.length; i++) { + if (height[i - 1] > threshold) { + result.add(i); + } + } + return result; + } +} From b10f51abbd6353d0469b733252bc3c00a0089f75 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 17 Sep 2024 06:34:56 -0700 Subject: [PATCH 1543/1640] Create Smallest Common Region.java --- Medium/Smallest Common Region.java | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Medium/Smallest Common Region.java diff --git a/Medium/Smallest Common Region.java b/Medium/Smallest Common Region.java new file mode 100644 index 00000000..4d8ce894 --- /dev/null +++ b/Medium/Smallest Common Region.java @@ -0,0 +1,32 @@ +class Solution { + public String findSmallestRegion(List> regions, String region1, String region2) { + Map regionToParentMap = new HashMap<>(); + for (List region : regions) { + String parent = region.getFirst(); + for (int i = 1; i < region.size(); i++) { + regionToParentMap.put(region.get(i), parent); + } + } + List pathOne = trace(region1, regionToParentMap); + List pathTwo = trace(region2, regionToParentMap); + int idxOne = 0; + int idxTwo = 0; + while (idxOne < pathOne.size() && idxTwo < pathTwo.size() && pathOne.get(idxOne).equals(pathTwo.get(idxTwo))) { + idxOne++; + idxTwo++; + } + return pathOne.get(idxOne - 1); + } + + private List trace(String region, Map regionToParentMap) { + List path = new ArrayList<>(); + path.add(region); + while (regionToParentMap.containsKey(region)) { + String parent = regionToParentMap.get(region); + path.add(parent); + region = parent; + } + Collections.reverse(path); + return path; + } +} From 20d5bc1645f2112c99ab9296f8ae50b4542e946c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 19 Sep 2024 06:32:29 -0700 Subject: [PATCH 1544/1640] Create Different Ways to Add Parentheses.java --- Medium/Different Ways to Add Parentheses.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Medium/Different Ways to Add Parentheses.java diff --git a/Medium/Different Ways to Add Parentheses.java b/Medium/Different Ways to Add Parentheses.java new file mode 100644 index 00000000..706fcf6c --- /dev/null +++ b/Medium/Different Ways to Add Parentheses.java @@ -0,0 +1,42 @@ +class Solution { + public List diffWaysToCompute(String expression) { + List result = new ArrayList<>(); + if (expression.length() == 0) { + return result; + } + if (expression.length() == 1) { + result.add(Integer.parseInt(expression)); + return result; + } + if (expression.length() == 2 && Character.isDigit(expression.charAt(0))) { + result.add(Integer.parseInt(expression)); + return result; + } + for (int i = 0; i < expression.length(); i++) { + char c = expression.charAt(i); + if (Character.isDigit(c)) { + continue; + } + List leftResult = diffWaysToCompute(expression.substring(0, i)); + List rightResult = diffWaysToCompute(expression.substring(i + 1)); + for (int leftVal : leftResult) { + for (int rightVal : rightResult) { + int value = 0; + switch(c) { + case '+': + value = leftVal + rightVal; + break; + case '-': + value = leftVal - rightVal; + break; + case '*': + value = leftVal * rightVal; + break; + } + result.add(value); + } + } + } + return result; + } +} From 33cbd03bdbc238fdfa2ba6949249af8d503c64f6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 20 Sep 2024 06:58:05 -0700 Subject: [PATCH 1545/1640] Create Shortest Palindrome.java --- Hard/Shortest Palindrome.java | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Hard/Shortest Palindrome.java diff --git a/Hard/Shortest Palindrome.java b/Hard/Shortest Palindrome.java new file mode 100644 index 00000000..3ff38e40 --- /dev/null +++ b/Hard/Shortest Palindrome.java @@ -0,0 +1,23 @@ +class Solution { + public String shortestPalindrome(String s) { + int n = s.length(); + if (n == 0) { + return s; + } + int left = 0; + for (int right = n - 1; right >= 0; right--) { + if (s.charAt(right) == s.charAt(left)) { + left++; + } + } + if (left == n) { + return s; + } + String nonPalindromeSuffix = s.substring(left); + StringBuilder reverseSuffix = new StringBuilder(nonPalindromeSuffix).reverse(); + return reverseSuffix + .append(shortestPalindrome(s.substring(0, left))) + .append(nonPalindromeSuffix) + .toString(); + } +} From c97bb9f4059847b67a7f53ca9fb9ee11ff385ab1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 20 Sep 2024 17:44:54 -0700 Subject: [PATCH 1546/1640] Update Lexicographical Numbers.java --- Medium/Lexicographical Numbers.java | 31 ++++++++++++++--------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/Medium/Lexicographical Numbers.java b/Medium/Lexicographical Numbers.java index c0ccab5e..4476017b 100644 --- a/Medium/Lexicographical Numbers.java +++ b/Medium/Lexicographical Numbers.java @@ -1,19 +1,18 @@ class Solution { - public List lexicalOrder(int n) { - List result = new ArrayList<>(); - for (int i = 1; i < 10; i++) { - dfs(i, n, result); + public List lexicalOrder(int n) { + List result = new ArrayList<>(); + int curr = 1; + for (int i = 0; i < n; i++) { + result.add(curr); + if (curr * 10 <= n) { + curr *= 10; + } else { + while (curr % 10 == 9 || curr == n) { + curr /= 10; + } + curr++; + } + } + return result; } - return result; - } - - private void dfs(int curr, int n, List result) { - if (curr > n) { - return; - } - result.add(curr); - for (int i = 0; i < 10; i++) { - dfs(10 * curr + i, n, result); - } - } } From 68486f5d8e372ceeed62ff36dedbdfa95799ee11 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 21 Sep 2024 07:13:55 -0700 Subject: [PATCH 1547/1640] Update Sliding Window Median.java --- Hard/Sliding Window Median.java | 117 ++++++++++++++------------------ 1 file changed, 52 insertions(+), 65 deletions(-) diff --git a/Hard/Sliding Window Median.java b/Hard/Sliding Window Median.java index 944af371..e37c289d 100644 --- a/Hard/Sliding Window Median.java +++ b/Hard/Sliding Window Median.java @@ -1,72 +1,59 @@ class Solution { - List list; - double[] ans; - boolean isEven; - - public double[] medianSlidingWindow(int[] nums, int k) { - list = new ArrayList<>(); - ans = new double[nums.length - k + 1]; - isEven = k % 2 == 0; - - for (int i=0; i list.get(list.size() - 1)) { - return list.size(); - } - - int start = 0; - int end = list.size(); - - while (start < end) { - int mid = (start + end) / 2; - - if (list.get(mid) < num) { - start = mid + 1; - } - else { - end = mid; + public double[] medianSlidingWindow(int[] nums, int windowSize) { + double[] medians = new double[nums.length - windowSize + 1]; + Map delayedRemovals = new HashMap<>(); + PriorityQueue maxHeap = new PriorityQueue<>(Collections.reverseOrder()); + PriorityQueue minHeap = new PriorityQueue<>(); + int currentIndex = 0; + while (currentIndex < windowSize) { + maxHeap.add(nums[currentIndex++]); + } + for (int j = 0; j < windowSize / 2; j++) { + minHeap.add(maxHeap.poll()); + } + int medianIndex = 0; + while (true) { + if (windowSize % 2 == 1) { + medians[medianIndex++] = maxHeap.peek(); + } else { + medians[medianIndex++] = ((double) maxHeap.peek() + (double) minHeap.peek()) / 2.0; } - } - - return end; - } - - private void removeElement(int num) { - for (int i=0; i= nums.length) { break; } + int outNum = nums[currentIndex - windowSize]; + int inNum = nums[currentIndex++]; + int balance = 0; + // Handle outgoing number + balance += (outNum <= maxHeap.peek() ? -1 : 1); + delayedRemovals.put(outNum, delayedRemovals.getOrDefault(outNum, 0) + 1); + // Handle incoming number + if (!maxHeap.isEmpty() && inNum <= maxHeap.peek()) { + balance++; + maxHeap.add(inNum); + } else { + balance--; + minHeap.add(inNum); + } + // Rebalance heaps + if (balance < 0) { + maxHeap.add(minHeap.poll()); + balance++; + } + if (balance > 0) { + minHeap.add(maxHeap.poll()); + balance--; + } + // Remove invalid numbers from the top of the heaps + while (delayedRemovals.getOrDefault(maxHeap.peek(), 0) > 0) { + delayedRemovals.put(maxHeap.peek(), delayedRemovals.get(maxHeap.peek()) - 1); + maxHeap.poll(); + } + while (!minHeap.isEmpty() && delayedRemovals.getOrDefault(minHeap.peek(), 0) > 0) { + delayedRemovals.put(minHeap.peek(), delayedRemovals.get(minHeap.peek()) - 1); + minHeap.poll(); + } } - } - - private double getMedian() { - if (isEven) { - return (double) (list.get(list.size()/2) + list.get(list.size()/2 - 1)) / 2; - } - else { - return (double) list.get(list.size()/2); - } + return medians; } } From fe09ade65cbd4a3b05410a7924619253f79d5358 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 21 Sep 2024 07:30:10 -0700 Subject: [PATCH 1548/1640] Create Most Beautiful Item for Each Query.java --- Medium/Most Beautiful Item for Each Query.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Most Beautiful Item for Each Query.java diff --git a/Medium/Most Beautiful Item for Each Query.java b/Medium/Most Beautiful Item for Each Query.java new file mode 100644 index 00000000..5d2f75db --- /dev/null +++ b/Medium/Most Beautiful Item for Each Query.java @@ -0,0 +1,17 @@ +class Solution { + public int[] maximumBeauty(int[][] items, int[] queries) { + Arrays.sort(items, (a, b) -> (a[0] - b[0])); + TreeMap map = new TreeMap<>(); + map.put(0, 0); + int currMax = 0; + for (int[] item : items) { + currMax = Math.max(currMax, item[1]); + map.put(item[0], currMax); + } + int[] result = new int[queries.length]; + for (int i = 0; i < queries.length; i++) { + result[i] = map.floorEntry(queries[i]).getValue(); + } + return result; + } +} From 049b2483f54ff74ed04e872c54e272529c99ca8d Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 Sep 2024 08:29:37 -0700 Subject: [PATCH 1549/1640] Update Longest Word With All Prefixes.java --- Medium/Longest Word With All Prefixes.java | 94 ++++++++++++---------- 1 file changed, 50 insertions(+), 44 deletions(-) diff --git a/Medium/Longest Word With All Prefixes.java b/Medium/Longest Word With All Prefixes.java index 567aea3a..a2a69a0f 100644 --- a/Medium/Longest Word With All Prefixes.java +++ b/Medium/Longest Word With All Prefixes.java @@ -1,53 +1,59 @@ class Solution { - public String longestWord(String[] words) { - TrieNode root = new TrieNode(); - root.isWord = true; - Map> map = new TreeMap<>((o1, o2) -> o2 - o1); - for (String word : words) { - addToTrie(word, root); - map.computeIfAbsent(word.length(), k -> new PriorityQueue<>(String::compareTo)).add(word); - } - for (Integer key : map.keySet()) { - PriorityQueue priorityQueue = map.get(key); - while (!priorityQueue.isEmpty()) { - String candidateWord = priorityQueue.poll(); - if (wordContainAllPrefixes(candidateWord, root)) { - return candidateWord; + public String longestWord(String[] words) { + TrieNode root = new TrieNode(); + for (String word : words) { + root.insert(word); + } + String longestValidWord = ""; + for (String word : words) { + if (root.hasAllPrefixes(word)) { + if (word.length() > longestValidWord.length() || + (word.length() == longestValidWord.length() && word.compareTo(longestValidWord) < 0)) { + longestValidWord = word; + } + } } - } + return longestValidWord; } - return ""; - } - private boolean wordContainAllPrefixes(String word, TrieNode root) { - TrieNode curr = root; - for (int i = 0; i < word.length(); i++) { - if (!curr.isWord) { - return false; - } - curr = curr.children.get(word.charAt(i)); - } - return curr.isWord; - } + static class TrieNode { + private final Map children; + private boolean isWord; - private void addToTrie(String word, TrieNode root) { - TrieNode curr = root; - for (int i = 0; i < word.length(); i++) { - if (!curr.children.containsKey(word.charAt(i))) { - curr.children.put(word.charAt(i), new TrieNode()); - } - curr = curr.children.get(word.charAt(i)); - } - curr.isWord = true; - } + public TrieNode() { + this.children = new HashMap<>(); + } - private static class TrieNode { - Map children; - boolean isWord; + public void insert(String word) { + TrieNode curr = this; + for (char c : word.toCharArray()) { + curr = curr.getOrCreateChild(c); + } + curr.isWord = true; + } + + public boolean hasAllPrefixes(String word) { + TrieNode curr = this; + for (char c : word.toCharArray()) { + TrieNode child = curr.children.getOrDefault(c, null); + if (child == null) { + return false; + } + if (!child.isWord) { + return false; + } + curr = child; + } + return true; + } - public TrieNode() { - this.children = new HashMap<>(); - this.isWord = false; + private TrieNode getOrCreateChild(char c) { + if (children.containsKey(c)) { + return children.get(c); + } + TrieNode node = new TrieNode(); + children.put(c, node); + return node; + } } - } } From f12e321cfd48e32055dcbc0036907dfa6f46b4e2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 Sep 2024 10:21:41 -0700 Subject: [PATCH 1550/1640] Update Binary Search Tree Iterator II.java --- Medium/Binary Search Tree Iterator II.java | 74 +++++++++++----------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/Medium/Binary Search Tree Iterator II.java b/Medium/Binary Search Tree Iterator II.java index 9f98110c..61ab1d10 100644 --- a/Medium/Binary Search Tree Iterator II.java +++ b/Medium/Binary Search Tree Iterator II.java @@ -14,49 +14,47 @@ * } */ class BSTIterator { - - private Deque stack; - private List arr; - private TreeNode lastNode; - private int pointer; - - public BSTIterator(TreeNode root) { - this.stack = new ArrayDeque(); - this.arr = new ArrayList<>(); - this.lastNode = root; - this.pointer = -1; - } - public boolean hasNext() { - return !this.stack.isEmpty() || lastNode != null || this.pointer < arr.size() - 1; - } + private final Deque primary; + private final List secondary; + private int index; - public int next() { - this.pointer++; - if (this.pointer == this.arr.size()) { - updateStack(lastNode); - TreeNode curr = this.stack.pop(); - lastNode = curr.right; - this.arr.add(curr.val); + public BSTIterator(TreeNode root) { + this.primary = new ArrayDeque<>(); + this.secondary = new ArrayList<>(); + this.index = -1; + traverse(root); + } + + public boolean hasNext() { + return !primary.isEmpty() || index < secondary.size() - 1; + } + + public int next() { + index++; + if (index == secondary.size()) { + TreeNode curr = primary.pop(); + secondary.add(curr.val); + traverse(curr.right); + } + return secondary.get(index); + } + + public boolean hasPrev() { + return index > 0; + } + + public int prev() { + index--; + return secondary.get(index); } - return this.arr.get(this.pointer); - } - - public boolean hasPrev() { - return this.pointer > 0; - } - public int prev() { - this.pointer--; - return this.arr.get(this.pointer); - } - - private void updateStack(TreeNode node) { - while (node != null) { - this.stack.push(node); - node = node.left; + private void traverse(TreeNode root) { + while (root != null) { + primary.push(root); + root = root.left; + } } - } } /** From 76548263a55db618f5973d3c7a88f49ace92a772 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 Sep 2024 15:16:25 -0700 Subject: [PATCH 1551/1640] Create K-th Smallest in Lexicographical Order.java --- ...-th Smallest in Lexicographical Order.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Hard/K-th Smallest in Lexicographical Order.java diff --git a/Hard/K-th Smallest in Lexicographical Order.java b/Hard/K-th Smallest in Lexicographical Order.java new file mode 100644 index 00000000..9063cd56 --- /dev/null +++ b/Hard/K-th Smallest in Lexicographical Order.java @@ -0,0 +1,27 @@ +class Solution { + public int findKthNumber(int n, int k) { + int curr = 1; + k--; + while (k > 0) { + int count = countNumsWithPrefix(n, curr, curr + 1); + if (count <= k) { + curr++; + k -= count; + } else { + curr *= 10; + k--; + } + } + return curr; + } + + private int countNumsWithPrefix(int n, long start, long end) { + int count = 0; + while (start <= n) { + count += Math.min(n + 1, end) - start; + start *= 10; + end *= 10; + } + return count; + } +} From 7e4afd555a663578a5662bd8e83459350cd0ccd5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 28 Sep 2024 09:09:04 -0700 Subject: [PATCH 1552/1640] Update Design Circular Deque.java --- Medium/Design Circular Deque.java | 154 ++++++++++++++---------------- 1 file changed, 70 insertions(+), 84 deletions(-) diff --git a/Medium/Design Circular Deque.java b/Medium/Design Circular Deque.java index 86949d4a..66667ed5 100644 --- a/Medium/Design Circular Deque.java +++ b/Medium/Design Circular Deque.java @@ -1,104 +1,90 @@ class MyCircularDeque { - - private Node head; - private Node tail; - private int k; - private int currSize; - public MyCircularDeque(int k) { - this.k = k; - this.currSize = 0; - this.head = new Node(-1); - this.tail = new Node(-1); - this.head.next = this.tail; - this.tail.prev = this.head; - } + private final Node head; + private final Node tail; + private final int capacity; + private int size; - public boolean insertFront(int value) { - if (isFull()) { - return false; + public MyCircularDeque(int k) { + head = new Node(-1); + tail = new Node(-1); + head.next = tail; + tail.prev = head; + capacity = k; + size = 0; } - Node node = new Node(value); - Node nextToHead = head.next; - head.next = node; - node.prev = head; - node.next = nextToHead; - nextToHead.prev = node; - currSize++; - return true; - } - public boolean insertLast(int value) { - if (isFull()) { - return false; + public boolean insertFront(int value) { + if (size == capacity) { + return false; + } + Node node = new Node(value); + node.next = head.next; + node.prev = head; + head.next.prev = node; + head.next = node; + size++; + return true; } - Node node = new Node(value); - Node prevToTail = tail.prev; - tail.prev = node; - node.next = tail; - prevToTail.next = node; - node.prev = prevToTail; - currSize++; - return true; - } - public boolean deleteFront() { - if (isEmpty()) { - return false; + public boolean insertLast(int value) { + if (size == capacity) { + return false; + } + Node node = new Node(value); + node.prev = tail.prev; + node.next = tail; + tail.prev.next = node; + tail.prev = node; + size++; + return true; } - Node toDelete = head.next; - deleteNode(toDelete); - return true; - } - public boolean deleteLast() { - if (isEmpty()) { - return false; + public boolean deleteFront() { + if (size == 0) { + return false; + } + head.next.next.prev = head; + head.next = head.next.next; + size--; + return true; } - Node toDelete = tail.prev; - deleteNode(toDelete); - return true; - } - public int getFront() { - if (isEmpty()) { - return -1; + public boolean deleteLast() { + if (size == 0) { + return false; + } + tail.prev.prev.next = tail; + tail.prev = tail.prev.prev; + size--; + return true; } - return head.next.val; - } - public int getRear() { - if (isEmpty()) { - return -1; + public int getFront() { + return head.next.value; } - return tail.prev.val; - } - public boolean isEmpty() { - return currSize == 0; - } + public int getRear() { + return tail.prev.value; + } + + public boolean isEmpty() { + return size == 0; + } + + public boolean isFull() { + return size == capacity; + } + + static class Node { + int value; + Node next; + Node prev; - public boolean isFull() { - return currSize == k; - } - - private void deleteNode(Node node) { - Node prevToNode = node.prev; - Node nextToNode = node.next; - prevToNode.next = nextToNode; - nextToNode.prev = prevToNode; - currSize--; - } - - private static class Node { - int val; - Node next; - Node prev; - - public Node(int val) { - this.val = val; + Node(int value) { + this.value = value; + } } - } } /** From 877f164cd5305a15c080c7e0122c092d3abe4eb2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 30 Sep 2024 08:21:33 -0700 Subject: [PATCH 1553/1640] Update Design a Stack With Increment Operation.java --- ...sign a Stack With Increment Operation.java | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/Medium/Design a Stack With Increment Operation.java b/Medium/Design a Stack With Increment Operation.java index 9164401b..9e4ec3a3 100644 --- a/Medium/Design a Stack With Increment Operation.java +++ b/Medium/Design a Stack With Increment Operation.java @@ -1,40 +1,40 @@ class CustomStack { - - private Stack stack; - private int[] incrementArray; - private int maxSize; - - public CustomStack(int maxSize) { - this.stack = new Stack<>(); - this.incrementArray = new int[maxSize]; - this.maxSize = maxSize; - } - public void push(int x) { - if (this.stack.size() < this.maxSize) { - this.stack.push(x); - } - } + private final int maxSize; + private final Stack stack; + private int[] increment; - public int pop() { - int idx = this.stack.size() - 1; - if (idx < 0) { - return -1; + public CustomStack(int maxSize) { + this.maxSize = maxSize; + this.stack = new Stack<>(); + this.increment = new int[maxSize]; } - if (idx > 0) { - this.incrementArray[idx - 1] += this.incrementArray[idx]; + + public void push(int x) { + if (stack.size() < maxSize) { + stack.push(x); + } } - int result = this.stack.pop() + this.incrementArray[idx]; - this.incrementArray[idx] = 0; - return result; - } - - public void increment(int k, int val) { - int idx = Math.min(k, this.stack.size()) - 1; - if (idx >= 0) { - this.incrementArray[idx] += val; + + public int pop() { + int idx = stack.size() - 1; + if (idx < 0) { + return -1; + } + if (idx > 0) { + increment[idx - 1] += increment[idx]; + } + int result = stack.pop() + increment[idx]; + increment[idx] = 0; + return result; + } + + public void increment(int k, int val) { + int idx = Math.min(k, stack.size()) - 1; + if (idx >= 0) { + increment[idx] += val; + } } - } } /** From a752149a8e834ce931f706737ab398d6e7c57597 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Oct 2024 06:47:24 -0700 Subject: [PATCH 1554/1640] Create Check If Array Pairs Are Divisible by k.java --- ...eck If Array Pairs Are Divisible by k.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Check If Array Pairs Are Divisible by k.java diff --git a/Medium/Check If Array Pairs Are Divisible by k.java b/Medium/Check If Array Pairs Are Divisible by k.java new file mode 100644 index 00000000..d942915f --- /dev/null +++ b/Medium/Check If Array Pairs Are Divisible by k.java @@ -0,0 +1,20 @@ +class Solution { + public boolean canArrange(int[] arr, int k) { + Map map = new HashMap<>(); + for (int num : arr) { + int remainder = ((num % k) + k) % k; + map.put(remainder, map.getOrDefault(remainder, 0) + 1); + } + for (int num : arr) { + int remainder = ((num % k) + k) % k; + if (remainder == 0) { + if (map.get(remainder) % 2 == 1) { + return false; + } + } else if (!map.get(remainder).equals(map.get(k - remainder))) { + return false; + } + } + return true; + } +} From 1faa9c843764223e985afa1d6d816b4277f4707c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 1 Oct 2024 17:34:31 -0700 Subject: [PATCH 1555/1640] Update Rank Transform of an Array.java --- Easy/Rank Transform of an Array.java | 33 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/Easy/Rank Transform of an Array.java b/Easy/Rank Transform of an Array.java index 401c317b..3f9192fd 100644 --- a/Easy/Rank Transform of an Array.java +++ b/Easy/Rank Transform of an Array.java @@ -1,20 +1,19 @@ class Solution { - public int[] arrayRankTransform(int[] arr) { - PriorityQueue pq = new PriorityQueue<>(); - for (int num : arr) { - pq.add(num); + public int[] arrayRankTransform(int[] arr) { + int[] copyArr = Arrays.copyOf(arr, arr.length); + Arrays.sort(arr); + int rank = 1; + Map numToRank = new HashMap<>(); + for (int num : arr) { + if (numToRank.containsKey(num)) { + continue; + } + numToRank.put(num, rank++); + } + int[] result = new int[arr.length]; + for (int i = 0; i < arr.length; i++) { + result[i] = numToRank.get(copyArr[i]); + } + return result; } - int rank = 1; - Map map = new HashMap<>(); - while (!pq.isEmpty()) { - int removed = pq.poll(); - if (!map.containsKey(removed)) { - map.put(removed, rank++); - } - } - for (int i = 0; i < arr.length; i++) { - arr[i] = map.get(arr[i]); - } - return arr; - } } From 914a2fc291a5634d072744e2f57289cea48822da Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Oct 2024 09:50:16 -0700 Subject: [PATCH 1556/1640] Create Make Sum Divisible by P.java --- Medium/Make Sum Divisible by P.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Medium/Make Sum Divisible by P.java diff --git a/Medium/Make Sum Divisible by P.java b/Medium/Make Sum Divisible by P.java new file mode 100644 index 00000000..ee94817a --- /dev/null +++ b/Medium/Make Sum Divisible by P.java @@ -0,0 +1,26 @@ +class Solution { + public int minSubarray(int[] nums, int p) { + int n = nums.length; + int sum = 0; + for (int num : nums) { + sum = (sum + num) % p; + } + int target = sum % p; + if (target == 0) { + return 0; + } + Map map = new HashMap<>(); + map.put(0, -1); + int currSum = 0; + int result = n; + for (int i = 0; i < n; i++) { + currSum = (currSum + nums[i]) % p; + int needed = (currSum - target + p) % p; + if (map.containsKey(needed)) { + result = Math.min(result, i - map.get(needed)); + } + map.put(currSum, i); + } + return result == n ? -1 : result; + } +} From 650d084e89e1fe0d4ac6452d502fd280787e4f14 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 3 Oct 2024 17:51:53 -0700 Subject: [PATCH 1557/1640] Update Divide Players Into Teams of Equal Skill.java --- ...ide Players Into Teams of Equal Skill.java | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Medium/Divide Players Into Teams of Equal Skill.java b/Medium/Divide Players Into Teams of Equal Skill.java index bebcec21..41a5f1f7 100644 --- a/Medium/Divide Players Into Teams of Equal Skill.java +++ b/Medium/Divide Players Into Teams of Equal Skill.java @@ -1,19 +1,25 @@ class Solution { public long dividePlayers(int[] skill) { - Arrays.sort(skill); + int n = skill.length; + int totalSkill = 0; + Map map = new HashMap<>(); + for (int s : skill) { + totalSkill += s; + map.put(s, map.getOrDefault(s, 0) + 1); + } + if (totalSkill % (n / 2) != 0) { + return -1; + } + int targetSkill = totalSkill / (n / 2); long totalChemistry = 0; - int start = 0; - int end = skill.length - 1; - int totalSkill = skill[start] + skill[end]; - while (start < end) { - int currTotal = skill[start] + skill[end]; - if (currTotal != totalSkill) { + for (int currSkill : map.keySet()) { + int partnerSkill = targetSkill - currSkill; + int currSkillFreq = map.get(currSkill); + if (!map.containsKey(partnerSkill) || currSkillFreq != map.get(partnerSkill)) { return -1; } - totalChemistry += skill[start] * skill[end]; - start++; - end--; + totalChemistry += (long) currSkill * (long) partnerSkill * (long) currSkillFreq; } - return totalChemistry; + return totalChemistry / 2; } } From 1c21ef27bee9a434d927ebaab33aa6910a192f2c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 5 Oct 2024 18:26:00 -0700 Subject: [PATCH 1558/1640] Update Sentence Similarity III.java --- Medium/Sentence Similarity III.java | 51 +++++++++++++---------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/Medium/Sentence Similarity III.java b/Medium/Sentence Similarity III.java index e85bb024..506dc110 100644 --- a/Medium/Sentence Similarity III.java +++ b/Medium/Sentence Similarity III.java @@ -1,31 +1,26 @@ class Solution { - public boolean areSentencesSimilar(String sentence1, String sentence2) { - return isSimilar(sentence1.split(" "), sentence2.split(" ")) || isSimilar(sentence2.split(" "), - sentence1.split(" ")); - } - - private boolean isSimilar(String[] matcher, String[] target) { - int targetStartIdx = 0; - int matcherCurrentIdx = 0; - while (targetStartIdx < target.length && matcherCurrentIdx < matcher.length) { - if (!matcher[matcherCurrentIdx].equals(target[targetStartIdx])) { - break; - } - targetStartIdx++; - matcherCurrentIdx++; + public boolean areSentencesSimilar(String sentence1, String sentence2) { + int idxOneStart = 0; + int idxTwoStart = 0; + String[] wordsOne = sentence1.split("\\s+"); + String[] wordsTwo = sentence2.split("\\s+"); + while (idxOneStart < wordsOne.length && idxOneStart < wordsTwo.length && wordsOne[idxOneStart].equals(wordsTwo[idxTwoStart])) { + idxOneStart++; + idxTwoStart++; + } + boolean startFound = idxOneStart > 0; + if (idxOneStart == wordsOne.length && idxTwoStart == wordsTwo.length) { + return true; + } + int idxOneEnd = wordsOne.length - 1; + int idxTwoEnd = wordsTwo.length - 1; + while (idxOneEnd >= idxOneStart && idxTwoEnd >= idxTwoStart && wordsOne[idxOneEnd].equals(wordsTwo[idxTwoEnd])) { + idxOneEnd--; + idxTwoEnd--; + } + if (idxOneEnd != idxOneStart - 1 && idxTwoEnd != idxTwoStart - 1) { + return false; + } + return true; } - if (targetStartIdx == target.length) { - return true; - } - int targetEndIdx = target.length - 1; - matcherCurrentIdx = matcher.length - 1; - while (targetEndIdx >= targetStartIdx && matcherCurrentIdx >= 0) { - if (!matcher[matcherCurrentIdx].equals(target[targetEndIdx])) { - return false; - } - targetEndIdx--; - matcherCurrentIdx--; - } - return targetEndIdx == targetStartIdx - 1; - } } From ca3dcbee5b4c14751ab1f56532a9380a004dd1bc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 7 Oct 2024 17:31:53 -0700 Subject: [PATCH 1559/1640] Create Minimum Number of Swaps to Make the String Balanced.java --- ... of Swaps to Make the String Balanced.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Minimum Number of Swaps to Make the String Balanced.java diff --git a/Medium/Minimum Number of Swaps to Make the String Balanced.java b/Medium/Minimum Number of Swaps to Make the String Balanced.java new file mode 100644 index 00000000..79935f13 --- /dev/null +++ b/Medium/Minimum Number of Swaps to Make the String Balanced.java @@ -0,0 +1,24 @@ +class Solution { + public int minSwaps(String s) { + char[] chars = s.toCharArray(); + Stack openBrackets = new Stack<>(); + for (int i = 0; i < chars.length; i++) { + if (chars[i] == '[') { + openBrackets.push(i); + } + } + int open = 0; + int swaps = 0; + for (int i = 0; i < chars.length; i++) { + open += chars[i] == '[' ? 1 : -1; + if (open < 0) { + swaps++; + int endIdx = openBrackets.pop(); + chars[endIdx] = ']'; + chars[i] = '['; + open += 2; + } + } + return swaps; + } +} From 6b30e46841a64facd6a0ce6652b3b791c22b4071 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Oct 2024 08:03:17 -0700 Subject: [PATCH 1560/1640] Update Minimum Add to Make Parentheses Valid.java --- ...Minimum Add to Make Parentheses Valid.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/Medium/Minimum Add to Make Parentheses Valid.java b/Medium/Minimum Add to Make Parentheses Valid.java index f119bfe7..7fcfc88d 100644 --- a/Medium/Minimum Add to Make Parentheses Valid.java +++ b/Medium/Minimum Add to Make Parentheses Valid.java @@ -1,18 +1,14 @@ class Solution { - public int minAddToMakeValid(String s) { - int count = 0; - Stack stack = new Stack<>(); - for (char c : s.toCharArray()) { - if (c == '(') { - stack.push(c); - } else { - if (stack.isEmpty()) { - count++; - } else { - stack.pop(); + public int minAddToMakeValid(String s) { + int open = 0; + int count = 0; + for (char c : s.toCharArray()) { + open += c == '(' ? 1 : -1; + if (open < 0) { + count += Math.abs(open); + open = 0; + } } - } + return count + open; } - return count + stack.size(); - } } From d1379d8078e538484116cb808a78388380b306f0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Oct 2024 10:14:41 -0700 Subject: [PATCH 1561/1640] Create Maximum Coins Heroes Can Collect.java --- medium/Maximum Coins Heroes Can Collect.java | 40 ++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 medium/Maximum Coins Heroes Can Collect.java diff --git a/medium/Maximum Coins Heroes Can Collect.java b/medium/Maximum Coins Heroes Can Collect.java new file mode 100644 index 00000000..1e98abf9 --- /dev/null +++ b/medium/Maximum Coins Heroes Can Collect.java @@ -0,0 +1,40 @@ +class Solution { + public long[] maximumCoins(int[] heroes, int[] monsters, int[] coins) { + List monsterEntities = new ArrayList<>(); + int n = monsters.length; + for (int i = 0; i < n; i++) { + monsterEntities.add(new MonsterEntity(monsters[i], coins[i])); + } + Collections.sort(monsterEntities, (a, b) -> (a.health() - b.health())); + long[] prefixCoinSum = new long[n]; + for (int i = 0; i < n; i++) { + prefixCoinSum[i] = i == 0 ? 0 : prefixCoinSum[i - 1]; + prefixCoinSum[i] += monsterEntities.get(i).coin(); + } + int m = heroes.length; + long[] result = new long[m]; + for (int i = 0; i < m; i++) { + int idx = binarySearch(monsterEntities, heroes[i]); + result[i] = idx != Integer.MIN_VALUE ? prefixCoinSum[idx] : 0; + } + return result; + } + + private int binarySearch(List monsterEntities, int heroHealth) { + int left = 0; + int right = monsterEntities.size() - 1; + int idx = Integer.MIN_VALUE; + while (left <= right) { + int mid = (left + right) / 2; + if (monsterEntities.get(mid).health() <= heroHealth) { + idx = Math.max(idx, mid); + left = mid + 1; + } else { + right = mid - 1; + } + } + return idx; + } + + private static record MonsterEntity(int health, int coin) {} +} From e5760b1d4aaeae4b661093b3dec2e62b541545e6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 9 Oct 2024 10:15:04 -0700 Subject: [PATCH 1562/1640] Rename Maximum Coins Heroes Can Collect.java to Maximum Coins Heroes Can Collect.java --- {medium => Medium}/Maximum Coins Heroes Can Collect.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {medium => Medium}/Maximum Coins Heroes Can Collect.java (100%) diff --git a/medium/Maximum Coins Heroes Can Collect.java b/Medium/Maximum Coins Heroes Can Collect.java similarity index 100% rename from medium/Maximum Coins Heroes Can Collect.java rename to Medium/Maximum Coins Heroes Can Collect.java From d56f44da8d3fdbae82f4e27bef44e27488c5287e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 10 Oct 2024 08:39:16 -0700 Subject: [PATCH 1563/1640] Update Maximum Width Ramp.java --- Medium/Maximum Width Ramp.java | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Medium/Maximum Width Ramp.java b/Medium/Maximum Width Ramp.java index 37eb1862..2463f02b 100644 --- a/Medium/Maximum Width Ramp.java +++ b/Medium/Maximum Width Ramp.java @@ -1,21 +1,18 @@ class Solution { - public int maxWidthRamp(int[] A) { + public int maxWidthRamp(int[] nums) { + int n = nums.length; Stack stack = new Stack<>(); - int ans = 0; - int n = A.length; - - for (int i=0; i A[i]) { - stack.add(i); + for (int i = 0; i < n; i++) { + if (stack.isEmpty() || nums[stack.peek()] > nums[i]) { + stack.push(i); } } - - for (int i=n-1; i>=ans; i--) { - while (!stack.isEmpty() && A[stack.peek()] <= A[i]) { - ans = Math.max(ans, i - stack.pop()); + int result = 0; + for (int i = n - 1; i >= 0; i--) { + while (!stack.isEmpty() && nums[stack.peek()] <= nums[i]) { + result = Math.max(result, i - stack.pop()); } } - - return ans; + return result; } } From ffe05dfbf9f0fbb017472657a1119a14474af94f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Oct 2024 14:37:42 -0700 Subject: [PATCH 1564/1640] Create The Number of the Smallest Unoccupied Chair.java --- ...mber of the Smallest Unoccupied Chair.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 Medium/The Number of the Smallest Unoccupied Chair.java diff --git a/Medium/The Number of the Smallest Unoccupied Chair.java b/Medium/The Number of the Smallest Unoccupied Chair.java new file mode 100644 index 00000000..6bd41ad2 --- /dev/null +++ b/Medium/The Number of the Smallest Unoccupied Chair.java @@ -0,0 +1,35 @@ +class Solution { + public int smallestChair(int[][] times, int targetFriend) { + PriorityQueue pq = new PriorityQueue<>((o1, o2) -> { + int c = o1[0] - o2[0]; + if (c == 0) { + return o1[1] - o2[1]; + } + return c; + }); + for (int i = 0; i < times.length; i++) { + pq.add(new int[]{times[i][0], times[i][1], i}); + } + PriorityQueue occupiedChairs = new PriorityQueue<>(Comparator.comparingInt(o -> o[0])); + PriorityQueue emptyChairs = new PriorityQueue<>(); + int currChair = 0; + while (!pq.isEmpty()) { + int[] time = pq.poll(); + while (!occupiedChairs.isEmpty() && occupiedChairs.peek()[0] <= time[0]) { + int[] chair = occupiedChairs.poll(); + emptyChairs.add(chair[1]); + } + if (time[2] == targetFriend) { + return emptyChairs.isEmpty() ? currChair : emptyChairs.poll(); + } + if (emptyChairs.isEmpty()) { + occupiedChairs.add(new int[]{time[1], currChair}); + currChair++; + } else { + int chair = emptyChairs.poll(); + occupiedChairs.add(new int[]{time[1], chair}); + } + } + return -1; + } +} From 771c1a5b06c14648c4c4e2f3a3f7aefa668f4039 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 11 Oct 2024 14:38:57 -0700 Subject: [PATCH 1565/1640] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a90fb07e..617cd951 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Solutions to Leetcode problems in Java -## [Current Leetcode profile: Solved 1600+ Problems](https://leetcode.com/varunsjsu/) +## [Current Leetcode profile: Solved 1700+ Problems](https://leetcode.com/varunsjsu/) ## [Previous Leetcode profile: Solved 759 Problems](https://leetcode.com/varunu28/) Problem Category | Count From 139140dd8a5224d3c7ce675b118d0c2dd0ac89f8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 12 Oct 2024 07:49:28 -0700 Subject: [PATCH 1566/1640] Create Divide Intervals Into Minimum Number of Groups.java --- ...tervals Into Minimum Number of Groups.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Medium/Divide Intervals Into Minimum Number of Groups.java diff --git a/Medium/Divide Intervals Into Minimum Number of Groups.java b/Medium/Divide Intervals Into Minimum Number of Groups.java new file mode 100644 index 00000000..b58d0dcb --- /dev/null +++ b/Medium/Divide Intervals Into Minimum Number of Groups.java @@ -0,0 +1,21 @@ +class Solution { + public int minGroups(int[][] intervals) { + Arrays.sort(intervals, (o1, o2) -> { + int c = Integer.compare(o1[0], o2[0]); + if (c == 0) { + return Integer.compare(o1[1], o2[1]); + } + return c; + }); + int max = 0; + PriorityQueue pq = new PriorityQueue<>(); + for (int[] interval : intervals) { + while (!pq.isEmpty() && pq.peek() < interval[0]) { + pq.poll(); + } + pq.add(interval[1]); + max = Math.max(max, pq.size()); + } + return max; + } +} From ab2e5bd95da86a9fd92c7774644c1e91fe14840e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Oct 2024 16:00:28 -0700 Subject: [PATCH 1567/1640] Create Smallest Range Covering Elements from K Lists.java --- ... Range Covering Elements from K Lists.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 Hard/Smallest Range Covering Elements from K Lists.java diff --git a/Hard/Smallest Range Covering Elements from K Lists.java b/Hard/Smallest Range Covering Elements from K Lists.java new file mode 100644 index 00000000..4e814027 --- /dev/null +++ b/Hard/Smallest Range Covering Elements from K Lists.java @@ -0,0 +1,29 @@ +class Solution { + public int[] smallestRange(List> nums) { + PriorityQueue pq = new PriorityQueue<>( + Comparator.comparingInt(a -> a[0])); + int max = Integer.MIN_VALUE; + int start = 0; + int end = Integer.MAX_VALUE; + for (int i = 0; i < nums.size(); i++) { + pq.add(new int[]{nums.get(i).get(0), i, 0}); + max = Math.max(max, nums.get(i).get(0)); + } + while (pq.size() == nums.size()) { + int[] removed = pq.poll(); + int min = removed[0]; + int row = removed[1]; + int col = removed[2]; + if (max - min < end - start) { + start = min; + end = max; + } + if (col + 1 < nums.get(row).size()) { + int next = nums.get(row).get(col + 1); + pq.add(new int[]{next, row, col + 1}); + max = Math.max(max, next); + } + } + return new int[]{start, end}; + } +} From 74177e433ba8c9723053bf93afd433a275d184a7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Oct 2024 07:48:08 -0700 Subject: [PATCH 1568/1640] Create Separate Black and White Balls.java --- Medium/Separate Black and White Balls.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Medium/Separate Black and White Balls.java diff --git a/Medium/Separate Black and White Balls.java b/Medium/Separate Black and White Balls.java new file mode 100644 index 00000000..5fc4900f --- /dev/null +++ b/Medium/Separate Black and White Balls.java @@ -0,0 +1,13 @@ +class Solution { + public long minimumSteps(String s) { + int whitePos = 0; + long swaps = 0; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == '0') { + swaps += i - whitePos; + whitePos++; + } + } + return swaps; + } +} From d69d6fa23d5303c23a6bb1e7882f71cc5a3faccf Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Oct 2024 07:54:33 -0700 Subject: [PATCH 1569/1640] Update First Unique Number.java --- Medium/First Unique Number.java | 75 ++++++++------------------------- 1 file changed, 17 insertions(+), 58 deletions(-) diff --git a/Medium/First Unique Number.java b/Medium/First Unique Number.java index d5406335..6affb411 100644 --- a/Medium/First Unique Number.java +++ b/Medium/First Unique Number.java @@ -1,68 +1,27 @@ class FirstUnique { - - private Node head; - private Node tail; - private Map map; - - public FirstUnique(int[] nums) { - this.head = new Node(-1); - this.tail = new Node(-1); - this.head.next = this.tail; - this.tail.prev = this.head; - this.map = new HashMap<>(); - for (int num : nums) { - if (map.containsKey(num)) { - deleteNode(map.get(num)); - } else { - Node node = new Node(num); - map.put(num, node); - addToTail(node); - } - } - } - public int showFirstUnique() { - return this.head.next.val; - } + private Map map; + private Queue queue; - public void add(int value) { - if (map.containsKey(value)) { - deleteNode(map.get(value)); - return; + public FirstUnique(int[] nums) { + map = new HashMap<>(); + queue = new LinkedList<>(); + for (int num : nums) { + add(num); + } } - Node node = new Node(value); - map.put(value, node); - addToTail(node); - } - - private void addToTail(Node node) { - Node prevToTail = this.tail.prev; - prevToTail.next = node; - node.next = this.tail; - node.prev = prevToTail; - this.tail.prev = node; - } - - private void deleteNode(Node node) { - if (node == null) { - return; + + public int showFirstUnique() { + while (!queue.isEmpty() && map.get(queue.peek()) > 1) { + queue.remove(); + } + return queue.isEmpty() ? -1 : queue.peek(); } - map.put(node.val, null); - Node prevToNode = node.prev; - Node nextToNode = node.next; - prevToNode.next = nextToNode; - nextToNode.prev = prevToNode; - } - - private static class Node { - int val; - Node next; - Node prev; - public Node(int val) { - this.val = val; + public void add(int value) { + queue.add(value); + map.put(value, map.getOrDefault(value, 0) + 1); } - } } /** From 40e30d0c6424c785b8b51c8f435175dd3b762054 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 16 Oct 2024 07:00:08 -0700 Subject: [PATCH 1570/1640] Update Longest Happy String.java --- Medium/Longest Happy String.java | 74 ++++++++++++++++---------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/Medium/Longest Happy String.java b/Medium/Longest Happy String.java index 145fd638..4af8f747 100644 --- a/Medium/Longest Happy String.java +++ b/Medium/Longest Happy String.java @@ -1,42 +1,42 @@ class Solution { - public String longestDiverseString(int a, int b, int c) { - PriorityQueue priorityQueue = new PriorityQueue<>((o1, o2) -> o2[1] - o1[1]); - if (a > 0) { - priorityQueue.add(new int[]{0, a}); - } - if (b > 0) { - priorityQueue.add(new int[]{1, b}); - } - if (c > 0) { - priorityQueue.add(new int[]{2, c}); - } - StringBuilder sb = new StringBuilder("zz"); - while (!priorityQueue.isEmpty()) { - int[] temp = {-1, -1}; - char peekChar = (char) ('a' + priorityQueue.peek()[0]); - if (peekChar == sb.charAt(sb.length() - 1) && - peekChar == sb.charAt(sb.length() - 2)) { - temp[0] = priorityQueue.peek()[0]; - temp[1] = priorityQueue.peek()[1]; - priorityQueue.poll(); - if (priorityQueue.isEmpty()) { - break; + public String longestDiverseString(int a, int b, int c) { + PriorityQueue pq = + new PriorityQueue<>((p, q) -> q.frequency() - p.frequency()); + if (a > 0) { + pq.add(new LetterFrequencyPair('a', a)); + } + if (b > 0) { + pq.add(new LetterFrequencyPair('b', b)); + } + if (c > 0) { + pq.add(new LetterFrequencyPair('c', c)); } - } - peekChar = (char) ('a' + priorityQueue.peek()[0]); - if (peekChar != sb.charAt(sb.length() - 1) || - peekChar != sb.charAt(sb.length() - 2)) { - int[] removed = priorityQueue.poll(); - sb.append(peekChar); - removed[1]--; - if (removed[1] > 0) { - priorityQueue.add(removed); + StringBuilder sb = new StringBuilder(); + while (!pq.isEmpty()) { + LetterFrequencyPair removed = pq.remove(); + int frequency = removed.frequency(); + int resultLength = sb.length(); + if (resultLength >= 2 && + sb.charAt(resultLength - 1) == removed.letter() && + sb.charAt(resultLength - 2) == removed.letter()) { + if (pq.isEmpty()) { + break; + } + LetterFrequencyPair temp = pq.remove(); + sb.append(temp.letter()); + if (temp.frequency() - 1 > 0) { + pq.add(new LetterFrequencyPair(temp.letter(), temp.frequency() - 1)); + } + } else { + sb.append(removed.letter()); + frequency--; + } + if (frequency > 0) { + pq.add(new LetterFrequencyPair(removed.letter(), frequency)); + } } - } - if (temp[0] != -1) { - priorityQueue.add(temp); - } + return sb.toString(); } - return sb.substring(2).toString(); - } + + private record LetterFrequencyPair(char letter, int frequency) {} } From 45105d882a6f2b03e88fc2198a54990a1b91e620 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 17 Oct 2024 07:04:29 -0700 Subject: [PATCH 1571/1640] Update Maximum Swap.java --- Medium/Maximum Swap.java | 41 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/Medium/Maximum Swap.java b/Medium/Maximum Swap.java index 5d30c780..c12fb12e 100644 --- a/Medium/Maximum Swap.java +++ b/Medium/Maximum Swap.java @@ -1,29 +1,20 @@ class Solution { - public int maximumSwap(int num) { - String stringValue = Integer.toString(num); - Map valToIndexMap = new HashMap<>(); - int[] digits = new int[String.valueOf(num).length()]; - for (int i = digits.length - 1; i >= 0; i--) { - int digit = num % 10; - num /= 10; - digits[i] = digit; - valToIndexMap.putIfAbsent(digit, i); - } - for (int i = 0; i < digits.length; i++) { - for (int k = 9; k > digits[i]; k--) { - if (valToIndexMap.getOrDefault(k, -1) > i) { - int swapIndex = valToIndexMap.get(k); - return Integer.parseInt( - stringValue.substring(0, i) // Digits before swap index - + k // Swapped value - + stringValue.substring(i + 1, swapIndex) // Digits after original index(i) and before swappedIndex - + digits[i] // Digit at original index(i) - + ((swapIndex + 1) != stringValue.length() // Check if swapIndex is last digit of num - ? stringValue.substring(swapIndex + 1) // If not then add digits that come after the swapIndex - : "")); // Else add an empty string + public int maximumSwap(int num) { + char[] digits = String.valueOf(num).toCharArray(); + int n = digits.length; + int[] maxRightIdx = new int[n]; + maxRightIdx[n - 1] = n - 1; + for (int i = n - 2; i >= 0; i--) { + maxRightIdx[i] = (digits[i] > digits[maxRightIdx[i + 1]]) ? i : maxRightIdx[i + 1]; + } + for (int i = 0; i < n; i++) { + if (digits[i] < digits[maxRightIdx[i]]) { + char temp = digits[i]; + digits[i] = digits[maxRightIdx[i]]; + digits[maxRightIdx[i]] = temp; + return Integer.parseInt(String.valueOf(digits)); + } } - } + return num; } - return Integer.parseInt(stringValue); - } } From 0190cfd86d0c79f6ba0a2c265aa81086a960ff1c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 18 Oct 2024 08:15:08 -0700 Subject: [PATCH 1572/1640] Create Count Number of Maximum Bitwise-OR Subsets.java --- ... Number of Maximum Bitwise-OR Subsets.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Count Number of Maximum Bitwise-OR Subsets.java diff --git a/Medium/Count Number of Maximum Bitwise-OR Subsets.java b/Medium/Count Number of Maximum Bitwise-OR Subsets.java new file mode 100644 index 00000000..973e1818 --- /dev/null +++ b/Medium/Count Number of Maximum Bitwise-OR Subsets.java @@ -0,0 +1,23 @@ +class Solution { + public int countMaxOrSubsets(int[] nums) { + int n = nums.length; + int maxValue = 0; + for (int num : nums) { + maxValue |= num; + } + Integer[][] dp = new Integer[n][maxValue + 1]; + return countMaxOrSubsets(nums, 0, 0, maxValue, dp); + } + + private int countMaxOrSubsets(int[] nums, int idx, int current, int maxValue, Integer[][] dp) { + if (idx == nums.length) { + return (current == maxValue) ? 1 : 0; + } + if (dp[idx][current] != null) { + return dp[idx][current]; + } + int countWithout = countMaxOrSubsets(nums, idx + 1, current, maxValue, dp); + int countWith = countMaxOrSubsets(nums, idx + 1, current | nums[idx], maxValue, dp); + return dp[idx][current] = countWith + countWithout; + } +} From 3a2e60db99c494d79a72a64121306fb5fed66e9e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 19 Oct 2024 08:48:07 -0700 Subject: [PATCH 1573/1640] Create Find Kth Bit in Nth Binary String.java --- Medium/Find Kth Bit in Nth Binary String.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Medium/Find Kth Bit in Nth Binary String.java diff --git a/Medium/Find Kth Bit in Nth Binary String.java b/Medium/Find Kth Bit in Nth Binary String.java new file mode 100644 index 00000000..e98b29c7 --- /dev/null +++ b/Medium/Find Kth Bit in Nth Binary String.java @@ -0,0 +1,22 @@ +class Solution { + public char findKthBit(int n, int k) { + return nthString(n).charAt(k - 1); + } + + private String nthString(int n) { + if (n == 1) { + return "0"; + } + String prevString = nthString(n - 1); + return prevString + "1" + reverseAndInvert(prevString); + } + + private String reverseAndInvert(String s) { + char[] chars = s.toCharArray(); + for (int i = 0; i < s.length(); i++) { + chars[i] = chars[i] == '1' ? '0' : '1'; + } + StringBuilder sb = new StringBuilder(String.valueOf(chars)); + return sb.reverse().toString(); + } +} From a3143e2bc5be251f4b005133f7582b848c52c573 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 20 Oct 2024 09:25:50 -0700 Subject: [PATCH 1574/1640] Update Parsing A Boolean Expression.java --- Hard/Parsing A Boolean Expression.java | 91 +++++++++----------------- 1 file changed, 31 insertions(+), 60 deletions(-) diff --git a/Hard/Parsing A Boolean Expression.java b/Hard/Parsing A Boolean Expression.java index 2c419aa8..97a56130 100644 --- a/Hard/Parsing A Boolean Expression.java +++ b/Hard/Parsing A Boolean Expression.java @@ -1,72 +1,43 @@ class Solution { public boolean parseBoolExpr(String expression) { - char[] chars = expression.toCharArray(); - Stack operations = new Stack<>(); - Stack boolValues = new Stack<>(); - - for (int i = 0; i < chars.length; i++) { - char c = chars[i]; - if (c == '!' || c == '&' || c == '|') { - operations.push(c); - } - else if (c == '(') { - boolValues.push('#'); - } - else if (c == 't' || c == 'f') { - boolValues.push(chars[i]); - } - else if (c == ',') { - continue; - } - else { - List list = new ArrayList<>(); - while (!boolValues.isEmpty()) { - char temp = boolValues.pop(); - if (temp == '#') { - break; - } - - list.add(temp); + Stack stack = new Stack<>(); + for (char c : expression.toCharArray()) { + if (c == ')') { + List values = new ArrayList<>(); + while (stack.peek() != '(') { + values.add(stack.pop()); } - - boolValues.push(performOperation(list, operations.pop())); + stack.pop(); + char operation = stack.pop(); + char result = evaluate(operation, values); + stack.push(result); + } else if (c != ',') { + stack.push(c); } } - - return boolValues.peek() == 't' ? true : false; + return stack.peek() == 't'; } - private Character performOperation(List list, Character operation) { - if (operation == '|') { - return performOr(list); - } - else if (operation == '&') { - return performAnd(list); + private static char evaluate(char operation, List values) { + if (operation == '!') { + return values.get(0) == 't' ? 'f' : 't'; } - else { - return list.get(0) == 't' ? 'f' : 't'; - } - } - - private Character performAnd(List list) { - boolean val = getBooleanValue(list.get(0)); - for (int i = 1; i < list.size(); i++) { - val &= getBooleanValue(list.get(i)); + if (operation == '&') { + for (char value : values) { + if (value == 'f') { + return 'f'; + } + } + return 't'; } - - return val ? 't' : 'f'; - } - - private Character performOr(List list) { - boolean val = getBooleanValue(list.get(0)); - for (int i = 1; i < list.size(); i++) { - val |= getBooleanValue(list.get(i)); + if (operation == '|') { + for (char value : values) { + if (value == 't') { + return 't'; + } + } + return 'f'; } - - return val ? 't' : 'f'; - } - - private boolean getBooleanValue(Character character) { - return character == 't' ? true : false; + return 'f'; } } From 7b253d794e4f465cb89df85bee72000915f06ad3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 21 Oct 2024 12:40:07 -0700 Subject: [PATCH 1575/1640] Create Split a String Into the Max Number of Unique Substrings.java --- ...o the Max Number of Unique Substrings.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Medium/Split a String Into the Max Number of Unique Substrings.java diff --git a/Medium/Split a String Into the Max Number of Unique Substrings.java b/Medium/Split a String Into the Max Number of Unique Substrings.java new file mode 100644 index 00000000..3e418df7 --- /dev/null +++ b/Medium/Split a String Into the Max Number of Unique Substrings.java @@ -0,0 +1,21 @@ +class Solution { + public int maxUniqueSplit(String s) { + Set seen = new HashSet<>(); + return backtrack(s, 0, seen); + } + + private int backtrack(String s, int idx, Set seen) { + if (idx == s.length()) { + return 0; + } + int count = 0; + for (int end = idx + 1; end <= s.length(); end++) { + String substring = s.substring(idx, end); + if (seen.add(substring)) { + count = Math.max(count, 1 + backtrack(s, end, seen)); + seen.remove(substring); + } + } + return count; + } +} From 975d71b3150dcf4772c7b542b8b6765c03f92e90 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 23 Oct 2024 06:42:23 -0700 Subject: [PATCH 1576/1640] Create Cousins in Binary Tree II.java --- Medium/Cousins in Binary Tree II.java | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Medium/Cousins in Binary Tree II.java diff --git a/Medium/Cousins in Binary Tree II.java b/Medium/Cousins in Binary Tree II.java new file mode 100644 index 00000000..ee1b4b21 --- /dev/null +++ b/Medium/Cousins in Binary Tree II.java @@ -0,0 +1,44 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public TreeNode replaceValueInTree(TreeNode root) { + Queue queue = new LinkedList<>(); + queue.add(root); + int prevLevelSum = root.val; + while (!queue.isEmpty()) { + int size = queue.size(); + int levelSum = 0; + for (int i = 0; i < size; i++) { + TreeNode node = queue.remove(); + node.val = prevLevelSum - node.val; + int siblingSum = (node.left != null ? node.left.val : 0) + + (node.right != null ? node.right.val : 0); + if (node.left != null) { + levelSum += node.left.val; + node.left.val = siblingSum; + queue.add(node.left); + } + if (node.right != null) { + levelSum += node.right.val; + node.right.val = siblingSum; + queue.add(node.right); + } + } + prevLevelSum = levelSum; + } + return root; + } +} From 2dea3e54c58e5a45993f084c75aca141c5ca978f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 24 Oct 2024 07:18:31 -0700 Subject: [PATCH 1577/1640] Update Flip Equivalent Binary Trees.java --- Medium/Flip Equivalent Binary Trees.java | 42 ++++++++++++------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Medium/Flip Equivalent Binary Trees.java b/Medium/Flip Equivalent Binary Trees.java index 7829ff4d..8590505e 100644 --- a/Medium/Flip Equivalent Binary Trees.java +++ b/Medium/Flip Equivalent Binary Trees.java @@ -1,31 +1,31 @@ -i/** +/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public boolean flipEquiv(TreeNode root1, TreeNode root2) { - if (root1 == null && root2 == null) { - return true; + public boolean flipEquiv(TreeNode root1, TreeNode root2) { + if (root1 == null && root2 == null) { + return true; + } + if (root1 == null || root2 == null) { + return false; + } + if (root1.val != root2.val) { + return false; + } + boolean noSwap = flipEquiv(root1.left, root2.left) && flipEquiv(root1.right, root2.right); + boolean swap = flipEquiv(root1.left, root2.right) && flipEquiv(root1.right, root2.left); + return noSwap || swap; } - if (root1 == null || root2 == null) { - return false; - } - if (root1.val != root2.val) { - return false; - } - return ( - ( - flipEquiv(root1.left, root2.left) && flipEquiv(root1.right, root2.right) - ) || - ( - flipEquiv(root1.left, root2.right) && - flipEquiv(root1.right, root2.left) - ) - ); - } } From 07715d08a8f45047ee39fbc6ed05247406a7d8ce Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 25 Oct 2024 07:34:43 -0700 Subject: [PATCH 1578/1640] Update Remove Sub-Folders from the Filesystem.java --- ...emove Sub-Folders from the Filesystem.java | 83 ++++++++++++++----- 1 file changed, 63 insertions(+), 20 deletions(-) diff --git a/Medium/Remove Sub-Folders from the Filesystem.java b/Medium/Remove Sub-Folders from the Filesystem.java index 2d91c97e..62f67bcd 100644 --- a/Medium/Remove Sub-Folders from the Filesystem.java +++ b/Medium/Remove Sub-Folders from the Filesystem.java @@ -1,24 +1,67 @@ class Solution { - public List removeSubfolders(String[] folder) { - Set set = new HashSet<>(); - Arrays.sort(folder, new Comparator(){ - public int compare(String s1, String s2) { - return s1.length() - s2.length(); - } - }); - for (String fl : folder) { - String[] files = fl.split("/"); - StringBuilder sb = new StringBuilder(); - for (int i = 1; i < files.length; i++) { - sb.append("/").append(files[i]); - if (set.contains(sb.toString())) { - break; + public List removeSubfolders(String[] folder) { + TrieNode root = new TrieNode(); + for (String file : folder) { + TrieNode curr = root; + String[] splits = file.split("/"); + for (int i = 1; i < splits.length; i++) { + Optional nextNode = curr.getChild(splits[i]); + if (nextNode.isEmpty()) { + TrieNode newNode = curr.addChild(splits[i]); + curr = newNode; + } else { + curr = nextNode.get(); + } + } + curr.markIsFolder(); + } + List result = new ArrayList<>(); + for (String file : folder) { + TrieNode curr = root; + String[] splits = file.split("/"); + boolean isSubfolder = false; + for (int i = 1; i < splits.length; i++) { + TrieNode nextNode = curr.getChild(splits[i]).get(); + if (nextNode.isFolder() && i != splits.length - 1) { + isSubfolder = true; + break; + } + curr = nextNode; + } + if (!isSubfolder) { + result.add(file); + } + } + return result; + } + + class TrieNode { + private boolean isFolder; + private Map children; + + public TrieNode() { + this.children = new HashMap<>(); + } + + public TrieNode addChild(String childKey) { + TrieNode node = new TrieNode(); + children.put(childKey, node); + return node; + } + + public Optional getChild(String childKey) { + if (!children.containsKey(childKey)) { + return Optional.empty(); + } + return Optional.of(children.get(childKey)); + } + + public void markIsFolder() { + isFolder = true; + } + + public boolean isFolder() { + return isFolder; } - } - if (sb.length() > 0) { - set.add(sb.toString()); - } } - return new ArrayList<>(set); - } } From 65583aed6e8c71a04f047c3bb1e8cc03c0249cf0 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Oct 2024 09:22:03 -0700 Subject: [PATCH 1579/1640] Create Height of Binary Tree After Subtree Removal Queries.java --- ...ry Tree After Subtree Removal Queries.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 Hard/Height of Binary Tree After Subtree Removal Queries.java diff --git a/Hard/Height of Binary Tree After Subtree Removal Queries.java b/Hard/Height of Binary Tree After Subtree Removal Queries.java new file mode 100644 index 00000000..ebd9acbe --- /dev/null +++ b/Hard/Height of Binary Tree After Subtree Removal Queries.java @@ -0,0 +1,48 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public int[] treeQueries(TreeNode root, int[] queries) { + Map result = new HashMap<>(); + Map heightCache = new HashMap<>(); + dfs(root, 0, 0, result, heightCache); + int[] answer = new int[queries.length]; + for (int i = 0; i < queries.length; i++) { + answer[i] = result.get(queries[i]); + } + return answer; + } + + private void dfs(TreeNode node, int depth, int maxDepth, Map result, Map heightCache) { + if (node == null) { + return; + } + result.put(node.val, maxDepth); + dfs(node.left, depth + 1, Math.max(maxDepth, depth + 1 + height(node.right, heightCache)), result, heightCache); + dfs(node.right, depth + 1, Math.max(maxDepth, depth + 1 + height(node.left, heightCache)), result, heightCache); + } + + private int height(TreeNode node, Map heightCache) { + if (node == null) { + return -1; + } + if (heightCache.containsKey(node)) { + return heightCache.get(node); + } + int currHeight = 1 + Math.max(height(node.left, heightCache), height(node.right, heightCache)); + heightCache.put(node, currHeight); + return currHeight; + } +} From 0d68682d23ee31299361af2a5c059f16ac1f224a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Oct 2024 14:32:07 -0700 Subject: [PATCH 1580/1640] Create Find the Original Typed String I.java --- Easy/Find the Original Typed String I.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Find the Original Typed String I.java diff --git a/Easy/Find the Original Typed String I.java b/Easy/Find the Original Typed String I.java new file mode 100644 index 00000000..dd6a5177 --- /dev/null +++ b/Easy/Find the Original Typed String I.java @@ -0,0 +1,17 @@ +class Solution { + public int possibleStringCount(String word) { + int idx = 0; + int result = 1; + while (idx < word.length()) { + int currIdx = idx; + char c = word.charAt(currIdx); + while (currIdx < word.length() && word.charAt(currIdx) == c) { + currIdx++; + } + int segement = currIdx - idx; + result += segement - 1; + idx = currIdx; + } + return result; + } +} From c458cea30a0ff3997b1babb07c871fc154c7eed7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 28 Oct 2024 07:07:44 -0700 Subject: [PATCH 1581/1640] Create Longest Square Streak in an Array.java --- Medium/Longest Square Streak in an Array.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Longest Square Streak in an Array.java diff --git a/Medium/Longest Square Streak in an Array.java b/Medium/Longest Square Streak in an Array.java new file mode 100644 index 00000000..141abdee --- /dev/null +++ b/Medium/Longest Square Streak in an Array.java @@ -0,0 +1,25 @@ +class Solution { + + private static final int LIMIT = 100_000; + + public int longestSquareStreak(int[] nums) { + Set uniqueNums = new HashSet<>(); + for (int num : nums) { + uniqueNums.add(num); + } + int result = 0; + for (int num : nums) { + int currStreak = 0; + long curr = num; + while (uniqueNums.contains((int) curr)) { + currStreak++; + if (curr * curr > LIMIT) { + break; + } + curr *= curr; + } + result = Math.max(result, currStreak); + } + return result < 2 ? -1 : result; + } +} From 65c039985ea998ee26bcce26574385d4146caf26 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 29 Oct 2024 08:02:39 -0700 Subject: [PATCH 1582/1640] Create Maximum Number of Moves in a Grid.java --- Medium/Maximum Number of Moves in a Grid.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Medium/Maximum Number of Moves in a Grid.java diff --git a/Medium/Maximum Number of Moves in a Grid.java b/Medium/Maximum Number of Moves in a Grid.java new file mode 100644 index 00000000..014425f8 --- /dev/null +++ b/Medium/Maximum Number of Moves in a Grid.java @@ -0,0 +1,40 @@ +class Solution { + + private static final int[] DIRS = {-1, 0, 1}; + + public int maxMoves(int[][] grid) { + int rows = grid.length; + int cols = grid[0].length; + Queue queue = new LinkedList<>(); + boolean[][] visited = new boolean[rows][cols]; + for (int i = 0; i < rows; i++) { + visited[i][0] = true; + queue.add(new int[]{i, 0, 0}); + } + int result = 0; + while (!queue.isEmpty()) { + int size = queue.size(); + while (size-- > 0) { + int[] removed = queue.remove(); + int row = removed[0]; + int col = removed[1]; + int count = removed[2]; + result = Math.max(result, count); + for (int dir : DIRS) { + int nextRow = row + dir; + int nextCol = col + 1; + if (nextRow >= 0 && + nextCol >= 0 && + nextRow < rows && + nextCol < cols && + !visited[nextRow][nextCol] && + grid[row][col] < grid[nextRow][nextCol]) { + visited[nextRow][nextCol] = true; + queue.add(new int[]{nextRow, nextCol, count + 1}); + } + } + } + } + return result; + } +} From 2580a677b3a9c0b6cda1a0f7103c57020472cc3a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 30 Oct 2024 06:47:27 -0700 Subject: [PATCH 1583/1640] Create Minimum Number of Removals to Make Mountain Array.java --- ...er of Removals to Make Mountain Array.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Hard/Minimum Number of Removals to Make Mountain Array.java diff --git a/Hard/Minimum Number of Removals to Make Mountain Array.java b/Hard/Minimum Number of Removals to Make Mountain Array.java new file mode 100644 index 00000000..b74f6feb --- /dev/null +++ b/Hard/Minimum Number of Removals to Make Mountain Array.java @@ -0,0 +1,30 @@ +class Solution { + public int minimumMountainRemovals(int[] nums) { + int n = nums.length; + int[] leftIncreasingLength = new int[n]; + int[] rightDecreasingLength = new int[n]; + Arrays.fill(leftIncreasingLength, 1); + Arrays.fill(rightDecreasingLength, 1); + for (int i = 0; i < n; i++) { + for (int j = i - 1; j >= 0; j--) { + if (nums[i] > nums[j]) { + leftIncreasingLength[i] = Math.max(leftIncreasingLength[i], leftIncreasingLength[j] + 1); + } + } + } + for (int i = n - 1; i >= 0; i--) { + for (int j = i + 1; j < n; j++) { + if (nums[i] > nums[j]) { + rightDecreasingLength[i] = Math.max(rightDecreasingLength[i], rightDecreasingLength[j] + 1); + } + } + } + int minRemovals = Integer.MAX_VALUE; + for (int i = 0; i < n; i++) { + if (leftIncreasingLength[i] > 1 && rightDecreasingLength[i] > 1) { + minRemovals = Math.min(minRemovals, n - leftIncreasingLength[i] - rightDecreasingLength[i] + 1); + } + } + return minRemovals; + } +} From aafb2effbd9500cfb5e24ceae7986147ed70d6ee Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 4 Nov 2024 06:35:54 -0800 Subject: [PATCH 1584/1640] Create String Compression III.java --- Medium/String Compression III.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/String Compression III.java diff --git a/Medium/String Compression III.java b/Medium/String Compression III.java new file mode 100644 index 00000000..03a6737c --- /dev/null +++ b/Medium/String Compression III.java @@ -0,0 +1,16 @@ +class Solution { + public String compressedString(String word) { + StringBuilder sb = new StringBuilder(); + int idx = 0; + while (idx < word.length()) { + char c = word.charAt(idx); + int count = 0; + while (idx < word.length() && word.charAt(idx) == c && count < 9) { + idx++; + count++; + } + sb.append(count).append(c); + } + return sb.toString(); + } +} From 1c1f3cf1277b63af4b230b6dffd3a8f61f7f1497 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 6 Nov 2024 07:25:20 -0800 Subject: [PATCH 1585/1640] Create Number of Same-End Substrings.java --- Medium/Number of Same-End Substrings.java | 28 +++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/Number of Same-End Substrings.java diff --git a/Medium/Number of Same-End Substrings.java b/Medium/Number of Same-End Substrings.java new file mode 100644 index 00000000..4003737d --- /dev/null +++ b/Medium/Number of Same-End Substrings.java @@ -0,0 +1,28 @@ +class Solution { + public int[] sameEndSubstringCount(String s, int[][] queries) { + int n = s.length(); + int[][] prefixSum = new int[26][n]; + for (int i = 0; i < n; i++) { + prefixSum[s.charAt(i) - 'a'][i]++; + } + for (int i = 0; i < 26; i++) { + for (int j = 1; j < n; j++) { + prefixSum[i][j] += prefixSum[i][j - 1]; + } + } + int[] result = new int[queries.length]; + for (int i = 0; i < queries.length; i++) { + int left = queries[i][0]; + int right = queries[i][1]; + int count = 0; + for (int c = 0; c < 26; c++) { + int leftFreq = left == 0 ? 0 : prefixSum[c][left - 1]; + int rightFreq = prefixSum[c][right]; + int freqInRange = rightFreq - leftFreq; + count += (freqInRange * (freqInRange + 1)) / 2; + } + result[i] = count; + } + return result; + } +} From 5a3795b8956bbe92bbdd5462beae0b5ef2c6abdd Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 7 Nov 2024 08:12:32 -0800 Subject: [PATCH 1586/1640] Create Largest Combination With Bitwise AND Greater Than Zero.java --- ...tion With Bitwise AND Greater Than Zero.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Largest Combination With Bitwise AND Greater Than Zero.java diff --git a/Medium/Largest Combination With Bitwise AND Greater Than Zero.java b/Medium/Largest Combination With Bitwise AND Greater Than Zero.java new file mode 100644 index 00000000..1399f1bb --- /dev/null +++ b/Medium/Largest Combination With Bitwise AND Greater Than Zero.java @@ -0,0 +1,17 @@ +class Solution { + public int largestCombination(int[] candidates) { + int[] bitCount = new int[24]; + for (int i = 0; i < 24; i++) { + for (int candidate : candidates) { + if ((candidate & (1 << i)) != 0) { + bitCount[i]++; + } + } + } + int result = 0; + for (int count : bitCount) { + result = Math.max(count, result); + } + return result; + } +} From f1e4d1887ee89e1bcdaf4cb0c6f343bd5c7b6ad1 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 14 Nov 2024 06:35:00 -0800 Subject: [PATCH 1587/1640] Create Minimized Maximum of Products Distributed to Any Store.java --- ... of Products Distributed to Any Store.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Medium/Minimized Maximum of Products Distributed to Any Store.java diff --git a/Medium/Minimized Maximum of Products Distributed to Any Store.java b/Medium/Minimized Maximum of Products Distributed to Any Store.java new file mode 100644 index 00000000..70a46016 --- /dev/null +++ b/Medium/Minimized Maximum of Products Distributed to Any Store.java @@ -0,0 +1,36 @@ +class Solution { + public int minimizedMaximum(int n, int[] quantities) { + int left = 0; + int right = 0; + for (int quantity : quantities) { + right = Math.max(right, quantity); + } + while (left < right) { + int mid = (left + right) / 2; + if (isPossible(n, mid, quantities)) { + right = mid; + } else { + left = mid + 1; + } + } + return left; + } + + private boolean isPossible(int n, int min, int[] quantities) { + int idx = 0; + int remaining = quantities[idx]; + for (int i = 0; i < n; i++) { + if (remaining <= min) { + idx++; + if (idx == quantities.length) { + return true; + } else { + remaining = quantities[idx]; + } + } else { + remaining -= min; + } + } + return false; + } +} From ceb871f66e65b8cc2655d9891c555781347d9c1a Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 15 Nov 2024 08:05:15 -0800 Subject: [PATCH 1588/1640] Create Shortest Subarray to be Removed to Make Array Sorted.java --- ...ray to be Removed to Make Array Sorted.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Medium/Shortest Subarray to be Removed to Make Array Sorted.java diff --git a/Medium/Shortest Subarray to be Removed to Make Array Sorted.java b/Medium/Shortest Subarray to be Removed to Make Array Sorted.java new file mode 100644 index 00000000..4ddb25e2 --- /dev/null +++ b/Medium/Shortest Subarray to be Removed to Make Array Sorted.java @@ -0,0 +1,18 @@ +class Solution { + public int findLengthOfShortestSubarray(int[] arr) { + int right = arr.length - 1; + while (right > 0 && arr[right] >= arr[right - 1]) { + right--; + } + int result = right; + int left = 0; + while (left < right && (left == 0 || arr[left - 1] <= arr[left])) { + while (right < arr.length && arr[left] > arr[right]) { + right++; + } + result = Math.min(result, right - left - 1); + left++; + } + return result; + } +} From 5eaf0134b8d8b7eafb7abae9f60e826bcb98b41f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 17 Nov 2024 06:52:36 -0800 Subject: [PATCH 1589/1640] Create Adjacent Increasing Subarrays Detection I.java --- ...cent Increasing Subarrays Detection I.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Adjacent Increasing Subarrays Detection I.java diff --git a/Easy/Adjacent Increasing Subarrays Detection I.java b/Easy/Adjacent Increasing Subarrays Detection I.java new file mode 100644 index 00000000..5be82de7 --- /dev/null +++ b/Easy/Adjacent Increasing Subarrays Detection I.java @@ -0,0 +1,20 @@ +class Solution { + public boolean hasIncreasingSubarrays(List nums, int k) { + int n = nums.size(); + for (int i = 0; i <= n - 2 * k; i++) { + if (isStrictlyIncreasing(nums, i, k) && isStrictlyIncreasing(nums, i + k, k)) { + return true; + } + } + return false; + } + + private boolean isStrictlyIncreasing(List nums, int idx, int k) { + for (int start = idx; start < idx + k - 1; start++) { + if (nums.get(start) >= nums.get(start + 1)) { + return false; + } + } + return true; + } +} From 8738cee338223b3413232342be126e90ac9cf9e2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 20 Nov 2024 08:28:53 -0800 Subject: [PATCH 1590/1640] Create Take K of Each Character From Left and Right.java --- ...of Each Character From Left and Right.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 Medium/Take K of Each Character From Left and Right.java diff --git a/Medium/Take K of Each Character From Left and Right.java b/Medium/Take K of Each Character From Left and Right.java new file mode 100644 index 00000000..4b878ce0 --- /dev/null +++ b/Medium/Take K of Each Character From Left and Right.java @@ -0,0 +1,27 @@ +class Solution { + public int takeCharacters(String s, int k) { + int[] counter = new int[3]; + int n = s.length(); + for (char c : s.toCharArray()) { + counter[c - 'a']++; + } + for (int i = 0; i < 3; i++) { + if (counter[i] < k) { + return -1; + } + } + int[] window = new int[3]; + int left = 0; + int maxWindow = 0; + for (int right = 0; right < n; right++) { + window[s.charAt(right) - 'a']++; + while (left <= right && + (counter[0] - window[0] < k || counter[1] - window[1] < k || counter[2] - window[2] < k)) { + window[s.charAt(left) - 'a']--; + left++; + } + maxWindow = Math.max(maxWindow, right - left + 1); + } + return n - maxWindow; + } +} From 199a76c4f8b272a7c632841e36959c9aa1c8b46c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 22 Dec 2024 05:48:36 +0530 Subject: [PATCH 1591/1640] Create Count Subarrays of Length Three With a Condition.java --- ...nt Subarrays of Length Three With a Condition.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Easy/Count Subarrays of Length Three With a Condition.java diff --git a/Easy/Count Subarrays of Length Three With a Condition.java b/Easy/Count Subarrays of Length Three With a Condition.java new file mode 100644 index 00000000..4694fb65 --- /dev/null +++ b/Easy/Count Subarrays of Length Three With a Condition.java @@ -0,0 +1,11 @@ +class Solution { + public int countSubarrays(int[] nums) { + int count = 0; + for (int i = 0; i < nums.length - 2; i++) { + if (2 * (nums[i] + nums[i + 2]) == nums[i + 1]) { + count++; + } + } + return count; + } +} From 6735f7a0d2bb149726984a53fb48766c43e7e243 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 23 Dec 2024 06:41:01 +0530 Subject: [PATCH 1592/1640] Create Minimum Number of Operations to Make Elements in Array Distinct.java --- ...ons to Make Elements in Array Distinct.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Minimum Number of Operations to Make Elements in Array Distinct.java diff --git a/Easy/Minimum Number of Operations to Make Elements in Array Distinct.java b/Easy/Minimum Number of Operations to Make Elements in Array Distinct.java new file mode 100644 index 00000000..a61239e7 --- /dev/null +++ b/Easy/Minimum Number of Operations to Make Elements in Array Distinct.java @@ -0,0 +1,18 @@ +class Solution { + public int minimumOperations(int[] nums) { + Set set = new HashSet<>(); + int index = -1; + for (int i = nums.length - 1; i >= 0; i--) { + if (set.contains(nums[i])) { + index = i; + break; + } + set.add(nums[i]); + } + if (index == -1) { + return 0; + } + index++; + return index % 3 == 0 ? index / 3 : (index / 3) + 1; + } +} From c8ba8359855d7be2aa9f966f0a9d9a3ae3435dff Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 26 Dec 2024 18:27:19 +0530 Subject: [PATCH 1593/1640] Create Button with Longest Push Time.java --- Easy/Button with Longest Push Time.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Easy/Button with Longest Push Time.java diff --git a/Easy/Button with Longest Push Time.java b/Easy/Button with Longest Push Time.java new file mode 100644 index 00000000..650bb1e4 --- /dev/null +++ b/Easy/Button with Longest Push Time.java @@ -0,0 +1,18 @@ +class Solution { + public int buttonWithLongestTime(int[][] events) { + int maxTime = 0; + int resultIdx = 0; + int prevTime = 0; + for (int i = 0; i < events.length; i++) { + int timePressed = events[i][1] - prevTime; + if (timePressed > maxTime) { + maxTime = timePressed; + resultIdx = events[i][0]; + } else if (timePressed == maxTime && resultIdx > events[i][0]) { + resultIdx = events[i][0]; + } + prevTime = events[i][1]; + } + return resultIdx; + } +} From 9d4036992d100703cb34fecc1183c457bc4d44af Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 12 Jan 2025 12:23:37 -0800 Subject: [PATCH 1594/1640] Create Check if a Parentheses String Can Be Valid.java --- ... if a Parentheses String Can Be Valid.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Medium/Check if a Parentheses String Can Be Valid.java diff --git a/Medium/Check if a Parentheses String Can Be Valid.java b/Medium/Check if a Parentheses String Can Be Valid.java new file mode 100644 index 00000000..c240176d --- /dev/null +++ b/Medium/Check if a Parentheses String Can Be Valid.java @@ -0,0 +1,30 @@ +class Solution { + public boolean canBeValid(String s, String locked) { + if (s.length() % 2 != 0) { + return false; + } + Stack openBrackets = new Stack<>(); + Stack unlocked = new Stack<>(); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + if (locked.charAt(i) == '0') { + unlocked.push(i); + } else if (c == '(') { + openBrackets.push(i); + } else if (c == ')') { + if (!openBrackets.isEmpty()) { + openBrackets.pop(); + } else if (!unlocked.isEmpty()) { + unlocked.pop(); + } else { + return false; + } + } + } + while (!openBrackets.isEmpty() && !unlocked.isEmpty() && openBrackets.peek() < unlocked.peek()) { + openBrackets.pop(); + unlocked.pop(); + } + return openBrackets.isEmpty(); + } +} From 0298b447e75aa7ceedb837d55c3790ac0f7073b8 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 14 Jan 2025 06:41:46 -0800 Subject: [PATCH 1595/1640] Update Find the Prefix Common Array of Two Arrays.java --- ...the Prefix Common Array of Two Arrays.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/Medium/Find the Prefix Common Array of Two Arrays.java b/Medium/Find the Prefix Common Array of Two Arrays.java index bd747227..e6312a17 100644 --- a/Medium/Find the Prefix Common Array of Two Arrays.java +++ b/Medium/Find the Prefix Common Array of Two Arrays.java @@ -1,14 +1,17 @@ class Solution { public int[] findThePrefixCommonArray(int[] A, int[] B) { - Map map = new HashMap<>(); int count = 0; - int[] result = new int[A.length]; - for (int i = 0; i < A.length; i++) { - map.put(A[i], map.getOrDefault(A[i], 0) + 1); - map.put(B[i], map.getOrDefault(B[i], 0) + 1); - count += map.get(A[i]) == 2 ? 1 : 0; - if (A[i] != B[i]) { - count += map.get(B[i]) == 2 ? 1 : 0; + int n = A.length; + int[] result = new int[n]; + int[] frequency = new int[n + 1]; + for (int i = 0; i < n; i++) { + frequency[A[i]]++; + if (frequency[A[i]] == 2) { + count++; + } + frequency[B[i]]++; + if (frequency[B[i]] == 2) { + count++; } result[i] = count; } From a03b2709db74206a8efecbc2f878d87b808bfc00 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 15 Jan 2025 07:12:59 -0800 Subject: [PATCH 1596/1640] Create Minimize XOR.java --- Medium/Minimize XOR.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Minimize XOR.java diff --git a/Medium/Minimize XOR.java b/Medium/Minimize XOR.java new file mode 100644 index 00000000..cc5e87a3 --- /dev/null +++ b/Medium/Minimize XOR.java @@ -0,0 +1,24 @@ +class Solution { + public int minimizeXor(int num1, int num2) { + int result = 0; + int targetSetBitCount = Integer.bitCount(num2); + int setBitCount = 0; + int currBit = 31; + while (setBitCount < targetSetBitCount) { + if (isSet(num1, currBit) || (targetSetBitCount - setBitCount > currBit)) { + result = setBit(result, currBit); + setBitCount++; + } + currBit--; + } + return result; + } + + private boolean isSet(int x, int bit) { + return (x & (1 << bit)) != 0; + } + + private int setBit(int x, int bit) { + return x | (1 << bit); + } +} From fbb599922e136af4abfa4180c747b50e57fc1060 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 15 Jan 2025 17:37:21 -0800 Subject: [PATCH 1597/1640] Create Bitwise XOR of All Pairings.java --- Medium/Bitwise XOR of All Pairings.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Medium/Bitwise XOR of All Pairings.java diff --git a/Medium/Bitwise XOR of All Pairings.java b/Medium/Bitwise XOR of All Pairings.java new file mode 100644 index 00000000..88dfbd41 --- /dev/null +++ b/Medium/Bitwise XOR of All Pairings.java @@ -0,0 +1,20 @@ +class Solution { + public int xorAllNums(int[] nums1, int[] nums2) { + int m = nums1.length; + int n = nums2.length; + Map freq = new HashMap<>(); + for (int num : nums1) { + freq.put(num, freq.getOrDefault(num, 0) + n); + } + for (int num : nums2) { + freq.put(num, freq.getOrDefault(num, 0) + m); + } + int result = 0; + for (Integer key : freq.keySet()) { + if (freq.get(key) % 2 == 1) { + result ^= key; + } + } + return result; + } +} From e8baf509b7624bb7a17be44df8afd34511d71f4e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 16 Jan 2025 17:13:07 -0800 Subject: [PATCH 1598/1640] Create Neighboring Bitwise XOR.java --- Medium/Neighboring Bitwise XOR.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Neighboring Bitwise XOR.java diff --git a/Medium/Neighboring Bitwise XOR.java b/Medium/Neighboring Bitwise XOR.java new file mode 100644 index 00000000..6e46025c --- /dev/null +++ b/Medium/Neighboring Bitwise XOR.java @@ -0,0 +1,16 @@ +class Solution { + public boolean doesValidArrayExist(int[] derived) { + int n = derived.length; + int[] original = new int[n + 1]; + for (int i = 0; i < derived.length; i++) { + original[i + 1] = derived[i] ^ original[i]; + } + boolean checkForZero = (original[0] == original[n]); + original[0] = 1; + for (int i = 0; i < n; i++) { + original[i + 1] = derived[i] ^ original[i]; + } + boolean checkForOne = (original[0] == original[n]); + return checkForZero || checkForOne; + } +} From 72a77c98c7d75ee9a5de805aa885158e8478f12e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 20 Jan 2025 09:55:45 -0800 Subject: [PATCH 1599/1640] Create Sum of Variable Length Subarrays.java --- Easy/Sum of Variable Length Subarrays.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Sum of Variable Length Subarrays.java diff --git a/Easy/Sum of Variable Length Subarrays.java b/Easy/Sum of Variable Length Subarrays.java new file mode 100644 index 00000000..5dc7d585 --- /dev/null +++ b/Easy/Sum of Variable Length Subarrays.java @@ -0,0 +1,19 @@ +class Solution { + public int subarraySum(int[] nums) { + int n = nums.length; + int[] prefixSum = new int[n]; + int sum = 0; + int result = 0; + for (int i = 0; i < n; i++) { + sum += nums[i]; + prefixSum[i] = sum; + int start = Math.max(0, i - nums[i]); + int subarraySum = prefixSum[i]; + if (start > 0) { + subarraySum -= prefixSum[start - 1]; + } + result += subarraySum; + } + return result; + } +} From d6786b2ff3c8a07e513860428dd3aabbfc08cf20 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 26 Jan 2025 12:00:18 -0800 Subject: [PATCH 1600/1640] Create Count Partitions with Even Sum Difference.java --- ...unt Partitions with Even Sum Difference.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Count Partitions with Even Sum Difference.java diff --git a/Easy/Count Partitions with Even Sum Difference.java b/Easy/Count Partitions with Even Sum Difference.java new file mode 100644 index 00000000..0390a5a1 --- /dev/null +++ b/Easy/Count Partitions with Even Sum Difference.java @@ -0,0 +1,17 @@ +class Solution { + public int countPartitions(int[] nums) { + int n = nums.length; + int[] prefixSum = new int[n]; + for (int i = 0; i < n; i++) { + prefixSum[i] = nums[i]; + prefixSum[i] += i == 0 ? 0 : prefixSum[i - 1]; + } + int partitions = 0; + for (int i = 0; i < n - 1; i++) { + int leftSum = prefixSum[i]; + int rightSum = prefixSum[n - 1] - prefixSum[i]; + partitions += (rightSum - leftSum) % 2 == 0 ? 1 : 0; + } + return partitions; + } +} From 4c9aa9825459d2daa31037fc023d74417964b321 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 31 Jan 2025 08:19:14 -0800 Subject: [PATCH 1601/1640] Create Count Mentions Per User.java --- Medium/Count Mentions Per User.java | 61 +++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 Medium/Count Mentions Per User.java diff --git a/Medium/Count Mentions Per User.java b/Medium/Count Mentions Per User.java new file mode 100644 index 00000000..7fa42668 --- /dev/null +++ b/Medium/Count Mentions Per User.java @@ -0,0 +1,61 @@ +class Solution { + public int[] countMentions(int numberOfUsers, List> eventLog) { + List events = eventLog.stream() + .map(Event::buildEvent) + .sorted() + .collect(Collectors.toList()); + Map offlineUsers = new HashMap<>(); + int[] mentions = new int[numberOfUsers]; + for (Event event : events) { + if (event.message().equals("OFFLINE")) { + offlineUsers.put(Integer.parseInt(event.mentionString()), event.timestamp()); + } else { + int timestamp = event.timestamp(); + List onlineUsers = offlineUsers.entrySet() + .stream() + .filter(t -> timestamp - t.getValue() >= 60) + .map(Map.Entry::getKey) + .collect(Collectors.toList()); + onlineUsers.forEach(offlineUsers::remove); + String mentionString = event.mentionString(); + if (mentionString.equals("ALL")) { + for (int i = 0; i < numberOfUsers; i++) { + mentions[i]++; + } + } else if (mentionString.equals("HERE")) { + for (int i = 0; i < numberOfUsers; i++) { + if (!offlineUsers.containsKey(i)) { + mentions[i]++; + } + } + } else { + String[] usersMentioned = mentionString.split(" "); + for (String user : usersMentioned) { + int userId = Integer.parseInt(user.substring(2)); + mentions[userId]++; + } + } + } + } + return mentions; + } + + private record Event(String message, int timestamp, String mentionString) implements Comparable { + + public static Event buildEvent(List event) { + String message = event.get(0); + int timestamp = Integer.parseInt(event.get(1)); + String mentionString = event.get(2); + return new Event(message, timestamp, mentionString); + } + + @Override + public int compareTo(Event o) { + int c = this.timestamp - o.timestamp; + if (c != 0) { + return c; + } + return o.message().compareTo(this.message()); + } + } +} From d8afeb208d59a04ec1360c090fa2090b6bc5ceb3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 2 Feb 2025 10:50:47 -0800 Subject: [PATCH 1602/1640] Create Maximum Difference Between Even and Odd Frequency I.java --- ...ence Between Even and Odd Frequency I.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Easy/Maximum Difference Between Even and Odd Frequency I.java diff --git a/Easy/Maximum Difference Between Even and Odd Frequency I.java b/Easy/Maximum Difference Between Even and Odd Frequency I.java new file mode 100644 index 00000000..ec68c06f --- /dev/null +++ b/Easy/Maximum Difference Between Even and Odd Frequency I.java @@ -0,0 +1,19 @@ +class Solution { + public int maxDifference(String s) { + Map map = new HashMap<>(); + for (char c : s.toCharArray()) { + map.put(c, map.getOrDefault(c, 0) + 1); + } + int maxOdd = Integer.MIN_VALUE; + int minEven = Integer.MAX_VALUE; + for (Character key : map.keySet()) { + Integer value = map.get(key); + if (value % 2 == 0) { + minEven = Math.min(minEven, value); + } else { + maxOdd = Math.max(maxOdd, value); + } + } + return maxOdd - minEven; + } +} From 540318b7d9293dc1da5c063a50b6f05cd6730edc Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 3 Feb 2025 09:25:47 -0800 Subject: [PATCH 1603/1640] Create Longest Strictly Increasing or Strictly Decreasing Subarray.java --- ...asing or Strictly Decreasing Subarray.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 Easy/Longest Strictly Increasing or Strictly Decreasing Subarray.java diff --git a/Easy/Longest Strictly Increasing or Strictly Decreasing Subarray.java b/Easy/Longest Strictly Increasing or Strictly Decreasing Subarray.java new file mode 100644 index 00000000..c1ed1c36 --- /dev/null +++ b/Easy/Longest Strictly Increasing or Strictly Decreasing Subarray.java @@ -0,0 +1,22 @@ +class Solution { + public int longestMonotonicSubarray(int[] nums) { + int max = 1; + int idx = 0; + int n = nums.length; + while (idx < n) { + if (idx == n - 1 || nums[idx + 1] == nums[idx]) { + idx++; + continue; + } + boolean increase = nums[idx + 1] > nums[idx]; + int start = idx; + while (idx + 1 < n && ( + (increase && nums[idx + 1] > nums[idx]) || + (!increase && nums[idx + 1] < nums[idx]))) { + idx++; + } + max = Math.max(max, idx - start + 1); + } + return max; + } +} From c259c7ab846d08dcc0fc9d3cd4d07ac1c901a2e6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 3 Feb 2025 17:35:11 -0800 Subject: [PATCH 1604/1640] Update Maximum Ascending Subarray Sum.java --- Easy/Maximum Ascending Subarray Sum.java | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/Easy/Maximum Ascending Subarray Sum.java b/Easy/Maximum Ascending Subarray Sum.java index fb436414..fd64c04c 100644 --- a/Easy/Maximum Ascending Subarray Sum.java +++ b/Easy/Maximum Ascending Subarray Sum.java @@ -1,14 +1,15 @@ class Solution { - public int maxAscendingSum(int[] nums) { - int maximumSum = 0; - int idx = 0; - while (idx < nums.length) { - int currSum = nums[idx++]; - while (idx < nums.length && nums[idx] > nums[idx - 1]) { - currSum += nums[idx++]; - } - maximumSum = Math.max(maximumSum, currSum); + public int maxAscendingSum(int[] nums) { + int maxSum = 0; + int idx = 0; + int n = nums.length; + while (idx < n) { + int currSum = nums[idx++]; + while (idx < n && nums[idx] > nums[idx - 1]) { + currSum += nums[idx++]; + } + maxSum = Math.max(maxSum, currSum); + } + return maxSum; } - return maximumSum; - } } From d9a05d959355c1e27adb0d404872b4d3bafe5763 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 5 Feb 2025 07:54:25 -0800 Subject: [PATCH 1605/1640] Update Check if One String Swap Can Make Strings Equal.java --- ...ne String Swap Can Make Strings Equal.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/Easy/Check if One String Swap Can Make Strings Equal.java b/Easy/Check if One String Swap Can Make Strings Equal.java index 3f26dac9..fca6fc9d 100644 --- a/Easy/Check if One String Swap Can Make Strings Equal.java +++ b/Easy/Check if One String Swap Can Make Strings Equal.java @@ -1,16 +1,21 @@ class Solution { - public boolean areAlmostEqual(String s1, String s2) { - int mismatchIdx = -1; - for (int i = 0; i < s1.length(); i++) { - if (s1.charAt(i) != s2.charAt(i)) { - if (mismatchIdx != -1) { - return s1.charAt(mismatchIdx) == s2.charAt(i) && - s1.charAt(i) == s2.charAt(mismatchIdx) && - s1.substring(i + 1).equals(s2.substring(i + 1)); + public boolean areAlmostEqual(String s1, String s2) { + int swapIdx = -1; + boolean swapped = false; + for (int i = 0; i < s1.length(); i++) { + if (s1.charAt(i) != s2.charAt(i)) { + if (swapped) { + return false; + } + if (swapIdx != -1) { + if (!(s1.charAt(swapIdx) == s2.charAt(i) && s1.charAt(i) == s2.charAt(swapIdx))) { + return false; + } + swapped = true; + } + swapIdx = i; + } } - mismatchIdx = i; - } + return swapIdx == -1 || (swapIdx != -1 && swapped); } - return mismatchIdx == -1; - } } From 70d1c410af8e9fb0177e1494d24adffca1d7f7cb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 7 Feb 2025 06:58:14 -0800 Subject: [PATCH 1606/1640] Create Find the Number of Distinct Colors Among the Balls.java --- ...er of Distinct Colors Among the Balls.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 Medium/Find the Number of Distinct Colors Among the Balls.java diff --git a/Medium/Find the Number of Distinct Colors Among the Balls.java b/Medium/Find the Number of Distinct Colors Among the Balls.java new file mode 100644 index 00000000..428e5406 --- /dev/null +++ b/Medium/Find the Number of Distinct Colors Among the Balls.java @@ -0,0 +1,23 @@ +class Solution { + public int[] queryResults(int limit, int[][] queries) { + Map ballToColor = new HashMap<>(); + Map colorToBallCount = new HashMap<>(); + int n = queries.length; + int[] result = new int[n]; + for (int i = 0; i < queries.length; i++) { + int ball = queries[i][0]; + int color = queries[i][1]; + if (ballToColor.containsKey(ball)) { + int prevColor = ballToColor.get(ball); + colorToBallCount.put(prevColor, colorToBallCount.get(prevColor) - 1); + if (colorToBallCount.get(prevColor) == 0) { + colorToBallCount.remove(prevColor); + } + } + ballToColor.put(ball, color); + colorToBallCount.put(color, colorToBallCount.getOrDefault(color, 0) + 1); + result[i] = colorToBallCount.size(); + } + return result; + } +} From aa8154baf0afb55c54055d44e5af4b7df0455f82 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 8 Feb 2025 11:35:50 -0800 Subject: [PATCH 1607/1640] Create Design a Number Container System.java --- Medium/Design a Number Container System.java | 34 ++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 Medium/Design a Number Container System.java diff --git a/Medium/Design a Number Container System.java b/Medium/Design a Number Container System.java new file mode 100644 index 00000000..26a3e843 --- /dev/null +++ b/Medium/Design a Number Container System.java @@ -0,0 +1,34 @@ +class NumberContainers { + + private final Map> numberToIndex; + private final Map indexToNumber; + + public NumberContainers() { + this.numberToIndex = new HashMap<>(); + this.indexToNumber = new HashMap<>(); + } + + public void change(int index, int number) { + if (indexToNumber.containsKey(index)) { + int prevNumber = indexToNumber.get(index); + numberToIndex.get(prevNumber).remove(index); + } + indexToNumber.put(index, number); + numberToIndex.computeIfAbsent(number, k -> new TreeSet<>()).add(index); + } + + public int find(int number) { + TreeSet indices = numberToIndex.getOrDefault(number, new TreeSet<>()); + if (indices.isEmpty()) { + return -1; + } + return indices.first(); + } +} + +/** + * Your NumberContainers object will be instantiated and called as such: + * NumberContainers obj = new NumberContainers(); + * obj.change(index,number); + * int param_2 = obj.find(number); + */ From 583c210c39e1ecb62cde8460bcd55f23f2123f66 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 11 Feb 2025 07:07:35 -0800 Subject: [PATCH 1608/1640] Update Remove All Occurrences of a Substring.java --- ...Remove All Occurrences of a Substring.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/Medium/Remove All Occurrences of a Substring.java b/Medium/Remove All Occurrences of a Substring.java index 08fa1f78..e46ad3f2 100644 --- a/Medium/Remove All Occurrences of a Substring.java +++ b/Medium/Remove All Occurrences of a Substring.java @@ -1,12 +1,32 @@ class Solution { - public String removeOccurrences(String s, String part) { - while (true) { - int idx = s.indexOf(part); - if (idx == -1) { - break; - } - s = s.substring(0, idx) + s.substring(idx + part.length()); + public String removeOccurrences(String s, String part) { + Stack stack = new Stack<>(); + int n = s.length(); + int partLength = part.length(); + for (int i = 0; i < n; i++) { + stack.push(s.charAt(i)); + if (stack.size() >= partLength && check(stack, part, partLength)) { + for (int j = 0; j < partLength; j++) { + stack.pop(); + } + } + } + StringBuilder sb = new StringBuilder(); + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.reverse().toString(); + } + + private boolean check(Stack stack, String part, int partLength) { + Stack temp = new Stack<>(); + temp.addAll(stack); + for (int i = partLength - 1; i >= 0; i--) { + if (temp.isEmpty() || temp.peek() != part.charAt(i)) { + return false; + } + temp.pop(); + } + return true; } - return s; - } } From 2daac9d705fcc126adceb388263b9c526b9961c3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 11 Feb 2025 17:29:01 -0800 Subject: [PATCH 1609/1640] Update Max Sum of a Pair With Equal Sum of Digits.java --- ...um of a Pair With Equal Sum of Digits.java | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/Medium/Max Sum of a Pair With Equal Sum of Digits.java b/Medium/Max Sum of a Pair With Equal Sum of Digits.java index 597e0658..1d8d89ae 100644 --- a/Medium/Max Sum of a Pair With Equal Sum of Digits.java +++ b/Medium/Max Sum of a Pair With Equal Sum of Digits.java @@ -1,25 +1,25 @@ class Solution { - public int maximumSum(int[] nums) { - int maxSum = -1; - Map map = new HashMap<>(); - for (int num : nums) { - int digitSum = getDigitSum(num); - if (map.containsKey(digitSum)) { - maxSum = Math.max(maxSum, map.get(digitSum) + num); - map.put(digitSum, Math.max(map.get(digitSum), num)); - } else { - map.put(digitSum, num); - } + public int maximumSum(int[] nums) { + Map map = new HashMap<>(); + int maxSum = -1; + for (int num : nums) { + int digitSum = calculateDigitSum(num); + if (map.containsKey(digitSum)) { + maxSum = Math.max(maxSum, map.get(digitSum) + num); + map.put(digitSum, Math.max(map.get(digitSum), num)); + } else { + map.put(digitSum, num); + } + } + return maxSum; } - return maxSum; - } - - private int getDigitSum(int num) { - int sum = 0; - while (num > 0) { - sum += num % 10; - num /= 10; + + private int calculateDigitSum(int num) { + int sum = 0; + while (num > 0) { + sum += num % 10; + num /= 10; + } + return sum; } - return sum; - } } From 30f21710052e766d53c921aceb97d2b09d79e4a4 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 12 Feb 2025 17:40:13 -0800 Subject: [PATCH 1610/1640] Create Minimum Operations to Exceed Threshold Value II.java --- ...Operations to Exceed Threshold Value II.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Medium/Minimum Operations to Exceed Threshold Value II.java diff --git a/Medium/Minimum Operations to Exceed Threshold Value II.java b/Medium/Minimum Operations to Exceed Threshold Value II.java new file mode 100644 index 00000000..9a6c2b09 --- /dev/null +++ b/Medium/Minimum Operations to Exceed Threshold Value II.java @@ -0,0 +1,17 @@ +class Solution { + public int minOperations(int[] nums, int k) { + PriorityQueue pq = new PriorityQueue<>(); + for (int num : nums) { + pq.add((long) num); + } + int operations = 0; + while (pq.peek() < k) { + long smallest = pq.poll(); + long secondSmallest = pq.poll(); + long newValue = Math.min(smallest, secondSmallest) * 2 + Math.max(smallest, secondSmallest); + pq.add(newValue); + operations++; + } + return operations; + } +} From 04175b684ba89a52fedb9b8a5ccd9989c2a21c95 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 19 Feb 2025 07:32:27 -0800 Subject: [PATCH 1611/1640] Create Construct Smallest Number From DI String.java --- .../Construct Smallest Number From DI String.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 Medium/Construct Smallest Number From DI String.java diff --git a/Medium/Construct Smallest Number From DI String.java b/Medium/Construct Smallest Number From DI String.java new file mode 100644 index 00000000..64e39262 --- /dev/null +++ b/Medium/Construct Smallest Number From DI String.java @@ -0,0 +1,15 @@ +class Solution { + public String smallestNumber(String pattern) { + StringBuilder result = new StringBuilder(); + Stack stack = new Stack<>(); + for (int i = 0; i <= pattern.length(); i++) { + stack.push(i + 1); + if (i == pattern.length() || pattern.charAt(i) == 'I') { + while (!stack.isEmpty()) { + result.append(stack.pop()); + } + } + } + return result.toString(); + } +} From 5fb999c033b967a78437f39cbb7a09fb302db94b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 19 Feb 2025 07:37:28 -0800 Subject: [PATCH 1612/1640] Create The k-th Lexicographical String of All Happy Strings of Length n.java --- ...ring of All Happy Strings of Length n.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/The k-th Lexicographical String of All Happy Strings of Length n.java diff --git a/Medium/The k-th Lexicographical String of All Happy Strings of Length n.java b/Medium/The k-th Lexicographical String of All Happy Strings of Length n.java new file mode 100644 index 00000000..413b67d5 --- /dev/null +++ b/Medium/The k-th Lexicographical String of All Happy Strings of Length n.java @@ -0,0 +1,28 @@ +class Solution { + private static final char[] CHARS = {'a', 'b', 'c'}; + + public String getHappyString(int n, int k) { + Set set = new HashSet<>(); + backtrack(set, new StringBuilder(), n); + if (set.size() < k) { + return ""; + } + List list = new ArrayList<>(set); + Collections.sort(list); + return list.get(k - 1); + } + + private void backtrack(Set set, StringBuilder sb, int n) { + if (sb.length() == n) { + set.add(sb.toString()); + return; + } + for (char c : CHARS) { + if (sb.isEmpty() || sb.charAt(sb.length() - 1) != c) { + sb.append(c); + backtrack(set, sb, n); + sb.deleteCharAt(sb.length() - 1); + } + } + } +} From 50b0cb2ebb75524dc7241d8bc89c8c065ed739e3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 20 Feb 2025 09:03:42 -0800 Subject: [PATCH 1613/1640] Create Find Unique Binary String.java --- Medium/Find Unique Binary String.java | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Find Unique Binary String.java diff --git a/Medium/Find Unique Binary String.java b/Medium/Find Unique Binary String.java new file mode 100644 index 00000000..80cdfa9e --- /dev/null +++ b/Medium/Find Unique Binary String.java @@ -0,0 +1,25 @@ +class Solution { + + private static final char[] BINARY_CHARS = {'1', '0'}; + + public String findDifferentBinaryString(String[] nums) { + int n = nums.length; + Set binaryStrings = new HashSet<>(); + backtrack(new StringBuilder(), n, binaryStrings); + Set binaryStringsPresent = Arrays.stream(nums).collect(Collectors.toSet()); + binaryStrings.removeAll(binaryStringsPresent); + return binaryStrings.isEmpty() ? "" : binaryStrings.iterator().next(); + } + + private void backtrack(StringBuilder sb, int n, Set binaryStrings) { + if (sb.length() == n) { + binaryStrings.add(sb.toString()); + return; + } + for (char c : BINARY_CHARS) { + sb.append(c); + backtrack(sb, n, binaryStrings); + sb.deleteCharAt(sb.length() - 1); + } + } +} From c1ff60a4007603b312912ca49122646f8daa8cf3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Feb 2025 07:33:11 -0800 Subject: [PATCH 1614/1640] Update Recover a Tree From Preorder Traversal.java --- ...ecover a Tree From Preorder Traversal.java | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/Hard/Recover a Tree From Preorder Traversal.java b/Hard/Recover a Tree From Preorder Traversal.java index 69f3fe55..b851ca44 100644 --- a/Hard/Recover a Tree From Preorder Traversal.java +++ b/Hard/Recover a Tree From Preorder Traversal.java @@ -4,41 +4,45 @@ * int val; * TreeNode left; * TreeNode right; - * TreeNode(int x) { val = x; } + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } * } */ class Solution { - public TreeNode recoverFromPreorder(String S) { - Map map = new HashMap<>(); + public TreeNode recoverFromPreorder(String traversal) { + Stack stack = new Stack<>(); int idx = 0; - int n = S.length(); - - while (idx < n) { - int level = 0; - StringBuilder sb = new StringBuilder(); - - while (idx < n && S.charAt(idx) == '-') { - level++; + while (idx < traversal.length()) { + int depth = 0; + while (idx < traversal.length() && traversal.charAt(idx) == '-') { + depth++; idx++; } - - while (idx < n && Character.isDigit(S.charAt(idx))) { - sb.append(S.charAt(idx++)); + int value = 0; + while (idx < traversal.length() && Character.isDigit(traversal.charAt(idx))) { + value = value * 10 + Character.getNumericValue(traversal.charAt(idx++)); } - - TreeNode currNode = new TreeNode(Integer.parseInt(sb.toString())); - map.put(level, currNode); - if (level > 0) { - TreeNode parent = map.get(level - 1); - if (parent.left == null) { - parent.left = currNode; - } - else { - parent.right = currNode; + TreeNode node = new TreeNode(value); + while (stack.size() > depth) { + stack.pop(); + } + if (!stack.isEmpty()) { + if (stack.peek().left == null) { + stack.peek().left = node; + } else { + stack.peek().right = node; } } + stack.push(node); + } + while (stack.size() > 1) { + stack.pop(); } - - return map.get(0); + return stack.peek(); } } From c25f01b2f86ae67c45d919b9174559184e163564 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Feb 2025 10:38:59 -0800 Subject: [PATCH 1615/1640] Create Construct Binary Tree from Preorder and Postorder Traversal.java --- ...from Preorder and Postorder Traversal.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Medium/Construct Binary Tree from Preorder and Postorder Traversal.java diff --git a/Medium/Construct Binary Tree from Preorder and Postorder Traversal.java b/Medium/Construct Binary Tree from Preorder and Postorder Traversal.java new file mode 100644 index 00000000..ca7aa35d --- /dev/null +++ b/Medium/Construct Binary Tree from Preorder and Postorder Traversal.java @@ -0,0 +1,40 @@ +/** + * Definition for a binary tree node. + * 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; + * } + * } + */ +class Solution { + public TreeNode constructFromPrePost(int[] preorder, int[] postorder) { + int n = preorder.length; + Map postorderIndex = new HashMap<>(); + for (int i = 0; i < n; i++) { + postorderIndex.put(postorder[i], i); + } + return constructTree(0, n - 1, 0, preorder, postorderIndex); + } + + private TreeNode constructTree(int preStart, int preEnd, int postStart, int[] preorder, Map postorderIndex) { + if (preStart > preEnd) { + return null; + } + if (preStart == preEnd) { + return new TreeNode(preorder[preStart]); + } + int leftRoot = preorder[preStart + 1]; + int leftCount = postorderIndex.get(leftRoot) - postStart + 1; + TreeNode root = new TreeNode(preorder[preStart]); + root.left = constructTree(preStart + 1, preStart + leftCount, postStart, preorder, postorderIndex); + root.right = constructTree(preStart + leftCount + 1, preEnd, postStart + leftCount, preorder, postorderIndex); + return root; + } +} From 88ecb654b06441c1414888c2b0994fa092cd693e Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 1 Mar 2025 09:10:57 -0800 Subject: [PATCH 1616/1640] Update Apply Operations to an Array.java --- Easy/Apply Operations to an Array.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Easy/Apply Operations to an Array.java b/Easy/Apply Operations to an Array.java index b0a663a2..3b2bca86 100644 --- a/Easy/Apply Operations to an Array.java +++ b/Easy/Apply Operations to an Array.java @@ -1,21 +1,20 @@ class Solution { public int[] applyOperations(int[] nums) { - for (int i = 0; i < nums.length - 1; i++) { + int n = nums.length; + for (int i = 0; i < n - 1; i++) { if (nums[i] == nums[i + 1]) { nums[i] *= 2; nums[i + 1] = 0; } } - int startIdx = 0; - int endIdx = 0; - while (endIdx < nums.length) { - if (nums[endIdx] != 0) { - nums[startIdx++] = nums[endIdx]; + int start = 0; + for (int i = 0; i < n; i++) { + if (nums[i] != 0) { + nums[start++] = nums[i]; } - endIdx++; } - while (startIdx < nums.length) { - nums[startIdx++] = 0; + while (start < n) { + nums[start++] = 0; } return nums; } From 7e86b13cd7f4381cde89fb4c4302b48cd9ca336b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 5 Mar 2025 09:49:51 -0800 Subject: [PATCH 1617/1640] Create Count Total Number of Colored Cells.java --- Medium/Count Total Number of Colored Cells.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 Medium/Count Total Number of Colored Cells.java diff --git a/Medium/Count Total Number of Colored Cells.java b/Medium/Count Total Number of Colored Cells.java new file mode 100644 index 00000000..81c10a8c --- /dev/null +++ b/Medium/Count Total Number of Colored Cells.java @@ -0,0 +1,11 @@ +class Solution { + public long coloredCells(int n) { + long count = 1; + int increment = 4; + while (n-- > 1) { + count += increment; + increment += 4; + } + return count; + } +} From 72f877e6ebf35519842c65e03815c4a3ae74274c Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 9 Mar 2025 12:03:46 -0700 Subject: [PATCH 1618/1640] Create Fruits Into Baskets II.java --- Easy/Fruits Into Baskets II.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 Easy/Fruits Into Baskets II.java diff --git a/Easy/Fruits Into Baskets II.java b/Easy/Fruits Into Baskets II.java new file mode 100644 index 00000000..e0afa848 --- /dev/null +++ b/Easy/Fruits Into Baskets II.java @@ -0,0 +1,20 @@ +class Solution { + public int numOfUnplacedFruits(int[] fruits, int[] baskets) { + int count = 0; + for (int fruit : fruits) { + int idx = -1; + for (int i = 0; i < baskets.length; i++) { + if (baskets[i] >= fruit) { + idx = i; + break; + } + } + if (idx == -1) { + count++; + } else { + baskets[idx] = -1; + } + } + return count; + } +} From 8ed8a35ed86218a68f9211ab2c2495a20c951a68 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 19 Mar 2025 06:48:37 -0700 Subject: [PATCH 1619/1640] Create Maximum Unique Subarray Sum After Deletion.java --- ...imum Unique Subarray Sum After Deletion.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Maximum Unique Subarray Sum After Deletion.java diff --git a/Easy/Maximum Unique Subarray Sum After Deletion.java b/Easy/Maximum Unique Subarray Sum After Deletion.java new file mode 100644 index 00000000..e0a6a2ae --- /dev/null +++ b/Easy/Maximum Unique Subarray Sum After Deletion.java @@ -0,0 +1,17 @@ +class Solution { + public int maxSum(int[] nums) { + int max = nums[0]; + int sum = 0; + Set set = new HashSet<>(); + for (int num : nums) { + max = Math.max(num, max); + if (num > 0 && set.add(num)) { + sum += num; + } + } + if (max < 0) { + return max; + } + return sum; + } +} From f70a266f0ed726909b5228b54184c48081e4b6ee Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 20 Mar 2025 07:48:37 -0700 Subject: [PATCH 1620/1640] Create Design Spreadsheet.java --- Medium/Design Spreadsheet.java | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Medium/Design Spreadsheet.java diff --git a/Medium/Design Spreadsheet.java b/Medium/Design Spreadsheet.java new file mode 100644 index 00000000..e41fc142 --- /dev/null +++ b/Medium/Design Spreadsheet.java @@ -0,0 +1,47 @@ +class Spreadsheet { + + private final Map> sheet; + + public Spreadsheet(int rows) { + sheet = new HashMap<>(); + for (char c = 'A'; c <= 'Z'; c++) { + sheet.put(c, new HashMap<>()); + } + } + + public void setCell(String cell, int value) { + char column = cell.charAt(0); + int rowNumber = Integer.parseInt(cell.substring(1)); + Map row = sheet.get(column); + row.put(rowNumber, value); + } + + public void resetCell(String cell) { + setCell(cell, 0); + } + + public int getValue(String formula) { + String[] split = formula.split("\\+"); + String cellOne = split[0].substring(1); + String cellTwo = split[1]; + return getCellValue(cellOne) + getCellValue(cellTwo); + } + + private int getCellValue(String cell) { + if (!Character.isLetter(cell.charAt(0))) { + return Integer.parseInt(cell); + } + char column = cell.charAt(0); + int rowNumber = Integer.parseInt(cell.substring(1)); + Map row = sheet.get(column); + return row.getOrDefault(rowNumber, 0); + } +} + +/** + * Your Spreadsheet object will be instantiated and called as such: + * Spreadsheet obj = new Spreadsheet(rows); + * obj.setCell(cell,value); + * obj.resetCell(cell); + * int param_3 = obj.getValue(formula); + */ From 79fab170a7e6dbe64afb009018de192c97e49dc2 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 22 Mar 2025 16:51:49 -0700 Subject: [PATCH 1621/1640] Create Count the Number of Complete Components.java --- ...unt the Number of Complete Components.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Medium/Count the Number of Complete Components.java diff --git a/Medium/Count the Number of Complete Components.java b/Medium/Count the Number of Complete Components.java new file mode 100644 index 00000000..d198b0b2 --- /dev/null +++ b/Medium/Count the Number of Complete Components.java @@ -0,0 +1,38 @@ +class Solution { + public int countCompleteComponents(int n, int[][] edges) { + Map> graph = new HashMap<>(); + for (int[] edge : edges) { + int nodeOne = edge[0]; + int nodeTwo = edge[1]; + graph.computeIfAbsent(nodeOne, k -> new HashSet<>()).add(nodeTwo); + graph.computeIfAbsent(nodeTwo, k -> new HashSet<>()).add(nodeOne); + } + int count = 0; + Set visited = new HashSet<>(); + for (int i = 0; i < n; i++) { + if (visited.add(i)) { + int[] componentInfo = new int[2]; + dfs(i, graph, visited, componentInfo); + if (componentInfo[0] * (componentInfo[0] - 1) == componentInfo[1]) { + count++; + } + } + } + return count; + } + + private void dfs( + int node, + Map> graph, + Set visited, + int[] componentInfo) { + componentInfo[0]++; + Set connections = graph.getOrDefault(node, new HashSet<>()); + componentInfo[1] += connections.size(); + for (Integer conn : connections) { + if (visited.add(conn)) { + dfs(conn, graph, visited, componentInfo); + } + } + } +} From f09b6a6dcfc4bbd1cb3fe614078cd8141ac05a02 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 23 Mar 2025 08:14:49 -0700 Subject: [PATCH 1622/1640] Create Maximum Containers on a Ship.java --- Easy/Maximum Containers on a Ship.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 Easy/Maximum Containers on a Ship.java diff --git a/Easy/Maximum Containers on a Ship.java b/Easy/Maximum Containers on a Ship.java new file mode 100644 index 00000000..e113027d --- /dev/null +++ b/Easy/Maximum Containers on a Ship.java @@ -0,0 +1,8 @@ +class Solution { + public int maxContainers(int n, int w, int maxWeight) { + if (n * n * w <= maxWeight) { + return n * n; + } + return maxWeight / w; + } +} From 0343dfd31a1cc8309b3ea10ed1315c1287b594c5 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 29 Mar 2025 08:02:00 -0700 Subject: [PATCH 1623/1640] Create Count Days Without Meetings.java --- Medium/Count Days Without Meetings.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Count Days Without Meetings.java diff --git a/Medium/Count Days Without Meetings.java b/Medium/Count Days Without Meetings.java new file mode 100644 index 00000000..1630e6df --- /dev/null +++ b/Medium/Count Days Without Meetings.java @@ -0,0 +1,24 @@ +class Solution { + public int countDays(int days, int[][] meetings) { + Arrays.sort(meetings, (o1, o2) -> { + int c = Integer.compare(o1[0], o2[0]); + if (c != 0) { + return c; + } + return Integer.compare(o2[1], o1[1]); + }); + int meetingDays = 0; + int idx = 0; + while (idx < meetings.length) { + int start = meetings[idx][0]; + int end = meetings[idx][1]; + idx++; + while (idx < meetings.length && meetings[idx][0] <= end) { + end = Math.max(end, meetings[idx][1]); + idx++; + } + meetingDays += (end - start + 1); + } + return days - meetingDays; + } +} From e6687a6c142a52bdee850192a39b13c70a8e6785 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Mar 2025 07:04:57 -0700 Subject: [PATCH 1624/1640] Create Reverse Degree of a String.java --- Easy/Reverse Degree of a String.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Reverse Degree of a String.java diff --git a/Easy/Reverse Degree of a String.java b/Easy/Reverse Degree of a String.java new file mode 100644 index 00000000..db8f4e91 --- /dev/null +++ b/Easy/Reverse Degree of a String.java @@ -0,0 +1,9 @@ +class Solution { + public int reverseDegree(String s) { + int result = 0; + for (int i = 0; i < s.length(); i++) { + result += (i + 1) * (26 - (s.charAt(i) - 'a')); + } + return result; + } +} From 6c82d5e37dfb702b58b177185123e545799b0b3f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 30 Mar 2025 07:15:26 -0700 Subject: [PATCH 1625/1640] Create Minimum Cost to Reach Every Position.java --- Easy/Minimum Cost to Reach Every Position.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 Easy/Minimum Cost to Reach Every Position.java diff --git a/Easy/Minimum Cost to Reach Every Position.java b/Easy/Minimum Cost to Reach Every Position.java new file mode 100644 index 00000000..1b142d2c --- /dev/null +++ b/Easy/Minimum Cost to Reach Every Position.java @@ -0,0 +1,13 @@ +class Solution { + public int[] minCosts(int[] cost) { + int n = cost.length; + int[] result = new int[n]; + int minCost = Integer.MAX_VALUE; + for (int i = 0; i < n; i++) { + int curr = cost[i]; + minCost = Math.min(minCost, curr); + result[i] = minCost; + } + return result; + } +} From d607cf25ba1d4a4f13c5a7a8ad2e709571352bbe Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Apr 2025 11:12:22 -0700 Subject: [PATCH 1626/1640] Create Find Closest Person.java --- Easy/Find Closest Person.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Easy/Find Closest Person.java diff --git a/Easy/Find Closest Person.java b/Easy/Find Closest Person.java new file mode 100644 index 00000000..0d178230 --- /dev/null +++ b/Easy/Find Closest Person.java @@ -0,0 +1,7 @@ +class Solution { + public int findClosest(int x, int y, int z) { + int diffOne = Math.abs(x - z); + int diffTwo = Math.abs(y - z); + return diffOne == diffTwo ? 0 : (diffOne < diffTwo ? 1 : 2); + } +} From f0117cca3526851eaf7192572f6ba92415fbddac Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sun, 13 Apr 2025 11:13:49 -0700 Subject: [PATCH 1627/1640] Create Minimum Operations to Make Array Sum Divisible by K.java --- ...imum Operations to Make Array Sum Divisible by K.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Easy/Minimum Operations to Make Array Sum Divisible by K.java diff --git a/Easy/Minimum Operations to Make Array Sum Divisible by K.java b/Easy/Minimum Operations to Make Array Sum Divisible by K.java new file mode 100644 index 00000000..c941b50a --- /dev/null +++ b/Easy/Minimum Operations to Make Array Sum Divisible by K.java @@ -0,0 +1,9 @@ +class Solution { + public int minOperations(int[] nums, int k) { + int sum = 0; + for (int num : nums) { + sum += num; + } + return sum % k; + } +} From 4a81fa982c607d1d900c5f988599219cc82e8ad3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 15 Apr 2025 07:17:29 -0700 Subject: [PATCH 1628/1640] Update Count Symmetric Integers.java --- Easy/Count Symmetric Integers.java | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/Easy/Count Symmetric Integers.java b/Easy/Count Symmetric Integers.java index f32301e1..8ae9c320 100644 --- a/Easy/Count Symmetric Integers.java +++ b/Easy/Count Symmetric Integers.java @@ -1,17 +1,27 @@ class Solution { public int countSymmetricIntegers(int low, int high) { - int result = 0; + int count = 0; for (int i = low; i <= high; i++) { - String s = String.valueOf(i); - int diff = 0; - int n = s.length(); - for (int j = 0; j < n / 2; j++) { - diff += s.charAt(j) - s.charAt(n - j - 1); - } - if (n % 2 == 0 && diff == 0) { - result++; + if (isSymmetric(i)) { + count++; } } - return result; + return count; + } + + private static boolean isSymmetric(int num) { + String s = String.valueOf(num); + int n = s.length(); + if (n % 2 != 0) { + return false; + } + int sum = 0; + for (int i = 0; i < n / 2; i++) { + sum += Character.getNumericValue(s.charAt(i)); + } + for (int i = n / 2; i < n; i++) { + sum -= Character.getNumericValue(s.charAt(i)); + } + return sum == 0; } } From f37ed97923b5e909813df92781a15828b1386986 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 26 Apr 2025 08:55:01 -0700 Subject: [PATCH 1629/1640] Create Calculate Score After Performing Instructions.java --- ...e Score After Performing Instructions.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Medium/Calculate Score After Performing Instructions.java diff --git a/Medium/Calculate Score After Performing Instructions.java b/Medium/Calculate Score After Performing Instructions.java new file mode 100644 index 00000000..789e5669 --- /dev/null +++ b/Medium/Calculate Score After Performing Instructions.java @@ -0,0 +1,19 @@ +class Solution { + public long calculateScore(String[] instructions, int[] values) { + long result = 0; + int n = values.length; + int idx = 0; + Set executed = new HashSet<>(); + while (idx < n && idx >= 0) { + if (!executed.add(idx)) { + break; + } + if (instructions[idx].equals("add")) { + result += values[idx++]; + } else { + idx += values[idx]; + } + } + return result; + } +} From 96a5d01cded0218a8c4c9e97d1fd5230ce1e23ef Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 7 May 2025 06:01:01 -0700 Subject: [PATCH 1630/1640] Create Find Minimum Time to Reach Last Room I.java --- ...ind Minimum Time to Reach Last Room I.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 Medium/Find Minimum Time to Reach Last Room I.java diff --git a/Medium/Find Minimum Time to Reach Last Room I.java b/Medium/Find Minimum Time to Reach Last Room I.java new file mode 100644 index 00000000..0247baa4 --- /dev/null +++ b/Medium/Find Minimum Time to Reach Last Room I.java @@ -0,0 +1,36 @@ +class Solution { + + private static final int[][] DIRS = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public int minTimeToReach(int[][] moveTime) { + int n = moveTime.length; + int m = moveTime[0].length; + boolean[][] visited = new boolean[n][m]; + Integer[][] minTime = new Integer[n][m]; + minTime[0][0] = 0; + PriorityQueue pq = new PriorityQueue<>((a, b) -> a[2] - b[2]); + pq.add(new int[]{0, 0, 0}); + while (!pq.isEmpty()) { + int[] removed = pq.remove(); + int x = removed[0]; + int y = removed[1]; + if (visited[x][y]) { + continue; + } + visited[x][y] = true; + for (int[] dir : DIRS) { + int newX = x + dir[0]; + int newY = y + dir[1]; + if (newX >= 0 && newY >= 0 && newX < n && newY < m) { + int distance = Math.max(minTime[x][y], moveTime[newX][newY]) + 1; + int currMinTime = minTime[newX][newY] == null ? Integer.MAX_VALUE : minTime[newX][newY]; + if (currMinTime > distance) { + minTime[newX][newY] = distance; + pq.add(new int[]{newX, newY, distance}); + } + } + } + } + return minTime[n - 1][m - 1]; + } +} From c7c43dc18b8be8ebbc54ebd7a1f528e83aab85eb Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 8 May 2025 07:06:50 -0700 Subject: [PATCH 1631/1640] Create Maximum Product of Two Digits.java --- Easy/Maximum Product of Two Digits.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 Easy/Maximum Product of Two Digits.java diff --git a/Easy/Maximum Product of Two Digits.java b/Easy/Maximum Product of Two Digits.java new file mode 100644 index 00000000..c61f3c3a --- /dev/null +++ b/Easy/Maximum Product of Two Digits.java @@ -0,0 +1,17 @@ +class Solution { + public int maxProduct(int n) { + int maximum = Integer.MIN_VALUE; + int secondMaximum = Integer.MIN_VALUE; + while (n > 0) { + int num = n % 10; + n /= 10; + if (num > maximum) { + secondMaximum = maximum; + maximum = num; + } else if (num > secondMaximum) { + secondMaximum = num; + } + } + return maximum * secondMaximum; + } +} From 0209afb33cd40797aa03707328030e2b0a8d9f5f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 14 May 2025 06:24:41 -0700 Subject: [PATCH 1632/1640] Create Total Characters in String After Transformations I.java --- ...ers in String After Transformations I.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Medium/Total Characters in String After Transformations I.java diff --git a/Medium/Total Characters in String After Transformations I.java b/Medium/Total Characters in String After Transformations I.java new file mode 100644 index 00000000..3751ab7e --- /dev/null +++ b/Medium/Total Characters in String After Transformations I.java @@ -0,0 +1,25 @@ +class Solution { + + private static final int MOD = 1000_0000_07; + + public int lengthAfterTransformations(String s, int t) { + int[] frequency = new int[26]; + for (char c : s.toCharArray()) { + frequency[c - 'a']++; + } + for (int round = 0; round < t; round++) { + int[] next = new int[26]; + next[0] = frequency[25]; // Transformation from 'z' + next[1] = (frequency[25] + frequency[0]) % MOD; // Transformation from either 'z' or 'a' + for (int i = 2; i < 26; i++) { + next[i] = frequency[i - 1]; // Transformation for next character + } + frequency = next; + } + int result = 0; + for (int i = 0; i < 26; i++) { + result = (result + frequency[i]) % MOD; + } + return result; + } +} From 52620f41b903dc8c26ca32aa1e7877eec199dd8b Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 20 May 2025 07:15:08 -0700 Subject: [PATCH 1633/1640] Create Zero Array Transformation I.java --- Medium/Zero Array Transformation I.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 Medium/Zero Array Transformation I.java diff --git a/Medium/Zero Array Transformation I.java b/Medium/Zero Array Transformation I.java new file mode 100644 index 00000000..2b9ab602 --- /dev/null +++ b/Medium/Zero Array Transformation I.java @@ -0,0 +1,24 @@ +class Solution { + public boolean isZeroArray(int[] nums, int[][] queries) { + int n = nums.length; + int[] diff = new int[n + 1]; + for (int[] query : queries) { + int left = query[0]; + int right = query[1]; + diff[left] += 1; + diff[right + 1] -= 1; + } + int[] operation = new int[n + 1]; + int currOperation = 0; + for (int i = 0; i < n + 1; i++) { + currOperation += diff[i]; + operation[i] = currOperation; + } + for (int i = 0; i < n; i++) { + if (operation[i] < nums[i]) { + return false; + } + } + return true; + } +} From 96489b1a30e6f271468b065dd0d439aaef04e679 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Mon, 2 Jun 2025 07:06:56 -0700 Subject: [PATCH 1634/1640] Create Distribute Candies Among Children II.java --- Medium/Distribute Candies Among Children II.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 Medium/Distribute Candies Among Children II.java diff --git a/Medium/Distribute Candies Among Children II.java b/Medium/Distribute Candies Among Children II.java new file mode 100644 index 00000000..aa9648f2 --- /dev/null +++ b/Medium/Distribute Candies Among Children II.java @@ -0,0 +1,14 @@ +class Solution { + public long distributeCandies(int n, int limit) { + long result = 0; + for (int i = 0; i <= Math.min(limit, n); i++) { + // distribution not possible as we will have to allocate at least one child with + // more than limit candies + if (n - i > 2 * limit) { + continue; + } + result += Math.min(n - i, limit) - Math.max(0, n - i - limit) + 1; + } + return result; + } +} From 78832b33f37b1fc3b850ec08f957e069868ae80f Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 Jun 2025 07:21:58 -0700 Subject: [PATCH 1635/1640] Create Find Minimum Log Transportation Cost.java --- Easy/Find Minimum Log Transportation Cost.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 Easy/Find Minimum Log Transportation Cost.java diff --git a/Easy/Find Minimum Log Transportation Cost.java b/Easy/Find Minimum Log Transportation Cost.java new file mode 100644 index 00000000..3820474e --- /dev/null +++ b/Easy/Find Minimum Log Transportation Cost.java @@ -0,0 +1,12 @@ +class Solution { + public long minCuttingCost(int n, int m, int k) { + long cost = 0; + if (n > k) { + cost += ((long) (n - k)) * (k); + } + if (m > k) { + cost += ((long) (m - k)) * (k); + } + return cost; + } +} From a15f0c915355221f247be1e23057c46a10ad29e7 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Tue, 3 Jun 2025 07:30:09 -0700 Subject: [PATCH 1636/1640] Create Resulting String After Adjacent Removals.java --- ...ulting String After Adjacent Removals.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 Medium/Resulting String After Adjacent Removals.java diff --git a/Medium/Resulting String After Adjacent Removals.java b/Medium/Resulting String After Adjacent Removals.java new file mode 100644 index 00000000..efa43bf6 --- /dev/null +++ b/Medium/Resulting String After Adjacent Removals.java @@ -0,0 +1,21 @@ +class Solution { + public String resultingString(String s) { + Stack stack = new Stack<>(); + for (char c : s.toCharArray()) { + if (!stack.isEmpty() && isAdjacent(stack.peek(), c)) { + stack.pop(); + } else { + stack.push(c); + } + } + StringBuilder result = new StringBuilder(); + for (char c : stack) { + result.append(c); + } + return result.toString(); + } + + private static boolean isAdjacent(char first, char second) { + return Math.abs(first - second) == 1 || (first == 'a' && second == 'z') || (first == 'z' && second == 'a'); + } +} From 89afcc3436620718196217d9f17e04054350c692 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Wed, 4 Jun 2025 10:06:43 -0700 Subject: [PATCH 1637/1640] Create Find the Lexicographically Largest String From the Box I.java --- ...raphically Largest String From the Box I.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Medium/Find the Lexicographically Largest String From the Box I.java diff --git a/Medium/Find the Lexicographically Largest String From the Box I.java b/Medium/Find the Lexicographically Largest String From the Box I.java new file mode 100644 index 00000000..1133cb93 --- /dev/null +++ b/Medium/Find the Lexicographically Largest String From the Box I.java @@ -0,0 +1,16 @@ +class Solution { + public String answerString(String word, int numFriends) { + if (numFriends == 1) { + return word; + } + int n = word.length(); + String result = ""; + for (int i = 0; i < n; i++) { + String curr = word.substring(i, Math.min(i + n - numFriends + 1, n)); + if (result.compareTo(curr) <= 0) { + result = curr; + } + } + return result; + } +} From b962419d92bbd2d824f9c3a624416d0ff4ed6ff6 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Thu, 5 Jun 2025 06:20:55 -0700 Subject: [PATCH 1638/1640] Update Lexicographically Smallest Equivalent String.java --- ...raphically Smallest Equivalent String.java | 69 +++++++++++-------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/Medium/Lexicographically Smallest Equivalent String.java b/Medium/Lexicographically Smallest Equivalent String.java index c5856615..f4d01c21 100644 --- a/Medium/Lexicographically Smallest Equivalent String.java +++ b/Medium/Lexicographically Smallest Equivalent String.java @@ -1,31 +1,46 @@ class Solution { - public String smallestEquivalentString(String s1, String s2, String baseStr) { - int[] graph = new int[26]; - for (int i = 0; i < 26; i++) { - graph[i] = i; + public String smallestEquivalentString(String s1, String s2, String baseStr) { + UnionFind unionFind = new UnionFind(26); + for (int i = 0; i < s1.length(); i++) { + char c1 = s1.charAt(i); + char c2 = s2.charAt(i); + unionFind.union(c1 - 'a', c2 - 'a'); + } + StringBuilder result = new StringBuilder(); + for (char c : baseStr.toCharArray()) { + result.append((char) (unionFind.find(c - 'a') + 'a')); + } + return result.toString(); } - for (int i = 0; i < s1.length(); i++) { - int idxOne = s1.charAt(i) - 'a'; - int idxTwo = s2.charAt(i) - 'a'; - int parentOne = find(graph, idxOne); - int parentTwo = find(graph, idxTwo); - if(parentOne < parentTwo) { - graph[parentTwo] = parentOne; - } else { - graph[parentOne] = parentTwo; - } + + class UnionFind { + private int[] parent; + + public UnionFind(int n) { + parent = new int[n]; + for (int i = 0; i < n; i++) { + parent[i] = i; + } + } + + public int find(int node) { + if (parent[node] == node) { + return node; + } + parent[node] = find(parent[node]); + return parent[node]; + } + + public void union(int nodeOne, int nodeTwo) { + int parentOne = find(nodeOne); + int parentTwo = find(nodeTwo); + if (parentOne != parentTwo) { + if (parentOne < parentTwo) { + parent[parentTwo] = parentOne; + } else { + parent[parentOne] = parentTwo; + } + } + } } - StringBuilder sb = new StringBuilder(); - for (char c : baseStr.toCharArray()) { - sb.append((char) ('a' + find(graph, c - 'a'))); - } - return sb.toString(); - } - - private int find(int[] graph, int idx) { - while(graph[idx] != idx) { - idx = graph[idx]; - } - return idx; - } } From da789bdd18417daf8dae61d377cfcd0b751d9ad3 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Fri, 6 Jun 2025 10:27:44 -0700 Subject: [PATCH 1639/1640] Create Using a Robot to Print the Lexicographically Smallest String.java --- ...the Lexicographically Smallest String.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 Medium/Using a Robot to Print the Lexicographically Smallest String.java diff --git a/Medium/Using a Robot to Print the Lexicographically Smallest String.java b/Medium/Using a Robot to Print the Lexicographically Smallest String.java new file mode 100644 index 00000000..8d9c2064 --- /dev/null +++ b/Medium/Using a Robot to Print the Lexicographically Smallest String.java @@ -0,0 +1,31 @@ +class Solution { + public String robotWithString(String s) { + int[] counter = new int[26]; + for (char c : s.toCharArray()) { + counter[c - 'a']++; + } + Stack stack = new Stack<>(); + StringBuilder sb = new StringBuilder(); + for (char c : s.toCharArray()) { + stack.push(c); + counter[c - 'a']--; + while (!stack.isEmpty() && isSmallest(stack.peek(), counter)) { + sb.append(stack.pop()); + } + } + while (!stack.isEmpty()) { + sb.append(stack.pop()); + } + return sb.toString(); + } + + private boolean isSmallest(char c, int[] counter) { + int limit = c - 'a'; + for (int i = 0; i < limit; i++) { + if (counter[i] > 0) { + return false; + } + } + return true; + } +} From c91e3403fb904d4f4a127e339adb252849377872 Mon Sep 17 00:00:00 2001 From: Varun Upadhyay Date: Sat, 7 Jun 2025 06:22:41 -0700 Subject: [PATCH 1640/1640] Create Lexicographically Minimum String After Removing Stars.java --- ...y Minimum String After Removing Stars.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 Medium/Lexicographically Minimum String After Removing Stars.java diff --git a/Medium/Lexicographically Minimum String After Removing Stars.java b/Medium/Lexicographically Minimum String After Removing Stars.java new file mode 100644 index 00000000..794ee712 --- /dev/null +++ b/Medium/Lexicographically Minimum String After Removing Stars.java @@ -0,0 +1,28 @@ +class Solution { + public String clearStars(String s) { + Deque[] count = new Deque[26]; + for (int i = 0; i < 26; i++) { + count[i] = new ArrayDeque<>(); + } + char[] letters = s.toCharArray(); + for (int i = 0; i < letters.length; i++) { + if (letters[i] != '*') { + count[letters[i] - 'a'].push(i); + } else { + for (int j = 0; j < 26; j++) { + if (!count[j].isEmpty()) { + letters[count[j].pop()] = '*'; + break; + } + } + } + } + StringBuilder sb = new StringBuilder(); + for (char c : letters) { + if (c != '*') { + sb.append(c); + } + } + return sb.toString(); + } +}