Java中最小的数组元素

时间:2012-05-01 16:04:34

标签: java performance algorithm collections

我有一个整数数组,value[]。它可以是任何长度。

我需要找到最小的数字。我正在采访街道上的一个问题。我的超过时间时收到错误消息。随着迭代变得更糟,我需要提高计算最小值的速度。

我对使用Java集合或其他任何东西感兴趣,所以任何人都会提出改进代码的建议。

int mini=value[0];
for (int i = 1; i < noinps; i++) {
    if(mini>value[i]) {
        mini=value[i];
    }
}
System.out.println(mini);

5 个答案:

答案 0 :(得分:9)

没有更好的算法来查找数组中的最小或最大元素。你必须看看每个元素。也许你在其他地方浪费时间 - 例如阅读输入。

答案 1 :(得分:6)

该算法似乎可以找到数组的最小值。如果对arraym中包含的可能元素一无所知,则需要来检查每个元素,因此您的性能是线性的(与数组中元素的数量成正比)。

如果元素是完全有序的,你可以只查找第一个(或最后一个,依赖或排序)元素(恒定时间性能)

如果元素是半有序的(例如堆结构),你可以通过类似二分搜索的技术(log(n)performance)找到它

如果元素是无序的,但您知道它们不能小于某个值,则可以在找到可能的最小值时停止搜索。

回到超时问题:如果元素是无序的并且对它们没有其他限制,那么你的算法很好,所以超时必须来自程序的其他部分(例如你试图从控制台,但数据在文件中)

答案 2 :(得分:2)

如果使用数组作为元素的存储结构,那么除了循环遍历所有元素以找到min元素之外别无选择。但是你的算法在O(n)复杂度下工作正常,因为你只在数组中循环一次。

如果数组大小非常大,迭代会变得更糟。在这种情况下,如果除了数组之外别无选择,我建议不要使用Arrays作为存储区域。然后在将元素放入数组本身之前尝试检查每个元素,这样就不需要迭代数组来查找min元素了。

使用集合,这将是最好的方法

ArrayList arrayList = new ArrayList();
//Add elements to Arraylist
arrayList.add(new Integer("23"));
arrayList.add(new Integer("1"));
arrayList.add(new Integer("134"));
arrayList.add(new Integer("22"));
arrayList.add(new Integer("0"));

/*
   To find maximum element of Java ArrayList use,
  static Object max(Collection c) method of Collections class.

   This method returns the maximum element of Java ArrayList according to
   its natural ordering.
*/

Object obj = Collections.max(arrayList);

System.out.println("Maximum Element of Java ArrayList is : " + obj);

答案 3 :(得分:0)

使用2个线程,每个线程占用数组的一半,在其一半中找到最小值,然后将结果写入变量。之后,比较主线程中的两个结果。

答案 4 :(得分:0)

获得最小数字的简便方法..

 import java.util.Arrays;
    public class demoClass {
        public static void main(String[] args) {

                  // consider the below array of data
                    int[] numbers = {12,22,32,43,53};

                   // first sort the array using sort keyword
                   Arrays.sort(numbers);

                 System.out.println("Smallest Number = "+numbers[0]);
        }
    }