单调栈的使用
/**
* @param {number[]} heights
* @return {number[]}
*/
var canSeePersonsCount = function(heights) {
var arr = []; // 维护一个单调的栈,栈中的元素是单调递减的
var res = [];
const n = heights.length;
for (let i = n - 1; i >= 0; i -= 1) {
let count = 0;
while(arr.length) {
// 判断最后一个元素和当前元素的大小关系
if (arr[arr.length - 1] < heights[i]) {
count += 1;
arr.pop();
}
else
break;
}
// 如果栈不为空
if (arr.length !== 0)
res.unshift(count + 1);
else
res.unshift(count)
arr.push(heights[i])
}
return res;
};
维护一个单调递增或者单调递减的栈,方便我们之后根据栈中的元素获取我们的结果