当前位置: 首页 > ai >正文

LeetCode 1128 等价多米诺骨牌对的数量 题解

今天的每日一题,我的思路还是硬做,不如评论区通过状压写的简单,但是答题思路加算法实现是没有问题的,且时间复杂度也是可以通过的,毕竟全是o(n)
那么我就来说一下我的思路,根据dominoes[i] = [a, b] 与 dominoes[j] = [c, d] 等价 当且仅当 (a == c 且 b == d) 或者 (a == d 且 b == c)可以知道我们需要将上述两种情况总和到一起,那我们就可以常规使用map进行维护,但不同于以往的两个Integer维护,我们这次需要改成String+Integer的map进行维护,而String则是代表i和j(dominoes[i][0]dominoes[i][1]),而后面的Integer则代表数量,然后通过示例分析我们可以明白,如果前后存在3个、2个、1个可以这么统计的值的话我们可以使用公式sum*(sum-1)/2得到。那么最后相加,结果就出来了。如果有解释不到位的地方,结合代码应该能理解的更快。

class Solution {public int numEquivDominoPairs(int[][] dominoes) {int n = dominoes.length;HashMap<String,Integer> hashmap = new HashMap<>();for(int i=0;i<n;i++){String key = "("+ dominoes[i][0] + "," + dominoes[i][1] + ")";String keyR = "(" + dominoes[i][1] + "," + dominoes[i][0] + ")";if(hashmap.getOrDefault(key,0)>0){hashmap.put(key,hashmap.getOrDefault(key,0)+1);}else if(hashmap.getOrDefault(keyR,0)>0){hashmap.put(keyR,hashmap.getOrDefault(keyR,0)+1);}else{hashmap.put(key,hashmap.getOrDefault(key,0)+1);}}int sum = 0;for(Map.Entry<String,Integer> entry:hashmap.entrySet()){// System.out.println("key="+entry.getKey()+" value="+entry.getValue());int mid = entry.getValue()*(entry.getValue()-1)/2;sum+=mid;}return sum;}
}

之后我们再来看看别人代码的实现,不仅要总结自己的思路,我们也要吸取别人的思路做题,说不定哪天就用上了。

class Solution {public int numEquivDominoPairs(int[][] dominoes) {int[] num = new int[100];int ret = 0;for (int[] domino : dominoes) {int val = domino[0] < domino[1] ? domino[0] * 10 + domino[1] : domino[1] * 10 + domino[0];ret += num[val];num[val]++;}return ret;}
}

我们拿个示例来说一下

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

比如这个示例

我们官方题解开的数组是100,是为了将双下标变为单下标然后统计数量,比如1,2和2,1都变为12,然后再根据通过加加统计,当到第三个[1,2]时,num[12]已经统计至0+1+2=3了并计入ret中,实在是秒啊。通过一次循环遍历即遍历完整题的要求。

http://www.xdnf.cn/news/3754.html

相关文章:

  • pip安装包时网络不畅,替换国内PyPI镜像源
  • Java 集合线程安全
  • Linux | 了解Linux中的任务调度---at与crontab 命令
  • LLM论文笔记 28: Universal length generalization with Turing Programs
  • RabbitMQ入门基础
  • 250504_VsCode使用
  • 14.Excel:排序和筛选
  • 【PINN】DeepXDE学习训练营(13)——operator-antiderivative_aligned.py
  • 汇编常用语法
  • node核心学习
  • IBM DB2 两地三中心方案与配置
  • shell编程补充内容(Linux课程实验3)
  • 【SpringAI+阿里云百炼】AI对话4个Demo
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.3 异常值识别(Z-score法/IQR法/业务规则法)
  • 力扣每日一题1007、行相等的最少多米诺旋转
  • 爬虫管理平台-最新版本发布
  • 李沐《动手学深度学习》 | Softmax回归 - 分类问题
  • 【AI面试准备】从0-1搭建人工智能模型自动化评估理论与测试,掌握测试数据集建立与优化,熟练数据处理和模型评测工作
  • RV1126单目摄像头取流,实现双路输出(一路H.264编码推流,一路给算法)
  • 【React】 Hooks useTransition 解析与性能优化实践
  • 套接字+Socket连接
  • Y1模拟一 补题报告
  • function包装器的意义
  • Milvus(13):自定义分析器、过滤器
  • Dubbo(94)如何在金融系统中应用Dubbo?
  • validator - Go 结构体验证库
  • 每天五分钟深度学习框架PyTorch:基于Dataset封装自定义数据集
  • 深入理解Java垃圾回收机制
  • NV228NV254固态美光颗粒NV255NV263
  • 2025年01月03日美蜥(杭州普瑞兼职)一面