259 [LeetCode] 3Sum Smaller 三数之和较小值

Posted WhoDreamsSky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了259 [LeetCode] 3Sum Smaller 三数之和较小值相关的知识,希望对你有一定的参考价值。

题目:

Given an array of n integers nums and a 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.

For example, given nums = [-2, 0, 1, 3], and target = 2.

Return 2. Because there are two triplets which sums are less than 2:

[-2, 0, 1]
[-2, 0, 3]

Follow up:
Could you solve it in O(n2) runtime?



 

 

 

 

方法一:

class Solution {
public:
    int threeSumSmaller(vector<int>& nums, int target) {
        int res = 0;
        sort(nums.begin(), nums.end());
        for (int i = 0; i < int(nums.size() - 2); ++i) {
            int left = i + 1, right = nums.size() - 1, sum = target - nums[i];
            for (int j = left; j <= right; ++j) {
                for (int k = j + 1; k <= right; ++k) {
                    if (nums[j] + nums[k] < sum) ++res;
                }
            }
        }
        return res;
    }
};

 

 

 

 

方法二:

  • 双指针
    class Solution2 {
    public:
        int threeSumSmaller(vector<int>& nums, int target) {
            if (nums.size() < 3) return 0;
            int res = 0, n = nums.size();
            sort(nums.begin(), nums.end());
            for (int i = 0; i < n - 2; ++i) {
                int left = i + 1, right = n - 1;
                while (left < right) {
                    if (nums[i] + nums[left] + nums[right] < target) {
                        res += right - left;
                        ++left;
                    } else {
                        --right;
                    }
                }
            }
            return res;
        }
    };

     


以上是关于259 [LeetCode] 3Sum Smaller 三数之和较小值的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 259. 3Sum Smaller

LeetCode 259. 3Sum Smaller (三数之和较小值) $

[LeetCode] 259. 3Sum Smaller 三数之和较小值

259 [LeetCode] 3Sum Smaller 三数之和较小值

259. 3Sum Smaller小于版3sum

259. 3Sum Smaller