Welcome to Subscribe On Youtube
259. 3Sum Smaller
Description
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:
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:
Input: nums = [], target = 0 Output: 0
Example 3:
Input: nums = [0], target = 0 Output: 0
Constraints:
n == nums.length
0 <= n <= 3500
-100 <= nums[i] <= 100
-100 <= target <= 100
Solutions
-
class Solution { public int threeSumSmaller(int[] nums, int target) { Arrays.sort(nums); int ans = 0; for (int i = 0, n = nums.length; i < n; ++i) { int j = i + 1; int k = n - 1; while (j < k) { int s = nums[i] + nums[j] + nums[k]; if (s >= target) { --k; } else { ans += k - j; ++j; } } } return ans; } }
-
class Solution { public: int threeSumSmaller(vector<int>& nums, int target) { sort(nums.begin(), nums.end()); int ans = 0; for (int i = 0, n = nums.size(); i < n; ++i) { int j = i + 1, k = n - 1; while (j < k) { int s = nums[i] + nums[j] + nums[k]; if (s >= target) --k; else { ans += k - j; ++j; } } } return ans; } };
-
class Solution: def threeSumSmaller(self, nums: List[int], target: int) -> int: nums.sort() ans, n = 0, len(nums) for i in range(n): j, k = i + 1, n - 1 while j < k: s = nums[i] + nums[j] + nums[k] if s >= target: k -= 1 else: ans += k - j j += 1 return ans
-
func threeSumSmaller(nums []int, target int) int { sort.Ints(nums) ans := 0 for i, n := 0, len(nums); i < n; i++ { j, k := i+1, n-1 for j < k { s := nums[i] + nums[j] + nums[k] if s >= target { k-- } else { ans += k - j j++ } } } return ans }
-
/** * @param {number[]} nums * @param {number} target * @return {number} */ var threeSumSmaller = function (nums, target) { nums.sort((a, b) => a - b); let ans = 0; for (let i = 0, n = nums.length; i < n; ++i) { let j = i + 1; let k = n - 1; while (j < k) { s = nums[i] + nums[j] + nums[k]; if (s >= target) { --k; } else { ans += k - j; ++j; } } } return ans; };
-
function threeSumSmaller(nums: number[], target: number): number { nums.sort((a, b) => a - b); const n = nums.length; let ans = 0; for (let i = 0; i < n - 2; ++i) { let [j, k] = [i + 1, n - 1]; while (j < k) { const x = nums[i] + nums[j] + nums[k]; if (x < target) { ans += k - j; ++j; } else { --k; } } } return ans; }