NSArray方法算法逻辑

问题描述:

我对Objective-C语言非常陌生,在面试中被问及我无法回答的问题。NSArray方法算法逻辑

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

的问题是:

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

无论是在参数设置阵列已按升序排序。

我的任务是提供一个数组作为返回变量,它将拥有firstArray和secondArray的所有独特元素,并将按降序排列它们。我没有被允许使用Objective-C的内置排序功能(这是我从这个领域开始就一直在做的方式)。我的变量可能只是原语(结果当然是一个整数数组)。

我是新来的整个编程现场,这里的一个很好的答案将非常感谢。

Shukaku

+0

对于数组中的Uniques元素,请检查: - http://*.com/questions/1439564/iphone-getting-unique-values-from-nsarray-object对于按降序对数组进行排序: - http:// *.com/questions/3402667/sort-an-nsarray-in-descending-order – Leena 2012-07-23 06:12:17

由于所提供的阵列按升序排序,这个问题是相当-很大关系的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:使用变为负值,且之后,这只是为了验证这个想法,不给出的现成的代码解决方案

+0

谢谢你的回答,我正在从中找出线索。是的,副本不应该在那里。例如,如果arrayfirst具有2,3,4并且secondArray具有3,4,5 ...则结果数组应该是5,4,3,2。 – NSFeaster 2012-07-23 06:31:33

+0

刚刚编辑我的帖子以删除重复项目(mmore确切地不添加他们在第一个地方) – Olotiar 2012-07-23 06:32:54

有很多方法可以解决这个问题。你可以颠倒阵列,然后从第二个插入项目到第一个,或者你可以将第二个追加到第一个,然后使用它们。

我稍后会发布代码,展示我可以找到的最简单的方法。它有多快和高效?只要它完成了工作,它可以是任何事情吗?

编辑: 看来Olotiarhas击败了我。