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

reLeetCode 热题 100- 42 接雨水 - MKT

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.gsyq.cn/news/13526.html

相关文章:

  • ssti模板注入
  • 2025 年章丘二手磁选机厂家最新权威推荐排行榜:TOP 级企业设备全型号覆盖与五年质保深度解析二手立环磁选机/二手华特磁选机/章丘二手磁选机厂家推荐
  • 数据集Dataset
  • 2025 年三维扫描仪厂家最新权威推荐排行榜:覆盖空间 / 高精度 / 专业 / 手持激光 / 工业等类型,精选实力企业深度解析
  • 题解:AT_abc425_f [ABC425F] Inserting Process
  • P11854 [CSP-J2022 山东] 宴会
  • 2025 年试验机厂家权威推荐榜:TOP5 优质厂家综合实力解析,助力科研与工业客户精准选型电子万能材料/橡胶拉力/塑料拉力/扬州拉力试验机厂家推荐
  • 跟Manus聊聊Bean生命周期设计哲学[From Manus]
  • 国产SUB-1G芯片DP4363F支持119-1050mhz超低功耗 - 动能世纪
  • 详细介绍:Linux----gcc、g++的使用以及一些问题
  • Sep 28
  • 图像采集卡:连接镜头与机器的“视觉神经”,释放工业智能核心动力
  • 2025 年最新推荐铝塑膜源头厂家权威排行榜:聚焦 3000㎡厂房与完整产业链的优质企业盘点复合/防锈防潮/木箱包装/设备包装铝塑膜厂家推荐
  • 《码界飞升传II:数据星辰异界问道》
  • 结论(数学)
  • 打包present, but unavailable
  • 2025 年最新推荐环保门禁厂家权威排行榜:清洁运输 / 智能 / 移动源系统及电子台账厂商详析企业/智能环保门禁厂家推荐
  • 2025 年即时通讯公司推荐 小天互连:私有化部署即时通讯、信创即时通讯、国产化即时通讯、局域内网即时通讯、企业 IM 即时通讯解决方案解析
  • GJOI 模拟赛6、7部分题解
  • ABC425题解
  • STM32中的Flash、ROM与RAM全解析 - 指南
  • 9.22 总结
  • 网络工程 --- 一个嵌入式网络设备中存在哪些开源软件
  • 挖同行墙脚!有稳定供应商的客户怎么下手构建?
  • LeetCode 386 字典序排数 Swift 题解:模拟字典翻页的遍历技巧 - 实践
  • 通过velocity将增量发版的代码及文件生成生成一个linux shell文件(解放运维)
  • 题解:AT_abc214_g [ABC214G] Three Permutations
  • 从企业级项目到普惠API:我如何将自研的人脸识别引擎打造成「识度AI」
  • 帮助向量机深度解析:从数学原理到工程实践的完整指南
  • 【Array】类型化数组:强类型集合的优势