代码随想录打卡第六十天|● 739. 每日温度 ● 496.下一个更大元素 I

739. 每日温度

题目: 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

题目链接: 739. 每日温度
解题思路:

维持一个递减的单调栈,一旦,没有递减 进行出栈 当前元素大于栈顶元素则说明栈顶元素找到下一个更高温度,记录结果并出栈

代码:

java 复制代码
class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] res=new int[temperatures.length];
        Stack<Integer> zhan=new Stack<Integer>();
        for(int i=0;i<temperatures.length;i++){
            if(zhan.isEmpty()){
                zhan.push(i);
            }else{
                while(!zhan.isEmpty()&&temperatures[i]>temperatures[zhan.peek()]){
                    res[zhan.peek()]=i-zhan.peek();
                    zhan.pop();
                }
                zhan.push(i);
            }
        }
        return res;
    }
}

496.下一个更大元素 I

题目: nums1 中数字 x 的 下一个更大元素 是指 x 在 nums2 中对应位置 右侧 的 第一个 比 x 大的元素。给你两个 没有重复元素 的数组 nums1 和 nums2 ,下标从 0 开始计数,其中nums1 是 nums2 的子集。对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素 。如果不存在下一个更大元素,那么本次查询的答案是 -1 。返回一个长度为 nums1.length 的数组 ans 作为答案,满足 ans[i] 是如上所述的 下一个更大元素 。

题目链接: 496. 下一个更大元素 I
解题思路及代码如下:

java 复制代码
        //暴力法
        //遍历nums1 在nums2中找nums1下一个更大
        //单调栈法 使用map存储nums1 对nums2使用单调栈发 将值赋给nums1的对应位置
class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        Stack<Integer> temp = new Stack<>();
        int[] res = new int[nums1.length];
        Arrays.fill(res,-1);
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i = 0 ; i< nums1.length ; i++){
            hashMap.put(nums1[i],i);
        }
        temp.add(0);
        for (int i = 1; i < nums2.length; i++) {
            if (nums2[i] <= nums2[temp.peek()]) {
                temp.add(i);
            } else {
                while (!temp.isEmpty() && nums2[temp.peek()] < nums2[i]) {
                    if (hashMap.containsKey(nums2[temp.peek()])){
                        Integer index = hashMap.get(nums2[temp.peek()]);
                        res[index] = nums2[i];
                    }
                    temp.pop();
                }
                temp.add(i);
            }
        }

        return res;
    }
}
相关推荐
泡沫冰@16 小时前
数据结构(20)
数据结构
Miraitowa_cheems19 小时前
LeetCode算法日记 - Day 106: 两个字符串的最小ASCII删除和
java·数据结构·算法·leetcode·深度优先
Alex艾力的IT数字空间19 小时前
设计既保持高性能又兼顾可移植性的跨平台数据结构
数据结构·分布式·算法·微服务·中间件·架构·动态规划
耳总是一颗苹果19 小时前
数据结构---顺序表
数据结构
未若君雅裁19 小时前
LeetCode 51 - N皇后问题 详解笔记
java·数据结构·笔记·算法·leetcode·剪枝
小王C语言20 小时前
优先算法---双指针和滑动窗口
数据结构
大袁同学1 天前
【哈希hash】:程序的“魔法索引”,实现数据瞬移
数据结构·c++·算法·哈希算法·散列表
@卞1 天前
ST 表相关练习题
数据结构·c++·算法
Ace_31750887761 天前
拼多多关键字搜索接口逆向:从 WebSocket 实时推送解析到商品数据结构化重建
数据结构·websocket·网络协议
天选之女wow1 天前
【Hard——Day4】25.K 个一组翻转链表
数据结构·算法·leetcode·链表