LeetCode|350. 兩個數組的交集 II


題目描述

  • 等級: 簡單

給定兩個數組,編寫一個函數來計算它們的交集。算法

示例1:數組

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

示例2:app

輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [4,9]

說明:函數

輸出結果中每一個元素出現的次數,應與元素在兩個數組中出現的次數一致。 咱們能夠不考慮輸出結果的順序。優化

進階:3d

若是給定的數組已經排好序呢?你將如何優化你的算法? 若是 nums1 的大小比 nums2 小不少,哪一種方法更優? 若是 nums2 的元素存儲在磁盤上,磁盤內存是有限的,而且你不能一次加載全部的元素到內存中,你該怎麼辦?code

思路

對於hash數組的考察。blog

求兩個數組並集,而且每一個元素出現次數應與元素在兩個數組中出現的次數一致,因此想到用map存儲元素與其出現的次數。 對於示例1:內存

首先迭代num1,獲取map1:hash

元素 : 出現次數
 1       2
 2       2

再迭代num2,判斷map1中是否存在,出現次數大於0。若是肯定,則將此元素加入到結果res數組中,並將map1中相應的元素出現次數-1。

最終將結果返回,示例2以此類推。

答案

func intersect(nums1 []int, nums2 []int) []int {
    res := make([]int, 0)
	map1 := map[int]int{}
	for _, v := range nums1 {
		map1[v]  = 1
	}
	for _, v := range nums2 {
		if map1[v] > 0 {
			res = append(res, v)
			map1[v] -= 1
		}
	}
	return res
}

結果

350.png


tencent.jpg

相關文章
相關標籤/搜索