【发布时间】:2021-02-28 05:01:04
【问题描述】:
我在考试中得到一个数组a
a = [9,8,10,2]
我需要做的是交叉迭代数组本身并获得所有可能元素的连接,即a*a
一旦所有元素都按该顺序连接,那么我需要总结它们。我的代码在 sn-p 中:
在 PHP 中也试过
function sumIt($a) {
$totalSum = 0;
$len1 = count($a);
for($i = 0; $i < $len1; $i++){
for($ii = 0; $ii < $len1; $ii++) {
$totalSum += $a[$i].''.$a[$ii];
}
}
return $totalSum;
}
输入数组a可以有以下值约束:
- 数组长度最大为10^5
- 单个项目的价值可以达到 10^6
我的代码大部分工作正常,但在数组a 的高端值上,我开始出现时间超过错误,即 MAX 4 秒。我尝试使用 while 和 foreach 循环但没有效果。由于代码很简单,我想知道是否有人可以提供有关提高性能和减少执行时间的提示。
PS:如果有人知道的话,我也在 for 循环中尝试了 --i 的东西,在这方面也没有区别。
a = [10, 23, 4857, 3, 49, 293, 1, 394,85, 392, 484, 392, 30, 4849,48, 20, 3948, 2493, 84, 3492, 384,92, 384,38, 49, 45, 489, 53,40,9875, 84,9,572,3958, 346,456,45, 56,4564, 6,7867,8, 78,9789, 234,234, 435,34,6, 45,345, 4564,5, 657,45, 45, 345, 667, 5,6756, 877,68, 6765,4, 34, 6, 54, 3, 654, 6, 5, 8776, 43, 32, 67, 89, 876,543,2,34,5, 654, 35, 6, 4, 345, 678, 9, 8, 765, 467,878,9, 4352, 5, 6743, 4, 47, 57,65, 345, 78, 765, 645,63, 56, 5786, 676, 4564,5, 42, 46, 786, 97, 896,567,86, 3777, 65, 6, 877, 65, 67, 2039757584,5348];
function sumIt(a) {
totalSum = 0;
const len1 = a.length;
for(let i = 0; i < len1; i++){
for(let ii = 0; ii < len1; ii++) {
totalSum += +(a[i]+''+a[ii]);
}
}
return totalSum;
}
currentTime = new Date().getTime();
console.log(sumIt(a));
console.log(new Date().getTime() - currentTime);
function sumIt2(a) {
totalSum = 0;
const len1 = a.length;
for(let i = 0; i < len1; i++){
first = Math.pow(10, Math.ceil(Math.log(a[i] + 1)));
for(let j = 0; j < len1; j++) {
totalSum += (first + a[j])
}
}
return totalSum;
}
currentTime = new Date().getTime();
console.log(sumIt2(a));
console.log(new Date().getTime() - currentTime);
【问题讨论】:
-
+(a[i]+''+a[ii])效率很低。任何与字符串有关的操作都是昂贵的操作。试着想一个方法,你可以做到这一点,而不必使用字符串。另外,您的循环是O(n^2),但在我脑海中,我想不出办法。 (您的问题似乎基本上是O(n^2),尽管很高兴得到纠正。) -
少一点操作:一旦你有了
i和ii,你就可以同时添加i、ii和ii、i.。 -
@StackSlave 开头提到的问题,给出了需要将所有元素与自身交叉连接然后数学相加的数组
-
请注意,数组中的每个数字将位于连接的右侧,而左侧。右侧贡献只是数组的总和。左侧的贡献有点棘手。例如,答案是
9+8+10+2 + 90+80+20 + 2*9+2*8+2*2。这是 O(N*d),其中d是数组中唯一位数的数量。 -
@user3386109 现在这是一个有趣的方向,我想进一步研究
标签: javascript php arrays algorithm loops