259 较小的三数之和-中等

题目:

给定一个长度为 n 的整数数组和一个目标值 target ,寻找能够使条件 nums[i] + nums[j] + nums[k] < target 成立的三元组 i, j, k 个数(0 <= i < j < k < n)。

解题思路

排序和双指针。

// date 2024/03/04
func threeSumSmaller(nums []int, target int) int {
	sort.Slice(nums, func(i, j int) bool {
		return nums[i] < nums[j]
	})

	ans := 0
	n := len(nums)
	for i := 0; i < n; i++ {
		if i+2 < n && nums[i]+nums[i+1]+nums[i+2] >= target {
			break
		}
		left, right := i+1, n-1
		sum := target - nums[i]
		for left < right {
			if nums[left]+nums[right] < sum {
        // select nums[right]
        // i, left, right
				ans += right - left
				left++
			} else {
				right--
			}
		}
	}

	return ans
}

最后更新于