每日温度
根据每日 气温
列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0
来代替。
例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]
,你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]
。
提示:气温
列表长度的范围是 [1, 30000]
。每个气温的值的都是 [30, 100]
范围内的整数。
/* 暴力法不考虑。 思路很重要:这道题因为前面元素一旦用到就不再使用,有可能用到栈。递增递减类问题,考虑使用递增栈递减栈。 73 < 74,73之后便不再使用了,小的元素不再使用了(pop),因此极有可能是递减栈,那么就从递减栈开始尝试。 单调栈: 开始:维护递减栈,保持下大上小。比对当前元素与栈顶元素的大小: case1:当前元素 > 栈顶元素:弹出栈顶元素,这时候两者下标差值即为所求天数,弹出后可能依然当前元素 > 栈顶元素,那么继续弹出,下标差依然是所求天数,因此用while; case2:当前元素 <= 栈顶元素:入栈,不需要做其他操作。 */ #include <iostream> #include <string.h> #include <vector> #include <stack> #include <algorithm>//min()包含头文件 using namespace std; vector<int> dailyTemperatures(vector<int>& T) { int size = T.size(); vector<int> res(size,0); stack<int> tmp; for(int i=0;i<size;i++) { if(tmp.empty()) tmp.push(i); else if(T[tmp.top()]>=T[i])tmp.push(i); else { while(!tmp.empty()&&T[tmp.top()]<T[i]) { res[tmp.top()]=i-tmp.top(); tmp.pop(); } tmp.push(i); } } return res; } int main(){ vector<int> T(10); T[0]=73; T[1]=74; T[2]=75; T[3]=71; T[4]=69; T[5]=72; T[6]=76; T[7]=73; // vector<int> T = {73, 74, 75, 71, 69, 72, 76, 73}; vector<int> res = dailyTemperatures(T); string s= "abbab"; string long_str = longestPalindrome(s); int num = countSubstrings(s); cout<<long_str<<endl; cout<<num<<endl; for (int i=0;i<res.size();i++){ cout<<" "<<res[i]; } cout<<endl; return 0; }