将多个数组统一为一个有序数组的最佳方法

时间:2015-03-29 20:02:04

标签: java arrays hashset

以下内容来自求职面试:

  

对于排序数组的数组,编写一个统一数组的函数   数组成一个排序数组。

我考虑使用HashSet<E>,并为每个数组添加一个完整的数组,只需一个订单(我不知道,但它必须是预先编写的方法吗?! ),但我可以发誓这是一个简单的解决方案...

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

你基本上想从mergesort算法中窃取一个方法,该算法结合了两个(可以扩展到更多)数组。这是一个例子(用于合并2个数组):

private static int[] merge(int[] left, int[] right) {
    int lengthResult = left.length + right.length;
    int[] result = new int[lengthResult];
    int indexL=0, indexR=0, indexResult = 0;

    //while there are elements left in left or right
    while(indexL < left.length || indexR < right.length){

        //BOTH left and right still have elements 
        if(indexL < left.length && indexR < right.length){
            //if the left item is greater than right item
            if(left[indexL] <= right[indexR]){
                result[indexResult] = left[indexL];
                indexL++;
                indexResult++;
            }else{
                result[indexResult] = right[indexR];
                indexR++;
                indexResult++;
            }
        //means only left OR right have elements left
            //see if left has stuff
        }else if(indexL < left.length){
            result[indexResult] = left[indexL];
            indexL++;
            indexResult++;
        }else if(indexR < right.length){
            result[indexResult] = right[indexR];
            indexR++;
            indexResult++;
        }
    }
    return result;
}