Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
awesome-algorithm
提交
6daa16d6
A
awesome-algorithm
项目概览
OpenDocCN
/
awesome-algorithm
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
awesome-algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
6daa16d6
编写于
12月 29, 2017
作者:
K
KEQI HUANG
提交者:
GitHub
12月 29, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update 255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
上级
a35dd993
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
3 deletion
+28
-3
255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
+28
-3
未找到文件。
255._Verify_Preorder_Sequence_in_Binary_Search_Tree.md
浏览文件 @
6daa16d6
...
...
@@ -20,6 +20,8 @@ Medium
5 12
/ \
2 6
preorder:[10, 5, 2, 6, 12]
```
如这个例子,我们在10的位置是没有最小值限定的,然后降序走到5,依然没有最小值,降序走到2,依然没有,然后开始升序了,遇到6,这时候之后的数字一定大于2,同时也大于5,所以最小值更新为之前遍历过的,且比当前数稍微小一点的那个数。这里我们可以用一个栈来暂存之前的路径,所以升序时就是将栈中元素不断pop出来直到栈顶大于当前数,而最小值就是最后一个pop出来的数,最后再把该数push进去。对于降序的时候,直接向里面push就行了。这样,序列无效的条件就是违反了这个最小值的限定。
...
...
@@ -34,12 +36,35 @@ class Solution(object):
:rtype: bool
"""
stack
=
[]
lower
=
-
1
<<
31
# 初始化最小值为最小整数
min_num
=
-
1
<<
31
# 初始化最小值为最小整数
for
x
in
preorder
:
if
x
<
lower
:
# 违反最小值限定则是无效的
if
x
<
min_num
:
# 违反最小值限定则是无效的
return
False
while
stack
and
x
>
stack
[
-
1
]:
# 将路径中所有小于当前的数pop出来并更新最小值
lower
=
stack
.
pop
()
min_num
=
stack
.
pop
()
stack
.
append
(
x
)
# 将当前值push进去
return
True
```
Follow up: O(1) space
we realize that the preorder array can be reused as the stack thus achieve O(1) extra space, since the scanned items of preorder array is always more than or equal to the length of the stack.
```
python
class
Solution
(
object
):
def
verifyPreorder
(
self
,
preorder
):
"""
:type preorder: List[int]
:rtype: bool
"""
# stack = preorder[:i], reuse preorder as stack
lower
=
-
1
<<
31
i
=
0
for
x
in
preorder
:
if
x
<
lower
:
return
False
while
i
>
0
and
x
>
preorder
[
i
-
1
]:
lower
=
preorder
[
i
-
1
]
i
-=
1
preorder
[
i
]
=
x
i
+=
1
return
True
```
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录