NC208. 每日温度
描述
示例1
输入:
[1,2,3]
输出:
[1,1,0]
示例2
输入:
[2,4,5,9,10,0,9]
输出:
[1,1,1,1,0,1,0]
示例3
输入:
[3,1,4]
输出:
[2,1,0]
C++ 解法, 执行用时: 17ms, 内存消耗: 2584KB, 提交时间: 2021-12-07
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param temperatures int整型vector * @return int整型vector */ vector<int> temperatures(vector<int>& temperature) { // write code here stack<int> s; int t_size=temperature.size(); vector<int> res(t_size); for(int i=t_size-1;i>=0;i--){ while(!s.empty() && temperature[i]>=temperature[s.top()]){ s.pop(); } res[i]=s.empty() ? 0: s.top()-i; s.push(i); } return res; } };
C++ 解法, 执行用时: 17ms, 内存消耗: 2588KB, 提交时间: 2022-01-17
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param temperatures int整型vector * @return int整型vector */ vector<int> temperatures(vector<int>& temperatures) { // write code here vector<int>result(temperatures.size(),0); stack<int>st; st.push(0); for(int i=1;i<temperatures.size();i++) { if(temperatures[i]<=temperatures[st.top()]) st.push(i); else { while(!st.empty()&&temperatures[i]>temperatures[st.top()]) { result[st.top()]=i-st.top(); st.pop(); } st.push(i); } } return result; } };
C++ 解法, 执行用时: 17ms, 内存消耗: 2712KB, 提交时间: 2021-12-09
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param temperatures int整型vector * @return int整型vector */ vector<int> temperatures(vector<int>& temperatures) { int size=temperatures.size(); vector<int> result(size, 0); stack<int> s; for(int i=0;i<size;++i) { int temp=temperatures[i]; if(s.empty()) { s.push(i); } else { while(!s.empty() && temperatures[s.top()]<temp) { int idx=s.top(); s.pop(); result[idx]=i-idx; } s.push(i); } } return result; } };
C++ 解法, 执行用时: 17ms, 内存消耗: 2724KB, 提交时间: 2022-02-12
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param temperatures int整型vector * @return int整型vector */ vector<int> temperatures(vector<int>& temperatures) { vector<int> ret(temperatures.size(), 0); stack<int> stk; for(int i=0; i<temperatures.size(); ++i) { while(!stk.empty() && temperatures[i] > temperatures[stk.top()]) { ret[stk.top()] = i - stk.top(); stk.pop(); } stk.push(i); } return ret; } };
C++ 解法, 执行用时: 18ms, 内存消耗: 2584KB, 提交时间: 2022-01-21
class Solution { public: vector<int> temperatures(vector<int> &nums) { int t_idx; int n = nums.size(); stack<int> stk; vector<int> res(n, 0); // 从后往前推导 res[n-1] = 0; stk.push(n-1); for(int i = n-2; i >= 0; i--) { if(nums[i] < nums[stk.top()]) { res[i] = stk.top() - i; stk.push(i); } else { while(!stk.empty() && nums[i] >= nums[stk.top()]) { stk.pop(); } res[i] = (stk.empty() == false) ? (stk.top() - i) : 0; stk.push(i); } } return res; } }; /* [1,2,3] [1,1,0] [3,1,4] [2,1,0] [2,4,5,9,3,10] [1,1,1,2,1,0] [2,4,5,9,10,0,9] [1,1,1,1,0,1,0] */