学习数据结构的第八天(二)

力扣T349

class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1=new TreeSet<>(); //这里又涉及到数组和set的转换了
Set<Integer> set2=new TreeSet<>();
for(int i:nums1)
set1.add(i);
for(int i:nums2)
set2.add(i);
Set<Integer> set3=new HashSet<>();
for(int i:set2)
{
if(set1.contains(i))
set3.add(i);
}
int []arr=new int [set3.size()]; //对于其他集合转为数组,总是要去考虑到指针的问题
int index=0; //treeset可以通过顺序的方法遍历吗?
for(int i:set3)
{
arr[index++]=i;
}
// for(int i=0;i<set3.size();i++)
// {
// arr[i]=set3.get(i); get方法和数组的形式都是不可以的。
// }
return arr;
}
}

这里的集合求交集和350的区别:

这里交集的含义:返回的集合不能有重复的元素   不能有重复的元素这件事,就肯定是用set来实现的了

因此这里只需要遍历其中任何一个集合即可,不像上面仍然遍历两个集合。

学会的事情:

arr转set,仍然是一个个添加的形式

set转arr,那么用迭代器访问set,并且用index作为外面,arr用index一个个添加元素进去。

并且set转array  array转set也都知道了。

int index=0; //treeset可以通过顺序的方法遍历吗?
for(int i:set3)
{
arr[index++]=i; //这里是说set转为arr,就是用迭代器遍历set,给arr添加元素
}

中心思想没变:

使用添加、删除、是否包含(都有现成的contains在)这些东西,尽可能不用array 用set list这些其他的集合。

并且treeset  treemap帮助查找,减小查找的消耗。

对比它的答案:

意思是说  arr2可以       不去变为set。

原因:arr2不需要添加和删除,也不需要去看是否contains,它只需要进行遍历操作。  那么就不需要变为set

需要把arr1 变为set,因为的话contains操作更方便,一句话就搞定了。

即:其他的容器方便add、remove  contains  如果只需要遍历操作,用这个array就行了。

然后array转为set,set转array也都知道了。

猜你喜欢

转载自www.cnblogs.com/startFrom0/p/12630344.html