zoukankan      html  css  js  c++  java
  • LeetCode #15 3Sum

    LeetCode #15 3Sum

    Question

    Given an array S of n integers, are there elements a, b, c in S 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.

    For example, given array S = [-1, 0, 1, 2, -1, -4],
    A solution set is:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]
    

    Solution

    Approach #1

    class Solution {
        func threeSum(_ nums: [Int]) -> [[Int]] {
            if nums.count < 3 { return [] }
            var sortedNums = nums.sorted()
            var results = [[Int]]()
            for i in 0..<sortedNums.count - 2 {
                if i == 0 || sortedNums[i] != sortedNums[i - 1] {
                    var l = i + 1
                    var r = sortedNums.count - 1
                    let target = -sortedNums[i]
                    while l < r {
                        let sum = sortedNums[l] + sortedNums[r]
                        if sum == target {
                            results.append([sortedNums[i], sortedNums[l], sortedNums[r]])
                            while l < r, sortedNums[l] == sortedNums[l + 1] { l += 1 }
                            l += 1
                            while l < r, sortedNums[r] == sortedNums[r - 1] { r -= 1 }
                            r -= 1
                        } else if sum > target {
                            while l < r, sortedNums[r] == sortedNums[r - 1] { r -= 1 }
                            r -= 1
                        } else {
                            while l < r, sortedNums[l] == sortedNums[l + 1] { l += 1 }
                            l += 1
                        }
                    }
                }
            }
            return results
        }
    }
    

    Time complexity: O(n^2).

    Space complexity: O(n). Sorted array, which has the same length of original array, needs space.

    转载请注明出处:http://www.cnblogs.com/silence-cnblogs/p/6893581.html

  • 相关阅读:
    HashMap 和 Hashtable 的区别
    提高利用运行(安装)内存
    MyEclipse、Hbuilder、Idea快捷键
    本地安装MySQL详细教程
    MyEclipse/Eclipse相关设置
    MyEclipse 10导入JDK1.7或1.8
    Oracle视图(和Mysq一样l)
    Oracle事务
    MySql综合知识汇总
    Mysql存储过程
  • 原文地址:https://www.cnblogs.com/silence-cnblogs/p/6893581.html
Copyright © 2011-2022 走看看