本文承接:Java-数据结构-单调栈<一>
1. 单调栈的简单介绍和单调栈的用法
见<一>
2. 单调队列
与单调栈相似,单调队列里存的也是具有单调性质的数据。单调队列与普通队列不一样的地方就在于单调队列既可以从队首出队,也可以从队尾出队。即是两个方向都可以进出的“单调栈”。
模板:
for i, num := range nums {
//维护队列的单调性
for len(deque) > 0 && num >= nums[deque[len(deque)-1]] {
deque = deque[:len(deque)-1]
}
deque = append(deque, i)
//取队首的元素判断是否符合结果
for deque[0] <= i-k {
deque = deque[1:]
}
//更新结果
if i >= k-1 {
res = append(res, nums[deque[0]])
}
}
3. leetcode实战
1. leetcode71 简化路径
给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/' 开头),请你将其转化为更加简洁的规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,'//')都被视为单个斜杠 '/' 。 对于此问题,任何其他格式的点(例如,'...')均被视为文件/目录名称。
请注意,返回的 规范路径 必须遵循下述格式:
始终以斜杠 '/' 开头。
两个目录名之间必须只有一个斜杠 '/' 。
最后一个目录名(如果存在)不能 以 '/'