Skip to content

Commit cee440b

Browse files
authored
Merge branch 'neetcode-gh:main' into adityacpp
2 parents 2f6a1a6 + 779349c commit cee440b

8 files changed

+261
-2
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,12 @@ If you would like to have collaborator permissions on the repo to merge your own
260260
<sub>[0129 - Sum Root to Leaf Numbers](https://leetcode.com/problems/sum-root-to-leaf-numbers/)</sub> | <sub><div align='center'>[✔️](c%2F0129-sum-root-to-leaf-numbers.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0129-sum-root-to-leaf-numbers.cpp)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0129-sum-root-to-leaf-numbers.java)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0129-sum-root-to-leaf-numbers.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
261261
<sub>[0337 - House Robber III](https://leetcode.com/problems/house-robber-iii/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0337-house-robber-iii.java)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0337-house-robber-iii.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
262262
<sub>[0951 - Flip Equivalent Binary Trees](https://leetcode.com/problems/flip-equivalent-binary-trees/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0951-flip-equivalent-binary-trees.java)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0951-flip-equivalent-binary-trees.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
263-
<sub>[1993 - Operations On Tree](https://leetcode.com/problems/operations-on-tree/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'></div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F1993-operations-on-tree.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
263+
<sub>[1993 - Operations On Tree](https://leetcode.com/problems/operations-on-tree/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F1993-operations-on-tree.java)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F1993-operations-on-tree.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
264264
<sub>[0894 - All Possible Full Binary Trees](https://leetcode.com/problems/all-possible-full-binary-trees/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0894-all-possible-full-binary-trees.java)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0894-all-possible-full-binary-trees.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0894-all-possible-full-binary-trees.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
265265
<sub>[0513 - Find Bottom Left Tree Value](https://leetcode.com/problems/find-bottom-left-tree-value/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0513-find-bottom-left-tree-value.java)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0513-find-bottom-left-tree-value.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
266266
<sub>[0669 - Trim a Binary Search Tree](https://leetcode.com/problems/trim-a-binary-search-tree/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0669-trim-a-binary-search-tree.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0669-trim-a-binary-search-tree.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0669-trim-a-binary-search-tree.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0669-trim-a-binary-search-tree.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0669-trim-a-binary-search-tree.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](typescript%2F0669-trim-a-binary-search-tree.ts)</div></sub>
267267
<sub>[0173 - Binary Search Tree Iterator](https://leetcode.com/problems/binary-search-tree-iterator/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0173-binary-search-tree-iterator.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0173-binary-search-tree-iterator.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0173-binary-search-tree-iterator.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
268-
<sub>[0538 - Convert Bst to Greater Tree](https://leetcode.com/problems/convert-bst-to-greater-tree/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](cpp%2F0538-convert-bst-to-greater-tree.cpp)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'></div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0538-convert-bst-to-greater-tree.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
268+
<sub>[0538 - Convert Bst to Greater Tree](https://leetcode.com/problems/convert-bst-to-greater-tree/)</sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](cpp%2F0538-convert-bst-to-greater-tree.cpp)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](java%2F0538-convert-bst-to-greater-tree.java)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0538-convert-bst-to-greater-tree.kt)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub>
269269
<sub>[0124 - Binary Tree Maximum Path Sum](https://leetcode.com/problems/binary-tree-maximum-path-sum/)</sub> | <sub><div align='center'>[✔️](c%2F0124-binary-tree-maximum-path-sum.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0124-binary-tree-maximum-path-sum.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0124-binary-tree-maximum-path-sum.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0124-binary-tree-maximum-path-sum.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0124-binary-tree-maximum-path-sum.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0124-binary-tree-maximum-path-sum.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0124-binary-tree-maximum-path-sum.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0124-binary-tree-maximum-path-sum.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](rust%2F0124-binary-tree-maximum-path-sum.rs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](swift%2F0124-binary-tree-maximum-path-sum.swift)</div></sub> | <sub><div align='center'>[✔️](typescript%2F0124-binary-tree-maximum-path-sum.ts)</div></sub>
270270
<sub>[0297 - Serialize And Deserialize Binary Tree](https://leetcode.com/problems/serialize-and-deserialize-binary-tree/)</sub> | <sub><div align='center'>[✔️](c%2F0297-serialize-and-deserialize-binary-tree.c)</div></sub> | <sub><div align='center'>[✔️](cpp%2F0297-serialize-and-deserialize-binary-tree.cpp)</div></sub> | <sub><div align='center'>[✔️](csharp%2F0297-serialize-and-deserialize-binary-tree.cs)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](go%2F0297-serialize-and-deserialize-binary-tree.go)</div></sub> | <sub><div align='center'>[✔️](java%2F0297-serialize-and-deserialize-binary-tree.java)</div></sub> | <sub><div align='center'>[✔️](javascript%2F0297-serialize-and-deserialize-binary-tree.js)</div></sub> | <sub><div align='center'>[✔️](kotlin%2F0297-serialize-and-deserialize-binary-tree.kt)</div></sub> | <sub><div align='center'>[✔️](python%2F0297-serialize-and-deserialize-binary-tree.py)</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>❌</div></sub> | <sub><div align='center'>[✔️](swift%2F0297-serialize-and-deserialize-binary-tree.swift)</div></sub> | <sub><div align='center'>[✔️](typescript%2F0297-serialize-and-deserialize-binary-tree.ts)</div></sub>
271271

java/0049-group-anagrams.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,31 @@
1+
class Solution {
2+
public List<List<String>> groupAnagrams(String[] strs) {
3+
Map<String, List<String>> res = new HashMap<>();
4+
5+
for (String s : strs) {
6+
int[] count = new int[26];
7+
8+
for (char c : s.toCharArray()) {
9+
count[c - 'a']++;
10+
}
11+
12+
StringBuilder sb = new StringBuilder();
13+
for (int i = 0; i < 26; i++) {
14+
sb.append('#');
15+
sb.append(count[i]);
16+
}
17+
String key = sb.toString();
18+
19+
if (!res.containsKey(key)) {
20+
res.put(key, new ArrayList<>());
21+
}
22+
res.get(key).add(s);
23+
}
24+
25+
return new ArrayList<>(res.values());
26+
}
27+
}
28+
-------------------------------------------------------------------------
129
class Solution {
230
public List<List<String>> groupAnagrams(String[] strs) {
331
Map<String, List<String>> map = new HashMap<>();
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Recursive solution
2+
class Solution {
3+
private int curSum = 0;
4+
5+
public TreeNode convertBST(TreeNode root) {
6+
convertBSTRecursive(root);
7+
return root;
8+
}
9+
10+
private void convertBSTRecursive(TreeNode node) {
11+
if (node == null) {
12+
return;
13+
}
14+
15+
convertBSTRecursive(node.right);
16+
int temp = node.val;
17+
node.val += curSum;
18+
curSum += temp;
19+
convertBSTRecursive(node.left);
20+
}
21+
}
22+
23+
// Iterative solution
24+
class Solution {
25+
public TreeNode convertBST(TreeNode root) {
26+
Stack<TreeNode> stack = new Stack<>();
27+
TreeNode cur = root;
28+
29+
int curSum = 0;
30+
while (cur != null || !stack.isEmpty()) {
31+
while (cur != null) {
32+
stack.push(cur);
33+
cur = cur.right;
34+
}
35+
cur = stack.pop();
36+
cur.val += curSum;
37+
curSum = cur.val;
38+
cur = cur.left;
39+
}
40+
41+
return root;
42+
}
43+
}

java/1291-sequential-digits.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public List<Integer> sequentialDigits(int low, int high) {
3+
List<Integer> res = new ArrayList<>();
4+
Queue<Integer> q = new LinkedList<>();
5+
for(int i = 1; i < 10; i++)
6+
q.add(i);
7+
8+
while(!q.isEmpty()){
9+
int n = q.poll();
10+
if(n > high)
11+
continue;
12+
if(n >= low && n <= high)
13+
res.add(n);
14+
int ones = n % 10;
15+
if(ones < 9)
16+
q.add(n * 10 + (ones + 1));
17+
}
18+
return res;
19+
}
20+
}

java/1993-operations-on-tree.java

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
class Solution {
2+
private final int[] parent;
3+
private final int[] locked;
4+
private final Map<Integer, List<Integer>> child;
5+
6+
public LockingTree(int[] parent) {
7+
this.parent = parent;
8+
locked = new int[parent.length];
9+
child = new HashMap<>();
10+
11+
for (int i = 0; i < parent.length; i++) {
12+
child.putIfAbsent(parent[i], new ArrayList<>());
13+
child.putIfAbsent(i, new ArrayList<>());
14+
child.get(parent[i]).add(i);
15+
}
16+
}
17+
18+
public boolean lock(int num, int user) {
19+
if (locked[num] <= 0) {
20+
locked[num] = user;
21+
return true;
22+
}
23+
24+
return false;
25+
}
26+
27+
public boolean unlock(int num, int user) {
28+
if (locked[num] == user) {
29+
locked[num] = 0;
30+
return true;
31+
}
32+
33+
return false;
34+
}
35+
36+
public boolean upgrade(int num, int user) {
37+
if (!noneAncestorsLocked(num)) {
38+
return false;
39+
}
40+
41+
int lockedCount = checkDescendantsAndLockIfNeeded(num);
42+
43+
if (lockedCount > 0) {
44+
locked[num] = user;
45+
}
46+
47+
return lockedCount > 0;
48+
}
49+
50+
private boolean noneAncestorsLocked(int num) {
51+
while (num != -1) {
52+
if (locked[num] != 0) {
53+
return false;
54+
}
55+
num = parent[num];
56+
}
57+
58+
return true;
59+
}
60+
61+
private int checkDescendantsAndLockIfNeeded(int num) {
62+
int lockedCount = 0;
63+
Deque<Integer> deque = new ArrayDeque<>();
64+
65+
deque.addFirst(num);
66+
while (!deque.isEmpty()) {
67+
int n = deque.pollLast();
68+
if (locked[n] > 0) {
69+
lockedCount++;
70+
locked[n] = 0;
71+
}
72+
for (Integer i : child.get(n)) {
73+
deque.addFirst(i);
74+
}
75+
}
76+
77+
return lockedCount;
78+
}
79+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
fun firstUniqChar(s: String): Int {
3+
var count = IntArray (26)
4+
for (c in s)
5+
count[c - 'a']++
6+
7+
for ((i, c) in s.withIndex()) {
8+
if (count[c - 'a'] == 1)
9+
return i
10+
}
11+
12+
return -1
13+
}
14+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Dp solution
2+
class Solution {
3+
fun maxSumAfterPartitioning(arr: IntArray, k: Int): Int {
4+
val n = arr.size
5+
val dp = IntArray (k)
6+
dp[0] = arr[0]
7+
8+
for (i in 1 until n) {
9+
var curMax = 0
10+
var maxAtI = 0
11+
for (j in i downTo (i - k + 1)) {
12+
if (j < 0) break
13+
14+
curMax = maxOf(curMax, arr[j])
15+
16+
val winLen = i - j + 1
17+
val curSum = curMax * winLen
18+
val subArrSum = if (j > 0) dp[(j - 1) % k] else dp[k - 1]
19+
20+
maxAtI = maxOf(maxAtI, curSum + subArrSum)
21+
}
22+
23+
dp[i % k] = maxAtI
24+
}
25+
26+
return dp[(n - 1) % k]
27+
}
28+
}
29+
30+
// recursion + memoization
31+
class Solution {
32+
fun maxSumAfterPartitioning(arr: IntArray, k: Int): Int {
33+
val n = arr.size
34+
val dp = IntArray (n) { -1 }
35+
36+
fun dfs(i: Int): Int {
37+
if (i == n) return 0
38+
if (dp[i] != -1) return dp[i]
39+
40+
var curMax = 0
41+
var res = 0
42+
for (j in i until minOf(n, i + k)) {
43+
curMax = maxOf(curMax, arr[j])
44+
val winLen = j - i + 1
45+
res = maxOf(
46+
res,
47+
dfs(j + 1) + curMax * winLen
48+
)
49+
}
50+
51+
dp[i] = res
52+
return res
53+
}
54+
55+
return dfs(0)
56+
}
57+
}

kotlin/1291-sequential-digits.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
fun sequentialDigits(low: Int, high: Int): List<Int> {
3+
var q = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
4+
var res = mutableListOf<Int>()
5+
6+
while (q.isNotEmpty()) {
7+
var n = q.removeFirst()
8+
9+
if (n > high) continue
10+
if (n >= low) res.add(n)
11+
12+
val d = n % 10
13+
if (d < 9) q.add(n * 10 + (d + 1))
14+
}
15+
16+
return res
17+
}
18+
}

0 commit comments

Comments
 (0)