NSArray 方法 算法逻辑
Posted
技术标签:
【中文标题】NSArray 方法 算法逻辑【英文标题】:NSArray Method Algorithm logic 【发布时间】:2012-07-23 06:02:04 【问题描述】:我是 Objective-C 语言的新手,在面试中被问到一个我无法回答的问题。
我尝试了很多方法和逻辑都没有成功。在这里寻找答案:
问题是:
- (NSArray *)reorderTheArraysAndMergeThemInDescendingOrder:(NSArray *)firstArray and:(NSArray *)secondArray
参数中提供的两个数组都已按升序排序。
我的任务是提供一个数组作为返回变量,它将包含 firstArray 和 secondArray 的所有唯一元素,并将它们按降序排列。我不被允许使用 Objective-C 的内置排序功能(这是我在这个领域以来一直这样做的方式)。我的变量可能只是原始变量(结果当然是一个整数数组。)。
我完全是整个编程领域的新手,非常感谢这里的好答案。
书阁
【问题讨论】:
对于数组中的唯一元素,请检查:- ***.com/questions/1439564/… 对于按降序排列数组:- ***.com/questions/3402667/… 【参考方案1】:由于提供的数组是按升序排列的,所以这个问题与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:
中使用,这只是为了演示这个想法,而不是提供开箱即用的代码解决方案
【讨论】:
感谢您的回答,我正在从中获取线索。是的,重复的不应该在那里。例如,如果 arrayfirst 有 2,3,4,而 secondArray 有 3,4,5...则结果数组应该是 5,4,3,2。 刚刚编辑了我的帖子以删除重复项(更确切地说,不是一开始就添加它们)【参考方案2】:有很多方法可以解决这个问题。您可以反转数组,然后将第二个中的项目插入第一个,或者您可以将第二个附加到第一个然后重新使用它们。
稍后我将发布代码来演示我能找到的最简单的方法。它必须有多快和多高效?只要能完成工作,它可以是任何东西吗?
编辑: 看来奥洛蒂亚尔已经打败了我。
【讨论】:
以上是关于NSArray 方法 算法逻辑的主要内容,如果未能解决你的问题,请参考以下文章