題目:
There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
代碼:
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
vector<int>::iterator iter1, iter2;
vector<int> num; //儲存nums1和nums2中共m+n個資料
int m, n;
m = nums1.size();
n = nums2.size();
iter1 = nums1.begin();
iter2 = nums2.begin();
if (m == ){
num = nums2;
}else if (n == )
{
num = nums1;
}
else{
for (vector<int>::size_type i = ; i < (m + n); i++)
{
if (iter1 != nums1.end() && iter2 != nums2.end()) //nums1, nums2未周遊完
{
if (*iter1 <= *iter2)
{
num.push_back(*iter1);
iter1++;
}
else{
num.push_back(*iter2);
iter2++;
}
}
else if (iter1 == nums1.end()) //nums1周遊完,nums2未周遊完
{
num.insert(num.end(), iter2, nums2.end());
break;
}
else{ //nums1未周遊完,nums2周遊完
num.insert(num.end(), iter1, nums1.end());
break;
}
}
}
if ((m + n) % == ) //偶數個數
{
return (num[(m + n) / - ] + num[(m + n ) / ] + ) / ;
}
else{
return (num[(m + n + ) / -] + );
}
}
};
結果:
思考:
- 題意是要找出nums1和nums2中共m+n個數的中位數,那麼我最先想到的是要将兩個數組按順序組合成一個新的數組,取新數組的中位數即可
- 按照上述思想,則代碼便能很好了解了。