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.
Subscribe to see which companies asked this question.
思路:过程中有个让人很苦恼的是int[] a = new int [nums1.length+nums2.length],这样初始化的话,int默认值为0,如果没有交集,答案应该是"[]",但是总是会有默认值,最后只有int []a = new int[]{},这样初始化然后返回才会是"[]",而记录交集则另外用了一个ArrayList。当然我这个方法用时太长了,并不是一个好方法。
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
ArrayList<Integer> result = new ArrayList<>();
int[] res = new int[] {};
int n = 0;
Arrays.sort(nums1);
for (int i = 0; i < nums1.length; i++) {
if (i > 0 && nums1[i] == nums1[i - 1]) {
} else {
for (int j = 0; j < nums2.length; j++) {
if (nums1[i] == nums2[j]) {
result.add(nums1[i]);
n++;
break;
}
}
}
}
if (n == 0) {
return res;
} else {
res = new int[n];
for (int j = 0; j < n; j++) {
res[j] = result.get(j);
}
}
return res;
}
}
看了下解析,蛮多用Set<Integer>set = new HashSet<>();因为有set.contains(nums2[i])方法。
还有一种更好的方法就是,两个数组都排好序,再同时遍历,遍历的时候比较。