![]() |
1
150
这可以在O(1)空间和O(N)中完成 )时间。
对取O(NlogN)的两个数组进行排序。
排序后查找对的过程需要O(N)。
外环运行
|
![]() |
2
13
您可以用两个数组将其简化为类似的问题,这是一个比较有名的问题,并且有简单的O(n)解决方案(包括从两端迭代)。
第2步和第3步相乘得到了O(n^2)的复杂度。 |
![]() |
3
9
其他的解决方案已经比较好了,但这是我的O(n^2)时间和O(n)内存解决方案。 取所有对(a,b),a,b(时间复杂度O(n^2))。 对于每一对,检查hastable中是否存在M-(a+b)(每个查询需要复杂度O(1))。 因此,哈希表的总体时间复杂度为O(n^2),空间复杂度为O(n)。 |
![]() |
4
3
下一步是创建前两行和的“矩阵”。然后在散列中查找它们的匹配号码是否存在。创建矩阵是O(N*N),而在散列中查找是常数时间。 |
![]() |
5
3
2.对于数组C中的每个C[i],找出D中是否存在M-C[i],此步骤的复杂度为O(N)。
|
|
6
3
我有办法。将列表之一中的所有元素插入哈希表。这不需要多少时间。 完成后,找到其余2个数组中的所有对,并查看它们的和是否存在于哈希表中。 因为散列连接是常数,所以我们得到的总时间是二次方的。 使用这种方法可以节省排序时间。 另一个想法是,如果您知道每个元素的最大大小,可以使用bucket sort的变体,并在nlogn时间内完成。 |
![]() |
7
1
以O(N^2)空间为代价,但仍然使用O(N^2)时间,人们可以处理 四 数组,通过计算前两个数组的所有可能和,以及后两个数组的所有可能余数,对列表进行排序(在线性时间内是可能的,因为它们都是“long”类型,其位数独立于N),然后查看任何和是否等于任何余数。 |
|
8
1
对所有3个数组进行排序并使用二进制搜索似乎是一种更好的方法。一旦数组被排序,就应该进行二进制搜索,而不是线性搜索,这需要n而不是log(n)。 哈希表也是一个可行的选择。 hash和sort的结合可以减少时间,但代价是O(N平方)空间。 |
![]() |
9
1
我还有一个
首先,对三个数组进行排序,这一步是
现在,合并
因此,总的复杂性是
|
|
10
1
它应该在O(n)中运行。 |
![]() |
11
0
怎么样:
|
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 7 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 7 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 7 月前 |
![]() |
Geremia · 2D NumPy数组+1D数组? 7 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 8 月前 |
![]() |
Paul Williams · 迭代数组时输出有问题 8 月前 |