leetcode——Intersection of Two Arrays

原題目:

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

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

Note:

  • Each element in the result must be unique.
  • The result can be in any order.


解析:題目要求找出兩個數組的交集。實現方法很多,下面介紹兩種方法:

(1)先對兩個數組進行排序,之後用兩個初始爲0的變量j,k分別指向兩個數組,若nums1[j]=nums2[k],則將值加到結果中,因爲nums1和nums2中元素可能重複,故應當增加j或k的值,使得nums1[j] != nums2[k];若nums1[j] < nums2[k],則j加1;否則另k加1。算法複雜度等於排序複雜度,即爲O(nlogn)。


class Solution {
public:
	vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
		vector<int> v;
		sort(nums1.begin(), nums1.end());
		sort(nums2.begin(), nums2.end());
		int j=0, k=0, l1=nums1.size(), l2=nums2.size();
		while(j<l1 && k<l2)
		{
			if(nums1[j] == nums2[k])
			{
				v.push_back(nums1[j++]);
				while(j<l1 && nums1[j]==nums1[j-1])	j ++;
			}	
			else if(nums1[j] < nums2[k])	j ++;
			else	k ++;
		}
		return v;
	}
};


(2)利用集合set,先將其中一個數組的元素存進一個集合中,之後判斷另一個集合中任一元素是否在集合中,在的話將該值加進結果中,並刪去set中相應元素,防止重複。由於Set的添加及搜索複雜度爲O(logn),算法複雜度爲O(nlogn)。


class Solution {
public:
	vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
		set<int> s;
		vector<int> v;
		for(int i=0; i<nums1.size(); i++)
			if(s.find(nums1[i]) == s.end())
				s.insert(nums1[i]);
		for(int i=0; i<nums2.size(); i++)
			if(s.find(nums2[i]) != s.end())
			{
				v.push_back(nums2[i]);
				s.erase(nums2[i]);
			}
				
		return v;
	}
};





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章