-1

我有一个方法,它由嵌套在 for 循环中的 if 语句组成:

for (int i = 0; i < val; i=i+2)
{
    for (int j = i+1; j < val; j=j+1)
    {
        actualDistance = actualDistance + (ulong)Math.Max(revenue[i], revenue[j]) * (ulong)Math.Abs(point[j] - point[i]);

        if (j + 1 < val)
        {
            actualDistance = actualDistance + (ulong)Math.Max(revenue[i+1], revenue[j+1]) * (ulong)Math.Abs(point[j+1] - point[i+1]);
        }
    }
}

但是,如果 val 表示数千万以内的数字,则该方法在运行时需要很长时间,因为它同时用于 for 和 if 循环。

有没有更好、更有效的方法来做到这一点?目前的代码效率太低了。

4

1 回答 1

2

要么我遗漏了一些东西,要么你的代码相当于:

for (int j = i+1; j < val; j=j+1)
{
    actualDistance = actualDistance + (ulong)Math.Max(revenue[i], revenue[j]) * (ulong)Math.Abs(point[j] - point[i]);

    actualDistance = actualDistance + (ulong)Math.Max(revenue[i+1], revenue[j+1]) * (ulong)Math.Abs(point[j+1] - point[i+1]);
}

actualDistance = actualDistance - (ulong)Math.Max(revenue[i+1], revenue[val]) * (ulong)Math.Abs(point[val] - point[i+1])

您的if语句几乎总是正确的,唯一错误的情况是 when j == val - 1,因此您始终可以在if语句内运行代码,而不是在for循环外减去最后一个情况。

于 2015-03-29T05:19:42.840 回答