首页 > 编程语言 >代码随想录算法训练营 | 739. 每日温度,496.下一个更大元素 I ,503.下一个更大元素II

代码随想录算法训练营 | 739. 每日温度,496.下一个更大元素 I ,503.下一个更大元素II

时间:2024-10-20 20:02:32浏览次数:1  
标签:nums int res 元素 随想录 st length 更大 nums2

739. 每日温度
题目链接:739. 每日温度
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰每日温度
日期:2024-10-20

想法:遍历一遍数组,用栈来存数组下标做记录,因为要找更高得温度,当当前遍历的温度大于栈头存储(存的下标)的温度时,就可以知道栈头要过多少天遇到高温,低的时候直接入栈。
Java代码如下:

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int len = temperatures.length;
        int[] res = new int[len];
        Deque<Integer> st = new LinkedList<>();
        st.push(0);

        for(int i = 1; i < len; i++) {
            if(temperatures[i] <= temperatures[st.peek()]) {
                st.push(i);
            }else {
                while(!st.isEmpty() && temperatures[i] > temperatures[st.peek()]) {
                    res[st.peek()] = i - st.peek();
                    st.pop();
                }
                st.push(i);
            }
        }
        return res;
    }
}

496.下一个更大元素 I
题目链接:496.下一个更大元素 I
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰下一个更大元素 I
日期:2024-10-20

想法:需要用一个hashmap来确定nums2中元素在不在nums1中,其余跟上面基本一样。
Java代码如下:

class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        Deque<Integer> st = new LinkedList<>();
        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);
        }
        st.push(0);
        for(int i = 1; i < nums2.length; i++) {
            if (nums2[i] <= nums2[st.peek()]) {
                st.push(i);
            } else {
                while(!st.isEmpty() && nums2[i] > nums2[st.peek()]) {
                    if(hashMap.containsKey(nums2[st.peek()])) {
                        Integer index = hashMap.get(nums2[st.peek()]);
                        res[index] = nums2[i];
                    }
                    st.pop();
                }
                st.push(i);
            }
        }
        return res;
    }
}

总结:
503.下一个更大元素II
题目链接:503.下一个更大元素II
文档讲解︰代码随想录(programmercarl.com)
视频讲解︰下一个更大元素II
日期:2024-10-20

想法:对循环数组遍历两遍,用i % nums.length对应下标。
Java代码如下:

class Solution {
    public int[] nextGreaterElements(int[] nums) {
        int[] res = new int[nums.length];
        Arrays.fill(res, -1);
        Deque<Integer> st = new LinkedList<>();
        st.push(0);
        for(int i = 1; i < 2 * nums.length; i++) {
            if(nums[i % nums.length] <= nums[st.peek()]) {
                st.push(i % nums.length);
            }else {
                while(!st.isEmpty() && nums[i % nums.length] > nums[st.peek()]) {
                    res[st.peek()] = nums[i % nums.length];
                    st.pop();
                }
                st.push(i % nums.length);
            }
        }
        return res;
    }
}

标签:nums,int,res,元素,随想录,st,length,更大,nums2
From: https://www.cnblogs.com/wowoioo/p/18487730

相关文章

  • 代码随想录算法训练营第五天| 面试题02.07.链表相交、leetcode142 环形链表II
    1.leetcode面试题02.07.链表相交题目链接:面试题02.07.链表相交-力扣(LeetCode)文章链接:代码随想录1.1代码跟着老师写的一个版本,自己能理解思路了,但是写的话可能还是有一些难#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,x):#......
  • 代码随想录|回溯part 01
    存在于递归函数的下方,递归与回溯相辅相成回溯搜索法:暴力算法适用范围:•组合问题:N个数里面按一定规则找出k个数的集合(无序)•切割问题:一个字符串按一定规则有几种切割方式•子集问题:一个N个数的集合里有多少符合条件的子集•排列问题:N个数按一定规则全排列,有几种排列方......
  • 第六章元素应用CSS
    6.1使用CSS设置字体样式font-family:设置字体的类型font-weight:设置字体的粗细font-size:设置字体的大小font-style:设置字体的倾斜6.1.1.字体类型        字体:具有传递语义功能和美学效应两方面作用        CSS:提供font-family属性来控制文本的字体类型......
  • 第六章 元素应用css
    6.1使用css设置字体样式6.1.1.字体类型h1{ font-family:fangsong;}6.1.2.字体大小font-size:25px;6.1.3.字体粗细font-weight:500;6.1.4.字体倾斜font-style:italic;6.2使用CSS设置文本样式6.2.1.文本水平对齐方式text-align:center;6.2.2......
  • 代码随想录算法训练营day20| 669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树
    学习资料:https://programmercarl.com/0669.修剪二叉搜索树.html#算法公开课学习记录:669.修剪二叉搜索树(直接在原函数上操作,要根据情况用root的左右子树递归,因为子树中有满足条件的;前序:根左右)点击查看代码#Definitionforabinarytreenode.#classTreeNode:#def_......
  • 代码随想录算法训练营 | 647. 回文子串,516.最长回文子序列
    647.回文子串题目链接:647.回文子串文档讲解︰代码随想录(programmercarl.com)视频讲解︰回文子串日期:2024-10-19想法:本题精髓在于dp[i][j]表示的是s[i,j]这个子字符串是不是回文的,是Boolean类型,s[i]s[j]不等时,肯定不回文;s[i]s[j]相等时,开始看ij的大小,ij大小相等那么表示单个字......
  • 第六章元素应用CSS
    6.1使用CSS设置字体样式作用:一是传递语义功能,二是有美学作用。CSS提供font-family属性来控制文本的字体类型。格式如下:fonl-family:字体名称;参数:字体名称按优先顺序排列,以逗号隔开。如果字体名称包含空格,则应用引号括起。说明:用font-family属性可控制显示字体。不同......
  • HTML·第六章 元素应用CSS
    6.1使用CSS设置字体样式在CSS中设置字体样式是网页设计中非常基础且重要的部分,它可以帮助设计师控制网页上文本的外观。以下是一些常用的CSS属性,用于设置字体样式:font-family:定义字体族,指定文本的字体。可以设置一个或多个字体,浏览器会使用列表中第一个可用的字体。p{......
  • 第六章 元素应用css
    6.1使用css设置字体样式在学习HTML时,通常也会使用HTML对文本字体进行一些非常简单的样式设置,而使用css对字体样式进行设置远比HTML灵活、精确得多。6.1.1 字体类型字体具有两方面的作用:一是传递语义功能,二是由美学效应。由于不同的字体给人带来不同的风格感受,所以对于网......
  • 第六章元素应用CSS
    6.1使用CSS设置字体样式6.1.1.字体类型font-family属性用于指定元素中文本的字体系列。为了确保跨平台的一致性,通常会列出多个字体名称作为“后备”机制,浏览器会尝试按顺序使用列表中的字体,直到找到一个可用的为止。如果都没有找到,则使用默认字体。字体名如果是多词组成......