LeetCode 496.下一个更大元素 I
本文最后更新于589 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com

https://programmercarl.com/0496.%E4%B8%8B%E4%B8%80%E4%B8%AA%E6%9B%B4%E5%A4%A7%E5%85%83%E7%B4%A0I.html

1.本题是上一个题的套壳题目就是单调栈的题,本题其实难点在于不知道怎么处理nums1和nums2之间的关系,就是在nums2里找到属于nums1的元素我们要怎么定位到在nums1里的下标来存放利用单调栈所求出的该元素右边一个大于该元素的值,所以第一个操作就是用一个mapnums1里的key:元素和values:下标存起来,这样到时候就可以在单调栈里面遍历nums2的时候找到元素之后在map找到对应在nums1里的元素的下标,将这个右边第一个大于该元素的值存在这个下标处,除了比较繁琐以及数组的含义,还是要自己厘清每一个容器代表的含义以及要对于单调栈里面的操作要更加熟练。

CPP

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        stack<int> st;
        vector<int> res(nums1.size(), -1);
        unordered_map<int,int> umap;
        st.push(0);
        for(int i = 0; i < nums1.size(); i++)umap[nums1[i]] = i;

        for(int i = 1; i < nums2.size(); i++){
            if(nums2[i] <= nums2[st.top()]){
                st.push(i);
            }else{
                while(!st.empty() && nums2[i] > nums2[st.top()]){
                    if(umap.count(nums2[st.top()]) > 0){
                        res[umap[nums2[st.top()]]] = nums2[i];
                    }
                    st.pop();
                }
                st.push(i);
            }
        }
        return res;
    }
};
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
Cream_dpl