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

地图网站怎么做中国的外贸企业有哪些

地图网站怎么做,中国的外贸企业有哪些,12306 网站开发,3d网站带后台下载文章目录 一、问题描述二、暴力法(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/a/438821.html

相关文章:

  • 外贸公司网站怎么设计更好单页响应式网站模板
  • 恒生电子面经准备
  • 电视剧在线观看完整版免费网站网友让你建网站做商城
  • 大学网站群建设方案设计网名姓氏
  • Qt 按钮点击事件全链路解析:从系统驱动到槽函数
  • 外贸公司建网站一般多少钱京津冀协同发展现状
  • 开发网站 语言优秀营销软文范例300字
  • 木匠手做网站网站主体变更
  • 领码方案 | 掌控研发管理成熟度:从理论透视到AI驱动的实战进阶
  • 为什么学网站开发互联网最吃香的职业
  • MTK调试-耳机驱动
  • Go语言中的map
  • 国土系统网站建设用地受理表花垣县建设局网站
  • 网站建设报告内容合肥经开区建设局网站
  • 华清远见25072班C++学习假期10.3作业
  • 网站建设范本n多国外免费空间
  • 【龙泽科技】智能网联汽车毫米波雷达传感器仿真教学软件
  • Vue 组件定义模板,集合v-for生成界面
  • 花生壳域名可以做网站域名吗新闻资讯网站php源码
  • 【C++】list的使用与模拟实现
  • 企业网站宽度给多少怎么从网站知道谁做的
  • 【深度学习新浪潮】国内主流AI视频生成模型(对标Sora2)技术解析与API代码实战
  • 计算字符串的编辑距离
  • 哪里可以做网站的学影视后期的正规学校
  • Python海象运算符使用指南
  • SDL2 _
  • NO.14数据结构红黑树|树高|转化4阶B树|插入操作|删除操作
  • 学网页设计要多长时间南京seo招聘
  • EPOLLONESHOT事件类型和ET模式有什么区别?
  • “多数派”的智慧:Redis Redlock 分布式锁