LeetCode-Intersection_of_Two_Arrays_II

题目:

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1]nums2 = [2, 2], return [2, 2].

Note:

  • Each element in the result should appear as many times as it shows in both arrays.
  • The result can be in any order.


翻译:

给定两个数组,写一个函数计算他们的交集。

例子:

给定 nums1 = [1, 2, 2, 1]nums2 = [2, 2], 返回 [2, 2].

注意:

扫描二维码关注公众号,回复: 940744 查看本文章

  • 结果中的每个元素出现的次数和两个数组中的次数相同。
  • 结果可以是任何顺序的。


思路:

这道题目和上一道不同,上一道要求结果中的每一个元素只出现一次,而这个要求和数组中次数相同,因此,我们利用映射 m 先存储 nums1 中各元素出现的次数,然后和 nums2 中的元素比较,存储结果,并相应的对次数进行更改,大体思路同上一道。值得注意的是map.find()函数:返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器


C++代码(Visual Studio 2017):

#include "stdafx.h"
#include <iostream>
#include <vector>
#include <map>
using namespace std;

class Solution {
public:
	vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
		vector<int> result;
		map<int, int> m;
		for (int i = 0; i < nums1.size(); i++) {
			m[nums1[i]]++;
		}
		for (int i = 0; i < nums2.size(); i++) {
			if ((m.find(nums2[i])!=m.end())&& (m[nums2[i]] > 0)) { //find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
				result.push_back(nums2[i]);
				m[nums2[i]]--;
			}
		}
		return result;
	}
};

int main()
{
	Solution s;
	vector<int> nums1 = { 1,2,2,1 };
	vector<int> nums2 = { 2,2 };
	vector<int> result;
	result = s.intersection(nums1, nums2);
	for (int i = 0; i < result.size(); i++) {
		cout << result[i] << " ";
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/tel_annie/article/details/80191322