我试图做一个标准偏差的方法,但是当我运行测试它超时

我试图做一个标准偏差的方法,但是当我运行测试它超时

问题描述:

这是我的代码,当我运行测试它超时。我试图做一个标准偏差的方法,但是当我运行测试它超时

public static double standardDeviation(int[] numbers) { 
    double jo = 0.0; 
    for(int i=0; i<numbers.length; i++) 
     jo+=numbers[i]; 
    jo=jo/numbers.length; 
    double[] joArray = new double[numbers.length]; 
    for(int i=0; i<numbers.length; i++) 
    { 
     joArray[i]=Math.pow(numbers[i]-jo,2.0); 
    } 
    double jo2=0.0; 
    for(int i=0; i<joArray.length; i++) 
     jo2+=joArray[i]; 
    jo2=Math.sqrt(jo2/joArray.length); 
    return jo2; 
} 

对于那些希望看到的测试:

public void testStdDev0() 
{ 
    assertEquals(0.8165, MiscCollectionOfFunMethodsI.standardDeviation(new int[] { 1, 2, 3 }), 0.01); 
} 
+1

您是否尝试过调试器或添加一些打印以查看它有多远? – John3136 2014-11-21 03:35:53

+0

@ John3136我试过调试器,我想我看到我的问题,谢谢! – JoJo 2014-11-21 03:38:07

+0

java protip:for循环的“for each”版本会使这段代码更容易阅读:'for(int v:numbers){jo + = v; }','for(double v:joArray){jo2 + = v; }' – 2014-11-21 03:39:33

确保了循环是清晰和准确。

此外,你想确保代码没有循环。

如果你清理了,它应该不会超时。

public static double standardDeviation(int[] numbers) { 
    double jo = 0.0; 
    for(int i=0; i<numbers.length; i++) 
     jo+=numbers[i]; 
    jo=jo/numbers.length; 
    double[] joArray = new double[numbers.length]; 
    for(int i=0; i<numbers.length; i++) 
    { 
     joArray[i]=Math.pow(numbers[i]-jo,2.0); 
    } 
    double jo2=0.0; 
    for(int i=0; i<joArray.length; i++) 
     jo2+=joArray[i]; 
    jo2=Math.sqrt(jo2/joArray.length); 
    return jo2; 
} 


public static double average(int[] numbers) { 
    double jo = 0.0; 
    for(int i=0; i<numbers.length; i++) 
     jo+=numbers[i]; 
    return jo/numbers.length; 
}