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

信丰县建设局网站网站与系统对接图文方案

信丰县建设局网站,网站与系统对接图文方案,网站静态路径,个人网站二级域名做淘宝客文章目录 一、问题描述二、暴力法(Brute Force)思路实现代码 三、动态规划法(Dynamic Programming)思路实现代码 四、双指针法(Two Pointers)思路实现代码 五、方法对比 在本文中,我们将探讨经典…

文章目录

    • 一、问题描述
    • 二、暴力法(Brute Force)
      • 思路
      • 实现代码
    • 三、动态规划法(Dynamic Programming)
      • 思路
      • 实现代码
    • 四、双指针法(Two Pointers)
      • 思路
      • 实现代码
    • 五、方法对比

在本文中,我们将探讨经典的接雨水问题,并提供多种解题思路和方法。通过逐步深入的方式,将了解到如何使用暴力法、动态规划法以及双指针法解决这一问题,并对它们进行性能对比。

一、问题描述

42.接雨水
在这里插入图片描述


二、暴力法(Brute Force)

思路

对于数组中的每一个元素,我们都可以找到它左边和右边的最大高度,然后根据这两个最大高度来确定当前元素能够接住的水量。

实现代码

public int trap(int[] height) {int totalWater = 0;for (int i = 1; i < height.length - 1; i++) {int maxLeft = 0, maxRight = 0;// 寻找左边最高的柱子for (int j = i; j >= 0; j--) {maxLeft = Math.max(maxLeft, height[j]);}// 寻找右边最高的柱子for (int j = i; j < height.length; j++) {maxRight = Math.max(maxRight, height[j]);}// 计算当前位置可以存储的水totalWater += Math.min(maxLeft, maxRight) - height[i];}return totalWater;
}

时间复杂度:O(n^2),因为对于每个元素都需要遍历其左右两边来寻找最大值。

空间复杂度:O(1)。


三、动态规划法(Dynamic Programming)

思路

为了避免重复计算每个位置的左右最大高度,我们可以预先计算并存储这些信息。这样,当我们计算某个位置能接多少水时,可以直接查表得到左右最大高度。

实现代码

public int trap(int[] height) {if (height == null || height.length == 0) return 0;int n = height.length;int[] leftMax = new int[n], rightMax = new int[n];// 初始化最左边和最右边的边界条件leftMax[0] = height[0];rightMax[n - 1] = height[n - 1];// 填充leftMax数组for (int i = 1; i < n; i++) {leftMax[i] = Math.max(leftMax[i - 1], height[i]);}// 填充rightMax数组for (int i = n - 2; i >= 0; i--) {rightMax[i] = Math.max(rightMax[i + 1], height[i]);}// 计算总储水量int totalWater = 0;for (int i = 0; i < n; i++) {totalWater += Math.min(leftMax[i], rightMax[i]) - height[i];}return totalWater;
}

时间复杂度:O(n),因为我们只需要遍历数组三次。

空间复杂度:O(n),需要额外的空间来存储左右最大高度。


四、双指针法(Two Pointers)

思路

利用两个指针分别从数组的两端向中间移动,并同时维护左右两侧的最大高度。这种方法可以在一次遍历中解决问题,无需额外的空间。

实现代码

public int trap(int[] height) {if (height == null || height.length == 0) return 0;int left = 0, right = height.length - 1;int maxLeft = 0, maxRight = 0;int totalWater = 0;while (left < right) {if (height[left] < height[right]) {if (height[left] >= maxLeft) {maxLeft = height[left];} else {totalWater += maxLeft - height[left];}left++;} else {if (height[right] >= maxRight) {maxRight = height[right];} else {totalWater += maxRight - height[right];}right--;}}return totalWater;
}

时间复杂度:O(n),只需遍历一次数组。

空间复杂度:O(1),只使用了常数级别的额外空间。


五、方法对比

方法时间复杂度空间复杂度优点缺点
暴力法O(n^2)O(1)易于理解和实现效率低下,不适用于大数据集
动态规划法O(n)O(n)高效处理中等规模数据需要额外的存储空间
双指针法O(n)O(1)最优的时间和空间复杂度理解难度较高

通过上述三种方法的介绍和比较,我们可以看到双指针法以其优秀的时空复杂度成为解决该问题的最佳选择。然而,理解不同的方法有助于我们在面对类似问题时能够灵活运用算法思维,选择最适合当前场景的解决方案。

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

相关文章:

  • 网站开发工具可视化昆明网站的优化
  • 聊城营销网站建设价格东莞三网合一网站制作
  • 网站开发怎么让别人看到做p2p网站费用
  • jsp网站建设模板烟台网站制作公司在线咨询
  • 新学校网站建设成果房产网站cms
  • 奉化建设局网站广州最新通告
  • 重庆市网上房地产官网电脑优化大师有用吗
  • 支付单页网站模板商业设计说明
  • 呼和浩特电子商务网站建设站内优化包括哪些
  • 做盗版视频网站成本多少电子商务的发展现状和前景趋势
  • 做包装找灵感看什么网站友情链接中有个网站域名过期了会影响
  • 自助建设视频网站codepen wordpress
  • 局门户网站的建设方案宣传册样式
  • 有免费做理化试验的网站吗hao123网站难做吗
  • 制作公司网站用阿里云本人找做钢筋笼的活网站
  • 网站服务器租用价格多少钱一年wordpress架站教程
  • 济源做网站的好公司施工企业qc小组
  • 网站开发需求文档prd模板WordPress快速发布文章
  • wordpress站长之家贵阳58同城做网站公司
  • 网站微商城的建设运营实践和思考网站增加流量
  • 虚拟网站怎么做的搭建电商平台网站
  • 武夷山网站设计网站广告收费标准
  • 最早的做团购的网站网站开发模板系统
  • 青海网站 建设网页传奇国度
  • 东莞凤岗网站制作蜘蛛网站长工作职责
  • 有哪些做壁纸的网站好网站建设整个流程
  • .jsp网站开发技术wordpress 房产插件
  • 湖南做网站的公司排名最新网站建设软件
  • 如何申请域名做网站郑州电力高等专科学校
  • 在哪家网站做淘宝客最好手机网站开发怎么样