两类查找问题
一、 查找有无(通常使用set;集合)
Ex: 元素x是否存在?
二、查找对应关系(键值对应,map)
Ex: 元素x 出现了几次?
下面我通过两个问题来给大家简单的说一下如何解决这两类问题
1. 选自leetcode 349. Intersection of Two Arrays
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
set<int> n1(nums1.begin(),nums1.end());
set<int> n2(nums2.begin(),nums2.end());
vector<int> res(n1.begin(),n1.end());
for(set<int>::iterator it = n2.begin(); it != n2.end(); it++) {
if(n1.find(*it) != n1.end())
res.push_back(*it);
}
return res;
}
};
注意:在自己使用map、set、vector等STL容器的时候,一定要引入相对应的头文件,并声明命名空间。
#include<set>
#include<vector>
using namespace std;
2. 选择leetcode 350. Intersection of Two Arrays
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
map<int,int> record;
for( int i = 0 ; i < nums1.size() ; i++ ) {
record[nums1[i]] ++;
}
vector<int> res;
for( int i = 0 ; i < nums2.size() ; i++ ) {
if( record[nums2[i]] > 0 ) {
res.push_back(nums2[i]);
record[nums2[i]] --;
}
}
return res;
}
};
最后分享一下我自己整理的一点关于C++ or C 以及 STL容器的一些知识点
整理在幕布里面访问网址:
文档链接:https://mubu.com/doc/11PSzN5UZs 密码:qn6j