zoukankan      html  css  js  c++  java
  • Algorithm——3Sum

    3Sum

    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:
    /**
     * 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
    }
  • 相关阅读:
    打造分布式爬虫
    vue入门-常用指令操作
    爬虫练习-爬取小说
    爬虫项目-爬取亚马逊商品信息
    爬虫框架_scrapy1
    CIE-LUV是什么颜色特征
    多目标跟踪baseline methods
    时间序列识别代码调试版本1
    拓扑空间1
    ps cs6破解
  • 原文地址:https://www.cnblogs.com/bbcfive/p/11100679.html
Copyright © 2011-2022 走看看