早教吧作业答案频道 -->数学-->
一个无序数组,任意两个数相加等于一个给定的数,并且用复杂度最小的方法得出
题目详情
一个无序数组,任意两个数相加等于一个给定的数,并且用复杂度最小的方法得出
▼优质解答
答案和解析
1.最简单的方法就是穷举,这种虽然简单,但是非常不划算,时间复杂度达到O(N^2)
2.可以换一个角度考虑,给定的数如果是M,那么针对数组中一个数字N,我们只需要查找一下数
组中是否含有M-N就可以了,这样就转换为数组查找问题了,然后可以利用空间换时间来搞
定,搞一个hash表,然后把每一个都映射到hash表中去,然后查找的时候就需要O(1)就可以
了,只不过空间复杂度达到O(N)
3.可以先排序一下,使用快排,时间复杂度为O(NlogN),然后令i = 0,j = n - 1,计算sum = arr[i]
+ arr[j],如果sum大于M就让j = j - 1,否则让i = i + 1,这样一轮下来就可以了,时间复杂度
O(N),总的时间复杂度为O(NlogN)
2.可以换一个角度考虑,给定的数如果是M,那么针对数组中一个数字N,我们只需要查找一下数
组中是否含有M-N就可以了,这样就转换为数组查找问题了,然后可以利用空间换时间来搞
定,搞一个hash表,然后把每一个都映射到hash表中去,然后查找的时候就需要O(1)就可以
了,只不过空间复杂度达到O(N)
3.可以先排序一下,使用快排,时间复杂度为O(NlogN),然后令i = 0,j = n - 1,计算sum = arr[i]
+ arr[j],如果sum大于M就让j = j - 1,否则让i = i + 1,这样一轮下来就可以了,时间复杂度
O(N),总的时间复杂度为O(NlogN)
看了一个无序数组,任意两个数相加等...的网友还看了以下:
如果对于任意给定的正数总存在一个正整数N,当n>N证:对于任意给定的e>0,要使|yn-2|=|2 2020-07-09 …
6倍6倍8倍8倍8倍8倍12倍12倍24倍就这样9个倍数给你一个数(比如X,这个数可以是小于900 2020-07-17 …
254个志愿者来自不同的单位,任意两个单位的志愿者人数之和不少于20人,且任意两个单位志愿者的人数 2020-07-19 …
已知各项全不为零的数列{ak}的前k项和为Sk,且Sk=akak+1(k∈N*),其中a1=1。( 2020-07-20 …
问:任意给定一个自然数N,那么存在连续N个数,恰巧这些数中有且仅有1个素数.2楼的兄弟673231 2020-07-22 …
x^3+a*x+b=0(modp)其中p为任意素数,a,b为任意整数.求在modp意义下的正整数x 2020-07-22 …
任意给出一个五位数,将组成这个五位数的5个数码的顺序任意改变,得到一个新的五位数.那么,任意给出一个 2020-11-27 …
对于非空实数集A,记A*={y|∀x∈A,y≥x}.设非空实数集合M、P满足:M⊆P,且若x>1,则 2020-12-07 …
在实数集R中定义一种运算“*”,对于任意给定的a,b∈R,a*b为唯一确定的实数,且具有性质;(1) 2020-12-15 …
设数列{an},如果存在常数a,对于任意给定的正数q(无论多小),总存在正整数M,使得当n>M时,恒 2020-12-23 …