1

我对 Objective-C 语言非常陌生,在面试中被问到一个我无法回答的问题。

我尝试了很多方法和逻辑都没有成功。在这里寻找答案:

问题是:

 - (NSArray *)reorderTheArraysAndMergeThemInDescendingOrder:(NSArray *)firstArray and:(NSArray *)secondArray

参数中提供的两个数组都已按升序排序。

我的任务是提供一个数组作为返回变量,它将包含 firstArray 和 secondArray 的所有唯一元素,并将它们按降序排列。我不被允许使用 Objective-C 的内置排序功能(自从我进入这个领域以来,我一直在这样做)。我的变量可能只是原始变量(结果当然是一个整数数组。)。

我完全是整个编程领域的新手,非常感谢这里的一个好的答案。

修阁

4

2 回答 2

5

由于提供的数组是按升序排序的,因此这个问题与经典算法非常相关Mergesort(如果您从未听说过它,请查看它,这是一个经典)。

由于您的数组仅包含原始数据类型,因此可以使用它们进行比较<

你感兴趣的代码看起来像

- (NSArray *)reorderAndMergeReverse:(NSArray *)array1 and:(NSArray *)array2{

    NSMutableArray *result = [NSMUtableArray array];

     int i = array1.count-1;
     int j = array2.count-1;

     while (result.count < array1.count+array2.count){

        if ([array1 objectAtIndex:i] > [array2 objectAtIndex:j]){
             [result addObject:[array1 objectAtIndex:i]];
             i--:
        } else {
            [result addObject:[array2 objectAtIndex:j]];
             j--:
        }

     }
     return result;
}

我不确定您是否要删除重复项,您的问题不是很清楚,您介意告诉我是否可以改进我的代码吗?
编辑:还是这样做了:由于您的数组已排序,因此重复项彼此相邻,因此首先不添加它们可能很容易;

- (NSArray *)reorderAndMergeReverse:(NSArray *)array1 and:(NSArray *)array2{

    NSMutableArray *result = [NSMUtableArray array];

     int i = array1.count-1;
     int j = array2.count-1;
     int k = 0;

     while (i>=0 || j>=0){

        if ([array1 objectAtIndex:i] > [array2 objectAtIndex:j]){
             if ([array1 objectAtIndex:i] != [result objectAtIndex:k]){
                 [result addObject:[array1 objectAtIndex:i]];
                 k++;
             }
             i--:
        } else {
            if (array2 objectAtIndex:j] != [result objectAtIndex:k]){
                   [result addObject:[array2 objectAtIndex:j]];
                   k++;
             }
             j--:
        }

     }
     return result;
}

编辑:该代码中存在一些错误,因为i可能会变成负数并随后被用于objectAtIndex:,这只是为了展示这个想法,而不是提供开箱即用的代码解决方案

于 2012-07-23T06:20:37.057 回答
1

有很多方法可以解决这个问题。您可以反转数组,然后将第二个中的项目插入第一个,或者您可以将第二个附加到第一个然后重新使用它们。

稍后我将发布代码来演示我能找到的最简单的方法。它必须有多快和多高效?只要能完成工作,它可以是任何东西吗?

编辑:看来 Olotiarhas 打败了我。

于 2012-07-23T06:14:35.200 回答