本题做法是利用Hash表去除重复元素,然后用HashSet放重复元素,用一个数组输出。
我的本来思想是用两个容量为10数组分别标记两个数组存在的元素,存在则相应位置+1,最后把元素重复的位置全部变为1,即把不等于1且不等于0的元素变为1。然后将两个数组比较,将相等且为1的索引输出。但是问题是输出的数组不是动态的,在重复元素后会输出0元素,看了看答案感觉思想是对的,但是需要用HashSet来做。
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] res = new int[10];
Set<Integer> resSet = new HashSet<>();
for (int i =0; i < nums1.length; i ++) {
res[nums1[i]] ++;
if (res[nums1[i]] != 0 && res[nums1[i]] != 1) {
res[nums1[i]] = 1;
}
}
for (int i : nums2) {
if (nums1[i] == 1) {
resSet.add(i);
}
}
for (int j = 0; j < nums2.length; j ++) {
tem[nums2[j]] ++;
if (tem[nums2[j]] != 0 && tem[nums2[j]] != 1) {
tem[nums2[j]] = 1;
}
}
int[] ress = new int[resSet.size()];
int index = 0;
//将结果几何转为数组
for (int i : resSet) {
ress[index++] = i;
}
return ress
}
标准做法:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<>();
Set<Integer> resSet = new HashSet<>();
//遍历数组1
for (int i : nums1) {
set1.add(i);
}
//遍历数组2的过程中判断哈希表中是否存在该元素
for (int i : nums2) {
if (set1.contains(i)) {
resSet.add(i);
}
}
int[] resArr = new int[resSet.size()];
int index = 0;
//将结果几何转为数组
for (int i : resSet) {
resArr[index++] = i;
}
return resArr;
}
}