题目
给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
我的思路
遍历nums1数组,查看nums1中的元素是否在nums2中出现,如果出现就写入结果数组中。然后将nums1判断过的重复的数,都标记为2147483647,这样就可以避免重复判断。
代码
import java.util.Arrays;
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int len1 = nums1.length,len2 = nums2.length,x,y,p=0,count=0;
int[] result = new int[len1];
int[] result1;
for(int i=0; i<len1; i++){
x = nums1[i];
if(x==2147483647) continue; // 如果x==2147483647,代表x之前出现过
for(int j=0; j<len2; j++){ //判断x是否出现在nums2数组中
y = nums2[j];
if(x==y){
result[p] = x;
p++;
count++; // 记录nums1和nums2出现多少个相同的元素
break;
}
}
for(int q=i+1;q<len1;q++){
if(nums1[q] == x)
nums1[q] = 2147483647; //将nums1中重复出现的元素标记为2147483647
}
}
result1 = new int[count];
for(int i=0; i<count; i++){
result1[i] = result[i];
}
return result1;
}
}
学习他人代码
使用set
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> nums = new HashSet<Integer>();
Set<Integer> result = new HashSet<>();
for(int i=0;i<nums2.length;i++) {
nums.add(nums2[i]); //放入时候去掉重复的
}
for(int i=0;i<nums1.length;i++) {
if(nums.contains(nums1[i])) {
result.add(nums1[i]);//放入交集
}
}
int[] res = new int[result.size()];
int i=0;
Iterator iter = result.iterator();
while(iter.hasNext()){
res[i++]=(int)iter.next(); //集合变数组
}
return res;
}
}