兩個(gè)數(shù)組的交集
題目
給定兩個(gè)數(shù)組袜爪,編寫一個(gè)函數(shù)來計(jì)算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [9,4]
說明:
輸出結(jié)果中的每個(gè)元素一定是唯一的薛闪。
我們可以不考慮輸出結(jié)果的順序辛馆。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/intersection-of-two-arrays
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)豁延,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處昙篙。
思路
- 暴力遍歷,可以將兩個(gè)數(shù)組嵌套遍歷,將重復(fù)數(shù)字存入set集合.最后轉(zhuǎn)為int[]數(shù)組返回.但是這樣時(shí)間復(fù)雜度會(huì)很高
- 將其中一個(gè)數(shù)組存入set集合,然后依次按另一個(gè)數(shù)組get,get到的放入結(jié)果set中.此處使用stream的和使用遍歷差距很大.
代碼
- 使用流式處理,耗時(shí)78ms
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if(nums1.length == 0 || nums2.length == 0){
return new int[]{};
}
HashSet<Integer> set = new HashSet<>();
for(int i = 0;i < nums1.length;i++){
set.add(nums1[i]);
}
HashSet<Integer> resultSet = new HashSet<>();
for(int i = 0;i < nums2.length;i++){
if(set.contains(nums2[i])){
resultSet.add(nums2[i]);
}
}
return resultSet.stream().mapToInt(Number::intValue).toArray();
}
}
- 使用遍歷處理.耗時(shí)7ms
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
//
if(nums1.length == 0 || nums2.length == 0){
return new int[]{};
}
HashSet<Integer> set = new HashSet<>();
for(int i = 0;i < nums1.length;i++){
set.add(nums1[i]);
}
HashSet<Integer> resultSet = new HashSet<>();
for(int i = 0;i < nums2.length;i++){
if(set.contains(nums2[i])){
resultSet.add(nums2[i]);
}
}
int[] result = new int[resultSet.size()];
int i = 0;
for (Integer integer : resultSet) {
result[i++] = integer;
}
return result;
}
}