我正在尝试解决成对和问题,即给定一个排序数组,如果存在两个索引i和j,使得i!=j和a[i]+a[j] == k表示某个k,则我们需要这样做。解决同样问题的一种方法是运行两个嵌套的for循环,这会导致O(n*n)的复杂性。另一种解决方法是使用双指针技术。我不能用两个指针的方法解决这个问题,因此我查了查,但不明白为什么它能工作。我如何证明它是有效的?
#define lli long long
//n is size of array
bool f(lli sum) {
int l = 0, r = n - 1;
while ( l < r ) {
if (