代码随想录算法训练营第59天|503 42

news2024/11/26 7:42:59

503 我的思路是既然是循环数组 那就最多遍历两圈 其他的跟单调栈写法一模一样

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        vector<int> result(nums.size(), -1);
        if (nums.size()==1) return result;
        stack<int> stack;
        stack.push(0);
        int i=1;
        while (i<2*nums.size()) {
            if (nums[i%nums.size()]<=nums[stack.top()]) {
                stack.push(i%nums.size());
            }
            else {
                while (!stack.empty() && nums[i%nums.size()]>nums[stack.top()]) {
                    result[stack.top()] = nums[i%nums.size()];
                    stack.pop();
                }
                stack.push(i%nums.size());
            }
            i++;
        }
        return result;
    }
};

42难题

单调栈思路是这个图 cr to 代码随想录 按行来计算

按行来要找每个矩阵块的h和w

找到h就要考虑三个height才能计算出凹槽面积 这三个height的取值很巧妙 最右边的是正在遍历到的大于stack.top()的height 中间是正要出栈的 最左边是再左边一个

//单调栈
class Solution {
public:
    int trap(vector<int>& height) {
        stack<int> stack;
        stack.push(0);
        int result=0;
        for (int i=1; i<height.size(); i++) {
            if (height[i]<height[stack.top()]) stack.push(i);
            if (height[i]==height[stack.top()]) {
                stack.pop();
                stack.push(i);
            }
            else {
                while (!stack.empty() && height[i]>height[stack.top()]) {
                    int mid=stack.top();
                    stack.pop();
                    if (!stack.empty()) {
                        int w=i-stack.top()-1;
                        int h=min(height[stack.top()], height[i])-height[mid];
                        result += w*h;
                    }
                }
                stack.push(i);
            }
        }    
        return result;
    }
};

双指针法很容易懂啦 其实我觉得更像动态规划 找每个元素左边最大和右边最大 二者中小的那个减掉自己的height就是这一列的积水量 找左边最大和右边最大的时候用动态规划时间复杂度就是O(n)了

//双指针
class Solution {
public:
    int trap(vector<int>& height) {
        if (height.size()==1) return 0;
        vector<int> lHeight(height.size(), 0);
        vector<int> rHeight(height.size(), 0);

        lHeight[1]=height[0];
        for (int i=2; i<height.size(); i++) {
            lHeight[i]= max(lHeight[i-1], height[i-1]);
        }
        rHeight[height.size()-2]=height[height.size()-1];
        for (int i=height.size()-3; i>=0; i--) {
            rHeight[i]=max(rHeight[i+1], height[i+1]);
        }

        int result=0;
        for (int i=1; i<height.size()-1; i++) {
            if (min(lHeight[i], rHeight[i])-height[i]>0) result+=min(lHeight[i], rHeight[i])-height[i];
        }
        return result;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HttpRunner自动化测试之响应中文乱码处理

响应中文乱码&#xff1a; 当调用接口&#xff0c;响应正文返回的中文是乱码时&#xff0c;一般是响应正文的编码格式不为 utf-8 导致&#xff0c;此时需要根据实际的编码格式处理 示例&#xff1a; 图1中 extract 提取title标题&#xff0c;output 输出 title 变量值&#x…

yolov8系列[五]-项目实战-yolov8模型无人机检测

yolov8系列[五]-项目实战-yolov8模型无人机检测 项目介绍项目展示功能简介代码结构如何启动 开发者模式1. 安装依赖环境2. 启动程序 源代码下载其他 项目介绍 无人机识别项目,无人机搭载nvidia jetson边缘计算板子,进行实时识别。使用yolov8算法&#xff0c;训练了识别无人机的…

leetcode 1870. Minimum Speed to Arrive on Time(准时到达的最小速度)

需要找一个speed, 使得dist[i] / speed 加起来的时间 < hour, 而且如果前一个dist[i] / speed求出来的是小数&#xff0c;必须等到下一个整数时间才计算下一个。 speed最大不会超过107. 不存在speed满足条件时返回-1. 思路&#xff1a; 如果前一个dist[i] / speed求出来的…

【万字详解】Linux进程信号||一文搞定进程信号||附测试代码

进程信号 &#x1f373;信号理解&#x1f9c8;什么是信号&#xff1f;&#x1f95e;进程信号&#x1f953;查看系统信号&#x1f969;在技术角度理解信号&#x1f357;注意 &#x1f356;信号处理&#x1f9c7;信号异步机制 &#x1f354;信号产生&#x1f35f;通过终端按键产生…

【CSS】手写 Tooltip 提示组件

文章目录 效果示例代码实现 效果示例 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>一颗不甘坠落的流星</title><style>body {padding: 120px;}.tooltip {position: relative;display: inline-blo…

Wish入驻防封指南——附最新运营要点

近日来&#xff0c;跨境电商平台Wish有了新改革&#xff0c;为提高产品质量把控效率&#xff0c;Wish最近将入驻机制又完全开放转变为“邀请制”&#xff0c;加强了品控措施&#xff0c;也意味着商家入驻门槛变高&#xff0c;流程与之前截然不同。但对于已有跨境电商经验/没有跨…

剑指offer12 矩阵中的路径 13 机器人的运动范围 34.二叉树中和为某一值得路径

class Solution { public:bool exist(vector<vector<char>>& board, string word) {int rowboard.size(),colboard[0].size();int index0,i0,j0;if(word.size()>row*col) return 0;//vector<vector<int>> visit[row][col];//标记当前位置有没有…

ES6: 对象简写/symbol()/ Iterator/set/map/await.......

对象简写 对象名字为变量 复制对象/还有个assign方法 symbol() 这种写法用户怎么添加属性都ok 获取属性,这个方法获取symbol属性 获取属性,这个方法获取symbol和普通属性 Iterator 比较复杂,可以看视频 有迭代器的可用for..of循环 012-ES6-Iterator_哔哩哔哩_bilibili Set 它…

安防监控视频汇聚平台EasyCVR修改录像计划等待时间较长是什么原因?

安防监控视频EasyCVR视频融合汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检…

【UE5 多人联机教程】05-更改角色颜色

效果 步骤 1. 打开“BP_ThirdPersonCharacter”&#xff0c;找到角色的材质 创建材质实例 2. 在“BP_ThirdPersonCharacter”中新建一个整型变量&#xff0c;命名为“PlayerColorIndex” 勾选可编辑实例、生成时公开&#xff0c;复制选择“RepNotify” 复制选择“RepNotify”…

7.26 作业 QT

1.继续完善登录框&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;跳转到新的界面中&#xff1a; 结果图&#xff1a; second.h: #define SECOND_H#include <QWidget> #include<QDebug> //信息调试类&#xff0c;用于打印输出的 #inc…

学C的第三十天【自定义类型:结构体、枚举、联合】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第二十九天【字符串函数和内存函数的介绍&#xff08;二&#xff09;】_高高的胖子的博客-CSDN博客 1 . 结构体 &#xff08;1&#xff09;. 结构体的基础知识&#xff1a; 结构…

docker-compose yml配置、常用命令

下载完docker-compose后&#xff0c;如果想使用docker-compose命令开头&#xff0c;需要创建软连接 sudo ln -s /usr/local/lib/docker/cli-plugins/docker-compose /usr/bin/docker-compose 1.docker-compose.yml文件编排 一个 docker-compose.yml 文件的顶层元素有&#xff…

线程的同步

一、互斥锁 java语言中&#xff0c;引入了对象互斥锁的概念&#xff0c;来保证共享数据操作的完整性。每个对象都对应与一个可称为“互斥锁”的标记&#xff0c;这个标记用来保证在任一时刻&#xff0c;只能有 一个线程访问该对象。关键字synchronized用来与对象的互斥锁联系。…

HTML不常用但是好用的标签

sub sup <p>这个文本包含 <sub>111</sub>文本。</p> <p>这个文本包含 <sup>上标</sup> 文本。</p>下标文本将会显示在当前文本流中字符高度的一半为基准线的下方&#xff0c;但是与当前文本流中文字的字体和字号都是一样的。…

Xilinx AXI VIP使用教程

AXI接口虽然经常使用&#xff0c;很多同学可能并不清楚Vivado里面也集成了AXI的Verification IP&#xff0c;可以当做AXI的master、pass through和slave&#xff0c;本次内容我们看下AXI VIP当作master时如何使用。 新建Vivado工程&#xff0c;并新建block design&#xff0c;命…

YOLOv7改进:CVPR 2023 | SCConv: 即插即用的空间和通道重建卷积

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:添加 SCConv,经过测试,有效涨点。…

【FAQ】关于无法判断和区分用户与地图交互手势类型的解决办法

一&#xff0e; 问题描述 当用户通过缩放手势、平移手势、倾斜手势和旋转手势与地图交互&#xff0c;控制地图移动改变其可见区域时&#xff0c;华为地图SDK没有提供直接获取用户手势类型的API。 二&#xff0e; 解决方案 华为地图SDK的地图相机有提供CameraPosition类&…

labview 信号量实现互斥 避免竞争写

上一篇文章中描述了事件发生、集合点、通知器、信号量。 本文进一步举例描述信号量实现互斥&#xff0c;避免竞争写。 1.不用信号量的例子 图1-不用信号量的结果都不同&#xff0c;不为0 图2-不用信号量的例子&#xff0c;程序框图 2.用信号量的例子 图3-用信号量的例子&…

手工测试如何转向自动化测试

手工测试的迷茫&#xff1a;除了重复劳动&#xff0c;到底还有什么&#xff1f; 我是在2008年毕业的&#xff0c;三本的学校&#xff0c;不上不下的专业水平&#xff0c;毕业的时候&#xff0c;恰好遇到了金融危机。校园招聘里阴差阳错的巧合&#xff0c;让我走上了软件测试工…