题意本就考双指针,但是一直提交都错,无论是重复输入多组,还是重复输出,什么的都考虑清楚了,一直没有通过,最后看了题解,我和前面大佬写的几乎一样,唯一有个地方不一样的就是我考虑了越界问题,而就是这么巧,越界问题不考虑就AC了,真的奇怪。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, k;
while(cin >> n >> k){
vector<int> arr(n);
for(int i = 0; i < n; i++){
cin >> arr[i];
}
int left = 0;
int right = n - 1;
while(left < right){
if(arr[left] + arr[right] == k){
if(left > 0 && arr[left] != arr[left - 1]){ //这个地方,加上left > 0不应该是对的吗?如果第一个数就和最后一个数相等,判断left - 1岂不是越界??去掉才正确??我没搞懂
cout << arr[left] << " " << arr[right] << endl;
}
left++;
right--;
}
else if(arr[left] + arr[right] < k){
left++;
}
else if(arr[left] + arr[right] > k){
right--;
}
else{
}
}
}
return 0;
} 
京公网安备 11010502036488号