我有一个整数数组,value[]
。它可以是任何长度。
我需要找到最小的数字。我正在采访街道上的一个问题。我的超过时间时收到错误消息。随着迭代变得更糟,我需要提高计算最小值的速度。
我对使用Java集合或其他任何东西感兴趣,所以任何人都会提出改进代码的建议。
int mini=value[0];
for (int i = 1; i < noinps; i++) {
if(mini>value[i]) {
mini=value[i];
}
}
System.out.println(mini);
答案 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]);
}
}