题解 | 不重复打印排序数组中相加和为给定值的所有二元组
不重复打印排序数组中相加和为给定值的所有二元组
https://www.nowcoder.com/practice/1ff1a607c81748baa1823ffa687d74c4
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, k; cin >> n >> k;
vector<int> arr(n, 0);
for (int i = 0; i < n; i++) cin >> arr[i];
int left = 0, right = n - 1;
while (left < right) {
long long sum = arr[left] + arr[right];
if (sum == k) {
cout << arr[left] << " " << arr[right] << endl;
while (left < right && arr[left] == arr[left + 1]) left++;
left++;
while (left < right && arr[right - 1] == arr[right]) right--;
right--;
}
else if (sum > k)
right--;
else left++;
}
return 0;
}
// 64 位输出请用 printf("%lld")
双指针啊!没那么难,难点在于是否想到了使用双指针~

