739. Temperatura diaria - LeetCode
Estado: Tiempo de espera de violencia, AC después de comprobar la idea.
Al mantener continuamente una pila que aumenta monótonamente, la respuesta se puede obtener en un recorrido. El código es el siguiente:
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& temperatures) {
int len = temperatures.size();
vector<int> res(len, 0);
stack<int> st;
for(int i = 0; i < len; ++i){
while(!st.empty() && temperatures[st.top()] < temperatures[i]){
res[st.top()] = i - st.top();
st.pop();
}
st.push(i);
}
return res;
}
};
496. El siguiente elemento más grande I: LeetCode
Estado: AC tras comprobar las ideas.
La variación de la pregunta anterior agrega principalmente un mapa_desordenado para que coincida con los elementos existentes. El código es el siguiente:
class Solution {
public:
vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
int len1 = nums1.size(), len2 = nums2.size();
vector<int> res(len1, -1);
unordered_map<int, int> unmap;
for(int i = 0; i < len1; ++i){
// key 是数组1的值,value是索引
unmap[nums1[i]] = i;
}
stack<int> st;
for(int j = 0; j < len2; ++j){
while(!st.empty() && nums2[st.top()] < nums2[j]){
if(unmap.count(nums2[st.top()]) > 0){
// nums1中存在
int index1 = unmap[nums2[st.top()]];
res[index1] = nums2[j];
}
st.pop();
}
st.push(j);
}
return res;
}
};