gpt4 book ai didi

c# - 为什么这个代码是冰川的?

转载 作者:太空宇宙 更新时间:2023-11-03 19:17:16 25 4
gpt4 key购买 nike

我原以为这段代码可以快速执行,但对于一个包含 5000 个元素的列表,它运行了超过 20 分钟才终止它。

是因为list.contains()吗?

有什么想法吗?

     public static int PNum(int N)
{
List<int> result = new List<int>();
for (int i = 1; i <= N; i++)
result.Add(i * (3 * i - 1) / 2);

int len = result.Count;
int minDiff = 10000;
int sum = 0, diff = 0;
for (int i = 0; i <= len - 1; i++)
{
for (int j = i + 1; j <= len - 1; j++)
{
diff = result[j] - result[i];
if (result.Contains(diff))
{
sum = result[i] + result[j];
if (result.Contains(sum))
{
if (diff < minDiff)
diff = minDiff;
}
}
}
}
return minDiff;
}

最佳答案

N是 5000。因此,您的外循环运行 5000 次迭代,内循环运行 5000 次迭代,List<T>.Contains遍历每个元素,因此它也进行了 5000 次迭代工作。

因此,您的循环至少要执行大约 50003 = 125,000,000,000 次操作,这将花费相当长的时间。

问题确实是您对 List.Contains 的使用.使用 HashSet相反(或另外)得到 O(1) Contains测试。

关于c# - 为什么这个代码是冰川的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15315311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com