本文共 867 字,大约阅读时间需要 2 分钟。
题目:给出一个数组,对每个位置,在当前位置后面找出最近的比当前位置大的数,求出位置差。
思路:维护一个值单调递减的栈(栈中的元素是数组元素的下标),当前元素大于栈顶元素,将栈顶元素出栈,直到栈空或者当前元素小于栈顶元素为止。在结果数组中记录结果(当前下标减去栈顶元素)。更新当前元素。直到遍历所有元素。
例如 temperatures = [73, 74, 75, 71, 69, 72, 76, 73] .
下标 栈 结果数组0 0 0 0 0 0 0 0 0 01 1 1 0 0 0 0 0 0 02 2 1 1 0 0 0 0 0 03 2 3 1 1 0 0 0 0 0 04 2 3 4 1 1 0 0 0 0 0 05 2 5 1 1 0 2 1 0 0 06 6 1 1 4 2 1 1 0 07 6 7 1 1 4 2 1 1 0 0
代码
class Solution {public: vector dailyTemperatures(vector & temperatures) { stack s; vector v(temperatures.size(),0); for(int x=0;x
转载地址:http://tnrai.baihongyu.com/