Median of Two Sorted Arrays
2015-10-31 16:00
267 查看
题目要求是求出两个已排序的数组的中位数,如果两个数组的总的个数为偶数,则返回中间两个数字的平均数。
1. 极端情况,两个数字都为空,返回-1;
2. 根据两个数组的size()确定中位数的位置min_pos,声明两个数组对应的位置表示变量flag_a和flag_b;
3. 在第一个循环体中,从头开始在两个数组中选取数值较小的值,被选中的数组位置变量加1, 同时count++。result1与result2用来标示中位数结果的位置,如果中位数的位置在奇数位,则result1标示当前的中位数,若为偶数,这中位数是(result1+result2)/2。
4. 有一个数组已经遍历完毕后,第一个循环体退出,进入第二第三个循环体,把两个数组中剩余的部分继续处理;
5. 返回结果。
思路:
解题思路就是根据归并排序的思想,利用归并排序中合并两个已排序数组的方法。声明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; }
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例