• 有序数组的中位数


    1. 如果两个数组是等长的,可以用如下的策略:

    // 好像有点问题
    // 寻找两个升序数组的中位数
    int m_search(int A[], int B[], int n) // n 代表长度
    {
        int i1=0, j1=n-1, m1;
        int i2=0, j2=n-1, m2;
        // 分别代表两个数组的左右下标, 以及中位数m下标
    
        while(i1!=j1 || i2!=j2) {
            m1 = (i1+j1)/2;
            m2 = (i2+j2)/2;
            if(A[m1] == B[m2]) {
                return A[m1];
            }
            if(A[m1] < B[m2]) {
                if((i1+j1)%2==0) { //元素个数为奇数,注意下标从0开始
                    i1=m1; // 舍弃A[]的左边,但保留中位数
                    j2=m2; // 舍弃b[]的右边,但保留中位数
    
                } else { // 元素个数为偶数
                    i1=m1+1; // 舍弃A[]的左边和中位数
                    j2=m2; // 舍弃B[]的右边,但保留中位数
                }
            }
            else{
                if((i1+j1)%2==0) { //元素个数为奇数,注意下标从0开始
                    j1=m1; // 舍弃A[]的右边,但保留中位数
                    i2=m2; // 舍弃b[]的左边,但保留中位数
    
                } else { // 元素个数为偶数
                    j1=m1+1; // 舍弃A[]的右边,但保留中位数
                    i2=m2; // 舍弃B[]的左边和中位数
                }
            }
        }
        // return A[i1] < B[i2] ? A[i1] : B[i2];
        printf("%d %d
    ", A[i1], B[i2]);
        return (A[i1]+B[i2]);
    }

    2. 如果两个有序数组不是等长的,则要稍微麻烦一些:

    *******

  • 相关阅读:
    纯CSS实现自动轮播,CSS变量的定义与使用,计算属性的使用
    input:file样式怎样修改
    Div转为Canvas简直不要太好玩~~~
    oracle nvl2函数
    oracle 子查询
    oracle 分组函数执行分析
    oracle外部表
    oracle USING 用法
    面向对象进阶
    面向对象基础
  • 原文地址:https://www.cnblogs.com/yspworld/p/12525301.html
Copyright © 2020-2023  润新知