题意理解
给定一组数字【30,100】,输出每个数字距离比它本身大的数字的最小距离。
问题分析
数组
用递减栈,栈用来保存没找到比它大的数字。如果找到了数字,就挨个出栈填上距离值。
0215:原数组不好找规律,用栈挑选出合适的元素来记忆。
其他
https://leetcode-cn.com/problems/daily-temperatures/
链接
vector<int> dailyTemperatures(vector<int>& T) {
const int n = T.size(); //计算长度,时间缩短一半
vector<int> res(n, 0); //保存结果
stack<int> st; /栈
for (int i = 0; i != n; i ++) { //遍历数组
while (!st.empty() && T[i] > T[st.top()]) { //比较当前元素是不是比栈顶元素小
int idx = st.top(); //取栈顶元素
res[idx] = i - idx; //填距离
st.pop(); //弹栈
}
st.push(i); //否则,入栈冬眠,等待新的元素将它唤醒
}
return res;
}