单调栈
单调栈 = 栈内元素 自栈顶到栈底 满足 单调性
INIITIALIZE stack
FOR each element u DO
WHILE stack.size() > 0 and stack.top() <= u DO
stack.pop()
END
stack.push(u)
END
单调栈的作用
线性的时间复杂度
单调递增站可以向左向右找到第一个比当前元素小的元素
例如:单调递增栈,第一个使得该元素弹出栈的元素是右边第一个比自己小的元素
单调递减栈可以找到向左,向右第一个比当前元素大的元素
可以求得以当前元素为最之的最大区间
单点队列
单调队列 = 队列里的元素出队的顺序 有单调性
单调栈和单调队列的区别在于:
单调栈只维护一端(栈顶),而单点队列可以维护两端(队首和队尾)
单调栈通常维护全局的单调性,二单调队列通常维护局部的单调性
单调栈大小没有上限,单点队列通常有大小限制
INITIALIZE queue
FOR each element u DO
WHILE queue.size() >0 AND queue.front() does not belong to the interval DO
queue.pop_front()
END
WHILE queue.size() > 0 AND queue.back() > u Do
queue.pop_back()
END
queue.push(u)
END
单调队列用途
单调递增队列用于找局部最小值
单调递减队列用于找局部最大值