- 基本概念
 双指针:通常是指在数组或链表中使用两个指针(索引)来遍历或操作数据结构。
 方向:指针可以同向移动(如快慢指针),也可以相向移动(如对撞指针)。
 应用场景:适用于需要遍历整个数据结构并进行某种操作的情况,如查找、排序、反转等。
- 常见类型
 2.1 快慢指针
 定义:两个指针从同一端开始移动,但速度不同。
 应用:
 链表中的环检测:快指针每次移动两步,慢指针每次移动一步,如果链表中有环,快慢指针最终会相遇。
 数组中的删除元素:通过双指针重排数组,删除特定元素。
 2.2 对撞指针
 定义:两个指针从相对的两端开始向中间移动。
 应用:
 二分查找:在有序数组中查找特定元素。
 两数之和问题:在有序数组中查找两个数使其和为特定值。
 三数之和问题:在数组中查找三个数使其和为特定值。
- 常见问题
 3.1 两数之和
 问题描述:在一个有序数组中找到两个数,使其和等于给定的值。
 解法:使用左右指针,从数组的两端开始,如果和大于目标值,右指针左移;如果和小于目标值,左指针右移。
 3.2 反转数组
 问题描述:反转数组中的元素顺序。
 解法:使用左右指针,交换两端的元素,直到指针相遇。
 3.3 删除重复元素
 问题描述:删除数组中的重复元素,使其每个元素只出现一次。
 解法:使用快慢指针,快指针遍历数组,慢指针指向新数组的末尾。
- 复杂度分析
 时间复杂度:通常为 O(n),因为双指针算法通常只需要遍历一次数组或链表。
 空间复杂度:通常为 O(1),因为只需要常数级别的额外空间
 
             
            posted @ 
2024-10-11 20:50 
Look_Back 
阅读(
88) 
评论() 
 
收藏 
举报