单调栈和单调队列

单调栈

单调栈 = 栈内元素 自栈顶到栈底 满足 单调性

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

单调队列用途

单调递增队列用于找局部最小值
单调递减队列用于找局部最大值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值