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

题目
难度:简单
类型:数组
题意:找到所有的相同数组对。我最开始理解错了,这种相同数对最多是k*(k-1)/2, 我开始理解成了阶乘个,所以一直错。以下并不是最优解法,只是一种思路,即先排序把相同的数对放在一起,然后统计相同数对的数量。最后把相同的数对用上面的公式求一下,就是最终结果。

class Solution {
public:
    int numEquivDominoPairs(vector<vector<int>>& d) {
        int n = d.size();
        int res = 0;
        for(auto &c: d){
            sort(c.begin(), c.end());
        }
        sort(d.begin(), d.end(),[](vector<int> x, vector<int> y){
            return x[0] < y[0] || x[0]==y[0] && x[1] < y[1];
        });
        for(int i = 0; i < n; ){
            int j = i;
            while(j < n && d[i]==d[j]) j++;
            if(j - i > 1){
                int k = j - i;
                res += k*(k-1)/2;
            }
            i = j;
        }
        return res;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章