leetcode每日一題

keven03發表於2020-11-06

4、尋找兩個正序陣列的中位數

題目:

給定兩個大小為 m 和 n 的正序(從小到大)陣列 nums1 和 nums2。請你找出並返回這兩個正序陣列的中位數。

進階:你能設計一個時間複雜度為 O(log (m+n)) 的演演算法解決此問題嗎?

 

示例 1:

輸入:nums1 = [1,3], nums2 = [2]
輸出:2.00000
解釋:合併陣列 = [1,2,3] ,中位數 2
示例 2:

輸入:nums1 = [1,2], nums2 = [3,4]
輸出:2.50000
解釋:合併陣列 = [1,2,3,4] ,中位數 (2 + 3) / 2 = 2.5
示例 3:

輸入:nums1 = [0,0], nums2 = [0,0]
輸出:0.00000
示例 4:

輸入:nums1 = [], nums2 = [1]
輸出:1.00000
示例 5:

輸入:nums1 = [2], nums2 = []
輸出:2.00000
 

題解:

merge演演算法,將兩個陣列合併成一個陣列,後輸出其中位數。

程式碼:




class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
   vector<int>num;
   vector<int>::iterator item_m,item_n;
   item_m=nums1.begin();
   item_n=nums2.begin();
   while(item_m!=nums1.end()&&item_n!=nums2.end()){
       if(*item_m<=*item_n){num.push_back(*item_m);item_m++;}
       else {num.push_back(*item_n);item_n++;}
   }
   while(item_m!=nums1.end()){num.push_back(*item_m);item_m++;}
   while(item_n!=nums2.end()){num.push_back(*item_n);item_n++;}
    int n=num.size();
    double result;
    result=(n%2==0?(float)(num[n/2-1]+num[n/2])/2:(num[n/2]));
    return result;
    }
};

 

相關文章