每日一题——LeetCode1128.等价多米诺骨牌对的数量

发布时间:2024年01月13日

先尝试暴力解法:

var numEquivDominoPairs = function(dominoes) {
    var count=0
    for(let i=0;i<dominoes.length-1;i++){
        for(let j=i+1;j<dominoes.length;j++){
            if((dominoes[i][0]==dominoes[j][0] && dominoes[i][1]==dominoes[j][1]) || (dominoes[i][0]==dominoes[j][1] && dominoes[i][1]==dominoes[j][0])){
                count++
            }
        }
    }
    return count
};

?可惜时间超限:

直接参考官方解法,太巧妙了:

不妨直接让每一个二元对都变为指定的格式,即第一维必须不大于第二维。这样两个二元对「等价」当且仅当两个二元对完全相同。

注意到二元对中的元素均不大于 9,因此我们可以将每一个二元对拼接成一个两位的正整数,即 (x,y)→10x+y(x, y) 。这样就无需使用哈希表统计元素数量,而直接使用长度为 100的数组即可。

作者:力扣官方题解
链接:1128 官方题解

var numEquivDominoPairs = function(dominoes) {
    const num = new Array(100).fill(0);
    let ret = 0;
    for (const domino of dominoes) {
        const val = domino[0] < domino[1] ? domino[0] * 10 + domino[1] : domino[1] * 10 + domino[0];
        ret += num[val];
        num[val]++;
    }
    return ret;
};

消耗时间和内存情况:

文章来源:https://blog.csdn.net/weixin_52878347/article/details/135571553
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。