您的位置:首页 > Web前端 > Node.js

【LeetNode2-1-5】Median of two sorted arrays--C++源代码(VS2015)

2017-10-05 16:31 471 查看
#include <iostream>

#include <vector>

using namespace std;

/*
Median of two sorted arrays

*/

int min(int Num_A, int Num_B)

{
return Num_A > Num_B ? Num_B : Num_A;

}

double Find_Median(vector<int>::const_iterator iter_A, int Size_A, vector<int>::const_iterator iter_B, int Size_B, int median)

{
if (Size_A > Size_B)
return Find_Median(iter_B, Size_B, iter_A, Size_A, median);
if (0 == Size_A)
return *(iter_B + median - 1);
if (1 == median)
return min(*iter_A, *iter_B);
int Num_A = min(Size_A, median / 2);
int Num_B = median - Num_A;
if (*(iter_A + Num_A - 1) < *(iter_B + Num_B - 1))
return Find_Median(iter_A + Num_A, Size_A - Num_A, iter_B, Size_B, median - Num_A);
else if (*(iter_A + Num_A - 1) > *(iter_B + Num_B - 1))
return Find_Median(iter_A, Size_A, iter_B + Num_B, Size_B - Num_B, median - Num_B);

}

double Solution(const vector<int> &Vec_A, const vector<int> &Vec_B)

{
int Size_A = Vec_A.size();
int Size_B = Vec_B.size();
int Total = Size_A + Size_B;
if (0x1 & Total)
return Find_Median(Vec_A.begin(), Size_A, Vec_B.begin(), Size_B, (Total + 1) / 2);
else
return (Find_Median(Vec_A.begin(), Size_A, Vec_B.begin(), Size_B, Total / 2) + Find_Median(Vec_A.begin(), Size_A, Vec_B.begin(), Size_B, Total / 2 + 1)) / 2.0;

}

int main()

{
int arr_1[] = { 1,3,5,7,9 };
int arr_2[] = { 2,4,6,8,10 };
vector<int> vec_1(&arr_1[0], &arr_1[5]);
vector<int> vec_2(&arr_2[0], &arr_2[5]);

double median = Solution(vec_1,vec_2);
cout << "median of the two sorted arrays is " << median << endl;
system("pause");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: