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 }