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; } }; ```