Loops 简化计算每个元素与其右侧元素之间的差值
我能简化一下吗Loops 简化计算每个元素与其右侧元素之间的差值,loops,for-loop,nested,Loops,For Loop,Nested,我能简化一下吗 for(int k=0;k<n;k++) for(int l=(k+1);l<n;l++) { tot+=(max(a[k],a[l])-min(a[k],a[l])); } for(int k=0;k这里有一个稍微简单的版本: var k = -1, l, tot while(++k < n){ l = k while(++l < n){ tot += Math.abs(a[k] - a[l]) } }
for(int k=0;k<n;k++)
for(int l=(k+1);l<n;l++)
{
tot+=(max(a[k],a[l])-min(a[k],a[l]));
}
for(int k=0;k这里有一个稍微简单的版本:
var k = -1,
l, tot
while(++k < n){
l = k
while(++l < n){
tot += Math.abs(a[k] - a[l])
}
}
在我看来,你试图计算每个元素和它右边的所有元素之间的差。你能做的是计算整个数组的和,然后每次你从一个元素移动到下一个元素时,从总数中减去这个特定的数字,现在的总差就是当前元素的和
// Sort the array 'a' first and then run this.
int sum = calculateSum() // Write this method yourself to find total
for (int i = 0; i < n; i++)
{
sum -= a[i];
tot += (sum - a[i] * (n - i + 1));
}
//首先对数组“a”进行排序,然后运行此操作。
int sum=calculateSum()//自己编写此方法以查找总数
对于(int i=0;i
最后一行通过考虑理想情况下减去考虑中的元素的次数,从总和中减去总差异。到底有多大,以及你到底想完成什么。在不知道你想要得到什么的情况下,试图优化此代码是毫无意义的。也许你重做这个完全错误,有更简单的东西得到你想要的。它应该是C++中。你可以替换<代码>最大(A[K],[L])(A[K],[L])/代码>类似于<代码> ABS(A[K] -A[L])< /C>。我们需要知道你实际上是在尝试检查数组A[N]的所有2个元素的差异B/W。这太正了,也就是说,我给出了:(max(a[k],a[l])-min(a[k],a[l])可能的
// Sort the array 'a' first and then run this.
int sum = calculateSum() // Write this method yourself to find total
for (int i = 0; i < n; i++)
{
sum -= a[i];
tot += (sum - a[i] * (n - i + 1));
}