LeetCode Intersection of Two Arrays

Posted Dylan_Java_NYC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Intersection of Two Arrays相关的知识,希望对你有一定的参考价值。

原题链接在这里:https://leetcode.com/problems/intersection-of-two-arrays/

题目:

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1]nums2 = [2, 2], return [2].

Note:

    • Each element in the result must be unique.
    • The result can be in any order.

题解:

用一个HashSet 来保存nums1的每个element.

再iterate nums2, 若HashSet contains nums2[i], 把nums2[i]加到res中,并把nums[i]从HashSet中remove掉.

Time Complexity: O(nums1.length + nums2.length). Space: O(nums1.length).

AC Java:

 1 public class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         HashSet<Integer> nums1Hs = new HashSet<Integer>();
 4         for(int num : nums1){
 5             nums1Hs.add(num);
 6         }
 7         
 8         List<Integer> res = new ArrayList<Integer>();
 9         for(int num : nums2){
10             if(nums1Hs.contains(num)){
11                 res.add(num);
12                 nums1Hs.remove(num);
13             }
14         }
15         int [] resArr = new int[res.size()];
16         int i = 0;
17         for(int num : res){
18             resArr[i++] = num;
19         }
20         return resArr;
21     }
22 }

也可以使用两个HashSet.

Time Complexity: O(nums1.length + nums2.length). Space: O(nums1.length).

AC Java:

 1 public class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         HashSet<Integer> nums1Hs = new HashSet<Integer>();
 4         HashSet<Integer> intersectHs = new HashSet<Integer>();
 5         for(int num : nums1){
 6             nums1Hs.add(num);
 7         }
 8         for(int num : nums2){
 9             if(nums1Hs.contains(num)){
10                 intersectHs.add(num);
11             }
12         }
13         
14         int [] res = new int[intersectHs.size()];
15         int i = 0;
16         for(int num : intersectHs){
17             res[i++] = num;
18         }
19         return res;
20     }
21 }

Sort nums1 and nums2, 再用双指针 从头iterate两个sorted array.

Time Complexity: O(nlogn). Space: O(1).

AC Java:

 1 public class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         Arrays.sort(nums1);
 4         Arrays.sort(nums2);
 5         HashSet<Integer> hs = new HashSet<Integer>();
 6         int i = 0;
 7         int j = 0;
 8         while(i<nums1.length && j<nums2.length){
 9             if(nums1[i] < nums2[j]){
10                 i++;
11             }else if(nums1[i] > nums2[j]){
12                 j++;
13             }else{
14                 hs.add(nums1[i]);
15                 i++;
16                 j++;
17             }
18         }
19         
20         int [] resArr = new int[hs.size()];
21         int k = 0;
22         for(int num : hs){
23             resArr[k++] = num; 
24         }
25         return resArr;
26     }
27 }

 


以上是关于LeetCode Intersection of Two Arrays的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode:Intersection of Two Arrays

LeetCode:Intersection of Two Linked Lists

[LeetCode] Intersection of Two Arrays II

[leetcode]349.Intersection of Two Arrays

LeetCode:Intersection of Two Arrays II

Leetcode 350. Intersection of Two Arrays II