type
status
date
slug
summary
tags
category
icon
password

如何识别使用双指针技巧的题目:

  1. 有序数据:当题目给出的数据是有序的,或者可以通过排序变为有序的,可能会用到双指针。
  1. 寻找配对或者对比:需要寻找某种配对条件(例如和为特定值的两个数)或者需要对比两个位置的元素。
  1. 子序列或子串问题:需要找到满足条件的子序列或子串,或者需要对子序列或子串进行操作。
  1. 需要线性时间复杂度解决问题:当题目需要在O(n)时间内解决时,双指针是一个常见的选择。
  1. 空间复杂度要求较低:双指针通常可以帮助实现O(1)的空间复杂度。
  1. 合并、比较或者距离计算:需要合并两个有序数组,比较两个数组或字符串,或计算两个元素之间的距离。
  1. 双指针一般能降一个n的时间复杂度。 原来是O(n)可以降为O(1)或O(n2)降为O(n)

双指针技巧的常见应用:

1. 对撞指针

对撞指针通常应用于有序数组或字符串,两个指针分别从头和尾开始,根据某些条件向中间移动,直至两指针相遇
  • 常见题型
      1. 求和问题:在数组或链表中找到两个或多个数字,使其和等于特定值。
      1. 回文问题:判断数组或链表中的元素是否形成一个回文。
      1. 排序问题:将数组或链表的元素按照某种条件重新排列。
      1. 双索引问题:需要使用两个指针从不同方向遍历数组或链表,并根据某些条件来解决问题。
  • 解决思路:
      1. 初始化两个指针,一个在开始位置,一个在结束位置。
      1. 根据数组/字符串中的值和目标值的比较,移动指针。
      1. 继续上述过程,直到找到满足条件的元素,或者两指针相遇。
题目:

2. 滑动窗口

滑动窗口主要用于处理数组/字符串的子序列或子串问题,通过两个指针维护一个窗口,并在需要时更新窗口的大小和位置。
  • 常见题型:
      1. 最大/最小子数组或子串问题
      1. 固定大小的滑动窗口问题
      1. 可变大小的滑动窗口问题
      1. 字符串排列、异位词或连续子串问题
      1. 子数组或子串的和问题
  • 解决思路:
      1. 初始化两个指针表示窗口的开始和结束位置。
      1. 根据窗口中的元素和目标值的关系,决定是移动左指针缩小窗口,还是移动右指针扩大窗口。
      1. 在每个窗口位置检查是否满足题目条件,并在必要时更新结果。
题目:

3. 快慢指针

快慢指针通常应用于链表和数组中,一个指针移动速度是另一个的两倍,用于解决环、中点和倒数第k个元素等问题。
  • 常见题型:
      1. 循环检测:检测链表或数组中是否存在循环。
      1. 中间值寻找:找到链表的中间节点或数组的中间元素。
      1. 链表重排:重新排列链表的节点。
      1. 寻找环的入口:在链表中寻找环的入口。
      1. 快慢指针的配合:解决其他需要快慢指针配合的问题。
  • 解决思路:
      1. 初始化快指针和慢指针在同一位置。
      1. 快指针每次移动两步,慢指针每次移动一步。
      1. 如果存在环,快指针会追上慢指针;如果需要找中点或倒数第k个元素,利用快慢指针的相对速度获取位置信息。
题目:

4. 读写指针

读写指针常用于在数组或字符串中进行原地修改,一个指针负责读取数据,另一个负责写入数据。
  • 常见题型:
      1. 移除元素:从数组或字符串中移除指定的元素或字符。
      1. 数组压缩:对数组进行压缩,通常是将重复的元素移至数组的末尾。
      1. 数组或字符串的修改:在遍历数组或字符串的同时进行修改。
  • 解决思路:
      1. 初始化读指针和写指针。
      1. 读指针遍历数组/字符串,找到需要保留的元素。
      1. 将保留的元素写入写指针的位置,并移动写指针。
题目:

5. 链表中的双指针

在链表中使用双指针可以解决寻找中点、寻找环、删除倒数第k个节点等问题。
  • 解决思路:
      1. 初始化两个指针。
      1. 根据题目要求,移动指针来寻找中点、检测环或找到特定的节点。
      1. 在链表上进行必要的操作,如删除节点、合并链表等。
题目:
Flooding study preliminary resultsAgisoft workflow for USB2023 multispectral
Tianqi
Tianqi
I'm currently working in a lab focused on computer vision projects powered by machine learning.
Announcement
type
status
date
slug
summary
tags
category
icon
password
🎉Welcome to my blog🎉
Sometimes it is necessary to refresh the page twice to get the latest data because the data in the database is not updated in time. This operation can be performed on each page.
-- Tianqi ---