利用递减栈
//维护一个递减栈
//栈中的元素按递减排列
//若栈为空,则当前元素cur直接入栈
//否则将当前元素cur与栈顶元素比较
//若当前元素cur大于栈顶元素,则将栈顶元素出栈,继续比较新栈顶元素,直到栈为空或者栈顶元素大于当前元素当前元素cur入栈,否则,当前元素cur直接入栈
//栈中存储着数组元素的下标
//遍历给定数组的同时,将数组元素与栈顶元素指向的元素相比
//栈顶元素为数组当前元素的前一个值,如果当前元素大于栈顶元素,则栈顶元素出栈,并且栈顶元素的下一个比它大的元素即为当前元素
class Solution {
public:
vector<int>dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
stack<int> sta;
vector<int> result(n,0);
for(int i = 0;i<n;i++)
{
while(!sta.empty() && temperatures[i] > temperatures[sta.top()])
{
auto t = sta.top();
sta.pop();
result[t] = i - t;
}
sta.push(i);
}
return result;
}
};
//超出时间限制
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
vector<int> result;
for(int i = 0;i<temperatures.size();i++)
{
int ret = 0;
for(int j = i+1;j<temperatures.size();j++)
{
if(temperatures[j] > temperatures[i])
{
ret = 1;
result.push_back(j-i);
break;
}
}
if(ret == 0)
result.push_back(0);
}
return result;
}
};