349. Intersection of Two Arrays
难度简单468收藏分享切换为中文接收动态反馈
Given two integer arrays
nums1
andnums2
, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.Example 1:
Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2]Example 2:
Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4] Output: [9,4] Explanation: [4,9] is also accepted.Constraints:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
本题我最初的想法是采用双指针法,不过在做的时候碰到了一些问题:
第一:对于相同的数字我不知道如何替换掉
第二:数组总是越界异常
package Sort;
import java.util.Arrays;
public class IntersectionOfTwoArrays {
public static int[] intersection(int[] nums1,int[] nums2){
//采用排序+双指针的用法
int length1 = nums1.length;
int length2 = nums2.length;
Arrays.sort(nums1);
Arrays.sort(nums2);
//创建辅助数组
int[] help = new int[length1+length2];
//创建指针
int index = 0,index1 = 0,index2 = 0;
while(index1 < length1 && index2 < length2){
int num1 = nums1[index1];
int num2 = nums2[index2];
if(num1 == num2){
//去除相同情况
if(index == 0 || num1 != help[index -1]){
help[index] = num1;
index++;
}
index1++;
index2++;
} else if(num1 < num2){
index1++;
} else {
index2++;
}
}
return Arrays.copyOfRange(help,0,index);
}
public static void main(String[] args) {
int[] nums1 = new int[]{1,2,2,1};
int[] nums2 = new int[]{2,2};
int[] result = intersection(nums1,nums2);
for(int i : result){
System.out.println(i);
}
}
}
下面看另一种解法,使用集合
public static int[] intersectionAnother(int[] nums1,int[] nums2){
Set<Integer> set = new HashSet<>();
Set<Integer> intersection = new HashSet<>();
for(int i = 0;i < nums1.length;i++){
set.add(nums1[i]);
}
for(int j = 0;j < nums2.length;j++){
if(set.contains(nums2[j])){
intersection.add(nums2[j]);
}
}
int i = 0;
int[] result = new int[intersection.size()];
for(Integer num : intersection){
result[i++] = num;
}
return result;
}
public static void main(String[] args) {
int[] nums1 = new int[]{1,2,2,1};
int[] nums2 = new int[]{2,2};
int[] result = intersection(nums1,nums2);
int[] result2 = intersectionAnother(nums1,nums2);
for(int i : result2){
System.out.println(i);
}
}