序列和的前n小元素

序列和的前n小元素

Description

给出两个长度为n的有序表(非降序表)A和B, 在A和B中各任取一个相加, 可以得到n2个和. 求这些和最小的n个

Input

输入有两行内容,每行中都有n个整数,互相之间以一个空格相隔.

Output

输出只有一行内容,该行有n个从小到大的整数,代表得到的n个和, 互相之间以一个空格分隔.

Sample Input

1 3 5 7
2 4 6 8

Sample Output

3 5 5 7

HINT

对30%的数据,1≤n≤1000; 对100%的数据,1≤n≤100000; 对所有的数据,输入的2n个数在-109至109之间;

Source

原文地址:https://www.cnblogs.com/LJA001162/p/12079294.html

时间: 2024-10-24 22:01:46

序列和的前n小元素的相关文章

算法导论学习之线性时间求第k小元素+堆思想求前k大元素

对于曾经,假设要我求第k小元素.或者是求前k大元素,我可能会将元素先排序,然后就直接求出来了,可是如今有了更好的思路. 一.线性时间内求第k小元素 这个算法又是一个基于分治思想的算法. 其详细的分治思路例如以下: 1.分解:将A[p,r]分解成A[p,q-1]和A[q+1,r]两部分.使得A[p,q-1]都小于A[q],A[q+1,r]都不小于A[q]; 2.求解:假设A[q]恰好是第k小元素直接返回,假设第k小元素落在前半区间就到A[p,q-1]递归查找.否则到A[q+1,r]中递归查找. 3

从一个序列中获取前K大的数的一种方法

这个方法是利用快速排序的.在快速排序中,得到中间元素(pivot)之后,比较中间元素之前的元素个数和K的大小关系,从而确定后面该往哪个方向继续递归.如果中间元素前面的元素个数等于K,那就停止递归过程:如果中间元素前面元素个数小于K,那就再中间元素后面进行递归:否则就往中间元素前面进行递归.这样最终得到的是没有排序的前K大的元素,这样再对前K个元素进行一次真正的快速排序.这样就能得到排好序的前K大元素.我随机生成了一个100000个整型数据的文件进行测试,求前10000个元素.这样做用了0.984

堆的应用(1000个数据中找最大的前K个元素,堆排序)

(1)从1000个数据中找到k个最大数据 首先看到这个题时,可能会想到先将这1000个数据进行降序排序,即取出的前k个元素最大.时间复杂度为O(N^2),使得程序效率低. 如何解决这个问题呢?我们的堆就派上用场喽! 解题思路: 可先创建一个数组topK[k],将100w中的前k个数据放入数组topK中,将topK中的数据建小堆,则可保证堆的第一个元素是最小的,将第k个元素与堆中第一个元素比较,若大于,则交换.对堆进行重新建小堆,取第k+1个元素与堆中第一个元素比较,以此类推,直至100w-k个元

优先队列的应用:求序列第 k 个最大的元素

优先队列[堆]的应用:     选择问题:输入时N 个元素以及一个整数k ,这N 个元素的集可以是全序的.该选择问题是要找出第 k 个最大的元素... 有多种解决方案: 1A算法:把这些元素读入数组,并对其进行排序,返回适当的元素.假设使用的是简单排序算法,时间复杂度是O(N^2). 1B算法:将k 个元素读入一个数组,并对其进行排序.这些元素的最小者在第k 个位置上,一个一个的处理其余的元素.当一个元素开始被处理时,它先与第k 个元素进行比较,如果该元素大,则将第k 个元素出去,该元素放在其余

找到n个元素中的第二小元素

算法导论中的一道习题: 证明: 在最坏情况下,找到n个元素中的第二小的元素需要n+ceil(lgn)-2次比较.(提示:可以同时找到最小元素,ceil表示向上取整) 思路: 找到最小元素需要n-1次比较.采用两两结合比较的方法.如果n为奇数,则取第一个元素为临时最小元素min,其它两两结合比较,形成一个类似树的比较过程.如果n为偶数,则直接进行两两结合比较,根节点即为最小元素. 接下来查找第二小元素,需要ceil(lgn)-1次比较.考虑:第二小元素一定和第一小元素进行了比较,所以可以直接在比较

Mysql 查找表中的前n大元素

转载注明出处:http://www.cnblogs.com/liangyongrui/p/8622593.html Mysql 查找表中的前n大元素 用程序写很简单,利用堆维护一下就行了,但是用sql呢? 解法: 假设需要比较的字段是a,找出前n大的行,则答案为count(比a小的行) < n的行.(说起来有点绕..看个例子就懂了) 假设有这样的一个表 Id Name Salary 1 Joe 70000 2 Henry 80000 3 Sam 60000 4 Max 90000 5 Janet

python之Counter类:计算序列中出现次数最多的元素

Counter类:计算序列中出现次数最多的元素 1 from collections import Counter 2 3 c = Counter('abcdefaddffccef') 4 print('完整的Counter对象:', c) 5 6 a_times = c['a'] 7 print('元素a出现的次数:', a_times) 8 9 c_most = c.most_common(3) 10 print('出现次数最多的三个元素:', c_most) 11 12 times_dic

【算法导论学习-015】数组中选择第i小元素(Selection in expected linear time)

1.算法思想 问题描述:从数组array中找出第i小的元素(要求array中没有重复元素的情况),这是个经典的"线性时间选择(Selection in expected linear time)"问题. 思路:算法导论215页9.2 Selection in expect linear time 2.java实现 思路:算法导论216页伪代码 /*期望为线性时间的选择算法,输入要求,array中没有重复的元素*/ public static int randomizedSelect(i

【python cookbook】【数据结构与算法】12.找出序列中出现次数最多的元素

问题:找出一个元素序列中出现次数最多的元素是什么 解决方案:collections模块中的Counter类正是为此类问题所设计的.它的一个非常方便的most_common()方法直接告诉你答案. # Determine the most common words in a list words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 'the', 'eyes', 'the', 'eyes', 'the', '