Monday, August 17, 2015

LeetCode [259] 3Sum Smaller

 259. 3Sum Smaller

Medium

Given an array of n integers nums and an integer target, find the number of index triplets ijk with 0 <= i < j < k < n that satisfy the condition nums[i] + nums[j] + nums[k] < target.

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

 

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 <= 300
  • -100 <= nums[i] <= 100
  • -100 <= target <= 100
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
    int threeSumSmaller(vector<int>& nums, int target) {
        sort(nums.begin(), nums.end());
        int sz = nums.size(), ret = 0;
        for(int i=0; i<=sz-3; ++i){
                int l = i+1, r = sz-1;
                while(l<r){
                    int sum = nums[i]+nums[l]+nums[r];
                    if(sum>=target){
                        r--;
                    }else{
                        ret += (r-l);
                        l++;
                    }
                }
        }
        return ret;
    }
};

No comments:

Post a Comment