当前位置: 首页> 教育> 锐评 > 网页设计图片跟随鼠标移动_咸宁网站制作公司_一站式快速网站排名多少钱_深圳网站搜索优化工具

网页设计图片跟随鼠标移动_咸宁网站制作公司_一站式快速网站排名多少钱_深圳网站搜索优化工具

时间:2025/7/10 8:27:02来源:https://blog.csdn.net/qq_39370495/article/details/144276163 浏览次数:0次
网页设计图片跟随鼠标移动_咸宁网站制作公司_一站式快速网站排名多少钱_深圳网站搜索优化工具

dp

使用动态规划的方法来解决“接雨水”问题也是一种有效的策略。动态规划的基本思想是预先计算出每个位置的左侧和右侧的最大高度,然后根据这些预计算的结果来确定每个位置可以存储的雨水量。

动态规划方法

算法步骤
  1. 初始化

    • 创建两个数组 leftMaxrightMax,用于存储每个位置左侧和右侧的最大高度。
    • 初始化 water 为 0,用于存储总的雨水量。
  2. 计算左侧最大高度

    • 从左到右遍历高度数组,填充 leftMax 数组。
    • 对于每个位置 ileftMax[i]height[0]height[i] 的最大值。
  3. 计算右侧最大高度

    • 从右到左遍历高度数组,填充 rightMax 数组。
    • 对于每个位置 irightMax[i]height[i]height[n-1] 的最大值。
  4. 计算雨水量

    • 遍历每个位置,计算当前位置能接的雨水量为 min(leftMax[i], rightMax[i]) - height[i]
    • 将每个位置的雨水量累加到 water
  5. 返回结果

    • 返回 water,即总的雨水量。
Java 实现
class Solution {public int trap(int[] height) {int ans = 0;int len = height.length;int[] dpLeft = new int[len];int[] dpRight = new int[len];// initdpLeft[0] = height[0];dpRight[len - 1] = height[len - 1];// corefor (int i = 1; i < len; i++) {dpLeft[i] = Math.max(dpLeft[i - 1], height[i]);}for (int i = len - 2; i >= 0; i--) {dpRight[i] = Math.max(dpRight[i + 1], height[i]);}for (int i = 0; i < len; i++) {ans += Math.min(dpLeft[i], dpRight[i]) - height[i];}return ans;}
}

代码说明

  • 左侧最大高度数组 leftMax:用于存储每个位置左侧的最大柱子高度。
  • 右侧最大高度数组 rightMax:用于存储每个位置右侧的最大柱子高度。
  • 雨水计算:对于每个位置,雨水量是 min(leftMax[i], rightMax[i]) - height[i],即当前位置能存储的水量。

这种方法的时间复杂度为 O(n),空间复杂度为 O(n),因为需要额外的两个数组来存储左侧和右侧的最大高度。

关键字:网页设计图片跟随鼠标移动_咸宁网站制作公司_一站式快速网站排名多少钱_深圳网站搜索优化工具

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: