与えられた2つの配列が、その交点を計算する関数を記述します。
例1:
入力: nums1 = [1,2,2,1]、nums2 = [2,2] 出力:[2,2]
例2:
入力: nums1 = [4,9,5]、nums2 = [9,4,9,8,4] 出力:[4,9]
説明:
- 各要素が現れるの出力周波数は、両方の配列に現れる要素の数と一致しなければなりません。
- 私たちは、出力の順序を考慮することはできません。
高度:
- 指定された配列は、すでにそれをソートされた場合は?どのようにあなたのアルゴリズムを最適化するのだろうか?
- もし nums1の よりサイズ nums2 はるかに小さいが、どの方法が良いですか?
- 場合 nums2の 要素は、ディスク上に格納され、ディスクメモリが制限されており、あなたがメモリにすべての要素一度ロードすることはできません、あなたはどのように行うことができますか?
class Solution {
public:
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
int p=0;
int q=0;
vector<int> t;
for(;p<nums1.size()&&q<nums2.size();){
if(nums1[p]==nums2[q]){
t.push_back(nums1[p]);
p++;
q++;
}else if(nums1[p]>nums2[q]){
q++;
}else if(nums1[p]<nums2[q]){
p++;
}
}return t;
}
};