【问题标题】:Smallest array element in JavaJava中最小的数组元素
【发布时间】:2012-05-11 03:29:38
【问题描述】:

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

我需要找到最小的数字。我正在处理面试街的一个问题。我的 Time Exceeded 出现错误。我需要提高计算最小值的速度,因为迭代变得更糟。

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

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

【问题讨论】:

  • 你现在还在面试吗?如果是,发布这个问题不会被视为作弊吗?
  • @duffymo 我怀疑这只是语言障碍问题(现在时态和现在进行时态之间的差异)。至少,我希望如此!
  • 我想他说的是interviewstreet.com
  • 我只是在建议中寻求帮助,而不是完整的答案?。我不想我的逻辑工作正常与否..

标签: java performance algorithm collections


【解决方案1】:

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

【讨论】:

  • +1,同意。除非您之前预先缓存了一些信息(例如,您在填充数组时跟踪最小值),否则没有更快的方法来依次检查每个元素。
  • +1。线性搜索是未排序数组的最佳算法,我认为它是(否则,这个问题是微不足道的)。
【解决方案2】:

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

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2019-01-12
          • 1970-01-01
          • 1970-01-01
          • 2012-10-17
          • 1970-01-01
          • 2019-04-09
          • 2015-04-18
          • 2014-12-19
          • 1970-01-01
          相关资源
          最近更新 更多