双指针方法 — Python 代码
如果它们作为一个整体,两个总比一个好。
双指针算法是任何编程面试中最常见的问题之一。此方法通过利用数据的某些顺序(不一定是排序)来优化运行时。此方法通常用于搜索排序数组中的对。这种方法在恒定空间中有效。
在此技术中,指针表示索引或迭代属性,如节点的下一个。
双指针方法的步骤:
图片来源:作者 如上图所示,两指针方法有三个主要步骤:
指针初始化 — 起点。指针可以在任何地方,具体取决于我们想要实现的目标。在图片的左侧,我们有两个指针从相同的位置开始,即链表的开头。在图片的右侧,我们在极端末端有指针,一个在起始索引处,另一个在最后一个索引处。
指针移动 — 这将决定我们如何趋同于解决方案。指针可以沿同一方向移动(上图中左侧),也可以沿相反方向移动(上图中右侧)。同样在图片的左侧,我们对指针有不同的增量(顶部(慢)有 1 个单位,底部(快)有 2 个单位)。
停止条件 — 这决定了我们何时停止。在左侧部分,我们继续前进,直到到达下一个元素为 None 的节点。在正确的一个中,我们继续直到我们的开始小于结束(i <j)。
注意:滑动窗口是双指针方法的另一种变体。
让我们看看我们如何通过解决一些问题来使用上述逻辑。
问题1 就地反转阵列。
图片来源:作者 在 Python 中的实现:
def reverseArray(array):
start, end = 0, len(array)-1
while start< end:
array[start], array[end] = array[end] , array[start]
start += 1
end -= 1
array = [10, 20, 30, 40, 50]
reverseArray(array)
print(array)
问题2 给定一个按非降序排序的整数数组,返回按非降序排序的每个数字的平方数组。
图片来源:作者 在 Python 中的实现:
def sortedSquares(nums):
n = len(nums)
start, end = 0, n-