首页 > 其他 > 详细

259. 3Sum Smaller

时间:2017-01-27 15:46:36      阅读:255      评论:0      收藏:0      [点我收藏+]

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?

此题和three sum不同在于要求小于target的所有个数,此题只能用two pointer来做,还有需要注意,此题和three sum不同,个数里面可以包括重复的元素,所以,不需要排除掉相同的数组值组成的和。举例说明:[-2,-2,0,1,3]答案就是有4个了,而不是两个。代码如下:

public class Solution {

    public int threeSumSmaller(int[] nums, int target) {

        int count = 0;

        Arrays.sort(nums);

        for(int i=0;i<nums.length-2;i++){

            //if(i!=0&&nums[i]==nums[i-1]) continue;

            int low = i+1;

            int high = nums.length-1;

            while(low<high){

                if(nums[i]+nums[low]+nums[high]>=target){

                    high--;

                }else{

                    count+=high-low;

                    low++;

                }

            }

        }

        return count;

    }

}

259. 3Sum Smaller

原文:http://www.cnblogs.com/codeskiller/p/6353848.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!