`
peizhyi
  • 浏览: 29563 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

找出数组中和为N的所有配对

阅读更多
有一个集合a,里面有n个正整数,乱序排列。给定一个正整数N,求,a中任意两个数相加等于N,共有哪些种组合情况。例如,集合为{1,3,44,2,4,5,54,222,368}  N=6,则结果集为{1,5},{2,4}

我的思路,

    1. 用N减去每个元素得到另一个数组b,嵌套循环找到a与b中值相同而位置不同的元素对;空间复杂度2N,时间复杂度O(N^2)。


    2. 将a按照升序排序,初始化变量max_loc=N-1,从最小值a[i=0]开始遍历,
        a. 若max_loc<=i,结束程序,否则进入b;
        b. 判断a[max_loc] + a[i]与N大小关系;<N则continue对a[i]的遍历;=N则输出这对数,max_loc--,继续b;>N则max_loc--,继续b;
        该方法的空间复杂度是1,时间复杂度是O(NlgN+N),证明如下:
        排序的复杂度视为NlgN,后面配对的部分复杂一点,循环第i个值的复杂度用f(i)表示,有如下的关系,f(0)<N,f(1)<N-f(0),这是因为a[0]遍历走过的那部分最大值不需要在a[1]的循环里再去检验了,所以有f(i)<N-[f(0)+...+f(i-1)],进而得到f(0)+f(1)+...+f(N-1)<N,所以说整个算法的复杂度是O(NlgN+N)。

    欢迎讨论和拍砖!!
分享到:
评论
2 楼 peizhyi 2013-06-03  
sydongda 写道
有没有考虑重复的数字

不好意思,好久没回来看博客。
的确没有考虑重复数的情况,应该在b里修改下,如果=N,继续遍历,大于N才max_loc--。
谢谢关注!欢迎一起讨论!
1 楼 sydongda 2012-07-23  
有没有考虑重复的数字

相关推荐

    舞伴配对系统C++(数组)

    舞伴配对系统C++(数组),包括类,对象,数组,结构简单,清晰!

    设表达式以字符形式已存入数组E[n]中,'#'为表达式的结束符,试写出判断表达式中括号'('和')'是否配对的程序

    /*2. 设表达式以字符形式已存入数组E[n]中,'#'为表达式的结束符,试写出判断表达式中括号'('和')'是否配对的程序。*/

    C++二维数组写的记忆配对游戏

    这是一个C++写的记忆配对游戏。由3个二维数组完成。缺少的功能就是生成随机数。这样只要玩家一次通过。就会知道这游戏的规律。正在改进中。

    C++二维数组开发的记忆配对游戏

    一个C++写的记忆配对游戏,在生成随机数的时候有些缺陷。应该让看到不同的数字。正在改进。有需要联系我QQ:352967447

    数据结构实验 数组和广义表

    数组和广义表 一、实验名称:数组和广义表 二、实验目的: (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点; (2)掌握线数组和广义表储存结构的...假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。

    运动员最佳配对问题-cpp

    假设男运动员已经按照1到n排好序不动,用一个数组w存放配对的女运动员的编号,即第i号男运动员配第w[i]号女运动员, 初始时设w[i]=i,然后不断的重新排列w数组,每得到一次排列,就要计算在此排列下的配对总和,若...

    C++数据结构括号匹配

    1. 设表达式以字符形式已存入数组E[n]中,‘#’为表达式的结束符,试写出判断表达式中括号(‘(’和‘)’‘['和’]';'{'和'}')是否配对的算法

    N = Z原子核中的质子-中子配对:四分法与成对凝聚

    形式主义是为在轴向变形的均值场中移动并通过最一般的等矢量和等量配对配对相互作用的核子的自共轭(N = Z)系统设计的。 这些系统的基态由两种类型的冷凝物的叠加来描述,即,由两个等矢量对和等量质子-中子对的...

    C语言实例解析精粹

    015 利用数组求前n个质数 016 编制万年历 017 对数组元素排序 018 任意进制数的转换 019 判断回文数 020 求数组前n元素之和 021 求解钢材切割的最佳订单 022 通过指针比较整数大小 023 指向数组的指针 024 ...

    3.2_舞伴配对问题.cpp

    n个男生和m个女生排成两队列进行配对跳舞,男女队列依次各出一人配成一对舞伴,要求每一首舞曲最多出k对舞伴,没法配对的人只能等待下一首舞曲。跳完后男女依次排到队列最后。打印前t首舞曲的配对情况。n, m, k, t从...

    cpmatch_随机配对算法_

    这是源于王者荣耀战队微信群里的活动,队长让我处理一下cp随机配对的活儿,作为一名程序员,这种东西当然自己写一个简单的程序就能完成,于是有了下面的代码。1.制作两份名单——一男一女的txt文件,放在解决方案的...

    运动员最佳配对问题

    男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]*Q[j][i]。 设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。 编程任务:设计一个算法,对于给定的男女运动员...

    8604 运动员最佳配对问题

    男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]*Q[j][i]。 设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。 编程任务:设计一个算法,对于给定的男女运动员...

    N 和 N^2 之间的三种不同的双射或配对函数(包括康托多项式):配对函数:将两个自然数编码为一个自然数(反之亦然)-matlab开发

    N 和 N^2 之间最著名的配对函数是康托多项式: &lt;x&gt; = ((x+y)^2+x+3y)/2 或 &lt;x&gt; = ((x+y)^2+3x+y)/2)。 例如,康托枚举模式如下: 0 1 3 6 10 15 2 4 7 11 16 5 8 12 17 9 13 18 14 19 20 它们是否是唯一的双射...

    括号配对问题

    第一行输入一个数N(0&lt;N),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[","]","(",")"四种字符 输出 ...

    html5微信小游戏源码 贱人配对游戏(仅用于参考)

    html5微信小游戏源码 贱人配对游戏(仅用于参考)html5微信小游戏源码 贱人配对游戏(仅用于参考)html5微信小游戏源码 贱人配对游戏(仅用于参考)html5微信小游戏源码 贱人配对游戏(仅用于参考)html5微信小游戏...

    数据结构课程设计 ---------------学生搭配

    每曲开始时,依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴. 请设计一系统模拟动态地显示出上述过程。 2.基本要求 (1)输出每曲配对情况 (2) 计算出任何一个男生(编号为X)和任意女生...

    android 蓝牙自动配对 无需手动输入

    这个demo 是用来 自动配对蓝牙打印机 无需手动输入配对码,隐藏配对框,因为打印机配对码是已知“0000”,我在代码写死了,要自动配对要写入相对应的配对码。 这个demo 是 sdk android 2.1 上做的。 下载的朋友可以...

    配对交易python策略源码

    配对交易(Pairs Trading)是指八十...Ganapathy Vidyamurthy在《Pairs Trading: Quantitative Methods and Analysis》一书中定义配对交易为两种类型:一类是基于统计套利的配对交易,一类是基于风险套利的配对交易。

    运动员最佳匹配问题分支限界法

    男运动员i和女运动员j配对组成混合双打的男女双方竞赛优势为P[i][j]*Q[i][j]。设计一个算法,计算男女运动员最佳配对法,使各组男女双方竞赛优势的总和达到最大。 编程任务: 设计一个优先队列式分支界限法,对于...

Global site tag (gtag.js) - Google Analytics