Two Pointer

Find two number pair with sum greater than a value k. Return total number of such pair.

int find_sum_greater_than_k(vector<int>& nums, int k) {
    // For each right bound, how many left bound satisfy
    int n = nums.size();
    sort(nums.begin(), nums.end());
    int l = 0, r = n-1;
    int ret = 0;
    while(l<r) {
        if (nums[l]+nums[r]>k) {
            ret += r-l;
            r--;
        } else
            l++;
    }
    return ret;
}

Find two number pair with sum smaller than a value k. Return total number of such pair.

int find_sum_smaller_than_k(vector<int>& nums, int k) {
    int n = nums.size();
    sort(nums.begin(), nums.end());
    int l = 0, r = n-1;
    int ret = 0;
    while(l<r) {
        if (nums[l]+nums[r]<k) {
            ret += r-l;
            l++;
        } else
            r--;
    }
    return ret;
}

Last updated