reLeetCode 热题 100- 42 接雨水 - MKT

news/2025/9/28 17:30:40/文章来源:https://www.cnblogs.com/gooutlook/p/19117256

image

 

image

 

class Solution {
public:/*关键  左边界  height[zuo]>height[zuo+1]右边界  1 是否比height[you]》height[zuo] break;2  不是最后一个 height[you]>height[you-1]  &&  height[you]>height[you+1] 3 最后一个  height[you]>height[you-1] */// 1 失败 找右侧边界 忽略了第一个比自己大的int trap1(vector<int>& height) {int left =0;int right =2;int current=1;int current_i=0;int current_i_cut=0;int current_all=0;for(int i=1;i<(height.size()-1);++i){cout<< i << "  "<< " left "<< left << "  right  "<<right<<"  current_all "<< current_all<<endl;current=i;if(height[left]>height[left+1]){right=current+1;bool findright=0;if(right==(height.size()-1)){ // 最后一个右边界findright=1;}if(height[current]<height[right] && height[right] > height[right+1] && (right+1)<height.size()){ // 正常内部的右边界findright=1;}if(findright==1){// 找到右边界current_i_cut=0;for(int j = left+1;j<right;j++) {current_i_cut=current_i_cut+height[j];}current_i= min(height[left],height[right])*(right-left-1);current_all=current_all+current_i-current_i_cut;cout<<"i "<< i << "找到到右边界  "<< " left "<< left << " / "<<height[left]<< "  right  "<<right << " / "<<height[right]<< " w = "<< (right-left-1) << " h = "<<  min(height[left],height[right]) << " current_i_cut  "<< current_i_cut << " current_i  "<< current_i << " current_all "<< current_all<<endl;current_i_cut=0;current_i=0;left=right;i=left;// cout<<"i "<< i << "找到到右边界 更新数据  "// << " left "<< left << " / "<<height[left]// << "  right  "<<right << " / "<<height[right]// << " w = "<< (right-left-1) // << " h = "<<  min(height[left],height[right]) // << " current_i_cut  "<< current_i_cut // << " current_i  "<< current_i // << " current_all "<< current_all// <<endl;}else{//current_i_cut=current_i_cut+height[i];// cout<<" 减去i " << i << "  数值 "<< height[i]<<endl;}}else{current_i_cut=0;left=i;     }// cout<<"i "<< i << "...最后统计 "// << " left "<< left << " / "<<height[left]// << "  right  "<<right << " / "<<height[right]// << " w = "<< (right-left-1) // << " h = "<<  min(height[left],height[right]) // << " current_i_cut  "<< current_i_cut // << " current_i  "<< current_i // << " current_all "<< current_all// <<endl;}return current_all;}// 2 通过但是超时int trap2(vector<int>& height) {int left =0;int right =2;int current=1;int current_i=0;int current_i_cut=0;int current_all=0;for(int i=1;i<(height.size()-1);++i){current=i;if(height[left]>height[left+1]){int right=left;int max_num=0;int max_index=0;for(int j=left+1;j<height.size();j++){if(height[j]>max_num){max_num=height[j];right=j;if(max_num>height[left])break; // 只需要找到第一个大的}}current_i_cut=0;int w=right-left-1;int h=min(height[right],height[left]);for(int k=left+1;k<right;k++){current_i_cut=current_i_cut+height[k];}current_i=w*h;current_all=current_all+current_i-current_i_cut;//  cout<<"i "<< i << "找到到右边界 更新数据  "//     << " left "<< left << " / "<<height[left]//     << "  right  "<<right << " / "<<height[right]//     << " w = "<< (right-left-1) //     << " h = "<<  min(height[left],height[right]) //     << " current_i_cut  "<< current_i_cut //     << " current_i  "<< current_i //     << " current_all "<< current_all//     <<endl;left=right;i=left;}else{left=i;     }}return current_all;}// 双指针通过 参考网友思路 官方费解int trap2_shuangzhizhen(vector<int>& height) {/*关于双指针解法,我使用直接比较lmax与rmax的解法,可以AC。我思考了一下,有一个说明其正确性的解释:
由于两个指针都走过了各自的区域,即left指针左边已经遍历,right指针右边已经遍历,因此可以保证lmax和rmax是各自遍历区域内的最大值。因此较小者一定是对应指针所在位置接水时的较低端。
举例说明即:
考虑有lmax<=rmax,此时无论left到right之间的数有多大,left指针位置能接到多少水由lmax决定,因此此时直接统计该位置对答案的贡献是正确的。当lmax>rmax的情况也同理。*/int right=0;int left=height.size()-1;int right_max,left_max=0;int all_water=0;while(right<left){// 当前位置的水 由左右两侧区间的最短边决定。只要找到两侧谁是最短,就可以先决定一侧。right_max=max(right_max,height[right]);// 0-right 区间最大left_max=max(left_max,height[left]); // left-N 区间最大// right -  left 区间目前未知,但是左右两侧的最小边,决定了对应左右两侧位置的最小边if(right_max<left_max){ // 右侧最大小于左侧最大// 右侧可以确定,(右侧到左侧中间无论什么情况,左侧最大兜底,右侧不可能在大了)int curent_water=right_max-height[right];  all_water=all_water+  curent_water;//等效all_water += right_max-height[right]right++;}else{// 左侧可以确定,(右侧到左侧中间无论什么情况,右侧最大兜底,左侧不可能在大了int curent_water=left_max-height[left];  all_water=all_water+  curent_water;left--;}}return all_water;}int trap(vector<int>& height) {int right=0;int left=height.size()-1;int right_max,left_max=0;int all_water=0;while(right<left){right_max=max(right_max,height[right]);left_max=max(left_max,height[left]);if(right_max<left_max){int curent_water=right_max-height[right];  all_water=all_water+  curent_water;right++;}else{int curent_water=left_max-height[left];  all_water=all_water+  curent_water;left--;}}return all_water;}};

  

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

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

相关文章

2025 防撞软包生产厂家权威推荐排行榜:E0 级环保 + B1 级阻燃,公检法 / 幼儿园场景最新优选厂家谈话室/留置病房/教育中心/体育馆防撞软包厂家推荐

防撞软包作为公检法审讯室、幼儿园等场景的核心安全保障材料,近年来市场需求持续扩张,但行业乱象却愈发凸显:部分产品环保等级仅达 E2 级,甲醛等有害物挥发超标,长期使用危害人体健康;阻燃性能不足 B1 级,难以通…

企业门户网站服务器c 做网站

变量初始值为A&#xff0c;修改成B,通过AtomicReference的compareAndSet去改变。就会先比较原来的值是否为A&#xff0c;如果为A则修改成功&#xff0c;否则修改失败。 但是如果在这个过程中&#xff0c;A变成D然后又变成A, 那么再调用compareAndSet去改变也能修改成功B。这个…

ppt成品免费下载的网站网站建设旗帜条幅

几张图看懂列式存储 转载于:https://www.cnblogs.com/apeway/p/10870211.html

ssti模板注入

ssti模板注入 1. SSTI漏洞 SSTI,即服务器端模板注入漏洞; ​ 在渲染模板时,代码不严谨并且没有对用户的输入做严格过滤,将导致SSTI漏洞,造成任意文件读取和RCE命令执行; 2. SSTI类型判断绿线表示执行成功,…

2025 年章丘二手磁选机厂家最新权威推荐排行榜:TOP 级企业设备全型号覆盖与五年质保深度解析二手立环磁选机/二手华特磁选机/章丘二手磁选机厂家推荐

在矿产加工与原料提纯行业,磁选机作为核心分选设备,其品质与适配性直接决定生产效率和产品纯度。当前二手磁选机交易市场乱象丛生,不少商家设备型号单一,无法满足不同产能需求;品牌选择受限,采购灵活性低;更有甚…

中位数定理

https://codeforces.com/contest/2149/problem/D点击查看代码 #include <bits/stdc++.h> #define int long long using namespace std;int f(const vector<int> x){if(x.empty())return 0;int pos = (int)…

数据集Dataset

Dataset:提供一种方式去获取数据及其label 目的:如何获取每一个数据及其label;告诉我们总共有多少个数据 tensorboard 用于可视化 TensorFlow 等深度学习框架训练过程等数据的工具。

301网站目录个人主页模板设计

思路&#xff1a; 外层循环控制循环次数(i<len)&#xff0c;设置swapFlagfalse内层循环j1(j<len-i)&#xff0c;两两(j和j-1)比较&#xff0c;逆序则交换内层每次循环结束&#xff0c;没有交换&#xff0c;则break结束 内层循环j从1开始&#xff0c;小于len&#xff0c;…

2025 年三维扫描仪厂家最新权威推荐排行榜:覆盖空间 / 高精度 / 专业 / 手持激光 / 工业等类型,精选实力企业深度解析

在数字化转型浪潮席卷各行业的当下,三维扫描技术已成为文博保护、工业检测、医疗诊断、教育科研等领域的核心支撑工具,市场对高品质三维扫描仪的需求呈爆发式增长。然而,当前市场品牌鱼龙混杂,产品从消费级到工业级…

深入解析:华为全系列机型发展简史 机型与芯片的对照表

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

计算机网络---网络层 - 详解

计算机网络---网络层 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

2025 年染井吉野樱厂商最新推荐排行榜:权威筛选优质苗木供应商,聚焦分枝点规格与景观适配五公分/十公分/染井吉野樱批发厂商推荐

当前染井吉野樱苗木市场面临分枝点规格混乱、培育标准缺失等问题,从 0.5 米到 3 米的分枝点标注随意,导致采购方难以匹配绿化项目需求。部分供应商忽视科学培育,苗木移栽后树形失衡,严重影响城市绿化、景区打造等项…

一个网站怎么绑定很多个域名国家备案网查询系统

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

2025 货架厂家权威推荐排行榜: 实力厂家深度解析,金塔领衔全业态定制服务新标杆云南/昆明/西南货架厂家推荐

在零售与仓储行业加速升级的当下,货架作为空间利用与商品运营的核心载体,其品质、设计适配性与服务效率直接决定业态盈利水平。然而当前市场乱象频发:部分小厂缺乏核心技术,产品承重不足、易变形,存在安全隐患;多…

国标GB28181视频平台EasyGBS公网平台实时视频播放方案

国标GB28181视频平台EasyGBS公网平台实时视频播放方案支持平台级联功能,可以实现多个平台之间的互联互通和数据共享。这对于构建大规模、跨地域的安防监控网络具有重要意义。随着科技的飞速发展,视频监控技术已经成为…

怎样免费设计网站建设网站cms相关知识

文章目录 顺序表一&#xff1a;线性表1.1概念&#xff1a; 二&#xff1a;顺序表2.1概念与结构&#xff1a;2.2分类&#xff1a;2.2.1静态顺序表2.2.2动态顺序表 2.3动态顺序表的实现声明&#xff08;初始化&#xff09;检查空间容量尾插头插尾删头删查找指定位置之前插入数据指…

2025 展会搭建公司权威推荐排行榜:服务商创意定制与全流程服务能力深度解析站台展会搭建/展台搭建活动策划/展台搭建展台制作公司推荐

会展经济的蓬勃发展推动展会搭建成为品牌展示的核心载体,但其行业痛点却日益凸显:传统服务商设计同质化严重,难以匹配品牌个性化表达;施工团队专业度参差导致进度延误、安全隐患频发;服务链条断裂需客户多方协调,…

Volcano——配置理解

Volcano配置apiVersion: v1 kind: ConfigMap metadata:name: volcano-scheduler-configmapnamespace: volcano-system data:volcano-scheduler.conf: |actions: "enqueue, allocate, backfill"tiers:- plugi…

国标GB28181视频平台EasyGBS:强大的视频监控与一站式视频服务解决方案

国标GB28181视频平台EasyGBS:强大的视频监控与一站式视频服务解决方案以其强大的功能、卓越的性能和良好的可扩展性,为用户提供了全面的视频监控与服务解决方案。随着信息技术的飞速发展,视频监控领域正经历着从传统…

阿里云主机建网站吉林市建设官方网站

一、说明 文本摘要是一种自然语言处理技术&#xff0c;允许用户将大量文本总结为小块&#xff0c;而不会丢失任何重要信息。本文介绍NLP中使用Gensim和Sumy实现文本摘要的步骤。 二、为什么要总结文本&#xff1f; 互联网包含大量信息&#xff0c;而且每秒都在增加。文本摘要可…