leetcode 496. 下一个更大元素 I

2023.8.28

leetcode 496. 下一个更大元素 I_第1张图片

         这题提供暴力解法和单调栈法两种方法。

暴力解:

class Solution {
public:
    vector nextGreaterElement(vector& nums1, vector& nums2) {
        vector ans(nums1.size(),-1);
        for(int i=0; i

单调栈:

        题中说了数组中没有重复的元素,为了避免重复遍历nums2数组,可以用一个哈希map和单调栈stack将nums2数组中的每个元素对应其查询值存储在map中,类似于每日温度。然后再遍历nums1查询相应元素对应的查询值。 代码如下:

class Solution {
public:
    vector nextGreaterElement(vector& nums1, vector& nums2) {
        unordered_map hashmap;
        stack stk;
        for(int i=nums2.size()-1; i>=0; i--)
        {
            while(!stk.empty() && nums2[i]>=stk.top()) stk.pop();
            hashmap[nums2[i]] = stk.empty()? -1 : stk.top(); //栈为空说明没有比当前元素更大的元素了,即查询结果为-1。
            stk.push(nums2[i]);
        }
        vector ans(nums1.size());
        for(int i=0; i

你可能感兴趣的:(leetcode专栏,leetcode,算法,职场和发展,c++,数据结构)