# 259. 3Sum-Smaller

difficulty: Medium

&#x20;section pre{ background-color: #eee; border: 1px solid #ddd; padding:10px; border-radius: 5px; }&#x20;

Given an array of n integers nums and a target, find the number of index triplets `i, j, k` with `0 <= i < j < k < n` that satisfy the condition `nums[i] + nums[j] + nums[k] < target`.

**Example:**

```
Input: nums = [-2,0,1,3], and target = 2
Output: 2 
Explanation: Because there are two triplets which sums are less than 2:
             [-2,0,1]
             [-2,0,3]
```

**Follow up:** Could you solve it in O(n2) runtime?

## Method One

```java
class Solution {
    public int threeSumSmaller(int[] nums, int target) {
        Arrays.sort(nums);
        int count = 0;

        for(int i = 0; i < nums.length - 2; i++ ) {
            int aTarget = target - nums[i];
            int left = i + 1;
            int right = nums.length - 1;
            // 这里我们不需要考虑重复的了，因为只要的是不同的index组合。
            while(left < right) {
                int sum = nums[left] + nums[right];
                if(sum < aTarget){
                    // 这里是知道，一旦比 target 小，那么right一路向下到 left + 1 就有 right - left 种了。
                    // 因此直接 += right - left; 非常机智
                    count += right - left;
                    left++;
                }else{
                    right--;
                }
            }
        }

        return count;
    }
}
​
```
