259. 3Sum Smaller

来源:互联网 发布:mac acl是什么意思 编辑:程序博客网 时间:2024/05/26 12:03

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?

这道题跟3sum的区别就是数字可以重复使用……所以在代码里注释掉了重复性判断的语句,代码如下:

public class Solution {    public int threeSumSmaller(int[] nums, int target) {        Arrays.sort(nums);        int res = 0;        for (int i = 0; i < nums.length; i ++) {            //if (i == 0 || nums[i] != nums[i - 1]) {                int low = i + 1, high = nums.length - 1, sum = target - nums[i];                while (low < high) {                    if (nums[low] + nums[high] < sum) {                        res += high - low;                        low ++;                        //while (low < high && nums[low] == nums[low - 1]) low ++;                    } else {                        high --;                        while (low < high && nums[high] == nums[high + 1]) high --;                    }                }            //}        }        return res;    }}

0 0
原创粉丝点击