題目1: 739. 每日溫度
代碼:
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int n = temperatures.size();
vector<int> result(n);
stack<int> stk;
for(int i = 0; i < n; i++) {
while(!stk.empty() && temperatures[stk.top()] < temperatures[i]) {
int pre = stk.top();
result[pre] = i - pre;
stk.pop();
}
stk.push(i);
}
return result;
}
};
題目2: 496. 下一個(gè)更大元素 I
代碼:
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
int n1 = nums1.size(), n2 = nums2.size();
vector<int> result(n1, -1);
if(n1 == 0) return result;
map<int, int> maps;
for(int i = 0; i < n1; i++) maps[nums1[i]] = i;
stack<int> stk;
stk.push(0);
for(int i = 1; i < n2; i++) {
while(!stk.empty() && nums2[stk.top()] < nums2[i]) {
if(maps.count(nums2[stk.top()]) > 0) {
int pre = maps[nums2[stk.top()]];
result[pre] = nums2[i];
}
stk.pop();
}
stk.push(i);
}
return result;
}
};
題目3: 503. 下一個(gè)更大元素 II
代碼:
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums) {
int n = nums.size();
vector<int> result(n, -1);
stack<int> stk;
for(int i = 0; i < 2 * n; i++) {
while(!stk.empty() && nums[stk.top()] < nums[i % n]) {
int pre = stk.top();
result[pre] = nums[i % n];
stk.pop();
}
stk.push(i % n);
}
return result;
}
};