• 【单调栈】496. 下一个更大元素 I


    496. 下一个更大元素 I

    解题思路

    • 首先计算nums2的每一个元素的下一个比他大的元素,使用单调栈
    • 将上面的结果和nums2中的每一个元素组成映射map
    • 针对每一个Nums1的元素 查询map 记录map 的value
    class Solution {
        public int[] nextGreaterElement(int[] nums1, int[] nums2) {
            // 计算nums2的每一个元素的下一个更大的元素
            int[] greater = nextGreaterElement(nums2);
    
            // 转换为映射  将nums2的每一个元素和greater中的元素进行对应
            Map<Integer,Integer> greaterMap = new HashMap<>();
    
    
            for(int i =0; i < nums2.length; i++){
                greaterMap.put(nums2[i],greater[i]);// 存储映射
            }
    
            // nums1 是 nums2的子集  所以根据greaterMap 可以得到结果
            // 从Nums2找到每一个元素
            int[] res = new int[nums1.length];
            for(int i = 0; i < nums1.length; i++){
                res[i] = greaterMap.get(nums1[i]);
            }
    
            return res;
        }
        
        // 计算一个数组元素的所有单调栈元素
        public int[] nextGreaterElement(int[] nums){
            // 计算单调栈
            int n = nums.length;
    
            // 存放答案的数组
            int[] res = new int[n];
            Stack<Integer> s = new Stack<>();
    
            // 到这往栈存放
            for(int i = n - 1; i >= 0; i--){
                // 判断各自高矮
                while(!s.isEmpty() && s.peek() <= nums[i]){
                    // 如果栈顶元素 小于等于当前 元素 直接将站内元素出栈
                    s.pop();
                }
    
                // 存放比当前元素大的元素
                res[i] = s.isEmpty() ? -1 : s.peek();// 如果不是空的  直接存放栈顶元素
                s.push(nums[i]);
            }
    
            return res;
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
  • 相关阅读:
    Buildroot 开发
    【音视频基础】AVI文件格式
    Docker-compose
    如何快速生成项目目录结构树?
    计算几何+2sat:1020T3
    打破焦虑!AI 时代的程序员为什么需要云端 IDE?
    第2节 volatile 关键字内存可见性
    RabbitMQ消费者确认消息入门演示
    【vue】AntDV组件库中a-upload实现文件上传:
    Python 中的变量Variable
  • 原文地址:https://blog.csdn.net/qq_44653420/article/details/133325038