从零开始刷LeetCode-0

从leetcode中简单的题开始,上车吧

给定数组vector& dominoes;
若其中元素为二维数组,若元素i=元素j
或元素i=元素j[::-1]则称其可等价;
求在i ?:
输入:dominoes =[[1,2],[2,1],[3,4],[5,6]]
输出:1 来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-equivalent-domino-pairs

解题思路1:

使用两个循环嵌套伪代码如下:

for i in range (len_d):
    for j in range (i+1,len_d,1):
          balabala....

这样的思路是简单明了,但是缺点就是复杂度太高,运行慢,能不用嵌套循环就不用

解题思路2:

先使用一次循环,统计每个vector元素出现的个数n;

然后某个vector元素可以组成的pair数量就是n*(n-1)/2;

累加即可;

代码:

class Solution {
public:
int numEquivDominoPairs(vector>& dominoes) {
int len_dominoes=dominoes.size();
int num_e=0;
map, int> pair_map;
for (auto &vec_i: dominoes){
    if (vec_i[0]>vec_i[1]){
        swap(vec_i[0],vec_i[1]);
            }
            pair_map[make_pair(vec_i[0],vec_i[1])]++;  
        }
for (auto &pv:pair_map){
    if (pv.second>1){
        num_e+=pv.second*(pv.second-1)/2;
            }
        }
return num_e;
    }
};

c++ 知识点:

swap: 此处swap 交换vector 两个元素的地址;

map 程序中初始值默认为0;

map.second :使用迭代器访问,iter->first指向元素的键,iter->second指向键对应的值。 另外,使用下标访问map容器与使用下标访问vector的不同之处:用下标访问map中不存在的元素将导致在map容器中添加一个新的元素;

你可能感兴趣的:(代码)