下一个更大元素 II
下一个更大元素 II
思路一:扩展数组。
思路二:通过取模操作循环遍历
var nextGreaterElements = function(nums) {
let stack = [];
let res = new Array(nums.length).fill(-1);
stack.push(0);
for (let i = 1; i < nums.length*2; i++) { //注意需要乘以2
const top = stack[stack.length - 1];
const key = i % nums.length
if (nums[top] >= nums[key]) {
//记录结果
stack.push(key);
} else {
while (
stack.length >= 1 &&
nums[stack[stack.length - 1]] < nums[key]
) {
let top = stack.pop();
res[top] = nums[key];//这里再变
}
stack.push(key);
}
}
return res;
};
接雨水
力扣题目链接
利用单调栈特性解决。(递增栈)
横向分块累加求结果
var trap = function(height) {
let stack = [];
stack.push(0);
let res=0
for (let i = 1; i < height.length; i++) {
const top = stack[stack.length - 1];
if (height[top] >= height[i]) {
stack.push(i);
} else {
while (
stack.length >= 1 &&
height[stack[stack.length - 1]] < height[i]
) {
let mid = stack.pop();
if(stack.length >= 1){
let h=Math.min(height[i],height[stack[stack.length-1]])-height[mid]
let width=i -stack[stack.length-1]-1
res += h*width
}
}
stack.push(i);
}
}
return res;
};