首页 > 其他分享 >双指针

双指针

时间:2022-09-03 23:46:08浏览次数:53  
标签:slow nums fast right 数组 指针

一、定义
双指针技巧主要分为两类:左右指针和快慢指针。所谓左右指针,就是两个指针相向而行或者相背而行;而所谓快慢指针,就是两个指针同向而行,一快一慢。
只要数组是有序的,或者是需要原地操作数组,都应该想到双指针技巧。

二、快慢指针
通常用于在有序数组/链表中去重,或者是对数组中的某些元素原地修改。
1、有序数组去重
slow指针为新数组(去重后的数组)的当前位置,而fast指针为原数组nums的当前位置。fast指针遍历原数组,当遇到新数组没有的元素就加入(即替换nums[slow] = nums[fast])slow指针向后走。因为数组是有序的,所以只需对比nums[fast]和nums[fast-1]是否相等就可以判断是否已经加入新数组(nums[fast-1]肯定比nums[fast]先加入)。
2、原地修改数组
与上题类似,slow指针为新数组(去重后的数组)的当前位置,而fast指针为原数组nums的当前位置。

三、左右指针
前提是数组有序
例题有二分查找、两数之和、反转数组、回文串,这些题目都是比较明显可以看出需要使用左右指针的。

四、滑动窗口
滑动窗口其实是快慢指针的一种,但这里单独拿出来,是因为滑动窗口常用于求连续的子数组或子串,与前面的适用场景不同。
解题模板:

int left = 0, right = 0;

while (right < s.size()) {
    // 增大窗口
    window.add(s[right]);
    right++;
    
    while (window needs shrink) {
        // 缩小窗口
        window.remove(s[left]);
        left++;
    }
}

参考:labuladong 的算法小抄

标签:slow,nums,fast,right,数组,指针
From: https://www.cnblogs.com/cxuep/p/16653978.html

相关文章

  • 快慢指针
    百度百科:快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。判断单链表是否为循环链表让快慢指......
  • Go语言 指针详解
    现在就开始你的Go语言学习之旅吧!人生苦短,let’sGo.指针是一个代表着某个内存地址的值,这个内存地址往往是在内存中存储的另一个变量的值的起始位置.Go语言对指针的......
  • c++中面向对象以及新特性的困惑与思考【八】【指针】
    部分指针内容已经在内存相关中提及最近一些C语言的笔试题或者是面试题又屡屡出现因此在这里特地专开一栏用于强调参考书籍:《C专家编程》、《C语言与指针》、《C安全手册......
  • 116. 填充每个节点的下一个右侧节点指针
    116.填充每个节点的下一个右侧节点指针给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:structNode{intval;Node*l......
  • 指针函数和函数指针(C语言)
    @目录指针函数函数指针指针函数指针函数就是指针型函数,该函数返回一个地址。#include<stdio.h>//指针函数*point_fuc()int*point_fuc(inta,intb,int*sum){......
  • 【C++】智能指针
    这篇讲得很好https://blog.csdn.net/sjp11/article/details/123899141?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166201751616781790748003%2522%252C%2......
  • 数组&指针
    分类inta;int*a;int**a;inta[10];int*a[10];int(*a)[10];//一个指向有10个整型数数组的指针int(*a)(int);//一个指向函数的指针,该函数有一......
  • leetcode-11-双指针
    /**<p>给定一个长度为<code>n</code>的整数数组&nbsp;<code>height</code>&nbsp;。有&nbsp;<code>n</code>&nbsp;条垂线,第<code>i</code>条线的两个端点是&nbsp;<cod......
  • 前端也该刷点算法题——双指针解“链表”题也太香了叭!
    双指针解“链表”题也太香了叭!同步双指针1查找链表中倒数第k个节点剑指Offer22.链表中倒数第k个节点思路:假设链表的长度为n,不难得出倒数第k个节点即为整数第n+......
  • C语言进阶-指针的进阶
    C语言进阶之指针的进阶前言指针就是个变量,用来存放地址,地址唯一标识一块内存空间。指针的大小是固定的4/8个字节(32位平台/64位平台)。指针是有类型,指针的类型决定了指......