为啥考虑数组越界还会判错?不考虑就AC?
不重复打印排序数组中相加和为给定值的所有二元组
http://www.nowcoder.com/questionTerminal/1ff1a607c81748baa1823ffa687d74c4
题意本就考双指针,但是一直提交都错,无论是重复输入多组,还是重复输出,什么的都考虑清楚了,一直没有通过,最后看了题解,我和前面大佬写的几乎一样,唯一有个地方不一样的就是我考虑了越界问题,而就是这么巧,越界问题不考虑就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; }