• [Swift]LeetCode454. 四数相加 II | 4Sum II


    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10343175.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l)there are such that A[i] + B[j] + C[k] + D[l] is zero.

    To make problem a bit easier, all A, B, C, D have same length of N where 0 ≤ N ≤ 500. All integers are in the range of -228 to 228 - 1 and the result is guaranteed to be at most 231 - 1.

    Example:

    Input:
    A = [ 1, 2]
    B = [-2,-1]
    C = [-1, 2]
    D = [ 0, 2]
    
    Output:
    2
    
    Explanation:
    The two tuples are:
    1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
    2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

    给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0

    为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -228 到 228 - 1 之间,最终结果不会超过 231 - 1 。

    例如:

    输入:
    A = [ 1, 2]
    B = [-2,-1]
    C = [-1, 2]
    D = [ 0, 2]
    
    输出:
    2
    
    解释:
    两个元组如下:
    1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
    2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 = 0

    264ms
     1 class Solution {
     2     func fourSumCount(_ A: [Int], _ B: [Int], _ C: [Int], _ D: [Int]) -> Int {
     3         var map: [Int: Int] = [:]
     4         for i in 0..<A.count {
     5             for j in 0..<B.count {
     6                 let sum = A[i] + B[j]
     7                 map[sum, default: 0] += 1
     8             }
     9         }
    10         
    11         var count = 0
    12         for i in 0..<C.count {
    13             for j in 0..<D.count {
    14                 let sum = C[i]+D[j]
    15                 if let negativeOfSum = map[-sum] {
    16                     count += negativeOfSum
    17                 }
    18             }
    19         }
    20         
    21         return count
    22     }
    23 }

    312ms

     1 class Solution {
     2     func fourSumCount(_ A: [Int], _ B: [Int], _ C: [Int], _ D: [Int]) -> Int {
     3         var map: [Int: Int] = [:]
     4         for i in A.indices {
     5             for j in B.indices {
     6                 map[A[i] + B[j], default: 0] += 1
     7             }
     8         }
     9         
    10         var result = 0
    11         for i in C.indices {
    12             for j in D.indices {
    13                 result += map[-C[i]-D[j], default:0]
    14             }
    15         }
    16         
    17         return result
    18     }
    19 }

    436ms

     1  class Solution {
     2         func Max(_ A: ([Int], Int), _ B: ([Int], Int)) -> ([Int], Int) {
     3             if A.0.count > B.0.count {
     4                 return A
     5             }else{
     6                 return B
     7             }
     8         }
     9         func Min(_ A: ([Int], Int), _ B: ([Int], Int)) -> ([Int], Int) {
    10             if A.0.count < B.0.count {
    11                 return A
    12             }else{
    13                 return B
    14             }
    15         }
    16         func fourSumCount(_ A: [Int], _ B: [Int], _ C: [Int], _ D: [Int]) -> Int {
    17             var nums = [A, B, C, D]
    18             let A1 = Max(Max((nums[0],0), (nums[1],1)), Max((nums[2],2), (nums[3],3)))
    19             nums.remove(at: A1.1)
    20             let B1 = Min(Min((nums[0],0), (nums[1],1)), (nums[2], 2))
    21             nums.remove(at: B1.1)
    22             let C1 = nums[0]
    23             let D1 = nums[1]
    24             
    25             var dict = [Int:Int]()
    26             for a in A1.0 {
    27                 for b in B1.0 {
    28                     if let n = dict[a + b]{
    29                         dict[a + b] = n + 1
    30                     }else{
    31                         dict[a + b] = 1
    32                     }
    33                 }
    34             }
    35             var count = 0
    36             for c in C1 {
    37                 for d in D1 {
    38                     if let n = dict[0 - c - d] {
    39                         count += n
    40                     }
    41                 }
    42             }
    43             return count
    44         }
    45     }

    540ms

     1 class Solution {
     2     func fourSumCount(_ A: [Int], _ B: [Int], _ C: [Int], _ D: [Int]) -> Int {
     3         var res:Int = 0
     4         var n:Int = A.count
     5         var m1:[Int:Int] = [Int:Int]()
     6         var m2:[Int:Int] = [Int:Int]()
     7         for i in 0..<n
     8         {
     9             for j in 0..<n
    10             {
    11                 if m1[A[i] + B[j]] == nil
    12                 {
    13                     m1[A[i] + B[j]] = 1
    14                 }
    15                 else
    16                 {
    17                     m1[A[i] + B[j]]! += 1
    18                 }
    19                 if m2[C[i] + D[j]] == nil
    20                 {
    21                     m2[C[i] + D[j]] = 1
    22                 }
    23                 else
    24                 {
    25                     m2[C[i] + D[j]]! += 1
    26                 }
    27             }
    28         }
    29         for (key,val) in m1
    30         {
    31             if m2[-key] != nil
    32             {
    33                 res += val * m2[-key]!
    34             }            
    35         }
    36         return res
    37     }
    38 }

    548ms

     1 class Solution {
     2     func fourSumCount(_ A: [Int], _ B: [Int], _ C: [Int], _ D: [Int]) -> Int {
     3         var result = 0
     4         var map: [Int: Int] = [:]
     5         for a in A {
     6             for b in B {
     7                  let sum = a + b
     8                 if let count = map[sum] {
     9                     map[sum] = count + 1
    10                 } else {
    11                     map[sum] = 1
    12                 }
    13             }
    14         }
    15 
    16         for c in C {
    17             for d in D {
    18                 let sum = -(c + d)
    19                 if let count = map[sum] {
    20                     result += count
    21                 }
    22             }
    23         }
    24 
    25         return result
    26     }
    27 }

    880ms

     1 class Solution {
     2     func fourSumCount(_ A: [Int], _ B: [Int], _ C: [Int], _ D: [Int]) -> Int {
     3         
     4         var res = 0
     5         
     6         var CDRecord = [Int : Int]()
     7         
     8         for c in C {
     9             for d in D {
    10                if let r = CDRecord[c + d] {
    11                    CDRecord[c + d] = r + 1
    12                } else {
    13                     CDRecord[c + d] = 1
    14                }
    15             }
    16         }
    17         
    18         for a in A {
    19             for b in B {
    20                 let complete = 0 - (a + b)
    21                 
    22                 if let value = CDRecord[complete] {
    23                     res += value
    24                 }
    25             }
    26         }
    27         return res                
    28     }
    29 }
  • 相关阅读:
    Vue
    Vue
    Vue
    服务器上部署django项目流程?
    Git 命令
    git命令?
    消息队列中间件??
    简述COOKIE和SESSION的区别与联系?
    什么是restful API?
    Django、Flask、Tornado的区别?
  • 原文地址:https://www.cnblogs.com/strengthen/p/10343175.html
Copyright © 2020-2023  润新知