LeetCode打卡 day58--单调栈

这篇具有很好参考价值的文章主要介绍了LeetCode打卡 day58--单调栈。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


知识总结

单调栈的应用, 就是需要构建一个单调递增或者单调递减的栈, 去解决下一个大(小)的元素的问题


Leetcode 739. 每日温度

题目链接

题目说明

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

LeetCode打卡 day58--单调栈,leetcode,java,算法

代码说明

用一个单调递增的stack来储存遍历的温度, 当栈顶的值小于当前的遍历的温度的时候, 说明栈顶的温度已经找到了下一个温度更高的天气, 弹栈.
留在栈的元素说明还没有碰到气温比自己更高的

因为需要记录间隔的天数, 所有栈里面存的是index而不是数值

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        //单调栈, 存放的数据如果比栈顶元素小, 直接存
        //如果比栈顶元素大,将小的元素弹出来, 并且记录下结果
        int[] res = new int[temperatures.length];
        Stack<Integer> stack = new Stack<>();
        for(int i = 0; i < temperatures.length; i++){
            while(!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]){
                int index = stack.pop();
                res[index] = i - index;
            }
            stack.push(i);
        }
        return res;
    }
}

Leetcode 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] 是如上所述的 下一个更大元素

LeetCode打卡 day58--单调栈,leetcode,java,算法

代码说明

继续用单调栈, 但是因为nums1和nums2 位置对应不上, 所以需要一个额外的hasmmap来记录元素对应的index

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        int len1 = nums1.length, len2 = nums2.length;
        Stack<Integer> stack = new Stack<>();
        HashMap<Integer, Integer> map = new HashMap<>();
        int[] res= new int[len1];
        Arrays.fill(res, -1);
        for(int i = 0; i < len1;i++){
            map.put(nums1[i], i);
        }
        stack.push(nums2[0]);
        for(int i = 1; i < len2; i++){
            while(!stack.isEmpty() && nums2[i] > stack.peek()){
                int val = stack.pop();
                if(map.containsKey(val)){
                    res[map.get(val)] = nums2[i];
                }
            }
            stack.push(nums2[i]);
        } 
        return res;
    }
}

当然也可以直接暴力求解文章来源地址https://www.toymoban.com/news/detail-531775.html

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        // Stack<Integer> stack = new Stack<>();
        int[] res= new int[nums1.length];
        Arrays.fill(res, -1);
        boolean lastSeen = false;
        for(int i = 0; i < nums1.length; i++){
            lastSeen = false;
            for(int j = 0; j < nums2.length; j++){
                if(nums1[i] == nums2[j]){
                    lastSeen = true;
                    continue;
                }
                if(lastSeen && nums2[j] > nums1[i]){
                    res[i] = nums2[j];
                    break;
                }
            }
        }
        return res;

        
    }
}

到了这里,关于LeetCode打卡 day58--单调栈的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 算法打卡day39|动态规划篇07| Leetcode 70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数

    Leetcode 70. 爬楼梯(进阶版) 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬至多m (1 = m n)个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 输入描述:输入共一行,包含两个正整数,分别表示n, m 输出描述:输出一个整数,

    2024年04月14日
    浏览(65)
  • day58 单调栈

    使用场景 :通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置 本质 :空间换时间 三个判断条件 : 当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况 当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况 当前遍历的元素T[i]大于栈顶元素T[st.t

    2024年02月14日
    浏览(36)
  • Day58|leetcode 739. 每日温度、496.下一个更大元素 I

    今天开始单调栈! 题目链接:739. 每日温度 - 力扣(LeetCode) 视频链接:单调栈,你该了解的,这里都讲了!LeetCode:739.每日温度_哔哩哔哩_bilibili 题目概述   给定一个整数数组  temperatures  ,表示每天的温度,返回一个数组  answer  ,其中  answer[i]  是指对于第  i  天,下

    2024年02月09日
    浏览(36)
  • 9.8day58 单调栈

    739. 每日温度 - 力扣(LeetCode) 知识点:1.建栈                2.如果后面要加入的数小于栈顶元素就把数组的下标压进栈里                 3.反之 就让该数于栈顶元素进行比较 如果该数大于栈顶元素(while) 就把栈顶元素下表对应的arr数组的值进行相应的赋值  否则就

    2024年02月09日
    浏览(32)
  • 算法leetcode|58. 最后一个单词的长度(rust重拳出击)

    给你一个字符串 s ,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 1 = s.length = 10 4 s 仅有英文字母和空格 ’ ’ 组成 s 中至少存在一个单词 面对这道算法题目,二当家的

    2024年02月13日
    浏览(52)
  • leetcode316. 去除重复字母(单调栈 - java)

    难度 - 中等 leetcode316. 去除重复字母 给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。 示例 1: 输入:s = “bcabc” 输出:“abc” 示例 2: 输入:s = “cbacdcbc” 输出:“acdb”

    2024年02月10日
    浏览(40)
  • 【leetcode:1944. 队列中可以看到的人数】单调栈算法及其相关问题

    1944. 队列中可以看到的人数 有  n  个人排成一个队列, 从左到右  编号为  0  到  n - 1  。给你以一个整数数组  heights  ,每个整数  互不相同 , heights[i]  表示第  i  个人的高度。 一个人能  看到  他右边另一个人的条件是这两人之间的所有人都比他们两人  矮  。更

    2024年01月25日
    浏览(36)
  • 算法练习Day26 (Leetcode/Python-贪心算法)

    122. Best Time to Buy and Sell Stock II You are given an integer array  prices  where  prices[i]  is the price of a given stock on the  ith  day. On each day, you may decide to buy and/or sell the stock. You can only hold  at most one  share of the stock at any time. However, you can buy it then immediately sell it on the  same day . Find and return 

    2024年02月03日
    浏览(42)
  • leetcode做题笔记58

    给你一个字符串  s ,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中  最后一个  单词的长度。 单词  是指仅由字母组成、不包含任何空格字符的最大子字符串。 本题要求最后一个单词长度,只需从后向前遍历,ans不断增加,一旦遇到空格则输出ans的值 本

    2024年02月14日
    浏览(44)
  • 算法练习 Day38 | LeetCode509,70,746

    先导知识: 1、动态规划常见题型 动态规划基础问题 背包问题 打家劫舍 股票问题 子序列问题 2、动态规划五部曲 (1)确定dp数组的定义及下标的含义 (2)确定递推公式 (3)dp数组如何初始化 (4)遍历顺序 (5)打印dp数组 LeetCode509:509. 斐波那契数 题目描述: 斐波那契

    2024年02月21日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包