zoukankan      html  css  js  c++  java
  • [Locked] 3Sum Smaller

    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(n^2) runtime?

    分析:

      1、暴力做法O(n^3)

      2、如果题目是等于target,那么一种很直观的想法,对于nums中每个数,用target去减,然后问题就转换成了O(n)复杂度解决两数之和为target。

      3、这题是小于target,用hash的方法复杂度为O(n^2*logn),若先排序,然后用夹逼的方法做复杂度可为O(n^2);

    代码:

    int tripletsNumber(vector<int> &nums, int target) {
        int count = 0;
        sort(nums.begin(), nums.end());
        for(int i = 0; i < nums.size(); i++) {
            //从后面两个数的取值界限定为i,这样保证triplets不重复
            int j = i + 1, k = int(nums.size()) - 1, newt = target - nums[i];
            while(j < k) {
                if(nums[j] + nums[k] < newt) {
                    count += k - j;
                    j++;
                }
                else
                    k--;
            }
        }
        return count;
    }
  • 相关阅读:
    芯片产品介绍
    稀疏矩阵理论与实践
    EUV极紫外光刻技术
    国内AI与芯片企业列表
    中国软件外包现状对比
    GPU指令集技术分析
    寒武纪智能系统参数
    TVM量化路线图roadmap
    EUV光刻机市场与技术
    轻松部署 .NET 5 应用程序,这个指南一定不要错过
  • 原文地址:https://www.cnblogs.com/littletail/p/5208056.html
Copyright © 2011-2022 走看看