LeetCode 349- 兩個數組的交集--簡單

題目描述:

給定兩個數組,編寫一個函數來計算它們的交集。
 
示例 1:
 
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2]
示例 2:
 
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [9,4]
說明:
 
輸出結果中的每個元素一定是唯一的。
我們可以不考慮輸出結果的順序。
 
來源:力扣(LeetCode)
 

解題思路:

1、暴力破解-逐個迭代計算
 時間複雜度O(n*m)
 
2、使用哈希表
1)哈希表實現的集合Set結構,它不允許集合出現重複的值
2)比較兩個數組的大小,最小的數組逐個檢查是否在最大的數組裏,一個元素是否在另一個數組裏的時間爲O(1)
這得益於集合的使用
//Java
class Solution {
  public int[] set_intersection(HashSet<Integer> set1, HashSet<Integer> set2) 
{
    int [] output = new int[set1.size()];
    int idx = 0;
    for (Integer s : set1)//遍歷數據set1
      if (set2.contains(s)) output[idx++] = s;//檢查set2裏是否包含set1,若包含則添加到新的數組裏

    return Arrays.copyOf(output, idx);
  }

  public int[] intersection(int[] nums1, int[] nums2) 
  {
    HashSet<Integer> set1 = new HashSet<Integer>();//創建哈希表Set1
    for (Integer n : nums1) set1.add(n);
    HashSet<Integer> set2 = new HashSet<Integer>();//創建哈希表Set2
    for (Integer n : nums2) set2.add(n);
   //執行數據的交集操作
    if (set1.size() < set2.size()) return set_intersection(set1, set2);
    else return set_intersection(set2, set1);
  }
}

算法複雜度分析:

時間複雜度:O(n)

空間複雜度:O(n)

//python3
class Solution:
    def set_intersection(self, set1, set2):
        return [x for x in set1 if x in set2]
        
    def intersection(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """  
        set1 = set(nums1)#集合1
        set2 = set(nums2)#集合2
        
        if len(set1) < len(set2):
            return self.set_intersection(set1, set2)
        else:
            return self.set_intersection(set2, set1)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章