題目
給定兩個數組,編寫一個函數來計算它們的交集。
示例 1:
輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2]
示例 2:
輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [9,4]
函數原型
C
的函數原型:
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){}
邊界判斷
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
}
算法設計:查找表
思路:先建立一個集合set,而後查找某個元素是否在 set 中。
- 建立 :遍歷 將值映射到 數組中,標記爲存在
- 查找有無:再遍歷 的值,查詢 中是否存在
- 若存在就是交集元素,並將 值標記爲不存在(去重處理)
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
int len = 1<<10;
int *set = calloc(len, sizeof(int));
int *res = calloc(len, sizeof(int));
for(int i=0; i<nums1Size; i++)
set[ nums1[i] ] = 1;
int cnt = 0;
for(int i=0; i<nums2Size; i++)
if( set[ nums2[i] ] != 0 ){
res[cnt++] = nums2[i];
set[ nums2[i] ] = 0; // 去重,重複賦值爲 0
}
*returnSize = cnt;
free(set), set = NULL;
return res;
}
查找表複雜度:
- 時間複雜度:
- 空間複雜度: