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

LeetCode热题100精讲——Top7:接雨水【双指针】

在这里插入图片描述

你好,我是安然无虞。

文章目录

    • 题目背景
    • 接雨水
      • C++解法
      • Python解法

在这里插入图片描述

题目背景

如果大家对于 双指针 的概念并不熟悉, 可以先看我之前为此专门写的算法详解:
蓝桥杯算法竞赛系列第七章——六道力扣经典带你刷爆双指针

这题和前面做的LeetCode热题100精讲——Top5:盛最多水的容器【双指针】很相似, 感兴趣的老铁可以先把这一题做了再来看下面这一题哦.

接雨水

题目链接: 接雨水

在这里插入图片描述
解题思路: 参考学习《la bu la dong》

本题主要难点是对于任意位置 i , 能够装的水:

water[i] = min(
          # 左边最高的柱子
          max(height[0..i]),
          # 右边最高的柱子
          max(height[i..end])
       ) - height[i]

在这里插入图片描述
关键在于, 如何能够计算出某一个位置左侧所有柱子的最大高度和右侧所有柱子的最大高度.

C++解法

class Solution {
public:
    int trap(vector<int>& height) 
    {
        // 定义双指针
        int left = 0, right = height.size() - 1;
        int res = 0;
        // 记录左右两侧最高柱子的高度
        int lmax = 0, rmax = 0;

        while(left < right)
        {
            // 更新左右两侧最高柱子的高度
            lmax = max(lmax, height[left]);
            rmax = max(rmax, height[right]);

            // 移动双指针 - 低的一端移动
            // res = min(lmax, rmax) - height[i]
            if(lmax < rmax)
            {
                res += lmax - height[left];
                left++;
            }
            else
            {
                res += rmax - height[right];
                right--;
            }
        }    
        return res;
    }
};

Python解法

class Solution:
    def trap(self, height: List[int]) -> int:
        # 定义双指针
        left, right = 0, len(height) - 1
        lmax, rmax = 0, 0 # 左右两侧最高柱子的高度
        res = 0 # 记录结果

        while left < right:
            lmax = max(lmax, height[left])
            rmax = max(rmax, height[right])

            # 移动双指针 - 低的一端移动
            # res = min(lmax, rmax) - height[i]
            if height[left] < height[right]:
                res += lmax - height[left]
                left += 1
            else:
                res += rmax - height[right]
                right -= 1

        return res
        
遇见安然遇见你,不负代码不负卿。
谢谢老铁的时间,咱们下篇再见~
http://www.dtcms.com/a/91253.html

相关文章:

  • 树莓派5-GPIO和40针引脚
  • redis使用
  • 手动创建kkFileView4.4.0镜像
  • C#基础学习(二)C#数组生存手册:从入门到“血压拉满“的奇妙旅程
  • Socket如何实现客户端和服务器间的通信
  • 23种设计模式中的责任链模式
  • 7.1-7.2考研408数据结构查找算法核心知识点深度解析
  • PyTorch 深度学习实战(21):元强化学习与 MAML 算法
  • 从零构建大语言模型全栈开发指南:第一部分:数学与理论基础-1.1.3模型参数与超参数:权重、偏置、学习率与正则化策略
  • git-lfs: command not found
  • reactor网络模型
  • JAVA:Spring Boot @Conditional 注解详解及实践
  • redis+spring 的基本操作 RedisTemplate和RedisClient
  • phpcms版AI自动发文插件,自动创作,自动配图,自动发布,支持多种大模型
  • 网络编程和计算机网络五层模型的关系
  • 数据结构练习二习题
  • qt QOffscreenSurface详解
  • LORA学习笔记
  • 在 .NET 9 中使用 QUIC 实现高效通信:从基础到实战
  • 人工智能-群晖Docker部署DB-GPT
  • failed to load steamui.dll”错误:Steam用户的高频崩溃问题解析
  • 浅谈 Vue3 中的设计模式
  • Spring AI实战初体验——实现可切换模型AI聊天助手
  • 盛铂科技SPP5006/18/40G峰值脉冲功率计探头 国产功率计
  • 【开源宝藏】30天学会CSS - DAY9 第九课 牛顿摆动量守恒动画
  • 网站服务器常见的CC攻击防御秘籍!
  • C语言---函数指针 (指向函数的指针)
  • LeetCode 第29题、30题
  • c++手撕协程库,实现生成器与自定义可等待对象
  • MySQL作业二