题目描述:
给定两个数组
nums1
和nums2
,返回 它们的交集
。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2]示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的提示:
1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
Java 代码及思路:
package com.java.leetcode.hash;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 给定两个数组 nums1 和 nums2 ,返回 它们的
* 交集
* 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
*
* 示例 1:
*
* 输入:nums1 = [1,2,2,1], nums2 = [2,2]
* 输出:[2]
* 示例 2:
*
* 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
* 输出:[9,4]
* 解释:[4,9] 也是可通过的给定两个数组 nums1 和 nums2 ,返回 它们的
* 交集
* 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
*
*
*
* 示例 1:
*
* 输入:nums1 = [1,2,2,1], nums2 = [2,2]
* 输出:[2]
* 示例 2:
*
* 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
* 输出:[9,4]
* 解释:[4,9] 也是可通过的
*/
public class intersection349 {
/**
* 思路一 数组一的数据存hashset里面,判断数组二中的元素是否存在数组一的hash set里面
* @param nums1
* @param nums2
* @return
*/
public int[] solution(int[] nums1, int[] nums2){
Set<Integer> set1=new HashSet<>();
Set<Integer> result=new HashSet<>();
//遍历数组一
for(int i=0;i<nums1.length;i++){
set1.add(nums1[i]);
}
// 遍历数组二
for (int i : nums2) {
if (set1.contains(i)) {
result.add(i);
}
}
return result.stream().mapToInt(x->x).toArray();
}
/**
* 思路2:hash 数组:
* 由于数组的值范围固定,数组长度范围固定
* 因此:
* hash 数组来说 index 为值 value >0 说明含有该元素
*
* @param nums1
* @param nums2
* @return
*/
public int[] solution2(int[] nums1, int[] nums2){
int[] hash1=new int[1001];
int [] hash2=new int[1001];
Set<Integer> result=new HashSet<>();
for(int num:nums1){
hash1[num]++;
}
for(int num2:nums2){
if(hash1[num2]>0){
result.add(num2);
}
}
return result.stream().mapToInt(x->x).toArray();
}
}