当前位置: 首页 > article >正文

力扣-动态规划-496 下一个更大的元素Ⅰ

思路和时间复杂度

  1. 思路:题目中的意思为是值相同的情况下的右边第一个最大的元素,所以直接在nums2中寻找下一个最大元素即可,要用map记录一下下标和值,在nums中找到下一个最大值,还要确认当前比较的值是否在num1中
  2. 时间复杂度: O(n)      

代码

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        vector<int> res(nums1.size(), -1);
        // 遍历nums2,找到nums2的每一个元素在右边第一个大的元素,然后利用元素值定位nums1,找到下标
        unordered_map<int, int> ump;
        
        for(int i = 0; i < nums1.size(); i++){
            ump[nums1[i]] = i;
        }

        stack<int> st;
        st.push(0);
        for(int i = 1; i < nums2.size(); i++){
            if(nums2[i] > nums2[st.top()] ){
                while(!st.empty() && nums2[i] > nums2[st.top()] ){
                    if(ump.count(nums2[st.top()]) >= 1){
                        int index = ump[nums2[st.top()]];
                        res[index] = nums2[i];
                    }
                    st.pop();
                }
                st.push(i);
            }else{
                st.push(i);
            }
        }

        return res;
    }
};


http://www.kler.cn/a/577897.html

相关文章:

  • VSCode 配置优化指南
  • Docker和DockerCompose基础教程及安装教程
  • 刷题记录(LeetCode605 种花问题)
  • C语言(队列)
  • 基于大数据的全国地铁数据可视化分析系统
  • 在人工智能软件的帮助下学习编程实例
  • Helm安装chart包到k8s报错“不能重复使用名称,名称已被使用”
  • FPGA 的 LBC 总线详解
  • HttpServlet源码分析与Servlet开发最佳实践
  • 初阶数据结构(C语言实现)——4.1栈
  • QT---鼠标事件
  • 【网络】HTTP协议、HTTPS协议
  • 模拟调制技术详解
  • 顶点着色器和片段着色器
  • 无人机推流/RTMP视频推拉流:EasyDSS无法卸载软件的原因及解决方法
  • Android AudioFlinger(四)—— 揭开PlaybackThread面纱
  • react脚手架(creat-react-app)
  • 大数定律详解
  • 回归预测 | Matlab实现GWO-BP-Adaboost基于灰狼算法优化BP神经网络结合Adaboost思想的回归预测
  • 使用Dify+DeepSeek搭建私有知识库