数据结构相关。查找大于或等于给定输入的所有数组元素

时间:2015-06-18 08:02:37

标签: java algorithm data-structures graph-algorithm

我有很长的订单金额,1000,3000,50000,1000000等。

我想查找金额超过100000的所有订单。

最简单的解决方案可以遍历完整列表并进行比较并将匹配放入另一个列表中,这将为您提供所有金额> 100000。

我们是否有其他数据结构或算法可以更快地解决这个问题?

无序的输入元素序列。

3 个答案:

答案 0 :(得分:1)

想到的方法可能是保留订单的有序列表并执行限额的二进制搜索。订购列表中该点之前的所有订单将小于限额。

// Generate a random array of numbers
Random r = new Random();
Integer[] numbers = new Integer[r.nextInt(100) + 20];
for (int i = 0; i < numbers.length; i++) {
    numbers[i] = r.nextInt(50000) + 100;
}
// Order the array and print it
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));
// Find the index of the amount limit (10000 in this case)
int index = Arrays.binarySearch(numbers, 10000);
// Print the slice of array that is lower than the limit amount
System.out.println(Arrays.toString(Arrays.copyOfRange(numbers, 0, Math.abs(index) + 1)));

答案 1 :(得分:0)

有很多数据结构可以为您提供更好的搜索时间,例如TreeHashSet等。

但如果您总是希望获得超过100k的订单,那么您可以非常轻松地拥有2个列表(一个用于订单&lt; 100k,另一个用于&gt; 100k)。但这对于搜索量始终不变并且不是一般解决方案的情况非常具体。

答案 2 :(得分:0)

这取决于您要查看订单序列的次数,以及它是否经过多次修改。

如果您只打算这样做一次,那么简单地完成整个序列并计算。它比构建任何其他数据结构更快,因为无论如何你都必须检查所有订单。

此外,即使您反复进行,遍历一百万个项目的列表也会非常快。你确定这里有性能问题吗?