mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-11 06:04:27 +08:00
fix: handle Null Dereference in NthUglyNumber
(#5469)
This commit is contained in:
@ -9,7 +9,6 @@
|
|||||||
"src/main/java/com/thealgorithms/datastructures/trees/CreateBinaryTreeFromInorderPreorder.java",
|
"src/main/java/com/thealgorithms/datastructures/trees/CreateBinaryTreeFromInorderPreorder.java",
|
||||||
"src/main/java/com/thealgorithms/divideandconquer/ClosestPair.java",
|
"src/main/java/com/thealgorithms/divideandconquer/ClosestPair.java",
|
||||||
"src/main/java/com/thealgorithms/dynamicprogramming/Fibonacci.java",
|
"src/main/java/com/thealgorithms/dynamicprogramming/Fibonacci.java",
|
||||||
"src/main/java/com/thealgorithms/maths/NthUglyNumber.java",
|
|
||||||
"src/main/java/com/thealgorithms/maths/SimpsonIntegration.java",
|
"src/main/java/com/thealgorithms/maths/SimpsonIntegration.java",
|
||||||
"src/main/java/com/thealgorithms/others/Dijkstra.java",
|
"src/main/java/com/thealgorithms/others/Dijkstra.java",
|
||||||
"src/main/java/com/thealgorithms/sorts/TopologicalSort.java",
|
"src/main/java/com/thealgorithms/sorts/TopologicalSort.java",
|
||||||
|
@ -2,7 +2,7 @@ package com.thealgorithms.maths;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import org.apache.commons.lang3.tuple.MutablePair;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief class computing the n-th ugly number (when they are sorted)
|
* @brief class computing the n-th ugly number (when they are sorted)
|
||||||
@ -16,8 +16,7 @@ import java.util.HashMap;
|
|||||||
*/
|
*/
|
||||||
public class NthUglyNumber {
|
public class NthUglyNumber {
|
||||||
private ArrayList<Long> uglyNumbers = new ArrayList<>(Arrays.asList(1L));
|
private ArrayList<Long> uglyNumbers = new ArrayList<>(Arrays.asList(1L));
|
||||||
private final int[] baseNumbers;
|
private ArrayList<MutablePair<Integer, Integer>> positions = new ArrayList<>();
|
||||||
private HashMap<Integer, Integer> positions = new HashMap<>();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief initialized the object allowing to compute ugly numbers with given base
|
* @brief initialized the object allowing to compute ugly numbers with given base
|
||||||
@ -29,9 +28,8 @@ public class NthUglyNumber {
|
|||||||
throw new IllegalArgumentException("baseNumbers must be non-empty.");
|
throw new IllegalArgumentException("baseNumbers must be non-empty.");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.baseNumbers = baseNumbers;
|
|
||||||
for (final var baseNumber : baseNumbers) {
|
for (final var baseNumber : baseNumbers) {
|
||||||
this.positions.put(baseNumber, 0);
|
this.positions.add(MutablePair.of(baseNumber, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,21 +57,21 @@ public class NthUglyNumber {
|
|||||||
|
|
||||||
private void updatePositions() {
|
private void updatePositions() {
|
||||||
final var lastUglyNumber = uglyNumbers.get(uglyNumbers.size() - 1);
|
final var lastUglyNumber = uglyNumbers.get(uglyNumbers.size() - 1);
|
||||||
for (final var baseNumber : baseNumbers) {
|
for (var entry : positions) {
|
||||||
if (computeCandidate(baseNumber) == lastUglyNumber) {
|
if (computeCandidate(entry) == lastUglyNumber) {
|
||||||
positions.put(baseNumber, positions.get(baseNumber) + 1);
|
entry.setValue(entry.getValue() + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private long computeCandidate(final int candidateBase) {
|
private long computeCandidate(final MutablePair<Integer, Integer> entry) {
|
||||||
return candidateBase * uglyNumbers.get(positions.get(candidateBase));
|
return entry.getKey() * uglyNumbers.get(entry.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
private long computeMinimalCandidate() {
|
private long computeMinimalCandidate() {
|
||||||
long res = Long.MAX_VALUE;
|
long res = Long.MAX_VALUE;
|
||||||
for (final var baseNumber : baseNumbers) {
|
for (final var entry : positions) {
|
||||||
res = Math.min(res, computeCandidate(baseNumber));
|
res = Math.min(res, computeCandidate(entry));
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user