返回两个数组的交
注意事项
Each element in the result must be unique.
The result can be in any order.
样例
nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].
熟悉hash解法尝试 负值失败 尝试OFFSET?
#include <stdio.h>
#include <vector>
using namespace std;
class Solution {
public:
/**
* @param nums1 an integer array
* @param nums2 an integer array
* @return an integer array
*/
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// Write your code here
int i=0,j=0,k=0;
int m=nums1.size();
int n=nums2.size();
int *Hash = new int[m+n];
vector<int> nums3;
for(int p=0; p<=m+n-1;p++)
Hash[p]=0;
while(i <= m-1){
int temp=0;
temp = nums1[i];
if(Hash[temp] == 0)
Hash[temp]++;
i++;
}
while(j <= n-1){
int temp=0;
temp = nums2[j];
if(Hash[temp] == 1)
Hash[temp]++;
j++;
}
while(k <= m+n-1){
if(Hash[k] == 2)
nums3.push_back(k);
k++;
}
delete[] Hash;
return nums3;
}
};
第二种解法 常规 先排序后去重
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
/**
* @param nums1 an integer array
* @param nums2 an integer array
* @return an integer array
*/
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
// Write your code here
int i=0,j=0;
int m=nums1.size();
int n=nums2.size();
vector<int> nums3;
if(m==0 || n==0)
return nums3;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int temp;
while(i <= m-1 && j <= n-1 ){
if(nums1[i] == nums2[j]){
if(temp != nums1[i]){
nums3.push_back(nums1[i]);
temp = nums1[i];
}
i++;
j++;
}else if(nums1[i] < nums2[j]){
i++;
}else
j++;
}
return nums3;
}
};