以下功能:
function solution(K, A) {
var counter=0;
for (var i=0;i<A.length;i++) {
for (var j=i;j<A.length;j++) {
if (A[i]+A[j]===K) {
if (i===j)
counter++;
else
counter+=2;
}
}
}
return counter;
}
找到数组A中对的元素的数量,它们的总和为K.I s是O(n ^ 2/2)?是否有另一种算法用{实现上述内容{1}}?
答案 0 :(得分:2)
是的,由于两个for循环,您发布的解决方案具有O(n^2)
复杂性。实际上,您可以使用O(n)
来解决map
中的问题,function solution(k, arr){
var map = {};
for (var i=0; i < arr.length ; i++){
var tmp = k - arr[i];
if (temp > 0 && map[tmp] == 1)
console.log("Found the pair :", temp, arr[i]);
else
map[arr[i]] = 1;
}
}
只是JavaScript中的关联数组。
myObj = {
1:
[
{
"name" : "ringo",
"passed": true,
"level" : 2
},
{
"name" : "paul",
"passed": true,
"level" : 3
},
{
"name" : "john",
"passed": false,
"level" : 4
},
{
"name" : "george",
"passed": true,
"level" : 1
},
],
2:
[
{
"name" : "ringo",
"passed": true,
"level" : 2
},
{
"name" : "paul",
"passed": true,
"level" : 3
},
{
"name" : "john",
"passed": false,
"level" : 4
},
{
"name" : "george",
"passed": true,
"level" : 1
},
],
答案 1 :(得分:0)
如果要查找在O(nlog n)中具有和K的元素对,则应创建一个新数组,在该数组中存储已作为参数传递的数组的已排序版本,然后执行以下操作:
var i = 0;
var j = A.length - 1;
while(i < j) {
if(A[i] + A[j] == k) {
counter++;
++i;
--j;
}
else
if(A[i] + A[j] < k) {
++i;
}
else
++j;
}
现在排序采用 O(nlogn)和上面的代码 O(n),这使得 O(nlogn)。< / p>