提供された配列は昇順でソートされているため、この質問は の古典的なアルゴリズムにかなり関連して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:
コードソリューションを提供するためではなく、アイデアを実証するためのものです.