从零开始刷LeetCode-0

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

给定数组vector<vector>& dominoes;
若其中元素为二维数组,若元素i=元素j
或元素i=元素j[::-1]则称其可等价;
求在i<j的前提下,给定dominoes一共有多少个等价的pair?
?:
输入: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<vector<int>>& dominoes) {
int len_dominoes=dominoes.size();
int num_e=0;
map<pair<int,int>, 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容器中添加一个新的元素;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值