顺序表 | 二分查找:两个数组合并后的中位数

输入两个长度相同的升序数组,返回这两个数组合并后的中位数

C++代码:

int bisearch_midNum(int a[],int b[],int n){
    int s1=0,s2=0,d1=n-1,d2=n-1,m1,m2;
    while(s1!=d1 || s2!=d2){//只要a,b序列同时出现了s==d的情况,才能False退出
        m1=(s1+d1)/2;
        m2=(s2+d2)/2;
        system("pause");
        if(a[m1]==b[m2])
            return a[m1];
        else if(a[m1]<b[m2]){//∈[m1,m2]
            d2=m2;
            if((d1-s1)%2){//偶数
                m1++;//舍去中间位
            }
            s1=m1;
        }else{               //∈[0,m1]∪[m2,n]
            d1=m1;
            if((d2-s2)%2){//偶数
                m2++;//舍去中间位
            }
            s2=m2;
        }
    }
    //返回较小者
    return min(a[s1],b[s2]);
}


一步一调理解此题:

●第一组数据:

第一步:a→  ←b

(如果【s1,d1】是偶数,就舍弃m1,即(m1,d1])

第二步:a→  ←b

第三步:←a b→

第四步:←a b→

b的中位数取9是因为【←a b→】这种情况要舍弃左边的m。

m1==s1,m2==s2,终止。在a【s1】与 b【s2】中取最小者,即6。

两个数组融合后的中位数也为6:


原文地址:https://www.cnblogs.com/TQCAI/p/8168812.html

时间: 2024-11-05 12:09:51

顺序表 | 二分查找:两个数组合并后的中位数的相关文章

[LeetCode]4. Median of Two Sorted Arrays两个排序数组合并后的中位数

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)). 解法一:不考虑时间复杂度限制在O(log(m+n)),则将两个数组遍历一遍即可以组合成一个排好序的数组,然后取数组的中位数即可,时间复杂度O(m+n): c

顺序表的查找、插入、删除、合并操作及其优缺点

顺序表的查找.插入.删除.合并操作,用c++实现相关代码: #include<iostream> using namespace std; //定义线性表顺序存储结构 #define MAXSIZE 100  //线性表最大长度 typedef struct { //线性表占用数组空间 int elem[MAXSIZE]; //记录线性表中最后一个元素在数组elem[]中的位置(下标值),空表置为-1 int last; }SeqList; //顺序表的按内容查找运算 //在顺序表L中查找与e

二分查找二维数组

转载请注明出处:http://blog.csdn.net/ns_code/article/details/24977113 剑指offer上的第一道题目,在九度OJ上测试通过 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数

查找[1]顺序表的查找

简单顺序查找,有序表的二分查找,索引顺序表的查找 1 #include "iostream" 2 #include "iomanip" 3 #include "time.h" 4 #include "stdlib.h" 5 using namespace std; 6 7 #define Max 20 8 9 /* 10 *简单顺序查找 11 */ 12 int Seq_Search(int A[],int n,int x)

_DataStructure_C_Impl:在顺序表中查找元素

// _DataStructure_C_Impl:Search #include<stdio.h> #include<stdlib.h> #define MaxSize 100 #define IndexSize 20 typedef int KeyType; //元素的定义 typedef struct{ KeyType key; }DataType; //顺序表的类型定义 typedef struct{ DataType list[MaxSize]; int length; }

Java中如何把两个数组合并为一个

JavaArray合并数组 目录(?)[+] 一apache-commons 二Systemarraycopy 三ArrayscopyOf 四ArraynewInstance http://freewind.me/blog/20110922/350.html 在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是最简单的办法.在apache-commo

顺序表的查找

1.对长度为4的顺序表进行查找,若第一个元素的概率为1/8,第二个元素的概率为1/4,第三个元素的概率为3/8,第四个元素的概率为1/4,则查找任一个元素的平均查找长度为( ) A)11/8           B)7/4                         C)9/4       D)11/4 [答案]C [解析]对顺序表查找,ASL= ,代入题目得:ASL=4*(1/8)+3*(1/4)+2*(3/8)+1*(1/4)=9/4 注意:是从表尾开始查找 顺序查找 折半查找 分块查找

python将两个数组合并成一个数组的两种方法的代码

内容过程中,把写内容过程中常用的内容收藏起来,下面的资料是关于python将两个数组合并成一个数组的两种方法的内容,希望能对小伙伴们有帮助. c1 = ["Red","Green","Blue"]c2 = ["Orange","Yellow","Indigo"]c1.extend(c2) assert c1 == ["Red","Green",&q

[LeetCode] #1# Two Sum : 数组/哈希表/二分查找

一. 题目 1. Two SumTotal Accepted: 241484 Total Submissions: 1005339 Difficulty: Easy Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solutio