程旅行网 2018校招 研发类在线考试

合并数组的的中位数

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

两个已排好序的数组,找出两者合并后的数组的中位数。

例如:

给出A=[1,2,3,4,5,6]和B=[2,3,4,5],它们合并后的数组是[1,2,3,4,5,6],合并后数组的中位数是3.5(注:(3+4)/2)。

给出A=[1,2,3]和B=[4,5],它们合并后的数组是[1,2,3,4,5],合并后数组的中位数是3。

输入

第一行读入一个正整数n,表示第一个数组的元素个数,第二行读入n个递增整数,表示第一个排好序的数组,第三行读入一个正整数m,表示第二个数组的元素个数,第四行读入m个递增整数,表示第二个排好序的数组

样例输入

6

1 2 3 4 5 6

4

2 3 4 5

样例输出

3.5
标签: 中位数、读入、合并、数组、3.5、面试
猜你感兴趣的圈子:
携程笔试面试圈
  • hadoop迷
    2018-07-29 14:23:59 1楼#1层

    参考:

    using System;
    using System.Linq;
     
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var n = int.Parse(Console.ReadLine());  //出题中这里纯粹是多余
                var ns = Console.ReadLine()
                    .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                    .Take(n)
                    .Select(x => int.Parse(x));
                var m = int.Parse(Console.ReadLine());  //出题中这里纯粹是多余
                var ms = Console.ReadLine()
                    .Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
                    .Take(m)
                    .Select(x => int.Parse(x));
                var 合并 = ns.Concat(ms).Distinct().ToArray();
                Console.WriteLine(合并.Skip(合并.Length / 2 - 1).Take(合并.Length % 2 == 1 ? 1 : 2).Average());
                Console.WriteLine("...........按任意键结束");
                Console.ReadKey();
            }
        }
    }

  • 回复