双指针算法练习(一)

时间:2022-07-23
本文章向大家介绍双指针算法练习(一),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

双指针算法是指的在遍历过程中,我们给定两个指针在相同或者相向方向遍历,在数组有序的情况下,使我们的算法复杂度降低。

【经典题目1-两数之和】

相向指针,比如leetcode中的167题。

在有序列表中,找到和为target的两个值。

解法(仅供参考):

class Solution:
    def twoSum(self, numbers: List[int], target: int) -> List[int]:
        res = []     
        left = 0
        right = len(numbers) - 1
        
        while left < right:
            left_num = numbers[left]
            right_num = numbers[right]
            s = left_num + right_num
            if  s == target:
                res.append(left+1)
                res.append(right+1)
                break
            elif s > target:
                right -= 1
            else:
                left += 1
        return res
【经典题目2-两数之差】

将上题中的和改为差,并假设保证只有唯一答案。这样两个指针改为同向遍历即可实现。

j = 1
res = []
for i in range(len(nums)):
    while j < len(nums) -1 and nums[j]-nums[i] < target:
        j += 1
    if nums[j]-nums[i] == target:
        res.append(i+1)
        res.append(j+1)
        return res