糖逗 发表于 2020-4-18 14:15:22

c++刷leetcode(259. 较小的三数之和)【不能用深度优先搜索】

本帖最后由 糖逗 于 2020-4-18 14:17 编辑

题目描述:

给定一个长度为 n 的整数数组和一个目标值 target,寻找能够使条件 nums + nums + nums < 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) 的时间复杂度内解决?





int threeSumSmaller(vector<int>& nums, int target) {
      int res = 0;
      sort(nums.begin(), nums.end());
      for(int i = 0; i < nums.size(); i++){
            int l = i+1, r = nums.size()-1;
            while(l<r){
                int sum = nums + nums + nums;
                if(sum >= target){
                  r--;
                }
                else{
                  res += r-l;
                  l++;
                }
            }
      }
      return res;

    }



注意事项:
1.这道题不能用递归或是深度优先搜索的方法做,会出现重复项,且不能消除。
页: [1]
查看完整版本: c++刷leetcode(259. 较小的三数之和)【不能用深度优先搜索】