由于提供的数组是按升序排序的,因此这个问题与经典算法非常相关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:
,这只是为了展示这个想法,而不是提供开箱即用的代码解决方案