0x03 Leetcode Hot100 双指针

方法论

关键是要找每个状态的性质,从而移动指针。

总结

  • 移动零 一前一后。前面的遍历数组,后面的维护条件,后指针对值的修改不会影响前指针的遍历。
  • 盛最多水的容器 一左一右。每次移动一个指针计算当前结果。
  • 三数之和 一左一右。需要考虑的点:如何去重。
  • 接雨水 一左一右。每次移动值更小的指针(因为最大值不会变小)计算当前结果。(对双指针缺乏练习,一开始没想到,只能用单调栈做出来,附代码。)
class Solution:
    def trap(self, height: List[int]) -> int:
        stack = []
        ret = 0
        for i in range(len(height)):
            while stack and height[i] > stack[-1][1]:
                pre = stack.pop()
                if not stack:
                    break
                a = i - stack[-1][0] - 1
                b = min(height[i], stack[-1][1]) - pre[1]
                ret += a * b
            stack.append((i, height[i])) 
        return ret

posted @   L1xxer  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示