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

wordpress 评论回复邮件通知插件seo与sem的区别与联系

wordpress 评论回复邮件通知插件,seo与sem的区别与联系,网站开发的方法,官网建设公司有哪些1、题干 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3…

1、题干

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:
在这里插入图片描述
输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。

示例 2:
输入:height = [4,2,0,3,2,5]
输出:9

提示:
n == height.length
1 <= n <= 2 * 104
0 <= height[i] <= 105

2、解题

方法一:动态规划,加法转减法思路

对于接雨水这个问题,正向来看,我们需要求出每一个柱子雨水部分的面积,然后累加得到最终的雨水量。
这个思路最容易想到,也能做,但计算相对比较麻烦,需要分别计算出每一个柱子左右两边最大值。然后取其中较小的一个减去当前柱子高度,获取当前柱子的储水量,依次遍历累加获取最终的储水量。这里我们不推荐。

反向来看,柱子的高度已知,我们可以求出当前总面积,在减去每一个柱子的面积,剩下的就是储水量的和。
这个思路就是把加法转化为减法。根据特征可以看出,左边到最高值一定是递增的,最高值到最右边又依次是递减的。
以左边为例,求当前柱子的最终高度,是不是就是左边存在的最大值,把这个最大值提取出来当做公共变量依次求出每一个柱子的最终值。

代码示例:

 // 动态规划,加法转减法基础思路public static int trap(int[] height) {int sum = 0;// 1、求出最大元素的下标,可能是多个int max = Arrays.stream(height).max().getAsInt();List<Integer> maxIndexList = new ArrayList<>();for (int i = 0; i < height.length; i++) {if (height[i]==max){maxIndexList.add(i);}}// 多个最大值时,最终高度就是max,求取这部分的雨水if (maxIndexList.size()>1){for (int i = maxIndexList.get(0)+1; i < maxIndexList.get(maxIndexList.size()-1); i++) {sum = sum + (max-height[i]);}}// 2、求出最左的递增序列,计算左侧雨水int leftMaxIndex = maxIndexList.get(0);int leftmax = height[0];for (int i = 1; i < leftMaxIndex; i++) {   // 最边上的柱子不可能有雨水,从1开始if (height[i]>leftmax){leftmax = height[i];}sum = sum + (leftmax-height[i]);}// 3、求出最右的递减序列,计算左侧雨水int rightMaxIndex = maxIndexList.get(maxIndexList.size()-1);int rightmax = height[height.length-1];for (int i = height.length-2; i > rightMaxIndex; i--) {   // 最边上的柱子不可能有雨水,从1开始if (height[i]>rightmax){rightmax = height[i];}sum = sum + (rightmax-height[i]);}return sum;}

方法二:动态规划,加法转减法思路优化

思路和方法一是一致的,主要用于优化时间复杂度。
从左到右遍历获取最大值数组1,在从右向左获取最大数组2。两者取较小值就是当前柱子的最小高度。
这个方法只需要两次遍历,时间复杂度为O(n),计算起来效率比方法一要更高。

左侧求解示例图:
如下红色部分为左侧开始遍历得到的结果集。
在这里插入图片描述
右侧求解示例图:
如下红色部分为右侧遍历得到的结果集。
在这里插入图片描述
两者取最小的部分得到:
在这里插入图片描述
代码示例:

    // 动态规划,加法转减法基础思路,优化方案public static int trap(int[] height) {int sum = 0;// 1、求出从左到右的最大值序列int[] maxLeft = new int[height.length];int maxTemp = 0;for (int i = 0; i < height.length; i++) {if (height[i]>maxTemp){maxTemp = height[i];}maxLeft[i] = maxTemp;}// 2、反向求出从右到左的最大值序列int[] maxRight = new int[height.length];maxTemp = 0;for (int i = height.length-1; i >= 0; i--) {if (height[i]>maxTemp){maxTemp = height[i];}maxRight[i] = maxTemp;}// 两者最小值减去height就是当前节点的雨水量for (int i = 0; i < height.length; i++) {sum = sum + (Math.min(maxRight[i],maxLeft[i]) - height[i]);}return sum;}

方法三:双指针法

这个思路和上面的方法有些类似的。使用双指针分别指向最左和最右,依次求解左和右较小的那一部分获取雨水值,直到指针相遇结束。

代码示例:

 public static int trap(int[] height) {int ans = 0;int left = 0, right = height.length - 1;int leftMax = 0, rightMax = 0;   // 记录最左和最右已存在的最大值while (left < right) {leftMax = Math.max(leftMax, height[left]);rightMax = Math.max(rightMax, height[right]);if (height[left] < height[right]) {ans += leftMax - height[left];++left;} else {ans += rightMax - height[right];--right;}}return ans;}

向阳出发,Dare To Be!!!

http://www.dtcms.com/wzjs/147625.html

相关文章:

  • 网站建设项目心得体会优化模型的推广
  • 网站后台添加文字微信软文案例
  • 上海最新通报: 上海最新通报性价比高seo排名优化的
  • 建立一个小型网站多少钱360收录提交入口网址
  • 西安找公司建网站有广告位怎么找广告商
  • 简网app工场官网注册重庆百度搜索优化
  • 济南网站建设方案报价elo机制
  • 网站 横幅新品牌进入市场的推广方案
  • 做旅游攻略的网站注册网站的免费网址
  • 转运公司网站建设做网站建网站公司
  • 哈尔滨做设计和网站的公司吗全网推广的方式有哪些
  • 灯饰网站建设职业培训机构哪家最好
  • 国家对地理信息网站建设的重视抖音seo关键词优化怎么做
  • 做网站有陪标现象吗软文营销模板
  • 苏州h5网站seo外链技巧
  • WordPress批量定时发布文章贵州快速整站优化
  • 想给学校社团做网站贵州整站优化seo平台
  • 商城网站类建设哪家好武汉刚刚发生的新闻
  • 电商 网站 备案推广app有哪些
  • 网站建设的大作业代码网站建设服务
  • 网站建设j介绍ppt模板网页设计与网站开发
  • 互联网网站文化四川seo排名
  • 手机上怎么做投票网站网站是怎么做出来的
  • 网站建设记什么科目全网营销国际系统
  • wordpress 开启多站点郑州seo优化外包热狗网
  • 做电影网站用什么程序搜索指数在线查询
  • 抚顺网站建设技术员招聘网站流量统计工具有哪些
  • 网站建设南通长沙疫情最新数据消息
  • 公司网站注册要多少钱西安百度推广开户运营
  • 河北邯郸wap网站建设万能引流软件