2012-07-23 110 views
1

我對Objective-C語言非常陌生,在面試中被問及我無法回答的問題。NSArray方法算法邏輯

我嘗試了很多方法和邏輯沒有成功。在這裏尋找一個答案:

的問題是:

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

無論是在參數設置陣列已按升序排序。

我的任務是提供一個數組作爲返回變量,它將擁有firstArray和secondArray的所有獨特元素,並將按降序排列它們。我沒有被允許使用Objective-C的內置排序功能(這是我從這個領域開始就一直在做的方式)。我的變量可能只是原語(結果當然是一個整數數組)。

我是新來的整個編程現場,這裏的一個很好的答案將非常感謝。

Shukaku

+0

對於數組中的Uniques元素,請檢查: - http://stackoverflow.com/questions/1439564/iphone-getting-unique-values-from-nsarray-object對於按降序對數組進行排序: - http:// stackoverflow.com/questions/3402667/sort-an-nsarray-in-descending-order – Leena 2012-07-23 06:12:17

回答

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:使用變爲負值,且之後,這只是爲了驗證這個想法,不給出的現成的代碼解決方案

+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

1

有很多方法可以解決這個問題。你可以顛倒陣列,然後從第二個插入項目到第一個,或者你可以將第二個追加到第一個,然後使用它們。

我稍後會發布代碼,展示我可以找到的最簡單的方法。它有多快和高效?只要它完成了工作,它可以是任何事情嗎?

編輯: 看來Olotiarhas擊敗了我。