有个同学阿里面试被问到“给出两个长度为N的有序数组A和B 给出求中位数的算法” 怎么办??很熟悉是吧 但是就是想不起来。。
题目是《算法导论》上的一道习题,不过已多次出现在面试题当中。注意,此题中两个数组的长度是相等的。当然,长度不等的话也可以做,只是要多些判断条件。参考leetcode题目 Median of Two Sorted Arrays
方法1 直接遍历
直接的解法是遍历两个数组并计数,类似归并排序里面的有序数组的合并,复杂度为O(n)。代码如下:
#include <iostream>
#include <stdio.h>
using namespace std;
double getMedian(int arr1[],int arr2[], int n){
int i=0,j=0; //分别是 arr1, arr2的当前下标
int m1=-1,m2=-1; //保存两个中位数. 由于是2n个,肯定有两个中位数
for(int cnt=0; cnt<=n; cnt&