显然,用两个for嵌套可以解决这个问题,不过时间复杂度是N^2级别的。
对于这道题,还存在一个复杂度N的算法。
定义一个栈S用来存放还没有确定Next的人的编号,容易证明,S从栈底到栈顶一定是单调递减(或者相等)的。从左到右扫描H数组。
- 如果栈空,那么Push(S,i)。
- 如果当前H[i]大于栈顶元素,那么Next[S[top]]=i,Pop(S),不断执行直到栈空或者栈顶元素大于当前H[i]。然后Push(S,i)。
由于每个元素都进栈一次,至多出栈一次, 因此时间复杂度是线性级别的。
-->
No comments:
Post a Comment