Median of Two Sorted Arrays

来源:互联网 发布:gitlab ci java 编辑:程序博客网 时间:2024/06/02 04:37

题目要求是求出两个已排序的数组的中位数,如果两个数组的总的个数为偶数,则返回中间两个数字的平均数。

思路:

解题思路就是根据归并排序的思想,利用归并排序中合并两个已排序数组的方法。声明count变量,在两个数组中没选出一个数的时候,count++,直到count等于中位数所在的位置即可。以下是代码过程:
1. 极端情况,两个数字都为空,返回-1;
2. 根据两个数组的size()确定中位数的位置min_pos,声明两个数组对应的位置表示变量flag_a和flag_b;
3. 在第一个循环体中,从头开始在两个数组中选取数值较小的值,被选中的数组位置变量加1, 同时count++。result1与result2用来标示中位数结果的位置,如果中位数的位置在奇数位,则result1标示当前的中位数,若为偶数,这中位数是(result1+result2)/2。
4. 有一个数组已经遍历完毕后,第一个循环体退出,进入第二第三个循环体,把两个数组中剩余的部分继续处理;
5. 返回结果。



double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {if (nums1.size()==0 && nums2.size()==0)return -1;int a_size = nums1.size();int b_size = nums2.size();int min_pos = (a_size+b_size)%2 ? (a_size+b_size+1)/2 : 1+(a_size+b_size)/2;int result1, result2;result1 = result2 = 0;int flag_a, flag_b;flag_a = flag_b = 0;int count = 0;for (int i=0; i<a_size+b_size && flag_a<a_size && flag_b<b_size; i++){if (count == min_pos)break;if (nums1[flag_a] <= nums2[flag_b]){result2 = result1;result1 = nums1[flag_a];count++;flag_a++;} else {result2 = result1;result1 = nums2[flag_b];count++;flag_b++;}}while (flag_a < a_size){if (count == min_pos)break;result2 = result1;result1 = nums1[flag_a];count++;flag_a++;}while (flag_b < b_size){if (count == min_pos)break;result2 = result1;result1 = nums2[flag_b];count++;flag_b++;}return (a_size+b_size)%2 ? result1*1.0 : (result1+result2)/2.0;}





0 0
原创粉丝点击