繁体   English   中英

Java中最小的数组元素

[英]Smallest array element in Java

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

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

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

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

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

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

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

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

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

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

如果你使用数组作为元素的存储结构,那么除了遍历所有元素以找到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);

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM