算法 - 我可以使用内置实用函数进行在线编码面试和挑战吗?

Ale*_*one 0 sorting algorithm objective-c data-structures

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

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

或者一切都是公平的游戏,只要找到解决方案就可以了?

如果有更好的媒介来提出这个问题,请告诉我在哪里发布这个问题。

从这里: https: //rosettacode.org/wiki/Longest_increasing_subsequence#Objective-C

#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;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ans 5

在编码面试期间,您总是可以询问是否可以使用库中的某个函数,但通常您可以,只要这不能让您免于实际解决问题。

例如,如果要求您实现排序,则不应通过调用库排序来实现。如果要求您实现一个完成某些任务的类,那么您不应该通过委托给已经提供来执行该任务的类来完成此任务。

上述耐心排序的实现通常没问题,因为所调用的库函数都与最长递增子序列问题无关。

在编码面试中,您确实应该从相反的角度思考这一点:问题是展示您技能的机会。你想炫耀什么?


Jim*_*hel 5

根据我的经验,通常提出的问题类型可以使用内置的排序、搜索等实用函数来解决,但使用它们可能不是最有效的方法。例如,从无序列表中选择前 k 个项目可以通过排序然后取出前 k 个项目来轻松解决。但这不是最佳解决方案。在面试中,面试官可能会要求你提供替代解决方案。在测试站点上,您的代码可能会超出时间限制。

对于面试,最好与面试官讨论您提出的解决方案。正如其他人所说,询问面试官是否可以使用内置方法。为了引发此类对话,面试问题通常故意含糊其辞。面试官对你的技术实力感兴趣,但也对你如何解决问题感兴趣。这包括在要求不明确时要求澄清。