确定数组中的最高和最低数字

时间:2013-07-18 00:35:48

标签: java

我正在尝试解决一个问题,我需要编写java代码,在给定以下条件的情况下找到数组中最高和最小的两个数字:

- 每个元素都是一个实数

- 每个元素都是随机的

关于最佳方法的任何想法?

4 个答案:

答案 0 :(得分:6)

您必须检查每个数字,因此您的最佳算法在数组长度上是线性的。

标准方法是只扫描阵列,跟踪到目前为止您看到的两个最小和最大的数字。

因此,鉴于firstMinsecondMinfirstMaxsecondMax分别是您目前看到的最小,第二小,最大和第二大值,在循环的下一次迭代中:

if (value > firstMax) {
    secondMax = firstMax;
    firstMax = value;
} 
else if (value > secondMax) {
    secondMax = value;
}

if (value < firstMin) {
    secondMin = firstMin; 
    firstMin = value;
}
else if (value < secondMin) {
    secondMin = value;
}

在此块结束时,我们维护firstMinsecondMinfirstMaxsecondMax分别是最小,第二小,最大和第二大的不变量你到目前为止看到的价值观。这证明了正确性。

此算法在数组长度上是线性的,并且只检查每个值一次,并进行最小比较次数。它在空间中也是O(1),并且是最佳的,因为它仅对顶部和底部两个值使用四个额外的内存位置。

答案 1 :(得分:5)

有一个变量来跟踪到目前为止你看到的min,second_min,max和second_max值。

您可以逐个浏览数组的元素,并相应地更新您的最小/最大变量。以下是一些需要考虑的案例:

  • 如果当前元素小于你的分钟,请将你的分钟保存到second_min并更新你的分钟。
  • 如果当前元素大于最大值,请将最大值保存为second_max并更新最大值
  • 如果当前元素小于second_min但大于min,则仅更新second_min
  • 如果当前元素大于second_max但小于max,则仅更新second_max

答案 2 :(得分:2)

是否需要超级优化的性能?如果没有,

Arrays.sort( array );

查看第一个和最后两个元素。

答案 3 :(得分:0)

我认为最好的方法是将数组用作堆或特殊数据结构(如果可以)。保持结构平衡和分类对您来说最有效。这意味着在数组的某些indix中保留一些元素为空,因为数组的索引将是有关ADT的信息。 http://en.wikipedia.org/wiki/Heap_(data_structure)