给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target 成立的三元组 i, j, k 个数(0 <= i < j < k < n)。
示例:
输入: nums = [-2,0,1,3], target = 2
输出: 2
解释: 因为一共有两个三元组满足累加和小于 2:
[-2,0,1]
[-2,0,3]
进阶:是否能在 O(n2) 的时间复杂度内解决?
思路:枚举左端点i,然后对i到len之间跑双指针,算出总数。
class Solution {public int threeSumSmaller(int[] nums, int target) {int ans=0;int len=nums.length;int left,right;Arrays.sort(nums);for(int i=0;i<len;++i){left=i+1;right=len-1;while(left<right) {int three=nums[left]+nums[right]+nums[i];if(three>=target){right--;}else{ans+=right-left;left++;}}}return ans;}
}