Skip to content

Commit 0b35db4

Browse files
authored
Create 1840-maximum-building-height.js
1 parent 2f41916 commit 0b35db4

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

1840-maximum-building-height.js

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* @param {number} n
3+
* @param {number[][]} restrictions
4+
* @return {number}
5+
*/
6+
var maxBuilding = function (n, restrictions) {
7+
restrictions.sort((a, b) => a[0] - b[0]);
8+
let prevInd = 1,
9+
prevH = 0;
10+
for (let i = 0; i < restrictions.length; i++) {
11+
restrictions[i][1] = Math.min(
12+
restrictions[i][1],
13+
prevH + (restrictions[i][0] - prevInd)
14+
);
15+
prevInd = restrictions[i][0];
16+
prevH = restrictions[i][1];
17+
}
18+
19+
for (let i = restrictions.length - 2; i >= 0; i--) {
20+
restrictions[i][1] = Math.min(
21+
restrictions[i][1],
22+
restrictions[i + 1][1] + (restrictions[i + 1][0] - restrictions[i][0])
23+
);
24+
}
25+
26+
let ph = 0,
27+
pInd = 1,
28+
highest = 0;
29+
for (let i = 0; i < restrictions.length; i++) {
30+
let ind = restrictions[i][0];
31+
let h = restrictions[i][1];
32+
if (ph < h) {
33+
h = Math.min(h, ph + (ind - pInd));
34+
35+
let remains = Math.max(0, ind - pInd - (h - ph));
36+
highest = Math.max(highest, h + ~~(remains / 2));
37+
} else {
38+
let remains = ind - pInd - (ph - h);
39+
highest = Math.max(highest, ph + ~~(remains / 2));
40+
}
41+
ph = h;
42+
pInd = ind;
43+
}
44+
highest = Math.max(highest, ph + (n - pInd));
45+
return highest;
46+
};

0 commit comments

Comments
 (0)