Skip to content

Commit 01b33b7

Browse files
authored
Update Readme.md
1 parent f08cf54 commit 01b33b7

File tree

1 file changed

+3
-3
lines changed
  • Stack/1944.Number-of-Visible-People-in-a-Queue

1 file changed

+3
-3
lines changed

Stack/1944.Number-of-Visible-People-in-a-Queue/Readme.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
假设A往右第一个能看到的是B,那么B之后任何比B还矮的的人A都看不到。A看到B之后第一个人,一定是```C = nextGreater[B]```。同理,A在C之后的下一个能看到的人又一定是```D = nextGreater[C]```...那么这个过程持续到什么时候停止呢?思考后发现,一旦遇到比A还高的人,这个过程就停止。因为A不可能看到任何nextGreater[A]后面的人。
44

5-
所以A能看到的序列,是从A右边的第一个元素开始的递增序列BCD(即不停地nextGreater),直至遇到比A还高的元素,假设是X。
5+
所以A能看到的序列,是从A右边的第一个元素开始的nextGreater序列BCD...直至遇到比A还高的元素,假设是X。
66

7-
这时候我们考虑一下A左边的元素A',对它而言,无论A与A'的关系如何,A与X之间的BCD都是无法被A'看到的(因为被A遮住了)。这就提醒我们可以将BCD都移走。于是我们想到可以逆序维护一个递减的单调栈
7+
这时候我们不妨考虑一下A左边的元素A',对它而言,无论A与A'的关系如何,A与X之间的BCD...都是无法被A'看到的(因为被A遮住了)。这就提醒我们可以将A与X中间的这部分都移走。于是我们想到可以逆序遍历数组,维护一个递减的单调栈
88

9-
具体做法是:如果新进来的元素A比栈顶元素矮,那么它只能看到栈顶元素。如果新进来的元素A比栈顶元素高,那么所有比A矮的若干栈顶元素(从左往右呈递增序列)都可以被A看到。因为这些元素对于A左边的结果没有帮助,所以可以都将其退栈,在退栈的过程中就可以计数,得到的就是A能看到的个数。注意如果退栈结束后栈顶还存有元素,这个元素一定比A大且能被A看见,统计还要加1.
9+
具体做法是:如果新进来的元素A比栈顶元素矮,那么它只能看到栈顶元素。如果新进来的元素A比栈顶元素高,那么所有比A矮的若干个栈顶元素(从顶往底呈递增序列)都可以被A看到。因为这些元素对于A左边的结果没有帮助,所以可以都将其退栈,在退栈的过程中就可以计数,得到的就是A能看到的个数。注意如果退栈结束后栈顶还存有元素,这个元素一定比A大且能被A看见,统计还要加1.

0 commit comments

Comments
 (0)