`
- 浏览:
30531 次
- 性别:
- 来自:
北京
-
有一个集合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)。
欢迎讨论和拍砖!!
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
在本项目中,"舞伴配对系统C++(数组)"是一个基于C++编程语言设计的简单应用,它利用了数组这一数据结构来实现舞伴的配对。C++是一种强大而灵活的面向对象编程语言,允许我们创建类、对象,并通过它们来组织和处理...
/*2. 设表达式以字符形式已存入数组E[n]中,'#'为表达式的结束符,试写出判断表达式中括号'('和')'是否配对的程序。*/
例如,第一个数组存储所有卡片的原始值,第二个数组记录当前翻转的卡片状态(正面或反面),第三个数组则用于追踪已匹配的卡片对。 游戏的核心算法在于如何生成随机数和实现记忆匹配机制。在描述中提到,当前游戏的...
一个C++写的记忆配对游戏,在生成随机数的时候有些缺陷。应该让看到不同的数字。正在改进。有需要联系我QQ:352967447
在C语言中,二维数组可以通过指针来操作,例如`int (*p)[N]`的定义表示了指向含有N个整型元素的数组的指针,这在处理二维数组时显得尤为重要。而C语言中的数组操作函数如`trick`,可以被用来实现寻找马鞍点的算法。...
DC3算法基于字符的三种性质:单个字符、字符对和字符三元组的相对顺序,逐步构建后缀数组,时间复杂度为O(n log n)。 ### 算法比较 倍增算法和DC3算法各有优劣。倍增算法实现相对简单,但可能需要更多的时间;而DC3...
假设男运动员已经按照1到n排好序不动,用一个数组w存放配对的女运动员的编号,即第i号男运动员配第w[i]号女运动员, 初始时设w[i]=i,然后不断的重新排列w数组,每得到一次排列,就要计算在此排列下的配对总和,若...
对于给定的问题——在最坏情况下用\[3n/2 -2\]次比较找出数组`a[0:n-1]`中的最大值和最小值,本篇文章将详细介绍其解决方案,并深入分析该算法的设计思路和时间复杂度。 #### 问题定义 给定一个数组`a[0:n-1]`,...
在“如果一对先完全匹配则输出为完全匹配队伍中下一回合第一个匹配的人的名字”,这部分意味着我们需要在算法中增加一个判断条件,当所有男女都找到舞伴时,系统应该记录下这个结果,并在下一次匹配时优先考虑尚未...
1. **初始化**: 创建一个n×n的二维数组p和q分别存储男女运动员的竞赛优势,同时创建一个一维数组w用于记录女运动员的当前配对情况。 2. **递归函数** `back(level)`: - 如果`level >= n`,则已经完成了一轮配对,...
每次出队一对舞者进行配对,直到队列为空,表示所有舞者都已经找到了舞伴。 配对算法的大致步骤如下: 1. 初始化一个空队列,将所有舞者依次入队。 2. 当队列非空时,执行以下操作: - 出队队首舞者A。 - 如果...
具体来说,我们有两个n×n的矩阵P和Q,其中P[i][j]表示男运动员i与女运动员j配对时男运动员的竞赛优势,而Q[i][j]表示女运动员i与男运动员j配对时女运动员的竞赛优势。值得注意的是,P[i][j]并不一定等于Q[j][i],这...
在给定的程序中,这个问题通过一个名为`Sport`的结构体来表示,包含男性运动员的优势矩阵`p`、女性运动员的优势矩阵`q`、当前排列编号`w`、最佳排列编号`best`、运动员数量`n`以及最佳配对和`bestsum`。 回溯法是一...
哈希表允许我们在常数时间内进行插入和查找操作,这将大大提高我们的算法效率,使其达到O(n)的时间复杂度,其中n是数组的长度。 以下是使用JavaScript实现的解决方案: ```javascript function twoSum(nums, ...
- 操作实现:主要涉及队列的插入(入队)、删除(出队)操作,以及根据男女比例进行配对的算法设计。 - 流程图:每个模块都应有对应的流程图,详细描述其工作流程,包括数据的读取、处理和输出。 5. **使用说明与...
2. **问题定义**:在信息学竞赛中,配对碱基链问题通常表现为给定一个序列,要求找出所有可能的合法配对方式。例如,给定字符串"ACGT",合法的配对有"ATCG"和"GCTA"等,因为"A"始终与"T"配对,"C"始终与"G"配对。 3...
游戏的规则相对简单,需要玩家在限定的时间内,通过记忆和逻辑推断来找出所有数字配对。下面将详细解释数字配对游戏的实现过程,包括游戏规则、游戏逻辑的设计、以及具体的代码实现。 首先,我们来梳理一下游戏的...
如果所有括号都正确地配对,则返回TRUE;否则,返回FALSE。 使用顺序栈可以实现括号配对的判断逻辑,该方法可以应用于各种括号配对的场景中。在实际应用中,我们可以根据具体情况选择合适的数据结构和算法来解决...
依次从男队和女队的队头各出一人配成舞伴。如果两队初始人数不等,则较长的那一队中未配对者等待下一轮舞曲。 2、假设初始男、女人数及性别已经固定,舞会的轮数从键盘输入。 试模拟解决上述舞伴配对问题。 3、...