Skip to content

Commit 27343e7

Browse files
authored
fix: handle Null Dereference in NthUglyNumber (#5469)
1 parent 1460eb7 commit 27343e7

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

.inferconfig

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
"src/main/java/com/thealgorithms/datastructures/trees/CreateBinaryTreeFromInorderPreorder.java",
1010
"src/main/java/com/thealgorithms/divideandconquer/ClosestPair.java",
1111
"src/main/java/com/thealgorithms/dynamicprogramming/Fibonacci.java",
12-
"src/main/java/com/thealgorithms/maths/NthUglyNumber.java",
1312
"src/main/java/com/thealgorithms/maths/SimpsonIntegration.java",
1413
"src/main/java/com/thealgorithms/others/Dijkstra.java",
1514
"src/main/java/com/thealgorithms/sorts/TopologicalSort.java",

src/main/java/com/thealgorithms/maths/NthUglyNumber.java

+10-12
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import java.util.ArrayList;
44
import java.util.Arrays;
5-
import java.util.HashMap;
5+
import org.apache.commons.lang3.tuple.MutablePair;
66

77
/**
88
* @brief class computing the n-th ugly number (when they are sorted)
@@ -16,8 +16,7 @@
1616
*/
1717
public class NthUglyNumber {
1818
private ArrayList<Long> uglyNumbers = new ArrayList<>(Arrays.asList(1L));
19-
private final int[] baseNumbers;
20-
private HashMap<Integer, Integer> positions = new HashMap<>();
19+
private ArrayList<MutablePair<Integer, Integer>> positions = new ArrayList<>();
2120

2221
/**
2322
* @brief initialized the object allowing to compute ugly numbers with given base
@@ -29,9 +28,8 @@ public class NthUglyNumber {
2928
throw new IllegalArgumentException("baseNumbers must be non-empty.");
3029
}
3130

32-
this.baseNumbers = baseNumbers;
3331
for (final var baseNumber : baseNumbers) {
34-
this.positions.put(baseNumber, 0);
32+
this.positions.add(MutablePair.of(baseNumber, 0));
3533
}
3634
}
3735

@@ -59,21 +57,21 @@ private void addUglyNumber() {
5957

6058
private void updatePositions() {
6159
final var lastUglyNumber = uglyNumbers.get(uglyNumbers.size() - 1);
62-
for (final var baseNumber : baseNumbers) {
63-
if (computeCandidate(baseNumber) == lastUglyNumber) {
64-
positions.put(baseNumber, positions.get(baseNumber) + 1);
60+
for (var entry : positions) {
61+
if (computeCandidate(entry) == lastUglyNumber) {
62+
entry.setValue(entry.getValue() + 1);
6563
}
6664
}
6765
}
6866

69-
private long computeCandidate(final int candidateBase) {
70-
return candidateBase * uglyNumbers.get(positions.get(candidateBase));
67+
private long computeCandidate(final MutablePair<Integer, Integer> entry) {
68+
return entry.getKey() * uglyNumbers.get(entry.getValue());
7169
}
7270

7371
private long computeMinimalCandidate() {
7472
long res = Long.MAX_VALUE;
75-
for (final var baseNumber : baseNumbers) {
76-
res = Math.min(res, computeCandidate(baseNumber));
73+
for (final var entry : positions) {
74+
res = Math.min(res, computeCandidate(entry));
7775
}
7876
return res;
7977
}

0 commit comments

Comments
 (0)