259. 3Sum Smaller

作者: 番茄晓蛋 | 来源:发表于2017-06-19 08:02 被阅读10次

    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?

    **解题思路 **
    Binary Search Using n O(n2) runtime
    注意: all hi in (lo, hi] will also satisfy the condition , 所以是 count += hi - lo 而不是count++;

        public int threeSumSmaller(int[] nums, int target) {
            int count = 0;
            Arrays.sort(nums);
            int len = nums.length;
            
            for (int i = 0; i < len - 2; i++) {
                int lo = i + 1, hi = len - 1;
                while (lo < hi) {
                    if (nums[i] + nums[lo] + nums[hi] >= target) {
                        hi--;
                    } else {
                        count += hi - lo;  // all hi in (lo, hi] will also satisfy the condition
                        lo++;
                    }
                }
            }
            return count;
        }
    

    相关文章

      网友评论

        本文标题:259. 3Sum Smaller

        本文链接:https://www.haomeiwen.com/subject/evxgqxtx.html