記事のディレクトリ
タイトル説明
与えられた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()
除去され、重複する部分の入力セットに設定されてもよいです。
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;
}
}
複雑性分析
- 時間計算:
- 宇宙の複雑さ:
重みセット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;
}
}
複雑性分析
- 時間計算:
- 宇宙の複雑さ: