Open youngyangyang04 opened 6 months ago
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set = new HashSet<>();
Set<Integer> resSet = new HashSet<>();
for (int num : nums1) {
set.add(num);
}
for (int num : nums2) {
if (set.contains(num)) {
resSet.add(num);
}
}
int[] res = new int[resSet.size()];
int index = 0;
for (int num : resSet) {
res[index++] = num;
}
return res;
}
}
打卡
打卡
package HashTable.LeetCode349;
import java.util.HashSet;
/**
* 给定两个数组 nums1 和 nums2 ,返回 它们的交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
* <p>
* 思路:交集就集合嘛,HashSet
*
* @author Ding Jiaxiong
*/
public class Main {
public static int[] intersection(int[] nums1, int[] nums2) {
HashSet<Integer> set = new HashSet<>();
HashSet<Integer> resset = new HashSet<>();
for (int i : nums1) { // nums1 元素全部压入
set.add(i);
}
for (int i : nums2) { // 判断 nums2 元素
if (set.contains(i)) {
resset.add(i);
}
}
return resset.stream().mapToInt(x -> x).toArray(); // 集合转数组,流操作
}
public static void main(String[] args) {
int[] nums1 = {1, 2, 2, 1};
int[] nums2 = {2, 2};
for (int i : intersection(nums1, nums2)) {
System.out.print(i + " ");
}
}
}
上一道题用了HashMap发现要用数组,这题改用数组结果发现要用哈希的来我这里集合。。。
打卡:遇到判断一个元素是否出现过的场景应该第一时间想到哈希法
这里set用list应该也是可以的,只是判断是否出现过。不过这个终止条件还是想不出来,比较烧脑。
打卡
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] hash1 = new int[1001];
int[] hash2 = new int[1001];
List<Integer> resList = new ArrayList<>();
for (int num : nums1) {
hash1[num] = 1;
}
for (int num : nums2) {
hash2[num] = 1;
}
for (int k = 0; k < 1001; k++) {
if (hash1[k] + hash2[k] == 2) {
resList.add(k);
}
}
int[] res = new int[resList.size()];
int index = 0;
for (int num : resList) {
res[index++] = num;
}
return res;
}
}
https://programmercarl.com/0349.%E4%B8%A4%E4%B8%AA%E6%95%B0%E7%BB%84%E7%9A%84%E4%BA%A4%E9%9B%86.html