在查找集合中的最小值/最大值时使用类型的最小值/最大值

时间:2011-01-04 02:02:54

标签: algorithm theory

最初,我基本上写了一篇带有问题的文章,所以我要把它塞进去:这更好(在这里真的很挑剔)?

A)

int min = someArray[0][0];
for (int i = 0; i < someArray.length; i++)
    for (int j = 0; j < someArray[i].length; j++)
        min = Math.min(min, someArray[i][j]);

-OR -

B)

int min = int.MAX_VALUE;
for (int i = 0; i < someArray.length; i++)
     for (int j = 0; j < someArray[i].length; j++)
         min = Math.min(min, someArray[i][j]);

我认为b更快,通过将min初始化为常量值而不是使用索引器来保存一两条指令。它也感觉不那么多余 - 没有比较someArray[0][0]自己......

作为算法,这是更好/更有效的。

编辑:假设数组不为空且不为空 EDIT2:修正了一些粗心的错误。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

B更好;如果someArray碰巧是空的,你会得到一个运行时错误;但是A和B都可能有问题,因为如果someArray为null(并且在前面的代码行中没有检查过),A和B都会抛出异常。

答案 2 :(得分:0)

从实际的角度来看,我更喜欢选项A,因为如果将来处理的数据类型发生变化,更改初始值是需要更新的一件事(因此,可以少做一件事)错)。

从算法纯度的角度来看,我不知道一个人是否优于另一个人。

顺便说一下,选项A的初始化应该是这样的:

int min = someArray[0][0];