Skip to content

Commit 72f2d17

Browse files
solves large number and repeated dna sequences in java
1 parent 592c598 commit 72f2d17

File tree

5 files changed

+121
-12
lines changed

5 files changed

+121
-12
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,8 @@
153153
| 171 | [Excel Sheet Column Number](https://leetcode.com/problems/excel-sheet-column-number) | [![Java](assets/java.png)](src/ExcelSheetColumnNumber.java) [![Python](assets/python.png)](python/excel_sheet_column_number.py) | |
154154
| 172 | [Factoring Trailing Zeroes](https://leetcode.com/problems/factorial-trailing-zeroes) | [![Java](assets/java.png)](src/FactorialTrailingZeros.java) [![Python](assets/python.png)](python/factorial_trailing_zeroes.py) | |
155155
| 173 | [Binary Search Tree Iterator](https://leetcode.com/problems/binary-search-tree-iterator) | [![Java](assets/java.png)](src/BinarySearchTreeIterator.java) | |
156-
| 179 | [Largest Number](https://leetcode.com/problems/largest-number) | | |
157-
| 187 | [Repeated DNA Sequences](https://leetcode.com/problems/repeated-dna-sequences) | | |
156+
| 179 | [Largest Number](https://leetcode.com/problems/largest-number) | [![Java](assets/java.png)](src/LargestNumber.java) | |
157+
| 187 | [Repeated DNA Sequences](https://leetcode.com/problems/repeated-dna-sequences) | [![Java](assets/java.png)](src/RepeatedDNASequences.java) | |
158158
| 189 | [Rotate Array](https://leetcode.com/problems/rotate-array) | [![Java](assets/java.png)](src/RotateArray.java) [![Python](assets/python.png)](python/rotate_array.py) | |
159159
| 190 | [Reverse Bits](https://leetcode.com/problems/reverse-bits) | [![Java](assets/java.png)](src/ReverseBits.java) [![Python](assets/python.png)](python/reverse_bits.py) | |
160160
| 191 | [Number of One Bits](https://leetcode.com/problems/number-of-1-bits) | [![Java](assets/java.png)](src/NumberOf1Bit.java) [![Python](assets/python.png)](python/number_of_1_bits.py) | |

src/HelloWorld.java

+29-10
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,35 @@
11
public class HelloWorld {
22
public static void main(String[] args) {
3-
TreeNode root = new TreeNode(7);
4-
root.left = new TreeNode(3);
5-
root.right = new TreeNode(15);
6-
root.right.left = new TreeNode(9);
7-
root.right.right = new TreeNode(20);
3+
System.out.println(
4+
LargestNumber.largestNumber(new int[] {1, 2, 3})
5+
);
86

9-
TreePrinter.print(root);
7+
System.out.println(
8+
LargestNumber.largestNumber(new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9})
9+
);
1010

11-
BinarySearchTreeIterator.BSTIterator iterator = new BinarySearchTreeIterator.BSTIterator(root);
12-
while (iterator.hasNext()) {
13-
System.out.println(iterator.next());
14-
}
11+
System.out.println(
12+
LargestNumber.largestNumber(new int[] {10, 2})
13+
);
14+
15+
System.out.println(
16+
LargestNumber.largestNumber(new int[] {1})
17+
);
18+
19+
System.out.println(
20+
LargestNumber.largestNumber(new int[] {1, 10, 11, 12})
21+
);
22+
23+
System.out.println(
24+
LargestNumber.largestNumber(new int[] {1, 10, 11, 12, 16, 15, 14, 13, 19, 18, 17})
25+
);
26+
27+
System.out.println(
28+
LargestNumber.largestNumber(new int[] {3, 30, 34, 5, 9})
29+
);
30+
31+
System.out.println(
32+
LargestNumber.largestNumber(new int[] {432, 43243})
33+
);
1534
}
1635
}

src/LargestNumber.java

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// https://leetcode.com/problems/largest-number
2+
// T: O(Nlog(N))
3+
// S: O(N)
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class LargestNumber {
9+
private static final String ZERO = "0";
10+
11+
public static String largestNumber(int[] nums) {
12+
final List<String> numbers = convertToStrings(nums);
13+
numbers.sort((s1, s2) -> {
14+
final String order1 = s1 + s2;
15+
final String order2 = s2 + s1;
16+
return order2.compareTo(order1);
17+
});
18+
19+
if (numbers.get(0).equals(ZERO)) return ZERO;
20+
return combineStrings(numbers);
21+
}
22+
23+
private static String combineStrings(List<String> numbers) {
24+
final StringBuilder result = new StringBuilder();
25+
for (String string : numbers) {
26+
result.append(string);
27+
}
28+
return result.toString();
29+
}
30+
31+
private static List<String> convertToStrings(int[] array) {
32+
final List<String> numbers = new ArrayList<>();
33+
for (int number : array) {
34+
numbers.add(String.valueOf(number));
35+
}
36+
return numbers;
37+
}
38+
}

src/RepeatedDNASequences.java

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// https://leetcode.com/problems/repeated-dna-sequences
2+
// T: O(N)
3+
// S: O(N)
4+
5+
import java.util.ArrayList;
6+
import java.util.HashSet;
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Set;
10+
11+
public class RepeatedDNASequences {
12+
private static final Map<Character, Integer> NUCLEOTIDES_TO_INT = Map.ofEntries(
13+
Map.entry('A', 0),
14+
Map.entry('C', 1),
15+
Map.entry('G', 2),
16+
Map.entry('T', 3)
17+
);
18+
19+
public List<String> findRepeatedDnaSequences(String s) {
20+
final List<String> dnaSequences = new ArrayList<>();
21+
final Set<Integer> encodings = new HashSet<>();
22+
final Set<Integer> repeatedEncodings = new HashSet<>();
23+
24+
for (int i = 0 ; i < s.length() - 9 ; i++) {
25+
final int encoding = getSequenceEncoding(s, i);
26+
if (!encodings.add(encoding) && repeatedEncodings.add(encoding)) {
27+
dnaSequences.add(s.substring(i, i + 10));
28+
}
29+
}
30+
31+
return dnaSequences;
32+
}
33+
34+
private int getSequenceEncoding(String s, int index) {
35+
int encoding = 0;
36+
for (int i = index ; i < index + 10 ; i++) {
37+
encoding <<= 2;
38+
encoding |= NUCLEOTIDES_TO_INT.get(s.charAt(i));
39+
}
40+
return encoding;
41+
}
42+
}

src/TreeNode.java

+10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,16 @@ public class TreeNode implements TreePrinter.PrintableNode {
44
TreeNode right;
55
TreeNode() {}
66

7+
public static final TreeNode EXAMPLE_1;
8+
9+
static {
10+
EXAMPLE_1 = new TreeNode(7);
11+
EXAMPLE_1.left = new TreeNode(3);
12+
EXAMPLE_1.right = new TreeNode(15);
13+
EXAMPLE_1.right.left = new TreeNode(9);
14+
EXAMPLE_1.right.right = new TreeNode(20);
15+
}
16+
717
TreeNode(int val) {
818
this.val = val;
919
}

0 commit comments

Comments
 (0)