交差点Leetcode349。2つのアレイ

タイトル説明

与えられた2つの配列が、その交点を計算する関数を記述します。

例1:

入力:nums1 = [1,2,2,1]、nums2 = [2,2]
出力:[2]

例2:

入力:nums1 = [4,9,5]、nums2 = [9,4,9,8,4]
出力:[9,4]

説明:

各要素の出力は一意でなければなりません。私たちは、出力の順序を考慮することはできません。

問題の解決策

重量法に設定します(javaの)

思考:それぞれ、それによってデエンファシスの作業を完了し、アレイに設定され、その後、組み込み関数を使用する2つの配列がset.retainAll()除去され、重複する部分の入力セットに設定されてもよいです。

retainAll機能ポータル

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        for (int num1 : nums1) set1.add(num1);
        for (int num2 : nums2) set2.add(num2);
        set1.retainAll(set2);
        int[] ans = new int[set1.size()];
        int index = 0;
        
        for(int num : set1) ans[index++] = num;
        return ans;
    }
}

複雑性分析

  • 時間計算: ザ・ N + M O(N + M)
  • 宇宙の複雑さ: ザ・ N + M O(N + M)

重みセット2(ジャワ)の方法

思考:上記と同様にも思考と、言葉遣いを:サブセット内の親要素のセットがある場合、直接サブセットの最終的な出力値は加算されません。より速く上記の文言少しより。

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }
        Set<Integer> parentSet = new HashSet<>();
        Set<Integer> childSet = new HashSet<>();
        for (int num : nums1) {
            parentSet.add(num);
        }
        for (int num : nums2) {
            if (parentSet.contains(num)) {
                childSet.add(num);
            }
        }
        int[] resArr = new int[childSet.size()];
        int index = 0;
        for (int value : childSet) {
            resArr[index++] = value;
        }
        return resArr;
    }
}

複雑性分析

  • 時間計算: ザ・ N + M O(N + M)
  • 宇宙の複雑さ: ザ・ N + M O(N + M)
公開された43元の記事 ウォン称賛20 ビュー1446

おすすめ

転載: blog.csdn.net/Chen_2018k/article/details/104912132