Building Boxes LeetCode solution in C++

1
class Solution {
2
private:
3
int getLayerSize(int x) {
4
return x * (x + 1) / 2;
5
}
6
int getCubeSize(int x) {
7
long d = static_cast<long>(x);
8
long sz = (d * (d + 1) * (d + 2)) / 6;
9
return static_cast<int>(sz);
10
}
11

12
public:
13
int minimumBoxes(int n) {
14
// First Binary Search
15
int l(0), r(2000), m;
16
while (l <= r) {
17
m = (l + r) / 2;
18
int sz = getCubeSize(m);
19
if (sz <= n)
20
l = m + 1;
21
else
22
r = m - 1;
23
}
24
int aSideOfPyramid = r;
25
int rest = n - getCubeSize(aSideOfPyramid);
26

27
// Second Binary Search
28
l = 0, r = 2000;
29
while (l <= r) {
30
m = (l + r) / 2;
31
int sz = getLayerSize(m);
32
if (sz < rest)
33
l = m + 1;
34
else
35
r = m - 1;
36
}
37
int addedFloorCubic = l;
38

39
return getLayerSize(aSideOfPyramid) + addedFloorCubic;
40
}
41
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0