給定兩個陣列,編寫乙個函式來計算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2,2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [4,9]
方法一:雜湊表
由於同乙個數字在兩個陣列中都可能出現多次,因此需要用雜湊表儲存每個數字出現的次數。對於乙個數字,其在交集**現的次數等於該數字在兩個陣列**現次數的最小值。
首先遍歷第乙個陣列,並在雜湊表中記錄第乙個陣列中的每個數字以及對應出現的次數,然後遍歷第二個陣列,對於第二個陣列中的每個數字,如果在雜湊表中存在這個數字,則將該數字新增到答案,並減少雜湊表中該數字出現的次數。
為了降低空間複雜度,首先遍歷較短的陣列並在雜湊表中記錄每個數字以及對應出現的次數,然後遍歷較長的陣列得到交集。
class
solution
else
}for
(int i=
0;i) map.
put(nums2[i]
,map.
get(nums2[i])-
1);}
}int
res =
newint
[list.
size()
];for(
int i=
0;isize()
;i++
)return res;
}}
方式二:
如果兩個陣列是有序的,則可以便捷地計算兩個陣列的交集。
首先對兩個陣列進行排序,然後使用兩個指標遍歷兩個陣列。
初始時,兩個指標分別指向兩個陣列的頭部。每次比較兩個指標指向的兩個陣列中的數字,如果兩個數字不相等,則將指向較小數字的指標右移一位,如果兩個數字相等,將該數字新增到答案,並將兩個指標都右移一位。當至少有乙個指標超出陣列範圍時,遍歷結束。
class
solution
else
if(nums1[index1]
> nums2[index2]
)else
}return arrays.
copyofrange
(intersection,
0, index);}
}
leetcode 350兩個陣列的交集
1.題目描述 給定兩個陣列,編寫乙個函式來計算它們的交集。示例 1 輸入 nums1 1,2,2,1 nums2 2,2 輸出 2,2 示例 2 輸入 nums1 4,9,5 nums2 9,4,9,8,4 輸出 4,9 說明 輸出結果中每個元素出現的次數,應與元素在兩個陣列 現的次數一致。我們可以...
leetcode350 兩個陣列的交集
還是用了暴力演算法,因為別的寫不出來,效率極低,nnd,貼 class solution for int k 0 k n k return nice 之後是雜湊表的做法,首先找到乙個長度較小的陣列,進行遍歷,並將其中的元素放入雜湊表,並記錄個數。之後就遍歷第二個陣列,每遇到乙個雜湊表中存在的數,就將...
leetcode 350 兩個陣列的交集
這題是 兩個陣列的交集 問題的第二版,多了乙個 輸出結果中每個元素出現的次數,應與元素在兩個陣列 現次數的最小值一致。這個要求。但仍舊可以用雜湊法來做。對其中陣列建立雜湊表,其中鍵為元素值,值為元素頻率。遍歷另乙個陣列的元素,每在雜湊表中找到相同元素,那麼就把其對應頻率減1並把陣列當前元素放入答案陣...