【发布时间】:2016-04-17 00:48:10
【问题描述】:
准备面试。尝试使用 Objective-C 为“从数组中消除连续重复项的最快方法”问题制定解决方案。即输入 =[1,2,2,1,2,3,3,4] 输出 =[1,2,1,2,3,4]
对于数组内方法:循环遍历数组中的元素,如果元素 == 前一个元素,则将其删除并重新调整所有其他元素以向下移动。
用于我们可以使用另一个数组的方法。如果 element == 前一个元素,则不要将其添加到新的“唯一数组”中,否则将其添加到唯一数组中。
有没有更好的解决方案?代码如下。可以进行任何优化吗?
使用另一个数组
//Pseudocode for sucessive dup elimination when using another array
//
//duplicateLessArray = empty array
//previous element = not set
//
//for (loop through each element in origArray)
// if(previous element == not set or element != previous element)
// set previousElement = element
// add element to duplicateLessArray
//
NSMutableArray *duplicateLessArray ;
duplicateLessArray = [[NSMutableArray alloc] init] ;
for (NSNumber *nextNumber in origArray)
{
if ([nextNumber intValue] != [[duplicateLessArray lastObject] intValue])
{
[duplicateLessArray addObject:nextNumber] ;
}
}
NSLog(@"Duplicate less array = %@",duplicateLessArray) ;
使用相同的数组
//Pseudocode for in array sucessive dup elimination
//
//previous element = not set
//
//for (loop through each element in origArray)
// if(previous element == not set or element != previous element)
// set previousElement = element
// else
// delete it from origArray
// move back all elements by 1
NSInteger numElementsInDupLessArray = 0 ;
NSNumber *prevElement ;
for (NSNumber *nextNumber in [origArray copy])
{
if (numElementsInDupLessArray == 0 || [nextNumber intValue] != [prevElement intValue])
{
prevElement=nextNumber ;
numElementsInDupLessArray++;
}
else
{
[origArray removeObjectAtIndex:numElementsInDupLessArray] ;
}
}
NSLog(@"Duplicate less array = %@",origArray) ;
【问题讨论】:
-
我投票决定将此问题作为离题结束,因为 SO 不是代码编写或算法设计服务。
-
谢谢@rmaddy,我将使用其他链接继续前进。
标签: objective-c arrays algorithm duplicates array-algorithms