2023年12月2日 星期六

[2215] Find the Difference of Two Arrays

竟然一次過了!!!我的眼淚都要流下來了  T——————T
(扣掉之前先把malloc 的部分寫好了的話 XD)

用兩個hash array記錄每個數字出現了幾次,有點count sort 的概念?!
之後就把兩組hash 從index 0跑掉index 2001 ,index 減掉 一千就是實際它的數字,
如果數字X 只在 hash1 出現而hash2 的出現次數是 0,那就把這個number 放進ret 1 裡,
反之則是放在2 。如果兩個都是出現 零次,或是都有出現,那就不用寫進 ret1 or ret2 裡。

寫完之後發現其實不用sort !!! 就降QQ

int** findDifference(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize, int** returnColumnSizes){
int **ret = calloc (2,sizeof (int*));
*returnSize =2;
ret[0]=malloc (sizeof(int)*1001);
ret[1]=malloc (sizeof(int)*1001);
*returnColumnSizes= malloc (sizeof(int)*2);

int idx1=0, idx2=0;

int *hash1= calloc(2001, sizeof(int));
int *hash2= calloc(2001, sizeof(int));
for (int i=0;i < nums1Size;i++)
hash1[nums1[i]+1000]++;

for (int i=0;i < nums2Size;i++)
hash2[nums2[i]+1000]++;

for (int i=0; i< 2001;i++)
{
if (hash1[i]> 0 && hash2[i]==0)
ret[0][idx1++]= i-1000;
else if (hash2[i]> 0 && hash1[i]==0)
ret[1][idx2++]= i-1000;
}

(*returnColumnSizes)[0]=idx1;
(*returnColumnSizes)[1]=idx2;
return ret;

}

沒有留言:

張貼留言