Java中的最小数组元素

Java中的最小数组元素,java,performance,algorithm,collections,Java,Performance,Algorithm,Collections,我有一个整数数组,value[]。它可以是任何长度 我需要找到最小的数字。我在采访街上处理一个问题。我收到一个错误,因为我的时间超过了。我需要提高计算最小值的速度,因为迭代越来越糟糕 我对使用Java集合或其他任何东西感兴趣,所以任何人都可以给出一些改进代码的建议 int mini=value[0]; for (int i = 1; i < noinps; i++) { if(mini>value[i]) { mini=value[i]; } } Sy

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

我需要找到最小的数字。我在采访街上处理一个问题。我收到一个错误,因为我的时间超过了。我需要提高计算最小值的速度,因为迭代越来越糟糕

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

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

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

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

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

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

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


回到超时问题:如果元素无序且没有其他限制,则您的算法是正确的,因此超时必须来自程序的其他部分(例如,您试图从控制台读取数据,但数据在文件中)

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

如果使用数组作为元素的存储结构,那么除了循环遍历所有元素以查找最小元素之外,别无选择。但是,您的算法在O(n)复杂度下运行良好,因为您只在数组中循环一次

如果数组大小非常大,迭代会变得更糟。在这种情况下,如果除了阵列之外别无选择,我建议不要将阵列用作存储区域。然后,在将元素放入数组本身之前,尝试检查每个元素,这样就不需要迭代数组来查找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);

获取最小数字的简单方法..

 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]);
        }
    }

你现在还在面试吗?如果是的话,发布这个问题不会被认为是作弊吗?@duffymo我怀疑这只是一个语言障碍问题(现在时和现在进行时的区别)。至少,我希望如此!我想他说的是。我只是在建议中寻求帮助,不是一个完整的答案?。我不认为我的逻辑是正确的还是错误的…+1,同意。除非您以前预先缓存了一些信息(例如,在填充数组时跟踪最小值),否则没有更快的方法可以依次检查每个元素。+1。对于未排序的数组,线性搜索是最好的算法,我假设它是(否则,问题就很简单)。