首页 > 其他分享 >(58/60)每日温度、下一个更大元素Ⅰ

(58/60)每日温度、下一个更大元素Ⅰ

时间:2024-03-28 17:14:11浏览次数:22  
标签:58 top 元素 st 60 result nums1 nums2

每日温度

leetcode:739. 每日温度

单调栈

思路

单调栈,存放元素下标。
遍历一遍,每个元素和栈顶元素比较:

<=栈顶元素,入栈

 >栈顶元素,result[st.top()] = i - st.top();弹出 继续,直到遍历结束或<=栈顶元素

代码实现

class Solution {
public:
/*
单调栈,存放元素下标
遍历一遍,每个元素和栈顶元素比较:
<=栈顶元素,入栈
 >栈顶元素,result[st.top()] = i - st.top();弹出 继续,直到遍历结束或<=栈顶元素
*/
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        stack<int> st;
        vector<int> result(temperatures.size(),0);
        st.push(0);
        for(int i = 0;i < temperatures.size();i++){
            while(!st.empty() && temperatures[i] > temperatures[st.top()]){
                result[st.top()] = i - st.top();
                st.pop();
            }
            st.push(i);
        }

        return result;
    }
};

下一个更大元素Ⅰ

leetcode:496. 下一个更大元素 I

暴力法

复杂度分析

时间复杂度:接近O(N^3)

空间复杂度:O(1)。没有额外空间

代码实现

class Solution {
public:
/*
遍历nums1,找到对应的nums2位置
在nums2里寻找右侧第一个最大元素
*/
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        vector<int> result(nums1.size(),-1);
        for(int i = 0;i < nums1.size();i++){
            for(int j = 0;j < nums2.size();j++){
                if(nums1[i] == nums2[j]){
                    for(int k = j+1;k < nums2.size();k++){
                        if(nums2[k] > nums2[j]){
                            result[i] = nums2[k];
                            break;
                        }
                    }
                }
            }
        }

        return result;
    }
};

单调栈

复杂度分析

时间复杂度:O(N)。

空间复杂度:O(N)。

代码实现

class Solution {
public:
/*
先建立映射map(nums1元素值->nums1元素下标) 这样就可以通过num2元素值找到nums1对应位置了
然后就是对nums2的单调栈找下一个更大元素
*/
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        stack<int> st;
        vector<int> result(nums1.size(),-1);
        unordered_map<int,int> map;
        // 建立映射
        for(int i = 0;i < nums1.size();i++){
            map[nums1[i]] = i;
        }
        
        st.push(0);  // stack放nums2下标
        for(int i = 1;i < nums2.size();i++){
            while(!st.empty() && nums2[i] > nums2[st.top()]){
                // 如果st.top()在nums1里,记录结果
                // 在top这个位置记录下一个元素值
                if(map.find(nums2[st.top()]) != map.end()){
                    result[map[nums2[st.top()]]] = nums2[i];
                }
                st.pop();
            }
            st.push(i);
        }

        return result;
    }
};

标签:58,top,元素,st,60,result,nums1,nums2
From: https://www.cnblogs.com/tazdingo/p/18102147

相关文章

  • 补|(52/60)最长递增子序列、最长连续递增序列、最长重复子数组
    子序列问题最长递增子序列leetcode:300.最长递增子序列动态规划代码实现/*以nums[i]结尾的(含)递增子序列最长为dp[i]dp[i]由dp[0~i-1]的最大值推出if(nums[i]>nums[j])dp[i]=max(dp[i],dp[j]+1);//如果严格递增dp[0]=1;其余为0正序遍历*/classSol......
  • (60/60)last dance|柱状图中最大的矩形
    lastdance柱状图中最大的矩形leetcode:84.柱状图中最大的矩形单调栈思路和接雨水很类似,但需要首尾加0(尾0是为了触发计算,首0是为了避免首元素触发计算时没有left)注意点尾加0后还是要遍历到heights.size()-1,因为是以取出元素为基准计算的,而取出元素是当前遍历元素的上一......
  • (59/60)下一个更大元素Ⅱ、接雨水
    终于接到你下一个更大元素Ⅱleetcode:496.下一个更大元素I单调栈思路主要是循环数组的处理。直接等效为长度为2N,重复两遍的原数组即可,i<nums.size()变为i<2*nums.size()、i变为i%nums.size()。代码实现对每个元素都再遍历一遍原数组长度,,,时间复杂度O(N^2),超时了clas......
  • 听劝!24 选错 660/880/1000的人,已经二战了
    25考研的备考形势,势必跟以前不一样了。24考完,大家都发现,没有一本习题册,覆盖了考试的所有知识点。主流的模拟卷,都没有达到24卷的难度。这就意味着:一本习题册不够了!刷主流模拟卷不够了!这会需要整个考研复习的安排,作一个很大的调整。如果你还在看24以前的学长规划,它就可能......
  • TextBlock 的run元素
    这里第一个run的content滚滚长江东逝水,浪花淘尽英雄。是非成败转头空。青山依旧在,几度夕阳红。和第二个的Text有什么区别?<TextBlockx:Name="textblock"Width="320"Height="100"FontSize="......
  • XPath攻略:从入门到精通,元素查找不再难
    简介XPath是一种用于在XML文档中检索信息的语言。它通过路径表达式导航XML文档,广泛应用于各种场景。XPath的灵活性和强大功能使其成为在XML结构中准确定位和提取数据的重要工具。XPath使用场景Web自动化测试:XPath在Web自动化测试中广泛应用,XPath提供了一种强大......
  • 旷场实验KT-0860——观察研究实验动物神经精神变化
    旷场是观察研究实验动物神经精神变化、进入开阔环境后的各种行为,例如动物对新开阔环境的恐惧而主要在周边区域活动,在中间区域活动较少,但动物的探究特性又促使其产生在中间区域活动的动机,也可观察由此而产生的焦虑心理。兴奋药可以明显增加自主的活动而减少探究行为,在统一些剂......
  • 力扣:移除元素 java
    给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。说明:为什么返回......
  • 全量知识系统 详细设计 “祖传代码”之序 “元素周期表”(Q&A)之2
    Q11.将三部分拿出来单独看一下:一、管理者-组传代码(祖传--宝藏:源头上保证):二、代理者-软件代理(继承--差异:广度上扩展)。三、提供者-AI组件(遗传--对齐:强度上增强)A11.祖传代码,智能扩展,遗传增强当然可以,以下是将这三部分单独提取出来的内容:###一、管理者-组传代码(祖传--宝藏......
  • 全量知识系统 详细设计 “祖传代码”之序 “元素周期表”(Q&A)之1
    今天再次对“元素周期表”中需要设计的内容做了考虑。由于没有最后定稿,所以将已经整理出的部分内容拿出来和百度AI进行交流,看看能不能帮助我完成这个设计。以下是交流内容。(一共分了两篇)Q1.今天我们再聊聊全量知识系统详细设计之“祖传代码”之序“元素周期表”A1.处理......