文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums[i] + nums[j] + nums[k] < target 成立的三元组 i, j, k 个数(0 <= i < j < k < n)。
示例:
输入: nums = [-2,0,1,3], target = 2
输出: 2
解释: 因为一共有两个三元组满足累加和小于 2:[-2,0,1][-2,0,3]
进阶:是否能在 O(n2) 的时间复杂度内解决?
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/3sum-smaller
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:
LeetCode 15. 三数之和
LeetCode 16. 最接近的三数之和(固定左端+滑动窗口)
- 排序后,固定左端点 i ,内层双指针(本题不需考虑重复)
class Solution {
public:int threeSumSmaller(vector<int>& nums, int target) {sort(nums.begin(), nums.end());int i, j, k, n = nums.size(), count = 0, sum;for(int i = 0; i < n-2; ++i){j = i+1, k = n-1;while(j < k){sum = nums[i]+nums[j]+nums[k];if(sum < target)count += k-j, j++;else if(sum >= target)k--;}}return count;}
};
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!