Total Accepted: 16575
Total Submissions: 36982
Difficulty: Easy
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.
方法一:复杂度O(n)
普遍的方法:通过两个数组的遍历实现。
import java.util.HashSet;
import java.util.Set;
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> temp = new HashSet<Integer>();
for(int i = 0; i < nums1.length; i ++) {
for(int j = 0; j < nums2.length; j ++) {
if(nums1[i] == nums2[j]) {
temp.add(nums1[i]);
}
}
}
int[] solution = new int[temp.size()];
int j = 0;
for(Integer i:temp) {
solution[j] = i;
j++;
}
return solution;
}
}
普遍的方法:通过两个set集合的遍历实现。
为什么用set集合?
Collection
--List:有顺序,能重复
--ArrayList / LinkedList / Vector
--Set :无顺序,不能重复
--HashSet / TreeSet
--List:有顺序,能重复
--ArrayList / LinkedList / Vector
--Set :无顺序,不能重复
--HashSet / TreeSet
import java.util.HashSet;
import java.util.Set;
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();
for(int c: nums1) {
set1.add(c);
}
for(int c:nums2) {
if(set1.contains(c)) {
set2.add(c);
}
}
int[] temp = new int[set2.size()];
int j = 0;
for(Integer c:set2) {
temp[j] = c;
j ++;
}
return temp;
}
}
方法二:复杂度O(logn)
import java.util.HashSet;
import java.util.Set;
import java.util.Arrays;
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<Integer>();
Arrays.sort(nums1);
Arrays.sort(nums2);
int i = 0;
int j = 0;
while((i < nums1.length) && (j < nums2.length)) {
if(nums1[i] < nums2[j]) {
i ++;
} else if(nums1[i] > nums2[j]){
j ++;
} else {
set1.add(nums1[i]);
i ++;
j ++;
}
}
int z = 0;
int[] solution = new int[set1.size()];
for(Integer c: set1) {
solution[z] = c;
z ++;
}
return solution;
}
}
查找两个数组的相同元素,可以先排序,在进行数组比较,这是很好的一个办法。