Registro de preguntas de algoritmo día 58: pila monótona | 739. Temperatura diaria, 496. Siguiente elemento más grande I

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;
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_40395888/article/details/132740553
Recomendado
Clasificación