2011 找到两个数组中位数

思想:分别求A,B的中位数,若a=吧,则a或b为所求中位数,否则,舍弃a,b中最小者所在序列之较小一半,同时舍弃较大者所在序列较大一半,要求两次舍弃元素个数相同,重复上述过程,直到两个序列中只含一个元素为止,则较小者为所求中位数。

代码:

int search(int a[],int b[],int n)
{
    int s1,e1,mid1,s2,e2,mid2;
    s1=0;e1=n-1;s2=1;e2=n-1;
    while(s1!=e1||s2!=e2)
    {
        mid1=(s1+e1)/2;
        mid2=(s2+e2)/2;
        if(a[mid1]==b[mid2])return a[mid1];
        if(a[mid1]<b[mid2])
        {
            if((s1+e1)%2==0)//若元素个数为奇数个
            {
                s1=mid1;//舍弃a中间点以前部分并保留中间点
                e2=mid2;//舍弃b中间点以后部分并保留中间点
            }
            else
            {
                s1=mid1+1;//舍弃a中间点以前部分及中间点
                e2=mid2;//舍弃b中间点以前部分并保留中间点
            }

        }
        else
        {
             if((s1+e1)%2==0)//若元素个数为奇数个
            {
                e1=mid1;//舍弃a中间点以后部分并保留中间点
                s2=mid2;//舍弃b中间点以前部分并保留中间点
            }
            else
            {
                e1=mid1+1;//舍弃a中间点以前部分并保留中间点
                s2=mid2;//舍弃b中间点以前部分和中间点
            }
        }

    }
    return(a[s1]<b[s2]?a[s1]:b[s2]);
}

原文地址:https://www.cnblogs.com/yangmenda/p/11707755.html

时间: 2024-10-21 07:59:25

2011 找到两个数组中位数的相关文章

有两数组A、B,长度分别为m、n。用不超过m+n的比较次数找到两个数组中的相同元素

今天碰到一道笔试题:有两数组A.B,长度分别为m.n.用不超过m+n的比较次数找到两个数组中的相同元素.当时没做出来,我现在给出C#版本,算是弥补一点遗憾. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SortAB { class Program { static void Main(string[] args) { int[] A = Random

NX二次开发-算法篇-判断找到两个数组里不相同的对象

1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_curve.h> 5 #include <uf_modl.h> 6 #include <vector> 7 #include <uf_disp.h> 8 9 10 UF_initialize(); 11 12 //第一步,创建5条直线 13 UF_CURVE_line_t Coords1; 14 Coords1.start_point[0] = 0.0

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)). 题意: 两个排序后的数组nums1 和nums2,长度分别是m,n,找出其中位数,并且时间复杂度:O(log(m+n)) 最愚蠢的方法: 两个数组合

求两个数组的中位数

package kpp.base; /** * 求两个有序数组的中位数 * 此代码适用于两个数组长度不等的情况 * @author kpp * */ public class TwoArrayMedian { public static void main(String[] args) { // TODO Auto-generated method stub float a[] = {1,2,3,4}; //float b[] = {2,3,4,5,8,9,10}; float b[] = {8

【HackerRank】Find the Median(Partition找到数组中位数)

In the Quicksort challenges, you sorted an entire array. Sometimes, you just need specific information about a list of numbers, and doing a full sort would be unnecessary. Can you figure out a way to use your partition code to find the median in an a

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

输入两个长度相同的升序数组,返回这两个数组合并后的中位数 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]

给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。

描述 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 0 到 n-1. 你可以假设只有一组答案. 样例 Example1: 给出 numbers = [2, 7, 11, 15], target = 9, 返回 [0, 1]. Example2: 给出 numbers = [15, 2, 7, 11], target = 9, 返回 [1, 2]. 1 /** 2 *

OpenCL入门:(二:用GPU计算两个数组和)

本文编写一个计算两个数组和的程序,用CPU和GPU分别运算,计算运算时间,并且校验最后的运算结果.文中代码偏多,原理建议阅读下面文章,文中介绍了OpenCL相关名词概念. http://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201  (英文版) http://www.cnblogs.com/leiben/archive/2012/06/05/2536508.html (博友翻译的中文版) 一.创建工程 按照OpenCL

java 数据结构 图中使用的一些常用算法 图的存储结构 邻接矩阵:图的邻接矩阵存储方式是用两个数组来标示图。一个一位数组存储图顶点的信息,一个二维数组(称为邻接矩阵)存储图中边或者弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 实例如下,左图是一个无向图。右图是邻接矩阵表示:

以下内容主要来自大话数据结构之中,部分内容参考互联网中其他前辈的博客. 图的定义 图是由顶点的有穷非空集合和顶点之间边的集合组成,通过表示为G(V,E),其中,G标示一个图,V是图G中顶点的集合,E是图G中边的集合. 无边图:若顶点Vi到Vj之间的边没有方向,则称这条边为无项边(Edge),用序偶对(Vi,Vj)标示. 对于下图无向图G1来说,G1=(V1, {E1}),其中顶点集合V1={A,B,C,D}:边集合E1={(A,B),(B,C),(C,D),(D,A),(A,C)}: 有向图:若