我正在一个网站上解决奥运IT谜语的培训。
我提供了两种解决方案:
- C#
- PHP
当网上判断显示,PHP版本更快时,我很困惑! 为什么呢?
C#:109 ms 3000 Kb
PHP:45 ms 0 Kb
怎么可能?
答案 0 :(得分:5)
鉴于所给出的程序,程序重要位的执行时间 - 找到唯一的字符 - 肯定不需要109ms。这听起来像“在线判断”涉及的是测量总执行时间,包括流程启动,.NET的情况下的JITting等。
这有点像要求哪辆车更快地从车库出来,并认为这代表了汽车的速度。
现在,PHP的array_unique
函数 非常快,可能比LINQ更快......但基本上你无法从基准测试结果中获得任何有用的信息。您应该寻找执行秒数而非毫秒数的基准测试,并且不包括启动/预热时间,除非您特别感兴趣。
答案 1 :(得分:2)
您的C#版本创建了三个您似乎不需要的阵列。您可以将其替换为:
string input = Console.ReadLine();
int charCount = input.Distinct().Count();
if(charCount % 2 == 0) ...
以下情况可能更快:
int charCount = new HashSet<char>(input).Count;