leetcode刷题笔记——单调栈

1.模板:

stack st;
for(int i = 0; i < nums.size(); i++){
	while(!st.empty() && st.top() > nums[i]){
		st.pop();
        //计算、存放结果
	}
	st.push(nums[i]);
}
 

2.注意事项⭐:

(1)需要注意单调栈中stack存放元素为nums数组的下标还是nums数组中的元素。

例如:如果存放的是下标,比较时需要比较height[i]和height[left.top()],如果存放的是元素,则需比较height[i]和left.top()

(2)遍历栈中元素时需要pop掉栈顶元素时,要提前记录栈的大小,否则pop出去时,栈的大小改变,无法遍历完栈中元素

错误示例×:

stack st;

//由于上一轮循环中pop掉了栈顶元素,栈的大小也随之改变,无法遍历完栈中所有元素
for(int i=0;i

正确做法:

stack st;
int len=st.size();

for(int i=0;i

3.边界情况:要考虑各种边界情况,可代入特例进行检验

你可能感兴趣的:(leetcode,笔记,算法)