Java算法专题--双指针思想

目录

一.主要内容

二.双指针思想

三.经典例题

  1.快慢指针

2.同向双指针

3.左右指针

四.其他例题练习

1.复写0   

2.盛水最多的容器

3.有效三角形的个数

4.三数之和

5.四数之和

五.总结

​​​​


一.主要内容

  本篇文章,咱们介绍一下算法中一个比较适合于降低时间复杂度的思想--“双指针思想”,本篇文章会讲解一下双指针思想是什么,并讲解几道经典例题。

二.双指针思想

  双指针法是一种常用于解决数组或链表中的问题的算法技巧。它主要涉及使用两个“指针”(这里的指针并不是我们平常想的C语言中*p这类,只是一个代名词)。来遍历数组或链表,从而来降低我们暴力枚举方法的时间复杂度。即将暴力枚举时间复杂度为O(N^3)降为O(N^2),将暴力枚举时间复杂度为O(N^2)降为O(N)。

三.经典例题

  1.快慢指针

通常用于解决链表中的问题,比如判断链表中是否存在环等。

  经典例题:快乐数  202. 快乐数 - 力扣(LeetCode)

  Java算法专题--双指针思想_第1张图片

经过力扣题所给的例子画图知道,这个数肯定会进入一个环,我们只需要判断这个环最终是不是以1为结尾的环,若是则其为“快乐数”。这是我们可以定义两个变量(指针),一个走得快,一个走得慢,快的每次比慢的快一步,这样他们总会在这个环里面的某个地方相遇(这个相遇问题的具体证明过程可以在网络上查询一下)。所以我们一般定义一个指针为fast,另一个为slow。

具体代码

class Solution {
    public boolean isHappy(int n) {
        int slow=n;
        int fast=getNext(n);
        while(fast!=1 && slow!=fast){
            slow=getNext(slow);
            fast=getNext(getNext(fast));
        }
        return fast==1;
    }

    //返回n这个数每一位的平方和。
    public int getNext(int n){
        int totalSum=0;
       

你可能感兴趣的:(数据结构,算法)