zoukankan      html  css  js  c++  java
  • 双指针

    概念:

      双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。

    摘抄自力扣题解:

      当我们需要枚举数组中的两个元素时,如果我们发现随着第一个元素的递增,第二个元素是递减的,那么就可以使用双指针的方法,将枚举的时间复杂度从 O(N^2) 减少至 O(N)。为什么是 O(N)呢?这是因为在枚举的过程每一步中,「左指针」会向右移动一个位置(也就是题目中的 bb),而「右指针」会向左移动若干个位置,这个与数组的元素有关,但我们知道它一共会移动的位置数为 O(N),均摊下来,每次也向左移动一个位置,因此时间复杂度为 O(N)。

    力扣题目:

    11-盛水最多的容器

    15-三数之和

    16-最接近的三数之和

    18-四个数之和

    19-删除链表的倒数第N个节点   --> 快慢指针,看题解

    。。。

    在上面的这些题目中,如果不使用双指针直接遍历的话,时间复杂度为O(n^2),而如果使用双指针从两侧分别向中间移动,则时间复杂度可以降低为O(n)。

    对于15/16,首先对数组进行排序然后再查找。

    参考:

    https://leetcode-cn.com/problems/3sum/solution/san-shu-zhi-he-by-leetcode-solution/

    https://zhuanlan.zhihu.com/p/71643340

    https://zhuanlan.zhihu.com/p/95747836

  • 相关阅读:
    poj1179多边形——区间DP
    poj1742硬币——多重背包可行性
    tyvj1061移动服务——DP
    poj1015陪审团——DP+路径记录
    poj3666序列对应——DP
    poj2279排队——杨氏矩阵与钩子公式(DP爆内存)
    tracert
    4 系统的 CPU 使用率很高,但为啥却找不到高 CPU的应用?
    3 当某个应用的CPU使用达到100%,该怎么办?
    2.2 CPU 上下文切换是什么意思?(下)
  • 原文地址:https://www.cnblogs.com/zyk1113/p/13970136.html
Copyright © 2011-2022 走看看