接雨水(C语言)

news2024/11/30 3:52:27

题目链接:. - 力扣(LeetCode)

首先我们要明白要形成容器,接雨水

需要右边的柱子高于本身,并且需保证左方有高于本身的柱子

也就是这样,才会形成容器

这道题的解法之一是单调栈,并且需保证是递减的,才能形成容器

下面有代码解析:

typedef struct Stack

{

    //int val;

    int* arr;

    int size;

}ST;

void StackInit(ST* obj )

{

    obj->arr = (int*)malloc(sizeof(int)*20005);//创建一个数组,存下标,这个数值于题目给的数组大小有关

    obj->size = 0;

}

bool StackIsEmpty( ST* obj )

{

    return obj->size == 0 ;

}

int StackTop( ST* obj )

{

    return obj->arr[obj->size-1];

}

int StackPop(ST* obj)

{

    int i = 0;

    i = obj->arr[obj->size-1];

    obj->size--;

    return i;

}

void StackPush( ST* obj , int pi)

{

    obj->arr[obj->size++] = pi;

}

int trap(int* height, int heightSize) {

    ST obj;

    StackInit(&obj);

    int ans = 0;

    for( int i = 0 ; i < heightSize ; i++)

    {   

        while( !StackIsEmpty(&obj) && height[StackTop(&obj)] < height[i] )

   // 这里是为了保证第一个元素进栈,和当栈里为空时跳出

              //  例如:0 1 0 2 第一个元素进栈  然后 1 大于 0  , 0 被弹出 ,栈为空 , 此时不可能形成容器 ,1 就进栈 ,也可以这样写

//在外面让第一个元素进栈,栈为空时,break

       

        {

            int k = StackPop(&obj);

            while( !StackIsEmpty(&obj) && height[StackTop(&obj)] == height[k] )

            {  //这里是为了弹出相同元素 2  1    1   1    5  就要弹出 所有1

                StackPop(&obj);

            }

            if( !StackIsEmpty(&obj) ) // 此时形成容器

            {

                int top = StackTop(&obj);

                ans += (fmin(height[i],height[top]) - height[k])*(i - top - 1 );

            }                 //   高                                                              宽

        }

        StackPush(&obj,i);

    }

    return ans;

}

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

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

相关文章

MySQL的InnoDB引擎的事务原理以及MVCC

目录 一、事务原理 二、redo log 三、undo log 四、MVCC 1.基础概念 2.隐藏字段 3.undolog 4.readview 5.原理分析 一、事务原理 1). 事务 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作…

k8s下搭建redis集群

记录一下近期实现的在k8s上搭建redis集群的过程 1、新建存储类 主要是为了和其它服务的存储类区分一下 redis-beta-storage 2、编写configMap redis启动时从configMap中读取配置 bind&#xff1a;默认的127.0.0.1可能会导致其它ip地址无法远程访问&#xff0c;因此修改为0.0…

【软件工程导论】——Visio与StarUML的安装

目录 &#x1f552; 1. Visio&#x1f552; 2. StarUML &#x1f552; 1. Visio 1、下载Office Tool Plus并安装&#xff1a;&#x1f50e; Office Tool Plus官网 2、打开软件 → 部署 → 添加产品 3、这里我选择Visio 2021 专业版 LTSC&#xff0c;确定&#xff0c;随后点击“…

【RedHat】使用cron安排周期性任务——周期性创建用户实例

cron用来管理周期性重复执行的任务调度&#xff0c;非常适合日常系统维护工作。计划任务分为系统的计划任务和用户自定义的计划任务。 cron服务每分钟都检查/etc/crontab文件、/etc/cron.d目录和/var/spool/cron目录中的变化。/var/spool/cron目录下的任务需要通过crontab -e 命…

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

MSTP环路避免实验(思科)

华为设备参考&#xff1a;MSTP环路避免实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 MSTP&#xff08;多生成树协议&#xff09;&#xff0c;MSTP解决了STP和RSTP没有考虑vlan的问题&#xff0c;STP和RSTP将所有的vlan共享为一个生成树实例&#xff0c;无法实现…

如何备考2024年AMC10:吃透2000-2023年1250道真题(限时免费送)

有家长朋友问&#xff0c;有没有适合初中学生参加的奥数类比赛&#xff1f;我推荐AMC10美国数学竞赛&#xff0c;在国内可以方便地参加&#xff0c;而且每年全国各省市参加的初中生越来越多。关于AMC10详细的介绍和常见问题解答&#xff0c;可以联系我获得。 那么如何在AMC10竞…

基恩士数码显微镜数据采集项目经验分享

在最近的项目中&#xff0c;我有幸参与了基恩士数码显微镜的开发与数据采集工作。这次的经历让我对科学研究中的数据收集和分析有了更深入的了解&#xff0c;我分享我在项目中的角色以及我们所取得的成果。 作为一个科研工作者&#xff0c;我始终被数字化技术在科学研究中的作用…

消息队列经典应用场景

笔者心中,消息队列,缓存,分库分表是高并发解决方案三剑客。 在职业生涯中,笔者曾经使用过 ActiveMQ 、RabbitMQ 、Kafka 、RocketMQ 这些知名的消息队列 。 这篇文章,笔者结合自己的真实经历,和大家分享消息队列的七种经典应用场景。 1 异步&解耦 笔者曾经负责某电…

开源AI引擎:利用影像处理与目标检测技术对违章建筑排查

一、项目案例介绍 随着城市化进程的加快&#xff0c;城市规划和管理工作面临着前所未有的挑战&#xff0c;违章建筑的排查与处理成为了城市管理中的一项重要任务。传统的违章建筑排查方法依赖于人力巡查&#xff0c;效率低下且难以全面覆盖。为了解决这一问题&#xff0c;现代…

【Win】使用PowerShell和Webhooks轻松发送消息至Microsoft Teams

Microsoft Teams是一款由微软开发的团队协作和通讯工具。如果您对这个名字还不太熟悉&#xff0c;那么现在就是一个了解它的好时机。微软将Teams定位为其之前Skype for Business解决方案的继任者&#xff0c;并且它也提供了与其他基于频道的通讯应用程序&#xff08;例如Slack、…

HarmonyOs开发:轮播图Banner组件封装与使用

前言 轮播图在每个项目中都很常见&#xff0c;鸿蒙中在容器组件中也提供了Swiper组件&#xff0c;用于子组件滑动轮播显示&#xff0c;和前端的使用起来也是异曲同工&#xff0c;我们先看下基本的用法。 Swiper() {ForEach(["1", "2", "3", &quo…

C语言循环结构的程序设计

在C语言中&#xff0c;循环结构是一种重要的控制结构&#xff0c;用于重复执行特定的代码块&#xff0c;直到满足特定的条件为止。循环结构使得程序可以更加灵活和高效地处理重复性的任务&#xff0c;从而提高了程序的可读性和可维护性。本文将深入介绍C语言中循环结构的程序设…

C++王牌结构hash:哈希表开散列(哈希桶)的实现与应用

目录 一、开散列的概念 1.1开散列与闭散列比较 二、开散列/哈希桶的实现 2.1开散列实现 哈希函数的模板构造 哈希表节点构造 开散列增容 插入数据 2.2代码实现 一、开散列的概念 开散列法又叫链地址法(开链法)&#xff0c;首先对关键码集合用散列函数计算散列地址&…

canvas跟随鼠标画有透明度的椭圆边框

提示&#xff1a;canvas跟随鼠标画有透明度的椭圆边框 文章目录 前言一、跟随鼠标画有透明度的椭圆边框总结 前言 一、跟随鼠标画有透明度的椭圆边框 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

Web APIs知识点讲解(阶段五)

DOM- 网页特效篇 一.课前回顾(手风琴) <!DOCTYPE html> <html><head lang"en"><meta charset"UTF-8"><title>手风琴</title><style>ul {list-style: none;}* {margin: 0;padding: 0;}div {width: 1200px;heig…

【过度拟合?秒了!】

目录 引言 一、简化模型复杂度 1 .1 特征选择 1.2 降低多项式阶数 1.3 减少神经元数量或层数 二、使用正则化技术 2.1 L1正则化&#xff08;Lasso&#xff09; 工作原理 应用场景 2.2 L2正则化&#xff08;Ridge&#xff09; 2.3 Elastic Net正则化 2.4 代码事例 …

同是3D国漫公司,唯独这家,建模堪称国内天花板?

随着动画《斗罗大陆》播放量破500亿&#xff0c;一脚踹开国漫市场的大门&#xff0c;3D国漫开始迈入“内卷”新阶段。 &#xff08;图&#xff1a;斗罗大陆&#xff1a;双神战双神&#xff09; 同时热门网文改编成为当下国产动画公司的基本选项&#xff0c;包括“双斗”&#…

37-巩固练习(一)

37-1 if语句等 1、问&#xff1a;输出结果 int main() {int i 0;for (i 0; i < 10; i){if (i 5){printf("%d\n", i);}return 0;} } 答&#xff1a;一直输出5&#xff0c;死循环 解析&#xff1a;i5是赋值语句&#xff0c;不是判断语句&#xff0c;每一次循…

redis 保存是否可以更快?

redis 常见用法之保存 在java项目很多人都喜欢用spring-boot-starter-data-redis下的StringRedisTemplate操作redis,大多项目也用作为缓存&#xff0c;他们最常见的保存key value代码&#xff0c;如下&#xff1a; stringRedisTemplate.opsForValue().set(key, value); 大家都…