Toc
  1. Q:
    1. Example:
  • A:
  • Toc
    0 results found
    bbcfive
    3Sum
    2019/06/28 Algorithm Array

    Q:

    Given an array nums of n integers, are there elements a , b , c in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

    Note:

    The solution set must not contain duplicate triplets.

    Example:

    Given array nums = [-1, 0, 1, 2, -1, -4],

    A solution set is:
    [
    [-1, 0, 1],
    [-1, -1, 2]
    ]

    A:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    /**
    * 3Sum
    * 三数之和
    */

    // Complexity: O(n^2)

    /**
    * @param {number[]} nums
    * @return {number[][]}
    */
    var threeSum = function(nums) {
    nums.sort((a, b) => a - b)

    let ans = []
    let len = nums.length

    // enumerate the array, and assume the item to be the smallest one
    for (let i = 0; i < len; i++ ) {

    // have already enumerate the item as the smallest one among the three
    // then continue
    if (i && nums[i] === nums[i - 1]) continue

    // the sum of another two should be
    let target = -nums[i]

    // the indexes of another two
    let [start, end] = [i + 1, len - 1]

    while (start < end) {
    let sum = nums[start] + nums[end]

    if (sum > target) {
    end--
    } else if (sum < target) {
    start++
    } else {
    ans.push([nums[i], nums[start], nums[end]])

    // remove the duplication
    while (nums[start] === nums[start + 1])
    start++
    start++

    // remove the duplication
    while (nums[end] === nums[end - 1])
    end--
    end--
    }
    }
    }

    return ans
    }
    本文作者:bbcfive
    版权声明:本文首发于bbcfive的博客,转载请注明出处!