C++程序 实现的双指针技术
双指针技术是一种简单有效的技术,通常用于在排序数组中搜索对。
给定一个按升序排序的数组A,其中有N个整数,请找出是否存在任何一对元素(A[i], A[j]),使它们的和等于X。
让我们看一下 最初级的解决方案 。
输出
时间复杂度: O(n 2 )
辅助空间: O(1)
现在让我们看看双指针技术如何工作。我们取两个指针,一个表示数组的第一个元素,另一个表示数组的最后一个元素,然后将保持在这两个指针上的值相加。如果它们的总和小于X,则将左指针向右移动,如果它们的总和大于X,则向左移动右指针,以便更接近总和。我们不断移动指针,直到获得总和为X。
输出:
示例说明:
时间复杂度: O(n)
辅助空间: 因为只使用恒定的空间,所以为O(1)
工作原理是什么?
该算法基本上使用输入数组已排序的事实。我们从最小值和最大值的和开始,并有条件地移动两个指针。当A [i]和A [j]的总和小于X时,我们向左移动指针i。我们不会错过任何一对,因为总和已小于X。同样的逻辑适用于指针j的右侧。
基于双指针技术的更多问题。
- 从两个已排序数组中找到最接近的一对
- 在数组中找到与 x 最接近的一对
- 找到所有三元组的和为零
- 找到一个三元组,其总和等于给定值
- 找到一个三元组,其两个元素的和等于第三个元素
- 找到四个元素,使其总和等于给定值