免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
日々のプログラミングの問題
タイトル説明
二つの配列を考えると、して機能を記述し 、その交点を計算する。
タイトル効果:指定されたセットの2の交点を
サンプル
例1:
入力:nums1 = [1,2,2,1]、nums2 = [2,2]
出力:[2]
例2:
入力:nums1 = [4,9,5]、nums2 = [9,4,9,8,4]
出力:[9,4]
Pythonのソリューション
class Solution:
def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
set1 = set(nums1)
set2 = set(nums2)
s = set1.intersection(set2)
return list(s)
ランタイム:52ミリ秒、2つの配列の交差点のためのpython3オンライン提出の84.32パーセントよりも速いです。
メモリ使用率:14メガバイト、2つの配列の交差点のためのpython3オンライン提出未満の5.88パーセント。
题后反思:无
C言語ソリューション
struct linklist{
int val;
struct linklist *next;
};
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int location(int *num, int len, int com)
{
for (int i=0;i<len;i++)
{
if (num[i] == com)
return i;
}
return -1;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
if (!nums1Size || !nums2Size)
{
*returnSize=0;
return NULL;
}
struct linklist *num[nums2Size];
for(int i=0;i<nums2Size;i++)
num[i] = NULL;
int remain = 0;
struct linklist *link = NULL;
for(int i=0;i<nums2Size;i++)
{
remain = nums2[i]%nums2Size;
link = (struct linklist *)malloc(sizeof(struct linklist));
link -> val = nums2[i];
link -> next = num[remain];
num[remain] = link;
}
int *returnValue = NULL;
*returnSize = 0;
for (int i=0;i<nums1Size;i++)
{
remain = nums1[i]%nums2Size;
link = num[remain];
while(link)
{
if(link -> val == nums1[i])
{
if (location(returnValue, *returnSize, nums1[i]) == -1)
{
returnValue = (struct linklist*)realloc(returnValue, sizeof(int)*(*returnSize + 1));
returnValue[*returnSize] = nums1[i];
(*returnSize) ++;
break;
}
}
link = link->next;
}
}
return returnValue;
}
ランタイム:4ミリ秒、2つの配列の交差点のためのCオンライン提出の高速化よりも94.02パーセント。
メモリ使用量:8.8メガバイト、2つの配列の交差点のためのCオンライン提出未満の100.00パーセント。
题后反思:
- 遅い配列検索の問題を解決するために、ハッシュテーブルを使用します。
- 対応するC言語のデータ構造ない、より明確に多くのことを達成するために、独自のコードありません。
本論文では、私の個人的理解、間違った場所に歓迎のコメントは以下を教えている場合、私は速やかに修正し、一般的な進歩であります