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
怎么样:
|
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |