题目: Given two arrays, write a function to compute their intersection.
Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].
思路: 找出nums2与nums1相交的元素,若重复,则只要一个。 具体思路见代码
新方法代码:
class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> result; set<int> setnums1(nums1.begin(),nums1.end());//将两个vector的数值放到set里去年重合的 set<int> setnums2(nums2.begin(),nums2.end()); for(set<int>::iterator iter1=setnums1.begin(),iter2=setnums2.begin(); iter1!=setnums1.end()&&iter2!=setnums2.end();){//分别从两个set从头往后循环,如果都没有到结尾(有一个到结尾就跳出循环) if(*iter1==*iter2){//如果两个值相等 result.push_back(*iter1);//这个值就为重合的 ++iter1;//iter1和iter2都后移 ++iter2; } else if(*iter1<*iter2){//如果*iter1值小,iter1后移 ++iter1; } else if(*iter1>*iter2){//如果*iter2值小,iter2后移 ++iter2; } } return result; } };输出结果: 9ms
原始代码:
class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> result; for (vector<int>::iterator ix = nums1.begin(); ix != nums1.end(); ++ix){ for (vector<int>::iterator iy = nums2.begin(); iy != nums2.end(); ++iy){ if (*ix == *iy){//以nums1为外循环,nums2为内循环,若发现nums2中 result.push_back(*iy);//有nums1中相等的值,放到result中 for (unsigned int i = 0; i < result.size() - 1; ++i){//因为要除去相同的,所以要再循环result, if (result[i] == result[result.size() - 1]){//如果最后一个保存的值与原有相等,则再删除 result.pop_back(); } } } } } return result; } };输出结果: 76ms