zoukankan      html  css  js  c++  java
  • 有序数组的中位数

    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. 如果两个有序数组不是等长的,则要稍微麻烦一些:

    *******

  • 相关阅读:
    3、生成证书请求文件
    2、申请苹果App ID
    登录iOS Dev Center
    SQL Server 合并行
    asp 月末 月初
    linux
    ASP数组全集,多维数组和一维数组[转]
    oracle 秒
    oracle 存储过程 包 【转】
    linux
  • 原文地址:https://www.cnblogs.com/yspworld/p/12525301.html
Copyright © 2011-2022 走看看