File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed
Stack/1944.Number-of-Visible-People-in-a-Queue Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change 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.
You can’t perform that action at this time.
0 commit comments