两个有序数组合并,并求中位数(复杂度为O(m+n))
2013-11-30 11:34
288 查看
先将两个有序数组合并成为一个有序数组,然后再求中位数。合并时,判断条件是i<m || j<n
特别注意,中位数用double,int数据进行计算时,要先转化为double(直接赋值即可),然后再计算
public double findMedianSortedArrays(int A[], int B[]) {
int l1 = A.length;
int l2 = B.length;
int [] C = new int[l1+l2];
int i =0,j =0,k=0;
while(i<l1 || j<l2){
if(i >= l1){
C[k] = B[j];
j++;
}else if(j >= l2){
C[k] = A[i];
i++;
}else{
if(A[i]<B[j]){
C[k] = A[i];
i++;
}else{
C[k] = B[j];
j++;
}
}
k++;
}
double median = 0,a=0,b=0;
k = l1+l2;
if(k%2 != 0){
median = C[(k-1)/2];
}else{
a = C[k/2];
b = C[k/2-1];
median = (a+b)/2;
}
return median;
}
特别注意,中位数用double,int数据进行计算时,要先转化为double(直接赋值即可),然后再计算
public double findMedianSortedArrays(int A[], int B[]) {
int l1 = A.length;
int l2 = B.length;
int [] C = new int[l1+l2];
int i =0,j =0,k=0;
while(i<l1 || j<l2){
if(i >= l1){
C[k] = B[j];
j++;
}else if(j >= l2){
C[k] = A[i];
i++;
}else{
if(A[i]<B[j]){
C[k] = A[i];
i++;
}else{
C[k] = B[j];
j++;
}
}
k++;
}
double median = 0,a=0,b=0;
k = l1+l2;
if(k%2 != 0){
median = C[(k-1)/2];
}else{
a = C[k/2];
b = C[k/2-1];
median = (a+b)/2;
}
return median;
}
相关文章推荐
- 寻找两个有序数组合并之后的中位数
- leetcode之数组类之数组的旋转与分治类-----OJ 189/33/81/153/154 数组旋转 旋转数组搜索 88 有序数组合并 4 两个有序数组寻找第K个元素/中位数 35 寻找插入位置
- 给定两个有序数组,找出合并之后的数组中位数
- 算法面试题——两个有序数组,将一个数组放入另一个空间很大的数组,要求合并之后依然有序,时间复杂度要求最小,不使用额外的数组。
- 两个有序数组求中位数log(m+n)复杂度
- 两个有序数组求中位数log(m+n)复杂度
- PHP 两个等长有序数组求合并后的中位数
- 字符串算法——两个有序数组的中位数
- 两个有序数组的中位数
- 两个有序数组的合并算法
- 两个有序数组合并为一个有序数组
- 2012百度实习生笔试之合并两个有序数组
- 两个有序的数组,合并成一个有序的数组
- Median of Two Sorted Arrays 两个有序数组的中位数@LeetCode
- 2个有序数组,寻找他们合并之后的中位数
- 合并两个有序数组
- 两个有序数组合并为一个有序数组
- 求两个有序数组的中位数(4. Median of Two Sorted Arrays)
- 如何合并两个有序数组
- 两个等长有序数组求中位数