Version: Next
双指针算法
引例:
给定一个有序数组
[1, 4, 5, 7, 9]
,试找出其中两个数使其和为12.
直观解法——
O(n ^ 2)
- 最容易想到的解法就是,定义一个
i
,一个j
,对这个数组进行二重循环- 这种解法看起来用了两个指针,实际上只能算是暴力法
改进解法——
O(n)
定义一个
i
,一个j
的,i
指向第一个元素,j
指向最后一个元素看
i + j
的值
- 如果小于目标值
12
,则说明值不足,根据有序数组,肯定不能将j
向左移动,故应当将i
向右移动- 如果大于目标值
12
,则说明值超了,根据有序数组,肯定不能将i
向右移动,故应当将j
向左移动
- 重复步骤2
可用双指针法求解的题目
- 344.反转字符串
- 27.移除元素
- 125.验证回文串
- 287.寻找重复数