我寫的代碼比我在網上找到的一些代碼慢(超過最大時間),即使在線代碼看起來更臃腫。自己的代碼明顯比別人慢
那麼,我陷入了什麼陷阱,我的代碼看起來更乾淨,但以某種方式放緩?
慢(我的):
using System;
public class Program
{
public static void Main()
{
int countMAX = 0;
int num = 0;
for (int i = 2; i <= 1000000; i++)
{
int count = 1;
int temp = i;
while (temp != 1)
{
if(temp % 2 == 0) temp /= 2;
else temp = temp * 3 + 1;
count++;
}
if(count > countMAX)
{
countMAX = count;
num = i;
}
}
Console.WriteLine("Number: " + num + " Hops: " +countMAX);
}
}
快速(在線):
using System;
public class Program
{
public static void Main()
{
const int number = 1000000;
long sequenceLength = 0;
long startingNumber = 0;
long sequence;
for (int i = 2; i <= number; i++)
{
int length = 1;
sequence = i;
while (sequence != 1)
{
if ((sequence % 2) == 0)
{
sequence = sequence/2;
}
else
{
sequence = sequence * 3 + 1;
}
length++;
}
//Check if sequence is the best solution
if (length > sequenceLength)
{
sequenceLength = length;
startingNumber = i;
}
}
Console.WriteLine("Num: " + startingNumber + " Count: " + sequenceLength);
}
}
我測試.NET Fiddle,其中my solution收到以下錯誤
Fatal Error: Execution time limit was exceeded
和other solution打印正確的結果
Num: 837799 Count: 525
他們應該做同樣的事情1:1。任何人有想法?
看起來更像代碼審查問題的
OverflowException
。您可以先將變量均等地命名,以便代碼更易於比較。 – CodeCaster你是如何測試兩者的表現的? –
100000 <1000000 –