【LeetCode] 349。2つの配列の交点★

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/xingyu97/article/details/100511732

タイトル説明

二つの配列を考えると、して機能を記述し 、その交点を計算する。
タイトル効果:指定されたセットの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パーセント。
题后反思:

  1. 遅い配列検索の問題を解決するために、ハッシュテーブルを使用します。
  2. 対応するC言語のデータ構造ない、より明確に多くのことを達成するために、独自のコードありません。

本論文では、私の個人的理解、間違った場所に歓迎のコメントは以下を教えている場合、私は速やかに修正し、一般的な進歩であります

おすすめ

転載: blog.csdn.net/xingyu97/article/details/100511732