双指针方法 — Python 代码

双指针方法 — 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-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值