标签:
今天在qq群了看到了这个题目,觉得用单调栈的解法挺好,可以在o(n)内搞定,特意记录下来
首先明确单调栈的含义:
栈是FILO的,栈的所有操作都是在栈顶进行。
单调性指的是当前栈中存储的元素是严格的递增或者递减。
递增:栈中元素从栈顶到栈底是严格递增的; 递减:栈中元素从栈顶到栈底是严格递减的。
举例:先后入栈的元素假设为9,3,10,1,15。。
考虑递增栈:
初始时,栈为空;
9入栈,栈当前为(9)
3入栈,栈不变
10入栈,9出栈,栈当前为(10)
1入栈,栈不变
15入栈,10出栈,栈当前为(15)
本题目解读:(群中出题者给的例子)
举例:
初始标记都是0={0, 0, 0, 0}
取子区间[1, 4] 最大数是4 所以4做一次标记 标记变为{0, 1, 0, 0}
子区间[1, 3] 最大数还是4 {0, 2, 0 ,0}
[1, 2] {0, 3, 0, 0}
……
有n个数(两两不同),对于这n个数的每个连续子序列,把其中最大的一个数标记一次,问最后每个数被标记次数
标签:
原文地址:http://www.cnblogs.com/xlzhh/p/4415731.html