力扣LeetCode,两个数组的交集

1、给定两个数组,编写一个函数来计算它们的交集。

示例 1:

1 输入: nums1 = [1,2,2,1], nums2 = [2,2]
2 输出: [2]

示例 2:

1 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
2 输出: [9,4]

说明:

  • 输出结果中的每个元素一定是唯一的。
  • 我们可以不考虑输出结果的顺序。

2、解题思路和代码如下所示:

  1 package com.leetcode;
  2 
  3 
  4 import java.util.*;
  5 
  6 /**
  7  * @ProjectName: dataConstruct
  8  * @Package: com.leetcode
  9  * @ClassName: ArrayIntersection
 10  * @Author: biehl
 11  * @Description: ${description}
 12  * @Date: 2020/3/15 10:55
 13  * @Version: 1.0
 14  */
 15 public class ArrayIntersection {
 16 
 17     /**
 18      * 给定两个数组,编写一个函数来计算它们的交集。
 19      *
 20      * @param nums1
 21      * @param nums2
 22      * @return
 23      */
 24     public int[] intersection(int[] nums1, int[] nums2) {
 25         // 将数组nums1的元素数据放入到集合Set中
 26         Set<Integer> setNums1 = new TreeSet<Integer>();
 27 //        for (int i = 0; i < nums1.length; i++) {
 28 //            setNums1.add(nums1[i]);
 29 //        }
 30         for (int num : nums1) {
 31             setNums1.add(num);
 32         }
 33 
 34 
 35         // 将数组nums2的元素数据放入到集合Set中
 36         Set<Integer> setNums2 = new TreeSet<Integer>();
 37 //        for (int i = 0; i < nums2.length; i++) {
 38 //            setNums2.add(nums2[i]);
 39 //        }
 40         for (int num : nums2) {
 41             setNums2.add(num);
 42         }
 43 
 44         List<Integer> result = new ArrayList<Integer>();
 45         // 开始遍历,查看第一个集合中的元素在第二个集合中有多少个
 46         Iterator<Integer> iterator = setNums1.iterator();
 47         while (iterator.hasNext()) {
 48             Integer next = iterator.next();
 49             // 如果第一个集合中的元素在第二个集合中,就进行保存操作
 50             if (setNums2.contains(next)) {
 51                 result.add(next);
 52             }
 53         }
 54 
 55         int[] res = new int[result.size()];
 56         for (int i = 0; i < result.size(); i++) {
 57             res[i] = result.get(i);
 58         }
 59         return res;
 60     }
 61 
 62 
 63     /**
 64      * 给定两个数组,编写一个函数来计算它们的交集。
 65      *
 66      * @param nums1
 67      * @param nums2
 68      * @return
 69      */
 70     public int[] intersection2(int[] nums1, int[] nums2) {
 71         // 将数组nums1的元素数据放入到集合Set中
 72         Set<Integer> setNums1 = new TreeSet<Integer>();
 73         for (int num : nums1) {
 74             setNums1.add(num);
 75         }
 76 
 77         // 声明一个动态数组,存放将要返回的数据
 78         List<Integer> result = new ArrayList<Integer>();
 79         for (int num : nums2) {
 80             // 如果包含了这个元素
 81             if (setNums1.contains(num)) {
 82                 // 将这个交集元素存储到动态数组中
 83                 result.add(num);
 84                 // 为了避免出现重复数据,可以将setNums1集合中重复的数据删除掉。下次就不会出现重复的数据了。
 85                 setNums1.remove(num);
 86             }
 87         }
 88 
 89         // 将动态数据中的数据,封装返回即可
 90         int[] res = new int[result.size()];
 91         for (int i = 0; i < result.size(); i++) {
 92             res[i] = result.get(i);
 93         }
 94         return res;
 95     }
 96 
 97     public static void main(String[] args) {
 98 //        int[] nums1 = new int[]{1, 2, 2, 1};
 99 //        int[] nums2 = {2, 2};
100         int[] nums1 = new int[]{4, 9, 5};
101         int[] nums2 = {9, 4, 9, 8, 4};
102         ArrayIntersection arrayIntersection = new ArrayIntersection();
103         int[] intersection = arrayIntersection.intersection2(nums1, nums2);
104         for (int i = 0; i < intersection.length; i++) {
105             System.out.println(intersection[i]);
106         }
107     }
108 
109 }
原文地址:https://www.cnblogs.com/biehongli/p/12496640.html