1.每日温度
1.1 题目
https://leetcode.cn/problems/daily-temperatures/description/
1.2 题解
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures)
{
vector<int> result(temperatures.size(), 0);
stack<int> st;
st.push(0);
for (int i = 1; i < temperatures.size(); i++)
{
while (!st.empty()&&temperatures[i] > temperatures[st.top()])
{
result[st.top()] = i-st.top();
st.pop();
}
st.push(i);
}
return result;
}
};
2.下一个更大元素
2.1 题目
https://leetcode.cn/problems/next-greater-element-i/
2.2 题解
class Solution
{
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2)
{
vector<int> result(nums1.size(), -1);
if (nums1.size() == 0) return result;
stack<int> stc;
unordered_map<int, int> umap;
for (int i = 0; i < nums1.size(); i++)
{
umap[nums1[i]] = i;
}
stc.push(0);
for (int i = 1; i < nums2.size(); i++)
{
while (!stc.empty() && nums2[i] > nums2[stc.top()])
{
if (umap.count(nums2[stc.top()]) > 0)
{
int index = umap[nums2[stc.top()]];
result[index] = nums2[i];
}
stc.pop();
}
stc.push(i);
}
return result;
}
};
3.下一个更大元素II
3.1 题目
https://leetcode.cn/problems/next-greater-element-ii/description/
3.2 题解
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums)
{
vector<int> tmp = nums;
for (const auto& i : nums)
{
tmp.push_back(i);
}
vector<int> result(tmp.size(), -1);
stack<int> st;
st.push(0);
for (int i = 1; i < tmp.size(); i++)
{
while (!st.empty() && tmp[i] > tmp[st.top()])
{
result[st.top()] = tmp[i];
st.pop();
}
st.push(i);
}
result.resize(nums.size());
return result;
}
};
class Solution {
public:
vector<int> nextGreaterElements(vector<int>& nums)
{
vector<int> result(nums.size(), -1);
stack<int> st;
st.push(0);
for (int i = 1; i < 2 * nums.size(); i++)
{
int j = i % nums.size();
while (!st.empty() && nums[j] > nums[st.top()])
{
result[st.top()] = nums[j];
st.pop();
}
st.push(j);
}
return result;
}
};