Count Pairs Whose Sum is Less than Target

easy array two pointers sorting

Problem

Given an array nums and an integer target, return the number of index pairs (i, j) with i < j and nums[i] + nums[j] < target.

Inputnums = [-1,1,2,3,1], target = 2
Output3
Pairs (0,1), (0,2), (0,4) all sum below 2.

def count_pairs(nums, target):
    nums.sort()
    lo, hi, count = 0, len(nums) - 1, 0
    while lo < hi:
        if nums[lo] + nums[hi] < target:
            count += hi - lo
            lo += 1
        else:
            hi -= 1
    return count
function countPairs(nums, target) {
  nums.sort((a, b) => a - b);
  let lo = 0, hi = nums.length - 1, count = 0;
  while (lo < hi) {
    if (nums[lo] + nums[hi] < target) { count += hi - lo; lo++; }
    else hi--;
  }
  return count;
}
class Solution {
    public int countPairs(List<Integer> nums, int target) {
        Collections.sort(nums);
        int lo = 0, hi = nums.size() - 1, count = 0;
        while (lo < hi) {
            if (nums.get(lo) + nums.get(hi) < target) { count += hi - lo; lo++; }
            else hi--;
        }
        return count;
    }
}
int countPairs(vector<int>& nums, int target) {
    sort(nums.begin(), nums.end());
    int lo = 0, hi = nums.size() - 1, count = 0;
    while (lo < hi) {
        if (nums[lo] + nums[hi] < target) { count += hi - lo; lo++; }
        else hi--;
    }
    return count;
}
Time: O(n log n) Space: O(1)