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

昆明网站建设优化企业wap网站 微信小程序

昆明网站建设优化企业,wap网站 微信小程序,多个域名 指向同一个网站,编程app用什么软件1.题目描述 2.思路 方法1(自己想的): 首先把最边上接不到水的柱子删掉,以减少开销。 left 0,right 1,left暂时固定住,right向右走。若right比上个柱子低,就将(left - right)加到…

1.题目描述

2.思路

方法1(自己想的):

首先把最边上接不到水的柱子删掉,以减少开销。

left = 0,right = 1,left暂时固定住,right向右走。若right比上个柱子低,就将(left - right)加到res里;若right比上个柱子高但比left低,就将(left - right)加到res里;若right比left高,则将left更新为right。

需要考虑的特殊情况是形如[..., 3, 2, 1, 2]的柱子,按上面这种方法计算出来的res(4)会比真实值(1)大3,所以如果在上面的方法结束后left处柱子的高度大于最后一根柱子的高度,则需要把left到末尾的这段雨水量删掉,然后从最后一根倒着向left再重复一遍上述方法,计算出实际的雨水量加进res里面。

方法2(官方题解的动态规划):

下标i处能接到的雨水量等于下标i两边最大高度的最小值减去height[i],因此,创建两个长度为len(height)的数组left_max和right_max分别记录下标i及其左边、右边height的最大高度。

方法3(官方题解的相向双指针):

方法2中下标i处能接的雨水量由left_max和right_max中的最小值决定,由于left_max和right_max分别是从左向右、从右向左计算的,因此可以使用双指针left、right和两个变量left_max、right_max代替两个数组。

方法4(灵茶山艾府佬的相向双指针):

很牛逼的方法,不知道别人是怎么想出来的,我要读懂人家代码都费劲。

3.代码(Python3)

方法1:

class Solution:def trap(self, height: List[int]) -> int:res = 0left_pos = 0# 删掉左边接不到水的柱子for i in range(len(height) - 1):if height[i] <= height[i + 1]:left_pos += 1else:breakheight[:] = height[left_pos :]right_pos = len(height) - 1# 删掉右边接不到水的柱子for i in range(len(height) - 1):if height[len(height) - i - 1] <= height[len(height) - i - 2]:right_pos -= 1else:breakheight[:] = height[: (right_pos + 1)]# 只剩一个柱子if len(height) == 1:return 0# 从左往右走,初始化临时固定的左边界和一直在移的右边界left, right, tail_height = 0, 1, heightwhile left != (len(height) - 1):cur_volume = 0while height[left] > height[right]:cur_volume += (height[left] - height[right])right += 1if right == len(height):breakif right == len(height):if height[left] > height[right - 1]:if left == 0:tail_height = height[:: -1]else:tail_height = height[: (left - 1) : -1]breakres += cur_volumewhile height[left] <= height[right]:left, right = right, right + 1if left == (len(height) - 1):break# 从右往左走if height != tail_height:left, right = 0, 1while left != (len(tail_height) - 1):cur_volume = 0while tail_height[left] > tail_height[right]:cur_volume += (tail_height[left] - tail_height[right])right += 1res += cur_volumewhile tail_height[left] <= tail_height[right]:left, right = right, right + 1if left == (len(tail_height) - 1):breakreturn res

方法2:

class Solution:def trap(self, height: List[int]) -> int:res = 0n = len(height)left_max = [height[0]] + [0] * (n - 1)right_max = [0] * (n - 1) + [height[-1]]for i in range(1, n):left_max[i] = max(left_max[i - 1], height[i])right_max[n - i - 1] = max(right_max[n - i], height[n - i - 1])for i in range(n):res += (min(left_max[i], right_max[i]) - height[i])return res

方法3:

class Solution:def trap(self, height: List[int]) -> int:res = 0left, right = 0, len(height) - 1left_max = right_max = 0while left < right:left_max = max(left_max, height[left])right_max = max(right_max, height[right])if height[left] < height[right]:res += left_max - height[left]left += 1else:res += right_max - height[right]right -= 1return res

方法4:

class Solution:def trap(self, height: List[int]) -> int:res = 0stack = []for i, h in enumerate(height):while stack and h >= height[stack[-1]]:bottom_h = height[stack.pop()]if not stack:breakleft = stack[-1]cur_h = min(height[left], h) - bottom_hres += cur_h * (i - left - 1)stack.append(i)return res

4.执行情况

方法1:

方法2:

方法3:

方法4:

5.感想

方法1是我自己想出的狗屎办法,虽然时间复杂度挺可观的但是代码可读性极差,又臭又长使我反胃,我自己都不愿再读第二遍,而别人的代码都非常优雅,不得不说我的脑子还是有点欠发达了。。。

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

相关文章:

  • wordpress 网站统计插件网站建设网页开发
  • 网站内容维护费用灯光设计网站推荐
  • pink老师html5+css3day02
  • CTFHub 信息泄露通关笔记4:备份文件下载 bak文件
  • OverlayManager service, overlay, idmap, rro, android
  • 如何拆解一个Java项目?
  • C++ 泛型和特化
  • 【Linux篇】Linux指令进阶:从入门到熟练的实操指南
  • Orleans流系统时序图
  • 专业网站建设价格分析企业建设网站好吗
  • 活动日志系统集成指南
  • 弹幕网站是怎么做的软件开发工程师级别
  • 贵阳市建设局信息管理网站中国建设会计学网站
  • 函数简单传入参数的汇编分析
  • 怎样做已有网站的编辑维护大沥九江网站制作
  • 自己网站首页如何设置网站托管维护方案
  • 安卓基础组件024-底部导航栏
  • 【ROS2学习笔记】话题通信篇:话题通信项目实践——系统状态监测与可视化工具
  • 苏州门户网站平台推广员
  • ICT 数字测试原理 4 --电源监控电路(PMC)
  • 网站内页要不要加上关键词和描述广告型网站怎么做的
  • 深圳市建设局工程交易中心网站贵州 网站建设
  • 【C/C++】 函数形参—指针传递
  • 门限签名与多方安全计算(MPC)
  • 东莞公司高端网站建设高大上网站
  • 基于websocket的多用户网页五子棋(一)
  • PCA 主成分分析:数据世界的 “旅行清单整理师”—— 从 30 维杂乱到 2 维清晰的诗意降维
  • wordpress兼容mipseo加盟代理
  • 台州网站排名优化费用网站建设设计风格描述
  • 利用 ZoneABC 免费域名 零成本接入 Cloudflare 企业版 CDN