题解 | 不重复打印排序数组中相加和为给定值的所有二元组

不重复打印排序数组中相加和为给定值的所有二元组

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")

双指针啊!没那么难,难点在于是否想到了使用双指针~

全部评论

相关推荐

挥毫自在:想白嫖你呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务