1. 程式人生 > >LeetCode(40) Median of Two Sorted Arrays (兩排序陣列中位數)

LeetCode(40) Median of Two Sorted Arrays (兩排序陣列中位數)

題目描述

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) { if (nums1.empty() && nums2.empty()) { return 0; } else if (!nums1.empty() && nums2.empty()) { int size = nums1.size(); if
(size % 2 == 0) return (nums1[size / 2] + nums1[size / 2 - 1]) / 2.0; else return nums1[size / 2]; } else if (nums1.empty() && !nums2.empty()) { int size = nums2.size(); if (size % 2 == 0) return
(nums2[size / 2] + nums2[size / 2 - 1]) / 2.0; else return nums2[size / 2]; } bool isEven = (nums1.size() + nums2.size()) % 2 == 0; int count = (nums1.size() + nums2.size()) / 2 + 1; vector<int> union_nums; vector<int>::iterator it1 = nums1.begin(); vector<int>::iterator it2 = nums2.begin(); vector<int>::iterator it1_end = nums1.end(); vector<int>::iterator it2_end = nums2.end(); for(size_t i = 0; i != count; ++i) { if(it1 != it1_end && it2 != it2_end) { if(*it1 < * it2) { union_nums.push_back(*it1); it1++; } else { union_nums.push_back(*it2); it2++; } } else if (it1 == it1_end) { union_nums.push_back(*it2); it2++; } else { union_nums.push_back(*it1); it1++; } } if(isEven) return (union_nums[count-1]+union_nums[count-2])/2.0; else return union_nums[count-1]; } };