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; 节点*返回; } @结束 @实现节

我有很多基于算法的编码访谈(coderpad.io)和在线挑战,比如Objective-c中的hackerrank。我不经常这样做,我想知道是否允许我使用内置的排序、搜索和比较函数来解决算法问题,如下面所示

在编码面试中,我是否必须假装Objective-c没有排序、反转和其他实用程序?

还是一切都是公平的,只是把解决方案拿出来

如果有更好的媒介来问这个问题,请告诉我在哪里张贴这个

从这里开始:

#导入
@接口节点: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;
}