LeetCode 259. 较小的三数之和
题目描述
思路分析
解法一:排序 + 双指针(推荐)
核心思路:
- 对数组排序,固定第一个数 i。
- 使用左右指针统计满足
nums[i] + nums[l] + nums[r] < target的数量。- 当和小于 target,
l与r之间所有组合均满足条件,直接累加。
复杂度分析:
- 时间复杂度:O(n^2),其中 n 表示数组长度。
- 空间复杂度:O(1)(不计排序栈空间)。
import java.util.Arrays;
class Solution {
public int threeSumSmaller(int[] nums, int target) {
Arrays.sort(nums);
int n = nums.length;
int count = 0;
for (int i = 0; i < n - 2; i++) {
int left = i + 1;
int right = n - 1;
while (left < right) {
int sum = nums[i] + nums[left] + nums[right];
if (sum < target) {
count += right - left;
left++;
} else {
right--;
}
}
}
return count;
}
}
import "sort"
func threeSumSmaller(nums []int, target int) int {
sort.Ints(nums)
count := 0
for i := 0; i < len(nums)-2; i++ {
left, right := i+1, len(nums)-1
for left < right {
sum := nums[i] + nums[left] + nums[right]
if sum < target {
count += right - left
left++
} else {
right--
}
}
}
return count
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 15. 三数之和 | 中等 | 排序、双指针 |
| 16. 最接近的三数之和 | 中等 | 排序、双指针 |
| 259. 较小的三数之和 | 中等 | 排序、双指针 |
| 611. 有效三角形的个数 | 中等 | 排序、双指针 |
| 1099. 小于 K 的两数之和 | 简单 | 排序、双指针 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!
