题目地址:
https://leetcode.com/problems/3sum-smaller/
给定一个长 n n n整数数组 A A A,再给定一个数target,问这个数组里有多少个triplet之和小于target。
思路是排序 + 对撞双指针。代码如下:
class Solution {
public:
int threeSumSmaller(vector<int>& nums, int target) {
if (nums.size() < 3) return 0;
sort(nums.begin(), nums.end());
int res = 0;
for (int i = 0; i < nums.size() - 2; i++) {
int l = i + 1, r = nums.size() - 1;
while (l < r) {
int sum = nums[l] + nums[r];
if (sum + nums[i] < target) {
res += r - l;
l++;
} else
r--;
}
}
return res;
}
};
时间复杂度 O ( n 2 ) O(n^2) O(n2),空间 O ( 1 ) O(1) O(1)。