提问人:Tech_Support_Scammer 提问时间:1/3/2022 更新时间:1/3/2022 访问量:187
我应该使用什么来优化我的 c# 代码?
What should I use to optimize my c# code?
问:
我正在做一个 codewars kata,它正在工作,但我超时了。 我在网上搜索了解决方案,寻求某种参考,但它们都是针对 java 脚本的。
这是套路:https://i.stack.imgur.com/yGLmw.png
这是我的代码:
public static int DblLinear(int n)
{
if(n > 0)
{
var list = new List<int>();
int[] next_two = new int[2];
list.Add(1);
for (int i = 0; i < n; i++)
{
for (int m = 0; m < next_two.Length; m++)
{
next_two[m] = ((m + 2) * list[i]) + 1;
}
if(list.Contains(next_two[0]))
{
list.Add(next_two[1]);
}
else if(list.Contains(next_two[1]))
{
list.Add(next_two[0]);
}
else
list.AddRange(next_two);
list.Sort();
}
return list[n];
}
return 1;
}
这真的是一个缓慢的解决方案,但这似乎对我有用。
答:
0赞
JonasH
1/3/2022
#1
性能优化的第一条规则是测量。理想情况下,使用可以告诉您大部分时间花在哪里的分析器,但对于简单情况,使用一些秒表就足够了。
我猜大部分时间都会花在 上,因为这是线性查找,并且位于最里面的循环中。因此,一种方法是将列表更改为 a 以提供更好的查找性能,跳过 -call,并返回 hashSet 中的最大值。据我所知,这应该给出相同的结果。list.Contains
HashSet<int>
.Sort
还可以考虑使用一些专用数据结构,这些结构比 .Net 中提供的常规容器更适合该问题。
评论