zoukankan      html  css  js  c++  java
  • 259. 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 conditionnums[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?

    这道题的解法与所有的3 sum,4 sum一样。唯一的区别在于两边往中间找的时候,如果小于dif,那么中间所有的都满足小于的情况,比如[3,1,0,-2], 4。 Sort完是[-2,0,1,3], 一开始选-2时,dif为6,left为1,right为3,小于dif,则以right为一个,left从左一直到right-1的组合都是满足要求的。

    public int ThreeSumSmaller(int[] nums, int target) {
            Array.Sort(nums);
            var res =0;
            int size = nums.Count();
            for(int i =0;i< size;i++)
            {
                int num = nums[i];
                int dif = target - num;
                int left =i+1;
                int right = size -1;
                while(left<right)
                {
                    if(nums[left]+nums[right] < dif)
                    {
                        res+=right-left;
                        left++;
                    }
                    else right--;
                }
            }
            return res;
        }
  • 相关阅读:
    第24课 #pragma使用分析
    第23课 #error和#line使用分析
    第22课 条件编译使用分析
    第21课 宏定义与使用分析
    Codeforces Round #142 (Div. 2)B. T-primes
    SPOJ XMAX
    Uva 10036
    Timus 1009. K-based Numbers
    MBLAST
    ROADS
  • 原文地址:https://www.cnblogs.com/renyualbert/p/5907839.html
Copyright © 2011-2022 走看看