1. 首先保证数组有序,也就是先排序
2. 采取确定左端点查找符合要求的右端点,也就是 $left = 0$,$right = nums.size() - 1$,找到第一个符合要求的 $right$,使得 $nums[left] + nums[right] < target$
3. 当找到符合要求的 right,则有 $[left, left + 1]、[left,left + 2] 、...、[left, right]$一共 $right - left$ 对符合要求的下标对
4. 向右挪动左端点,继续上述过程直到 $left >= right$
```cpp
class Solution {
public:
int countPairs(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int left = 0, right = nums.size() - 1;
auto count = 0;
while (left < right) {
if (nums[left] + nums[right] < target) {
count += right - left;
++left;
} else {
--right;
}
}
return count;
}
};
```