1.思路:先將兩個陣列排好序,用兩個指標s1,s2分別同時遍歷兩個陣列,如果兩個指標指向的數相同,就一起後移並將結果存入list中。nums[s1]nums[s2],就s2後移。最後遍歷list,將結果集存放到陣列中。
時間複雜度:o(m log m+n log n)
空間複雜度:o(min(m,n))
class
solution
else
if(nums1[s1]
)else
}int
ans =
newint
[res.
size()
];for(
int i =
0;isize()
;i++
)return ans;
}}
2.看了官方題解,還可以用hash法
由於同乙個數字在兩個陣列中都可能出現多次,因此需要用雜湊表儲存每個數字出現的次數。對於乙個數字,其在交集**現的次數等於該數字在兩個陣列**現次數的最小值。
首先遍歷第乙個陣列,並在雜湊表中記錄第乙個陣列中的每個數字以及對應出現的次數,然後遍歷第二個陣列,對於第二個陣列中的每個數字,如果在雜湊表中存在這個數字,則將該數字新增到答案,並減少雜湊表中該數字出現的次數。
為了降低空間複雜度,首先遍歷較短的陣列並在雜湊表中記錄每個數字以及對應出現的次數,然後遍歷較長的陣列得到交集。
;//遍歷短的那個陣列,在map中記錄出現過的數字及其出現的次數
for(
int num:nums1)
else
}//遍歷長陣列,若長陣列中的數字在map中存在,加入結果集,key對應的次數也減少
for(
int num:nums2)
else}}
int[
] ans =
newint
[res.
size()
];for(
int i =
0;isize()
;i++
)return ans;
}}
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並把陣列當前元素放入答案陣...