LeetCode 259. 3Sum Smaller

Question

Given an array of n integers nums and an integer 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 1:

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

Example 2:

1
2
Input: nums = [], target = 0
Output: 0

Example 3:

1
2
Input: nums = [0], target = 0
Output: 0

Constraints:

  • n == nums.length
  • 0 <= n <= 3500
  • -100 <= nums[i] <= 100
  • -100 <= target <= 100

Source: https://leetcode.com/problems/3sum-smaller/

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public int threeSumSmaller(int[] nums, int target) {
Arrays.sort(nums);
int count = 0;
for (int i = 0; i < nums.length - 2; i++) {
// a variant of two-sum
int j = i + 1;
int k = nums.length - 1;
while (j < k) {
int sum = nums[i] + nums[j] + nums[k];
if (sum < target) {
// for current j and k,
// all k' between j and k satisfy the requirement
count += k - j;
j++;
} else {
// if sum >= target,
// move right, try to reduce the value of sum
k--;
}
}
}
return count;
}
Author

Weihao Ye

Posted on

2022-03-10

Updated on

2022-03-10

Licensed under