給定一個長度為 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;}
}
?