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

网站建设报价多少钱上海牛巨微seo优化

网站建设报价多少钱,上海牛巨微seo优化,嘉兴学网站建设,wordpress 08影院给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 方法一:双指针法 思路 使用两个指针 left 和 right 分别指向数组的两端,同时记录左边的最大高度 leftMax 和右边的最大高度 rig…

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

方法一:双指针法

思路

使用两个指针 left 和 right 分别指向数组的两端,同时记录左边的最大高度 leftMax 和右边的最大高度 rightMax。在每次迭代中,比较 left 和 right 指向的高度,选择较小的一端进行处理。如果 height[left] < height[right],则说明左边的柱子可能会接到雨水,此时计算当前位置能接到的雨水量(leftMax - height[left]),并将 left 指针右移一位;否则,说明右边的柱子可能会接到雨水,计算当前位置能接到的雨水量(rightMax - height[right]),并将 right 指针左移一位。重复这个过程,直到 left 和 right 指针相遇。

代码实现
function trap(height: number[]): number {let left = 0;let right = height.length - 1;let leftMax = 0;let rightMax = 0;let result = 0;while (left < right) {if (height[left] < height[right]) {leftMax = Math.max(leftMax, height[left]);result += leftMax - height[left];left++;} else {rightMax = Math.max(rightMax, height[right]);result += rightMax - height[right];right--;}}return result;
}// 示例调用
const height = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1];
const rainWater = trap(height);
console.log("下雨之后能接的雨水:", rainWater);

复杂度分析
  • 时间复杂度:(O(n)),其中 n 是数组 height 的长度。因为只需要遍历一次数组。
  • 空间复杂度:(O(1)),只使用了常数级的额外空间。

方法二:单调栈法

思路

使用一个单调栈来存储柱子的索引。遍历数组,对于每个柱子,如果当前柱子的高度大于栈顶柱子的高度,则说明栈顶柱子可以接到雨水,计算并累加接水量,然后将栈顶元素出栈,重复这个过程,直到栈为空或者当前柱子的高度不大于栈顶柱子的高度。最后将当前柱子的索引入栈。

代码实现
function trap(height: number[]): number {const stack: number[] = [];let result = 0;for (let i = 0; i < height.length; i++) {while (stack.length > 0 && height[i] > height[stack[stack.length - 1]]) {const top = stack.pop();if (stack.length === 0) {break;}const distance = i - stack[stack.length - 1] - 1;const minHeight = Math.min(height[i], height[stack[stack.length - 1]]) - height[top];result += distance * minHeight;}stack.push(i);}return result;
}// 示例调用
const height2 = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1];
const rainWater2 = trap(height2);
console.log("下雨之后能接的雨水:", rainWater2);
复杂度分析
  • 时间复杂度:(O(n)),其中 n 是数组 height 的长度。虽然有一个嵌套的 while 循环,但每个元素最多入栈和出栈一次,所以总的时间复杂度仍然是 (O(n))。
  • 空间复杂度:(O(n)),在最坏情况下,栈中可能会存储所有的柱子索引。

综上所述,双指针法和单调栈法都能有效地解决接雨水问题,双指针法的代码相对简单,空间复杂度较低;单调栈法的思路相对复杂一些,但也能清晰地处理接雨水的逻辑。

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

相关文章:

  • 万网张向东流程优化四个方法
  • 专做影视评论的网站雅思培训机构哪家好机构排名
  • 企业网站建设框架图b站推广入口2023破解版
  • 四川省建设网塔吊证查询网站做外贸怎么推广
  • 网站app有哪些功能最好的网站推广软件
  • 外包加工项目英文seo是什么意思
  • 有必要自建网站做导购吗防疫管控优化措施
  • 企业推广网站有哪些湖南seo推广多少钱
  • 怎么做蒙文网站百度推广登录平台官网
  • 兰州网站建设加王道下拉搜索引擎优化百度百科
  • 具有品牌的网站建设网站搭建流程
  • 零下一度网站建设公司建网站多少钱
  • 邻水网站建设如何快速提升自己
  • 网站建设翻译英文武汉网络推广有限公司
  • 企业做网站认证有哪些好处在线培训系统
  • 公司网页制作流程图厦门seo公司到1火星
  • 网站建设与推广推荐谷歌浏览器搜索入口
  • 泰安市住房和城乡建设部网站免费网站java源码大全
  • 仿牌网站容易被攻击吗2024很有可能再次封城吗
  • 关于单位网站建设的报告搭建网站基本步骤
  • 山西太原做企业网站建设的公司网站推广是干嘛的
  • 网站备案号官网南京疫情最新情况
  • 3d动画制作视频教程免费seo工具汇总
  • 九江网站建设张旭四川网络推广推广机构
  • 微网站是自己做可以不网络营销的手段包括
  • 网站开发是否属于无形资产seo的培训网站哪里好
  • 老外做的汉语网站谷歌收录提交入口
  • 七台河新闻联播最新重庆seo优
  • 上海web网站开发百度竞价排名多少钱
  • 站群 网站如何做房地产新闻最新消息