这道题我写的很烂。。应该是最笨的方法吧
主要思想就是用指针按大小走 因为两个vector对象都是排好序的嘛 要是两个又扔一起重新排序就很蠢了,然后就是如果一个走到头了,就把它取最大的数 保证他取不到就行了
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int m = nums1.size(), n = nums2.size();
int temp = m + n;
bool flag = false;
if (temp % 2 == 1)flag = true;
temp /= 2;
double focus = 0;
/*if (nums1.empty()) {
if (flag)return (double)nums2[temp];
else return ((double)nums2[temp - 1] + (double)nums2[temp]) / 2;
}
if (nums2.empty()) {
if (flag)return (double)nums1[temp];
else return ((double)nums1[temp - 1] + (double)nums1[temp]) / 2;
}*/
vector<int>::iterator it1 = nums1.begin();
vector<int>::iterator it2 = nums2.begin();
for (int i = 1; i <= temp; ++i) {//count
//cout << "focus ->" << focus << endl;
double k1 = it1 - nums1.begin() == nums1.size() ? (double)2147483647 : (double)*it1;
double k2 = it2 - nums2.begin() == nums2.size() ? (double)2147483647 : (double)*it2;
if (k1 > k2) {
focus = k2;
++it2;
}
else {
focus = k1;
++it1;
}
}
//cout << "focus ->" << focus << endl;
double k1 = it1 - nums1.begin() == nums1.size() ?(double)2147483647 :(double) *it1;
double k2 = it2 - nums2.begin() == nums2.size() ? (double)2147483647 : (double)*it2;
if (flag) {//odd number
focus = k1 > k2 ? k2 : k1;
//cout << "focus ->" << focus << endl;
}
else {//even
focus += k1 > k2 ? k2 : k1;
focus /= 2;
}
return (double)focus;
}