暴力法做leetcode 349时,如果用Hashset来存两个数组的交集,那么在返回时用以下语句把set转为int[]。
int[] ans = set.stream().mapToInt(Integer::intValue).toArray();
暴力法完整的代码:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set = new HashSet<>();
for(int i = 0; i < nums1.length; i ++) {
for(int j = 0; j < nums2.length; j ++) {
if(nums1[i] == nums2[j] && !set.contains(nums1[i])) {
set.add(nums1[i]);
}
}
}
int[] ans = set.stream().mapToInt(Integer::intValue).toArray();
return ans;
}
}
优化代码:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>(), set2 = new HashSet<>();
for(int num : nums1) set1.add(num);
for(int num : nums2) {
if(set1.contains(num)) {
set2.add(num);
}
}
int[] res = new int[set2.size()];
int i = 0;
for(int num : set2) res[i++] = num;
return res;
}
}
ps:集合可以用增强for循环来遍历, 这样速度会比用streamAPI转换要快,但是开辟的空间比streamAPI要多,因此属于以空间换时间。