【每日一题】503. 下一个更大元素 II

思路(c++)

使用单调栈的解法,单调栈里面存的是大于当前元素的index,不是直接存值。但是这个题目是一个循环数组,可以在后面补一段前面的内容,这样就可以正常遍历。将每个位置对应的结果存在map
在这里插入图片描述

后面循环结束的时候,如果栈里面还有元素,要么是已经找到了,要么是没有。可以通过find查找是否已经有了对应的key,如果没有就将结果置为-1

实现(c++)

#include<vector>
#include<iostream>
#include<map>
#include<stack>

using namespace std;


class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) 
    {
        vector<int> ans;
        map<int,int> ans_map;
        // 单调递增栈
        stack<int> numsIndexs;
        int length = nums.size();
        numsIndexs.push(0);
        for (int j = 1; j < 2*length-1; ++j)
        {
            int i = j;
            if (i >= length) i = j - length;
            cout << "j=" << j << ", i=" << i << endl;
            
            if (nums[i] <= nums[numsIndexs.top()])
            {
                numsIndexs.push(i);
               
            }
            else
            {
                while (
                    numsIndexs.empty() == false&& nums[numsIndexs.top()] < nums[i])
                {
                    cout << "i=" << i << ",nums[numsIndexs.top()=" << nums[numsIndexs.top()] << ", nums[i]=" << nums[i] << endl;
                    ans_map[numsIndexs.top()] = nums[i];
                    numsIndexs.pop();                    
                }
                numsIndexs.push(i);
                
            }
            //cout << "here" << endl;
        }
        //
        while (numsIndexs.empty() == false)
        {
            cout<<numsIndexs.top() << endl;
            //
            if (ans_map.find(numsIndexs.top()) == ans_map.end())
            {// 没有这个key
                ans_map[numsIndexs.top()] = -1;
                cout << "not find key " << numsIndexs.top()<< endl;
            }            
            cout << "find key " << numsIndexs.top() << endl;
            numsIndexs.pop();
        }
        cout << endl;
        // index: value
        for (int i = 0; i < length; ++i)
        {
            ans.push_back(ans_map[i]);
            cout << ans_map[i] << endl;
        }

        return ans;
    }
};

int main()
{
    Solution s;
    vector<int> nums{ 1,2,3,4,5 };
    s.nextGreaterElements(nums);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/738845.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BUUCTF [CISCN2019 华北赛区 Day2 Web1] Hack World

1、通过题目&#xff0c;可以知道该题目为SQL注入类型&#xff1a; 2、判断注入类型为数字注入&#xff1a; 3、通过BP抓包&#xff0c;来判断注入点。 字典爆破发现常规的注入方式都被过滤。 4、因此可以尝试通过布尔盲注的方式来得到flag。编写脚本得到flag import requests…

华为仓颉语言:编程语言的新篇章

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Vue.js 自定义组件的三种用法

1.创建项目 创建项目,你可以参考我以前的博文,这里省略了 项目的目录结构如下: 接着,我们在 src/components 目录下创建一个自定义的组件 SplashHello.vue,示例代码如下所示: <template><div><p>{{ title }}</p><p>{{ message }}</p&…

MTK7628+MT7612 加PA定频数据

1、硬件型号TR726A5G121-DPA PC9.02.0017。如下所示&#xff1a; 2、WIFI5.8 AC模式 42&#xff08;5120MHz&#xff09;信道&#xff0c;80带宽 3、WIFI5.8 AC模式 38&#xff08;5190MHz&#xff09;信道&#xff0c;40带宽 4、WIFI5.8 AC模式 36&#xff08;5180 MHz&…

【机器学习】自然语言处理的新前沿:GPT-4与Beyond

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 &#x1f525;引言 背景介绍 文章目的 一、GPT-4简介 GPT-4概述 主要特性 局限性和挑战 二、自监督学习的新进展 自监督学习的原理 代表性模型和技术 三、少样本学习和零样本学习 少样本学习的挑战 先…

AIGC+艺术=教育变革?

在数字化时代的浪潮中&#xff0c;技术的每一次跃进都深刻影响着社会的各个领域&#xff0c;教育亦不例外。近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术的兴起&#xff0c;为艺术教育领域带来了前所未有的变革机遇。当AIGC与艺术相结合&#xff0c;我…

人工智能-鲁棒性(通俗易懂)

1.什么是鲁棒性 在机器学习中&#xff0c;鲁棒性&#xff08;Robustness&#xff09;是指模型对于异常数据或噪声的抗干扰能力。一个鲁棒性较强的模型能够在面对未知的数据或者数据中存在噪声或异常值时&#xff0c;仍能保持较好的性能和泛化能力。鲁棒性是一个重要的性能指标…

JavaSE (Java基础):Scanner类介绍

4 Scanner最最最基础的使用 Scanner是Java中十分常用到的类&#xff0c;对于这个类的用法我认为并不难&#xff0c;想用直接调用就行&#xff0c;在IDE中输入&#xff1a;new Scanner&#xff08;System.in&#xff09;;后按住altenter键后会直接给这个被赋给类的元素&…

如何用家政服务小程序源码系统 快速搭建家政自己接单的软件?

随着移动互联网的快速发展&#xff0c;线上预约服务已成为家政行业的新趋势。然而&#xff0c;许多家政企业面临着信息不透明、服务质量参差不齐、管理效率低下等问题。家政服务小程序系统&#xff0c;可以帮助商家快速搭建自己的接单软件&#xff0c;提升服务效率&#xff0c;…

二叉树第一期:树与二叉树的概念

一、树 1.树的定义 与线性表不同&#xff0c;树是一种非线性的数据结构&#xff0c;由N(N>0)个结点组成的具有层次关系的集合&#xff1b;因其形状类似生活中一颗倒挂着的树&#xff0c;故将其数据结构称为树。 2.树的相关概念 根结点 没有前驱的结点&#xff0c;称为根…

【数据结构】时间复杂度

目录 一、算法的复杂度 二、时间复杂度 2.1 时间复杂度的概念 2.2 大O渐进表示法 2.3 计算时间复杂度步骤 三、常见时间复杂度举例 3.1 ❥ 常数阶 3.2 ❥ 线性阶 3.3 ❥ 平方阶 3.4 ❥ 对数阶 3.5 ❥ 指数阶 3.6 ❥ 多个未知数的复杂度 四、最好&#xff0c;最坏&am…

人工智能机器学习算法总结偏差和方差

1.定义 在机器学习中&#xff0c;偏差&#xff08;Bias&#xff09;和方差&#xff08;Variance&#xff09;是评估模型泛化能力的重要概念。它们描述了模型在训练数据上的表现以及对新数据的适应能力。 偏差&#xff08;Bias&#xff09; &#xff1a; 偏差是指模型的预测值与…

SARscape下载DEM进度条不动的问题

使用SARscape的DEM Extraction下载DEM&#xff0c;进度条不动问题的解决办法&#xff1a; 一个字&#xff1a; 我是等了一晚上&#xff0c;第二天就好了。下载的DEM范围是一景SAR影像&#xff0c;未裁剪。

Java研学-RBAC权限控制(八)

九 登录登出 1 登录作用 判断员工是否有权限访问&#xff0c;首先得知道现在操作的人是谁&#xff0c;所以必须先实现登录功能 2 登录流程 ① 提供登录页面&#xff0c;可输入用户名与密码信息&#xff0c;并添加执行登录的按钮。&#xff08;登录页面不能被拦截&#xff09;…

java之SSRF代码审计

1、SSRF漏洞审计点 服务端请求伪造&#xff08;Server-Side Request Forge&#xff09;简称 SSRF&#xff0c;它是由攻击者构造的 payload传给服务端&#xff0c;服务端对传回的 payload 未作处理直接执行后造成的漏洞&#xff0c;一般用于在内网探测或攻击内网服务。 利用&a…

捕捉过往的时光,5个步骤,安卓手机找回删除的照片

手机不仅仅是一个通讯工具&#xff0c;更是一个记录生活点滴的神器。手机照相机的出现&#xff0c;让我们随时随地都能捕捉到美好的瞬间&#xff0c;留下珍贵的回忆。然而&#xff0c;随着时间的推移&#xff0c;我们可能会不小心删除了这些照片&#xff0c;或者因为各种原因导…

分布式锁实现方案-基于Redis实现的分布式锁

目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…

DVWA-CSRF-samesite分析

拿DVWA的CSRF为例子 接DVWA的分析&#xff0c;发现其实Impossible的PHPSESSID是设置的samesite1. 参数的意思参考Set-Cookie SameSite:控制 cookie 是否随跨站请求一起发送&#xff0c;这样可以在一定程度上防范跨站请求伪造攻击&#xff08;CSRF&#xff09;。 下面用DVWA CS…

springboot加载bean的方式

在SpringBoot的大环境下&#xff0c;基本上很少使用之前的xml配置Bean&#xff0c;主要是因为这种方式不好维护而且也不够方便。 springboto注入bean主要采用下图几种方式&#xff0c; 1、注解装配Bean 1、使用Component等派生注解 只要在类上加类上加 Component 注解即可,该…

[图解]企业应用架构模式2024新译本讲解17-活动记录1

1 00:00:01,070 --> 00:00:04,180 下一个我们要说的就是 2 00:00:04,190 --> 00:00:06,740 活动记录模式了 3 00:00:07,640 --> 00:00:11,210 同样是数据源架构模式 4 00:00:12,300 --> 00:00:18,480 里面的一个&#xff0c;活动记录 5 00:00:18,490 --> 00…