学习内容:

LeeCodeJava

LeeCode

1128.等价多米诺骨牌对的数量

我的代码:

  1. class Solution {
  2. public int numEquivDominoPairs(int[][] dominoes) {
  3. int count=0;
  4. for (int i = 0; i < dominoes.length; i++) {
  5. for(int j=i+1;j<dominoes.length;j++){
  6. if(dominoes[i][0]+dominoes[i][1]!=dominoes[j][0]+dominoes[j][1]){
  7. continue;
  8. }
  9. if((dominoes[i][0]==dominoes[j][0]||dominoes[i][0]==dominoes[j][1])){
  10. count++;
  11. }
  12. }
  13. }
  14. return count;
  15. }
  16. }

思路:

本质上还是二次循环,但是为了减少判断的次数,先计算总数,再计算某个值是否相等,就可以判断出两个多米诺骨牌是否相当。但是二重循环似乎是超了。

改进思路:

1.使用HashMap

优解代码

  1. class Solution {
  2. public int numEquivDominoPairs(int[][] dominoes) {
  3. int[] data=new int[100];
  4. int count=0;
  5. Arrays.fill(data,0);
  6. for (int[] dominoe : dominoes) {
  7. if (bigger(dominoe) == 1) {
  8. data[dominoe[0] * 10 + dominoe[1]]++;
  9. } else {
  10. data[dominoe[1] * 10 + dominoe[0]]++;
  11. }
  12. }
  13. for (int i = 0; i < data.length; i++) {
  14. if(data[i]>=2){
  15. count+=(data[i]-1)*data[i]/2;
  16. }
  17. }
  18. return count;
  19. }
  20. static int bigger(int[] a){
  21. return (a[0]>a[1])? 1:0;
  22. }
  23. }

思路

手动建立一个数组当作hashmap,取数字大的为十位,数字小的为个位,这样使得相当的元素会被放在同一个位置,只需要遍历hashmap,通过计算每个hashmap元素中元素的数量,然后根据数量获得相等关系的数量。
可得结果。