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

LeetCode 刷题【42. 接雨水】

42. 接雨水

自己做

解:双指针左右分割容器

class Solution {
public:int trap(vector<int>& height) {int res = 0;int len = height.size();if(len <= 2)      //构不成一个容器了,直接返回return res;int end = len - 1;        //右边界int start = 0;            //左边界//对左边的边界初始化while(height[start] <= height[start + 1]){    //排除前面部分start++;if(start == end - 1)      //构不成一个容器了,直接返回return res;}//对右边的边界初始化while(height[end - 1] >= height[end]){    //排除后面部分end--;if(end == start + 1)      //构不成一个容器了,直接返回return res;}int left = start + 1;     //左边容器起始int right = end - 1;      //右边容器起始//从左往右靠拢int left_capacity = 0;while(left <= end){if(height[left] < height[start]){ //当遇到比边界小的时,将其看做底,计算当前容器的容量left_capacity += height[start] - height[left];    //累加当前容器的容量}else{                           //当遇到比边界大或者相等时,该容器就封边了,开始找下个容器start = left;                 //新的容器边界res += left_capacity;          //将该容器的容量累加进结果中left_capacity = 0;            //重置容量}left++;                         //延伸容器}//从右往左靠拢int right_capacity = 0;while(right >= start){if(height[right] < height[end]){ //当遇到比边界小的时,将其看做底,计算当前容器的容量right_capacity += height[end] - height[right];    //累加当前容器的容量}else{                           //当遇到比边界大或者相等时,该容器就封边了,开始找下个容器end = right;                 //新的容器边界res += right_capacity;          //将该容器的容量累加进结果中right_capacity = 0;            //重置容量}right--;                         //延伸容器}return res;}
};

今日总结

好耶,写的第一版代码直接没有任何报错地过了,也是能跑到最优解的程度,今天没有任何调试,一遍过

http://www.dtcms.com/a/332373.html

相关文章:

  • RecyclerView 性能优化:从原理到实践的深度优化方案
  • 新手向:Python函数定义与参数传递(位置参数、关键字参数、默认参数)
  • electron之win/mac通知免打扰
  • 什么是接口?PHP如何使用 SessionHandlerInterface 接口实现Session自定义会话数据存储
  • cloudflare缓存配置
  • 【Mysql语句练习】
  • 20250815在荣品RD-RK3588-MID开发板的Android13下点卡迪的7寸LCD屏
  • Redisson分布式锁实战指南:原理、用法与项目案例
  • LINUX软件编程 -- IO
  • Microsoft Visual Studio常用快捷键和Windows系统常用快捷键的整理
  • python合并两个字典
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • java + html 图片点击文字验证码
  • 谈谈《More Effective C++》的条款30:代理类
  • initdata段使用方式
  • 图论——Djikstra最短路
  • 英文PDF翻译成中文怎么做?试试PDF翻译工具
  • 【学习笔记】Java并发编程的艺术——第7章 Java中的13个原子操作类
  • C#---StopWatch类
  • C++设计模式:类间关系
  • Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱
  • PCB沉金工艺解析:高端电子制造的可靠基石
  • 推荐一款高性能状态机管理解决方案
  • Java ArrayList的介绍及用法
  • OpenCV Python——VSCode编写第一个OpenCV-Python程序 ,图像读取及翻转cv2.flip(上下、左右、上下左右一起翻转)
  • MySQL知识点(上)
  • adb 发送广播
  • dockerfile自定义镜像,乌班图版
  • 高并发接口性能优化实战:从200ms到20ms的蜕变之路
  • 线索转化率翻3倍?AI重构CRM