每日算法(三) 简单的查找问题

两类查找问题

 一、 查找有无(通常使用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


点赞