如何进一步优化我的代码?

时间:2017-08-28 08:52:11

标签: java for-loop

我得到了一系列双打,所有数字都是相同的,除了一个。我的任务是找到唯一的号码。我的代码返回正确的输出,现在我想知道如何进一步优化它。

这是我的代码:

public static double findUnique(double array[]) {
    double unique = 0;
    double common = 0;

    for(int i=0; i<array.length; i++) {
        for(int j=i+1; j<array.length; j++) {
            if(array[i]==array[j]) {
                common = array[i];
            }
        }
        if(common!=array[i]) {
            unique = array[i];
        }
    }
return unique;  
}

我唯一能想到的就是先存储数组的长度,但经过一些测试后实际需要的时间更长。感谢。

3 个答案:

答案 0 :(得分:3)

public static double findUnique(double array[]) {
    if(array.length < 3) { 
       throw new IllegalArgumentException("wrong array");
    }

    double common;
    if(array[0] == array[1]) {
       common = array[0];
    } else {
       return array[0] != array[2]? array[0]: array[1];
    }

    for(int i=2; i<array.length; i++) {
       if(common != array[i]) {
          return array[i];
       }
    }
    throw new IllegalArgumentException("wrong array"); 
}

答案 1 :(得分:2)

我相信在everey迭代中抓住两个新数字是不可取的。

相反,我们可以先抓住数组中的两个第一个数字,然后如果这些数字相同,我们可以将其余数字与它们的值进行比较。所以我们在for循环之上定义我们的公共,这样我们将避免在每次迭代中包含:common = array [i]的for循环和if语句。我相信这应该会对速度产生影响,至少如果数组是疯狂的话。^^

另外,将返回放在for循环中,这样即使你真的找到了那块黄金:) :)你也不会迭代整个列表。 (返回一些东西总会破坏整个方法。)

希望我不要错过任何理解:)。这里有一些代码供你使用。 :)

$urlRouterProvider.otherwise

答案 2 :(得分:0)

如果先对整个数组进行排序,该怎么办?然后只看一下数组的前两个和最后一个元素。