Find the Longest Valid Obstacle Course at Each Position LeetCode solution in JavaScript
1var longestObstacleCourseAtEachPosition = function (obstacles) {2var n = obstacles.length;3var lis = [];4var res = new Array(n).fill(0);5for (var i = 0; i < n; i++) {6if (lis.length > 0 && obstacles[i] >= lis[lis.length - 1]) {7lis.push(obstacles[i]);8res[i] = lis.length;9} else {10// find the upper bound11var l = 0;12var r = lis.length;13while (l <= r) {14var mid = Math.floor((l + r) / 2);15if (lis[mid] <= obstacles[i]) {16l = mid + 1;17} else {18r = mid - 1;19}20}21lis[l] = obstacles[i];22res[i] = l + 1;23}24}25return res;26};