NSArray方法算法逻辑

时间:2012-07-23 06:02:05

标签: iphone ios algorithm nsarray

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

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

问题是:

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

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

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

我是整个编程场景的新手,在这里一个好的答案将非常感谢。

Shukaku

2 个答案:

答案 0 :(得分: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:中使用,这只是为了证明这个想法,而不是为了盒子代码解决方案

答案 1 :(得分:1)

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

我稍后会发布代码,展示我能找到的最简单的方法。它的速度和效率有多快?只要它能完成工作,它能成为什么吗?

编辑: 似乎Olotiarhas打败了我。