Skip to content

Commit 3aae774

Browse files
solves #129 in java
1 parent 0f70dc8 commit 3aae774

File tree

3 files changed

+38
-49
lines changed

3 files changed

+38
-49
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# LeetCode Algorithms
22

3-
![problems-solved](https://img.shields.io/badge/Problems%20Solved-490/2081-1f425f.svg)
4-
![problems-solved-java](https://img.shields.io/badge/Java-490/2081-1abc9c.svg)
3+
![problems-solved](https://img.shields.io/badge/Problems%20Solved-509/2081-1f425f.svg)
4+
![problems-solved-java](https://img.shields.io/badge/Java-509/2081-1abc9c.svg)
55
![problems-solved-python](https://img.shields.io/badge/Python-185/2081-1abc9c.svg)
66
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
77
[![cp](https://img.shields.io/badge/also%20see-Competitve%20Programming-1f72ff.svg)](https://github.com/anishLearnsToCode/competitive-programming)
@@ -116,7 +116,7 @@
116116
| 122 | [Best Time to Buy and Sell Stocks II](https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii) | [![Java](assets/java.png)](src/BestTimeToBuyAndSellStockII.java) [![Python](assets/python.png)](python/best_time_to_buy_and_sell_stock_ii.py) | |
117117
| 125 | [Valid Palindrome](https://leetcode.com/problems/valid-palindrome) | [![Java](assets/java.png)](src/ValidPalindrome.java) [![Python](assets/python.png)](python/valid_palindrome.py) | |
118118
| 128 | [Longest Consecutive Sequence](https://leetcode.com/problems/longest-consecutive-sequence) | [![Java](assets/java.png)](src/LongestConsecutiveSequence.java) | |
119-
| 129 | [Sum Root to Leaf Numbers](https://leetcode.com/problems/sum-root-to-leaf-numbers) | | |
119+
| 129 | [Sum Root to Leaf Numbers](https://leetcode.com/problems/sum-root-to-leaf-numbers) | [![Java](assets/java.png)](src/SumRootToLeafNumbers.java) | |
120120
| 130 | [Surrounded Regions](https://leetcode.com/problems/surrounded-regions) | | |
121121
| 131 | [Palindrome Partitioning](https://leetcode.com/problems/palindrome-partitioning) | | |
122122
| 133 | [Clone Graph](https://leetcode.com/problems/clone-graph) | | |

src/LongestConsecutiveSequence.java

Lines changed: 15 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,63 +2,32 @@
22
// T: O(n)
33
// S: O(n)
44

5-
import java.util.HashMap;
65
import java.util.HashSet;
7-
import java.util.Map;
86
import java.util.Set;
97

108
public class LongestConsecutiveSequence {
11-
private static class Node {
12-
Node next;
13-
Node previous;
14-
}
15-
169
public int longestConsecutive(int[] nums) {
17-
final Map<Integer, Node> nodes = createDisjointSets(nums);
18-
return longestConsecutiveSequenceLength(nodes);
19-
}
20-
21-
private Map<Integer, Node> createDisjointSets(int[] array) {
22-
final Map<Integer, Node> result = new HashMap<>();
23-
for (int element : array) {
24-
if (result.containsKey(element)) continue;
25-
26-
Node current = new Node();
27-
28-
if (result.containsKey(element - 1)) {
29-
Node left = result.get(element - 1);
30-
left.next = current;
31-
current.previous = left;
32-
}
33-
34-
if (result.containsKey(element + 1)) {
35-
Node right = result.get(element + 1);
36-
current.next = right;
37-
right.previous = current;
38-
}
39-
40-
result.put(element, current);
41-
}
42-
43-
return result;
44-
}
45-
46-
private int longestConsecutiveSequenceLength(Map<Integer, Node> nodes) {
47-
final Set<Node> processedNodes = new HashSet<>();
10+
final Set<Integer> numbers = setFrom(nums);
4811
int maxLength = 0;
4912

50-
for (Node node : nodes.values()) {
51-
int length = getLength(node, processedNodes);
52-
maxLength = Math.max(maxLength, length);
13+
for (int number : numbers) {
14+
if (!numbers.contains(number - 1)) {
15+
int length = 1;
16+
for (int i = number + 1 ; numbers.contains(i) ; i++) {
17+
length++;
18+
}
19+
maxLength = Math.max(maxLength, length);
20+
}
5321
}
5422

5523
return maxLength;
5624
}
5725

58-
private int getLength(Node node, Set<Node> processedNodes) {
59-
if (node == null) return 0;
60-
if (processedNodes.contains(node)) return 0;
61-
processedNodes.add(node);
62-
return 1 + getLength(node.previous, processedNodes) + getLength(node.next, processedNodes);
26+
private Set<Integer> setFrom(int[] array) {
27+
final Set<Integer> set = new HashSet<>();
28+
for (int element : array) {
29+
set.add(element);
30+
}
31+
return set;
6332
}
6433
}

src/SumRootToLeafNumbers.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// https://leetcode.com/problems/sum-root-to-leaf-numbers
2+
// T: O(n)
3+
// S: O(log(n))
4+
5+
public class SumRootToLeafNumbers {
6+
public int sumNumbers(TreeNode root) {
7+
return sumNumbers(root, 0);
8+
}
9+
10+
private int sumNumbers(TreeNode root, int currentSum) {
11+
if (root == null) return 0;
12+
if (isLeafNode(root)) return 10 * currentSum + root.val;
13+
return sumNumbers(root.left, 10 * currentSum + root.val)
14+
+ sumNumbers(root.right, 10 * currentSum + root.val);
15+
}
16+
17+
private boolean isLeafNode(TreeNode root) {
18+
return root.left == null && root.right == null;
19+
}
20+
}

0 commit comments

Comments
 (0)