NSArray方法算法逻辑
问题描述:
我对Objective-C语言非常陌生,在面试中被问及我无法回答的问题。NSArray方法算法逻辑
我尝试了很多方法和逻辑没有成功。在这里寻找一个答案:
的问题是:
- (NSArray *)reorderTheArraysAndMergeThemInDescendingOrder:(NSArray *)firstArray and:(NSArray *)secondArray
无论是在参数设置阵列已按升序排序。
我的任务是提供一个数组作为返回变量,它将拥有firstArray和secondArray的所有独特元素,并将按降序排列它们。我没有被允许使用Objective-C的内置排序功能(这是我从这个领域开始就一直在做的方式)。我的变量可能只是原语(结果当然是一个整数数组)。
我是新来的整个编程现场,这里的一个很好的答案将非常感谢。
Shukaku
答
由于所提供的阵列按升序排序,这个问题是相当-很大关系的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:
使用变为负值,且之后,这只是为了验证这个想法,不给出的现成的代码解决方案
答
有很多方法可以解决这个问题。你可以颠倒阵列,然后从第二个插入项目到第一个,或者你可以将第二个追加到第一个,然后使用它们。
我稍后会发布代码,展示我可以找到的最简单的方法。它有多快和高效?只要它完成了工作,它可以是任何事情吗?
编辑: 看来Olotiarhas击败了我。
对于数组中的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