两个数组的交集
力扣题号349
题目描述:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | 给定两个数组 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] 也是可通过的
 
 | 
看到这种比较的基本上都可以用暴力循环来解,但是我们最求的是在自己的能力范围内给最优解
 set解法 
              
              | 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | class Solution {public int[] intersection(int[] nums1, int[] nums2) {
 Set<Integer> num = new HashSet<>();
 Set<Integer> result = new HashSet<>();
 for (int i : nums1) {
 num.add(i);
 }
 for (int i : nums2) {
 if (num.contains(i)){
 result.add(i);
 }
 }
 return result.stream().mapToInt(i->i).toArray();
 }
 }
 
 | 
 
            但是执行效率一言难尽,不知道还有更好的解法吗,难道stream影响效率了?

舍弃stream
 效率改进 
              
              | 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 
 | class Solution {public int[] intersection(int[] nums1, int[] nums2) {
 Set<Integer> num = new HashSet<>();
 Set<Integer> result = new HashSet<>();
 for (int i : nums1) {
 num.add(i);
 }
 for (int i : nums2) {
 if (num.contains(i)){
 result.add(i);
 }
 }
 int[] re = new int[result.size()];
 int index = 0;
 for (Integer integer : result) {
 re[index++] = integer;
 }
 return re;
 }
 }
 
 | 
 
            