Question d'algorithme d'enregistrement jour58 - pile monotone | 739. Température quotidienne, 496. Élément plus grand suivant I

739. Température quotidienne - LeetCode

Statut : Temporisation de la violence, AC après vérification de l'idée.

En maintenant continuellement une pile croissante de manière monotone, la réponse peut être obtenue en un seul parcours. Le code est le suivant :

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. Le prochain élément plus grand I - LeetCode

Statut : AC après vérification des idées.

La variante de la question précédente ajoute principalement un unordered_map pour correspondre aux éléments existants. Le code est le suivant :

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_40395888/article/details/132740553
conseillé
Classement