给定两个数组,编写一个函数来计算它们的交集。
Set
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> resSet = new HashSet<>();
for (int i = 0; i < nums1.length; i++) {
set1.add(nums1[i]);
}
for (int i = 0; i < nums2.length; i++) {
if (set1.contains(nums2[i])) {
resSet.add(nums2[i]);
}
}
int i = 0;
int[] res = new int[resSet.size()];
for (Integer num : resSet) {
res[i++] = num;
}
return res;
}
}
循环遍历
public class Solution349 {
public int[] intersection(int[] nums1, int[] nums2) {
List<Integer> list = new ArrayList<>();
for(int i : nums1){
for(int j : nums2){
if(i==j && !list.contains(i)){
list.add(i);
}
}
}
int[] nums = new int[list.size()];
for(int i = 0;i < list.size();i++){
nums[i] = list.get(i);
}
return nums;
}
}
问题
在做这道题的过程中涉及到了int[]与ArrayList转换的问题
Java:ArrayList和数组int[]的相互转化
本来还想把两个数组排序之后再求交集,可惜超时了……
只贴一下排序的代码orz
快排
public void quickSort(List<Integer> array){
int size = array.size();
if(array.size() > 1){
List<Integer> small = new ArrayList<>();
List<Integer> same = new ArrayList<>();
List<Integer> larger = new ArrayList<>();
int middle = Math.min(Math.max(array.get(0),array.get(size-1)),array.get(size/2));
for(Integer i : array){
if(i < middle){
small.add(i);
}else if(i == middle){
same.add(i);
}else{
larger.add(i);
}
}
sort(small);
sort(larger);
array.clear();
array.addAll(small);
array.addAll(same);
array.addAll(larger);
}
}