Objective c 算法-我可以使用内置的实用功能进行在线编码面试和挑战吗?
我有很多基于算法的编码访谈(coderpad.io)和在线挑战,比如Objective-c中的hackerrank。我不经常这样做,我想知道是否允许我使用内置的排序、搜索和比较函数来解决算法问题,如下面所示 在编码面试中,我是否必须假装Objective-c没有排序、反转和其他实用程序? 还是一切都是公平的,只是把解决方案拿出来 如果有更好的媒介来问这个问题,请告诉我在哪里张贴这个 从这里开始:Objective c 算法-我可以使用内置的实用功能进行在线编码面试和挑战吗?,objective-c,algorithm,sorting,data-structures,Objective C,Algorithm,Sorting,Data Structures,我有很多基于算法的编码访谈(coderpad.io)和在线挑战,比如Objective-c中的hackerrank。我不经常这样做,我想知道是否允许我使用内置的排序、搜索和比较函数来解决算法问题,如下面所示 在编码面试中,我是否必须假装Objective-c没有排序、反转和其他实用程序? 还是一切都是公平的,只是把解决方案拿出来 如果有更好的媒介来问这个问题,请告诉我在哪里张贴这个 从这里开始: #导入 @接口节点:NSObject{ @公开的 id-val; 节点*返回; } @结束 @实现节
#导入
@接口节点:NSObject{
@公开的
id-val;
节点*返回;
}
@结束
@实现节点
@结束
@接口NSArray(LIS)
-(NSArray*)使用比较器(NSComparator)比较器增加子序列的长度;
@结束
@实施NSArray(LIS)
-(NSArray*)使用比较器(NSComparator)比较器增加子序列的长度{
NSMutableArray*pileTops=[[NSMutableArray alloc]init];
//分类成堆
用于(id x在self中){
Node*Node=[[Node alloc]init];
节点->val=x;
int i=[pileTops indexOfObject:node
inSortedRange:NSMakeRange(0,[桩端计数])
选项:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual
使用比较器:^n比较结果(节点*node1,节点*node2){
返回比较器(node1->val,node2->val);
}];
如果(i!=0)
节点->返回=桩顶[i-1];
桩顶[i]=节点;
}
//从最后一个节点跟踪指针
NSMUTABLEARRY*结果=[[NSMUTABLEARRY alloc]init];
对于(节点*节点=[pileTops lastObject];节点;节点=节点->返回)
[结果添加对象:节点->值];
返回[[result reverseObjectEnumerator]allObjects];
}
@结束
int main(int argc,const char*argv[]{
@自动释放池{
(三,二,六,四,五,一),,
@[@0, @8, @4, @12, @2, @10, @6, @14, @1, @9, @5, @13, @3, @11, @7, @15]])
NSLog(“%@的L.I.S.为%@”,d,
[d使用比较器增加测量子序列:^n比较结果(id obj1,id obj2){
返回[obj1比较:obj2];
}]);
}
返回0;
}
在编码访谈中,您可以随时询问是否可以使用库中的某某函数,但通常您可以这样做,只要这不会使您避免实际解决问题
例如,如果要求您实现排序,则不应通过调用库排序来实现。如果要求您实现一个完成某项任务的类,那么您不应该通过将其委托给已提供用于执行该任务的类来实现
上述耐心排序的实现通常是好的,因为调用的库函数没有一个专门与最长递增子序列问题相关
在编码面试中,你真的应该从另一个角度考虑这个问题:这个问题是展示你技能的机会。你想炫耀什么?根据我的经验,通常提出的问题类型可以使用内置的排序、搜索等实用功能来解决,但使用它们可能不是最有效的方法。例如,从无序列表中选择前k个项目可以通过排序然后获取前k个项目来轻松解决。但这不是最佳解决方案。在面试中,面试官可能会要求你提供另一种解决方案。在测试站点上,您的代码可能会超过时间限制 对于面试,最好与面试官讨论你提出的解决方案。正如其他人所说,询问面试官是否可以使用内置方法。面试问题通常故意含糊不清,以引出此类对话。面试官对你的技术能力感兴趣,但也对你如何处理问题感兴趣。这包括在要求不明确时要求澄清
#import <Foundation/Foundation.h>
@interface Node : NSObject {
@public
id val;
Node *back;
}
@end
@implementation Node
@end
@interface NSArray (LIS)
- (NSArray *)longestIncreasingSubsequenceWithComparator:(NSComparator)comparator;
@end
@implementation NSArray (LIS)
- (NSArray *)longestIncreasingSubsequenceWithComparator:(NSComparator)comparator {
NSMutableArray *pileTops = [[NSMutableArray alloc] init];
// sort into piles
for (id x in self) {
Node *node = [[Node alloc] init];
node->val = x;
int i = [pileTops indexOfObject:node
inSortedRange:NSMakeRange(0, [pileTops count])
options:NSBinarySearchingInsertionIndex|NSBinarySearchingFirstEqual
usingComparator:^NSComparisonResult(Node *node1, Node *node2) {
return comparator(node1->val, node2->val);
}];
if (i != 0)
node->back = pileTops[i-1];
pileTops[i] = node;
}
// follow pointers from last node
NSMutableArray *result = [[NSMutableArray alloc] init];
for (Node *node = [pileTops lastObject]; node; node = node->back)
[result addObject:node->val];
return [[result reverseObjectEnumerator] allObjects];
}
@end
int main(int argc, const char *argv[]) {
@autoreleasepool {
for (NSArray *d in @[@[@3, @2, @6, @4, @5, @1],
@[@0, @8, @4, @12, @2, @10, @6, @14, @1, @9, @5, @13, @3, @11, @7, @15]])
NSLog(@"an L.I.S. of %@ is %@", d,
[d longestIncreasingSubsequenceWithComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}]);
}
return 0;
}