Building Boxes LeetCode solution in Java

1
class Solution {
2

3
static final double ONE_THIRD = 1.0d / 3.0d;
4

5
public int minimumBoxes(int n) {
6
int k = findLargestTetrahedralNotGreaterThan(n);
7
int used = tetrahedral(k);
8
int floor = triangular(k);
9
int unused = (n - used);
10
if (unused == 0) {
11
return floor;
12
}
13
int r = findSmallestTriangularNotLessThan(unused);
14
return (floor + r);
15
}
16

17
private final int findLargestTetrahedralNotGreaterThan(int te) {
18
int a = (int) Math.ceil(Math.pow(product(6, te), ONE_THIRD));
19
while (tetrahedral(a) > te) {
20
a--;
21
}
22
return a;
23
}
24

25
private final int findSmallestTriangularNotLessThan(int t) {
26
int a = -1 + (int) Math.floor(Math.sqrt(product(t, 2)));
27
while (triangular(a) < t) {
28
a++;
29
}
30
return a;
31
}
32

33
private final int tetrahedral(int a) {
34
return (int) ratio(product(a, a + 1, a + 2), 6);
35
}
36

37
private final int triangular(int a) {
38
return (int) ratio(product(a, a + 1), 2);
39
}
40

41
private final long product(long... vals) {
42
long product = 1L;
43
for (long val : vals) {
44
product *= val;
45
}
46
return product;
47
}
48

49
private final long ratio(long a, long b) {
50
return (a / b);
51
}
52
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0