• 20210126 等价多米诺骨牌对的数量


    给你一个由一些多米诺骨牌组成的列表 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
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-of-equivalent-domino-pairs
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
     public int numEquivDominoPairs(int[][] dominoes) {
    
        }

    思路:

    可以用纯hash计算 也可以对数组排序后插入set  数组长度-set个数是结果

        public static int numEquivDominoPairs(int[][] dominoes) {
            HashSet s = new HashSet();
            for(int[] domin:dominoes){
                Arrays.sort(domin);
    //            s.add(domin);数组指向地址而不是值 所以set去重失效
                s.add(String.valueOf(domin[0]+domin[1]));
            }
            return dominoes.length-s.size();
        }

    提交[[1,2],[1,2],[1,1],[1,2],[2,2]]失败  预期结果为3

    思路错误 题意理解错误 如[[1,2],[1,2],[1,1],[1,2],[2,2]]是要依次从左到右获取等价的数组 这组中[1,2]等价的

    第一个[1,2]依次和后面的对比 后面有2个[1,2] 

    第二个[1,2]后面有1个[1,2]

    第三个[1,2]后面没有

    所以有2+1=3个

    说白了[1,2]看成一个对象 共有3个[1,2]对象 这3个对象两两配对 共有3个组合

    初中学过二次项公式 如上有3个相同对象 C32=3x(3-1)/2=3 能算出两两配对组合个数

    重新思考思路

    把同类的对象个数分别存到数组上

    再用遍历用二次项公式取值

     public int numEquivDominoPairs(int[][] dominoes) {
            int[] map = new int[100];
            int res = 0;
            for(int i = 0; i < dominoes.length; i++){
                int m = dominoes[i][0];
                int n = dominoes[i][1];
                int k = m > n ? m * 10 + n : n * 10 + m;
                map[k] ++;
            }
            for(int i = 0; i < 100; i++){
                res += map[i] * (map[i] - 1) / 2;
            }
            return res;
        }
  • 相关阅读:
    js数组
    js中严格模式
    js 中bind
    HDU 2846(Trie树)
    HDU 4825(01 Trie树)
    Codeforces 900B (Java高精度或模拟)
    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 I Reversion Count(Java大数)
    2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 B Goldbach (素数测试,随机化算法)
    HDU 2256(矩阵快速幂)
    HDU 6029(思维)
  • 原文地址:https://www.cnblogs.com/hbhb/p/14333162.html
Copyright © 2020-2023  润新知