diff --git a/.inferconfig b/.inferconfig index e7af307a63bf..6af4f9e2e818 100644 --- a/.inferconfig +++ b/.inferconfig @@ -9,7 +9,6 @@ "src/main/java/com/thealgorithms/datastructures/trees/CreateBinaryTreeFromInorderPreorder.java", "src/main/java/com/thealgorithms/divideandconquer/ClosestPair.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/others/Dijkstra.java", "src/main/java/com/thealgorithms/sorts/TopologicalSort.java", diff --git a/src/main/java/com/thealgorithms/maths/NthUglyNumber.java b/src/main/java/com/thealgorithms/maths/NthUglyNumber.java index 103ff504ad14..90507701332f 100644 --- a/src/main/java/com/thealgorithms/maths/NthUglyNumber.java +++ b/src/main/java/com/thealgorithms/maths/NthUglyNumber.java @@ -2,7 +2,7 @@ import java.util.ArrayList; 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) @@ -16,8 +16,7 @@ */ public class NthUglyNumber { private ArrayList uglyNumbers = new ArrayList<>(Arrays.asList(1L)); - private final int[] baseNumbers; - private HashMap positions = new HashMap<>(); + private ArrayList> positions = new ArrayList<>(); /** * @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."); } - this.baseNumbers = baseNumbers; for (final var baseNumber : baseNumbers) { - this.positions.put(baseNumber, 0); + this.positions.add(MutablePair.of(baseNumber, 0)); } } @@ -59,21 +57,21 @@ private void addUglyNumber() { private void updatePositions() { final var lastUglyNumber = uglyNumbers.get(uglyNumbers.size() - 1); - for (final var baseNumber : baseNumbers) { - if (computeCandidate(baseNumber) == lastUglyNumber) { - positions.put(baseNumber, positions.get(baseNumber) + 1); + for (var entry : positions) { + if (computeCandidate(entry) == lastUglyNumber) { + entry.setValue(entry.getValue() + 1); } } } - private long computeCandidate(final int candidateBase) { - return candidateBase * uglyNumbers.get(positions.get(candidateBase)); + private long computeCandidate(final MutablePair entry) { + return entry.getKey() * uglyNumbers.get(entry.getValue()); } private long computeMinimalCandidate() { long res = Long.MAX_VALUE; - for (final var baseNumber : baseNumbers) { - res = Math.min(res, computeCandidate(baseNumber)); + for (final var entry : positions) { + res = Math.min(res, computeCandidate(entry)); } return res; }