灵茶山艾府-相向双指针

两数之和

  • 暴力做法:双重循环嵌套 o(n*n)
  • 双指针:由于数组有序,最小+最大,如果大于满足条件,右指针移动,如果小于左指针移动 o(n)
  • 为什么快:优化获取信息,知道其中一个与其他所有数的和与目标的大小关系。

三元数组和

  • 双指针:将数组排序,然后使用双指针进行寻找合适的,left从目前寻找的后面一个开始。right从最后一个开始,然后进行寻找尝试,将找到的组合存放入堆栈,双指针交替运动寻找,如果和大于0则减小右指针,小于0则增大左指针,因为一开始双指针是指向两边的,可以进行的优化就是根据排序数组选取一些合适的条件。比如三个最小值都比target大,说明有序情况下,后面怎么枚举都会更大,结束。x 和 最大两个数之和都比target小,说明x过小,考虑将x变大(跳过本轮的枚举)

盛最多水的容器

  • 双指针:初始化两端的,每次移动较小的那个,因为移动会缩小宽度

接雨水

  • 前缀和后缀最大值中的最小值与高的差为该格子能装的雨水,然后求和。前缀最大值就是高和上一个前缀最大值中的大的。
  • 优化:交替移动计算前缀和后缀最大值,不需要计算所有。
posted @ 2024-11-25 19:46  xiangsheng04  阅读(225)  评论(0)    收藏  举报