zoukankan      html  css  js  c++  java
  • [Swift]LeetCode1128. 等价多米诺骨牌对的数量 | Number of Equivalent Domino Pairs

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

    Given a list of dominoesdominoes[i] = [a, b] is equivalent to dominoes[j] = [c, d] if and only if either (a==c and b==d), or (a==d and b==c) - that is, one domino can be rotated to be equal to another domino.

    Return the number of pairs (i, j) for which 0 <= i < j < dominoes.length, and dominoes[i] is equivalent to dominoes[j].

    Example 1:

    Input: dominoes = [[1,2],[2,1],[3,4],[5,6]]
    Output: 1

    Constraints:

    • 1 <= dominoes.length <= 40000
    • 1 <= dominoes[i][j] <= 9

    给你一个由一些多米诺骨牌组成的列表 dominoes

    如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的。

    形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等价的前提是 a==c 且 b==d,或是 a==d 且 b==c

    在 0 <= i < j < dominoes.length 的前提下,找出满足 dominoes[i] 和 dominoes[j] 等价的骨牌对 (i, j) 的数量。

    示例:

    输入:dominoes = [[1,2],[2,1],[3,4],[5,6]]
    输出:1

    提示:

    • 1 <= dominoes.length <= 40000
    • 1 <= dominoes[i][j] <= 9

    192ms
     1 class Solution {
     2     func dominoHash(_ dom:[Int]) -> Int {
     3         if dom[0] > dom[1] {
     4             return 100*dom[1] + dom[0]
     5         }
     6         return 100*dom[0] + dom[1]
     7     }
     8 
     9     func numEquivDominoPairs(_ dominoes: [[Int]]) -> Int {
    10         var result = 0
    11         var counts = [Int : Int]()
    12         
    13         for d in dominoes {
    14             let h = dominoHash(d)
    15             if let count = counts[h] {
    16                 result += count
    17                 counts[h] = count + 1
    18             } else {
    19                 counts[h] = 1
    20             }
    21         }
    22         return result
    23     }
    24 }

    196ms

     1 sample 196 ms submission
     2 class Solution {
     3     func numEquivDominoPairs(_ dominoes: [[Int]]) -> Int {
     4         var originals = [Int]()
     5 
     6         dominoes.forEach { (domino) in
     7             originals.append(10*min(domino[0], domino[1]) + max(domino[0], domino[1]))
     8         }
     9 
    10         var counts: [Int: Int] = [:]
    11         originals.forEach { counts[$0, default: 0] += 1 }
    12 
    13         var count = 0
    14         counts.forEach { count = count + ( $1 * ($1 - 1)/2 ) }
    15 
    16         return count
    17     }
    18 }

    200ms

     1 class Solution {
     2     func numEquivDominoPairs(_ dominoes: [[Int]]) -> Int {
     3         let dominoes = dominoes.map { dom -> Int in
     4             if dom[0] <= dom[1] {
     5                 return dom[0] * 10 + dom[1]
     6             } else {
     7                 return dom[1] * 10 + dom[0]
     8             }
     9         }
    10         var counts = [Int: Int]()
    11         var res = 0
    12         for num in dominoes {
    13             res += (counts[num] ?? 0)
    14             counts[num, default: 0] += 1
    15         }
    16         return res
    17     }
    18 }

    Runtime: 224 ms

    Memory Usage: 23.9 MB
     1 class Solution {
     2     func numEquivDominoPairs(_ dominoes: [[Int]]) -> Int {
     3         var dominoes = dominoes
     4         var freq:[[Int]:Int] = [[Int]:Int]()
     5         var total:Int = 0
     6         for i in 0..<dominoes.count
     7         {
     8             if dominoes[i][0] > dominoes[i][1]
     9             {
    10                 dominoes[i].swapAt(0,1)
    11             }
    12             total += freq[[dominoes[i][0], dominoes[i][1]],default:0]
    13             freq[[dominoes[i][0], dominoes[i][1]],default:0] += 1
    14         }
    15         return total
    16     }
    17 }
  • 相关阅读:
    百度浏览器 h5页面fixed布局不显示问题
    Vue3_arco.design icon 组件批量渲染
    异步加载数据的 js tree (基于Jquery)
    ASP.NET MVC 与 WebForm 对比
    asp.net 页面生命周期
    ASP.NET通过OLE DB操作Excel
    SQL 分页查询的几种方式
    OLEDB读取Excel文件丢失部分数据
    MVC 基于FormsAuthentication 方式的权限验证
    Session不超时
  • 原文地址:https://www.cnblogs.com/strengthen/p/11179560.html
Copyright © 2011-2022 走看看