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 }