leetcodeブラシ問題--基礎配列--2つの配列の交差(C)
1169 ワード
思想:(1)2つの配列を並べ替えO(nlgn)し,順次O(n)比較転送する.時間的複雑度はO(nlgn),空間的複雑度はO(1)であったが,元の配列を破壊した.ソート関数は一般的に各言語が持つ関数を使用する効率が高いので、ここではデフォルトで2つの配列がソートされています.
int intersect(int* nums1, int nums1Size, int* nums2, int nums2Size){
int i=0, j=0;
int count=0;
if(nums1Size nums2[j])
j++;
else
i++;
}
return count;
}
(2)暴力解法.短い配列を基準として、その中の要素を一つ一つ取り出して長い配列の中の要素と比較し、同じであれば格納し、その要素がある長い配列の位置をマークして重複を避ける.時間複雑度O(n^2)、空間複雑度O(n)は、元の長い配列で空間を使用したくない場合は修正し、比較できない値に変更することができる.これで元の配列が破壊されます.
tersect(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int count = 0;
if(nums1Size
(3)ハッシュ表.2つの配列AとBを新しい配列に遍歴し、統計的に繰り返される数字でよい.この時間複雑度はO(n)、空間複雑度O(m)である.この要求配列内の数字の範囲は既知で大きくない.同じくJAVAの中にHashMapがあります.