学习内容:
LeeCode
1128.等价多米诺骨牌对的数量
我的代码:
class Solution {
public int numEquivDominoPairs(int[][] dominoes) {
int count=0;
for (int i = 0; i < dominoes.length; i++) {
for(int j=i+1;j<dominoes.length;j++){
if(dominoes[i][0]+dominoes[i][1]!=dominoes[j][0]+dominoes[j][1]){
continue;
}
if((dominoes[i][0]==dominoes[j][0]||dominoes[i][0]==dominoes[j][1])){
count++;
}
}
}
return count;
}
}
思路:
本质上还是二次循环,但是为了减少判断的次数,先计算总数,再计算某个值是否相等,就可以判断出两个多米诺骨牌是否相当。但是二重循环似乎是超了。
改进思路:
优解代码
class Solution {
public int numEquivDominoPairs(int[][] dominoes) {
int[] data=new int[100];
int count=0;
Arrays.fill(data,0);
for (int[] dominoe : dominoes) {
if (bigger(dominoe) == 1) {
data[dominoe[0] * 10 + dominoe[1]]++;
} else {
data[dominoe[1] * 10 + dominoe[0]]++;
}
}
for (int i = 0; i < data.length; i++) {
if(data[i]>=2){
count+=(data[i]-1)*data[i]/2;
}
}
return count;
}
static int bigger(int[] a){
return (a[0]>a[1])? 1:0;
}
}
思路
手动建立一个数组当作hashmap,取数字大的为十位,数字小的为个位,这样使得相当的元素会被放在同一个位置,只需要遍历hashmap,通过计算每个hashmap元素中元素的数量,然后根据数量获得相等关系的数量。
可得结果。