349. 两个数组的交集
- 分析
- 代码
- HashSet出错的知识点
- 1、HashSet新建
- 2、HashSet添加add
- 3、是否包含某元素
- 4、集合->数组
- 5、增强for循环
分析
没做出来的原因+代码随想录的视频文字学习
为什么没做出来,因为没有理解好题意。根据示例1可知是去重的。且题目明确说“不考虑输出结果的顺序 ”。因此只用输出两个数组中都出现的数字。 使用哈希结构,但不需要hashmap,因为不需要计数。使用hashset。
代码
(Java)
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();//
for(int i=0; i<nums1.length; i++) {
//会报错吗?
set1.add(nums1[i]);
}
Set<Integer> set2 = new HashSet<>();//集合contains
for(int i=0; i<nums2.length; i++) {
if(set1.contains(nums2[i])) {
set2.add(nums2[i]);
}
}
//集合的输出?
//集合->数组
int[] res = new int[set2.size()];
int j = 0;
for(int num : set2) {//为什么可以这样
res[j++] = num;
}
return res;
}
}
改进的点:
if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
return new int[0];
}
HashSet出错的知识点
(Java)
1、HashSet新建
Set<Integer> set1 = new HashSet<>();
2、HashSet添加add
for(int i=0; i<nums1.length; i++) {
//会报错吗?
set1.add(nums1[i]);
}
无法重复添加,不会报错,只是add会返回false
3、是否包含某元素
public boolean contains(Object o)
if(set1.contains(nums2[i]))
4、集合->数组
int[] res = new int[set2.size()];
int j = 0;
for(int num : set2) {//为什么可以这样
res[j++] = num;
}
5、增强for循环
for(int num : set2)
set2 是 Set<Integer> set2
。但是可以用增强 for 循环,且这里用 int num 直接接受。