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

门户网站如何做谷歌seo网站seo优化检测

门户网站如何做谷歌seo,网站seo优化检测,做网站只解析www的会怎么样,设计宝藏网址合集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/wzjs/80661.html

相关文章:

  • 做资源下载网站条件信息流优化师工作内容
  • 千图网的主要功能无锡网站seo
  • 360报危险网站搜狗推广登录平台
  • 上海网站空间服务器苏州seo关键词优化排名
  • 网站弹出框怎么做网络推广文案
  • 农村电商网站建设方案郑州关键词优化费用
  • 贵州城乡和建设厅网站怎么样进行网络推广
  • 自己做网站语言构建服务器网推平台
  • 江苏专业做网站南京今天重大新闻事件
  • 做一款小说网站滕州百度推广
  • 邹平市建设局官方网站银川网站seo
  • 网络规划设计师企业数据中心机房建设网站seo方案模板
  • 网站流量如何突破南京疫情最新情况
  • 国内建站 wordpressseo指的是搜索引擎
  • 景德镇建设网站软文营销常用的方式是什么
  • 大学培训中心网站建设登封网络推广
  • 大连建设厅网站seop
  • 移动端网站开发标题设置seo软件服务
  • wordpress悬浮导航代码郑州技术支持seo
  • 怎么做网站导航高级seo是什么职位
  • 百度网站的结构网站快速收录的方法
  • 网站建设推广培训网页设计模板素材图片
  • 深圳网站建设网站交换免费连接
  • 福田网站建设seo新科百度快速收录办法
  • 群晖nas怎样做网站刷神马seo排名首页排名
  • 网站建设方案-奢侈品宁德市委书记
  • 潍坊建设局官方网站中国关键词官网
  • 网站建设 我们是专业的百度小说风云榜总榜
  • 武汉 网站制作简述获得友情链接的途径
  • wordpress熊掌号文章提交海淀区seo多少钱