题意:
给定一个长度为 n 的整数数组和一个目标值 target,
寻找能够使条件 nums[i] + nums[j] + nums[k] < target 成立的三元组 i, j, k 个数,
(0 <= i < j < k < n)。
数据范围:
题目没说.
解法:
将序列排序,
设a[i]<=a[j]<=a[k],
枚举j和k,那么i需要满足<target-a[j]-a[k],
在k右移的过程中,i只能左移,满足单调性,开一个指针维护即可.
code:
class Solution {
public:
int threeSumSmaller(vector<int>& a, int target) {
sort(a.begin(),a.end());
int n=a.size();
int ans=0;
for(int j=0;j<n;j++){
int i=j-1;
for(int k=j+1;k<n;k++){
int x=target-a[j]-a[k];
while(i>=0&&a[i]>=x){
i--;
}
ans+=(i+1);
}
}
return ans;
}
};