📜  高盛面试经历(1.8年经验)

📅  最后修改于: 2021-09-23 06:16:45             🧑  作者: Mango

HR 在 LinkedIn 上联系了我

第 1 轮(在线编码轮):Hackerrank 平台 1 小时 30 分钟

  1. 给定一个输入字符串,编写一个函数,返回行程编码的输入字符串的字符串。
    For example, 
    if the input string is “wwwwaaadexxxxxx”, 
    then the function should
    return “w4a3d1e1x6”
    Expected Time Complexity: O(n) 
  2. 让 1 代表“A”,2 代表“B”,等等。给定一个数字序列,计算给定数字序列可能的解码次数。
    Input:  
    digits[] = "121" 
    Output: 3   
    The possible decoding's are
     "ABA", "AU", "LA"
    Input: 
    digits[] = "1234" 
    Output: 3   
    The possible decoding's are
     "ABCD", "LCD", "AWD"
    Expected Time Complexity: O(n) 

第 2 轮(F2F 编码轮):CoderPad 与 Goldman Sachs 开发人员

  1. 给定一个字符串字符串数组,将字谜组合在一起。您可以按任何顺序返回答案。

    字谜是通过重新排列不同单词或短语的字母而形成的单词或短语,通常只使用一次所有原始字母。

    Input: 
    strs = ["eat","tea","tan","ate",
    "nat","bat"]
    Output: 
    [["bat"],["nat","tan"],
    ["ate","eat","tea"]]
    Expected Time Complexity: O(n) 
  2. 给定一个包含学生姓名数据和他/她在 3 个科目中得分的文件。任务是找到具有最高平均分数的学生列表。

    如果超过一名学生的平均分数最高,则按照文件中的顺序打印它们。

    Input: 
    file[] = {“Shrikanth”, “20”, “30”, 
    “10”, “Ram”, “100”, “50”, “10”}  
    Output: 
    Ram 53  

    Shrikanth、Ram 的平均得分分别为 20 和 53。所以 Ram 的最高平均分是 53。

    预期时间复杂度:O(n)

第 3 轮(F2F Coding Round on Zoom):CoderPad 与两名高盛开发人员

  1. 给定一个链表,编写一个函数来反转每 k 个节点(其中 k 是函数的输入)。
    Input: 
    1->2->3->4->5->6->7->8->NULL, K = 3  
    Output: 
    3->2->1->6->5->4->8->7->NULL 
    Expected Time Complexity: O(n) 
    Auxiliary Space: O(n/k). 
  2. 给定一个二叉搜索树 (BST) 和一个正整数 k,找到二叉搜索树中第 k 大的元素。
  3. 设计一个数据结构 SpecialStack,它支持所有堆栈操作,如 push()、pop()、isEmpty()、isFull() 和一个附加操作 getMin(),它应该从 SpecialStack 返回最小元素。 SpecialStack 的所有这些操作都必须是 O(1)。要实现 SpecialStack,您应该只使用标准的 Stack 数据结构,而不要使用其他数据结构,如数组、列表等。
    Example:  
    Consider the following
    SpecialStack
    16  --> TOP
    15
    29
    19
    18
    When getMin() is called it
    should return 15, 

第 4 轮(F2F 编码轮放大):CoderPad 与两名高盛开发人员

  1. 给定一个大小为 n 的未排序数组 arr[0..n-1],找到最小长度子数组 arr[s..e] 使得对该子数组进行排序使整个数组排序。

    示例:如果输入数组是 [10, 12, 20, 30, 25, 40, 32, 31, 35, 50, 60],您的程序应该能够找到子数组位于索引 3 和 8 之间。

  2. 给定一个二元数组,其中将元素从索引 i 移动到索引 j 需要 abs(i – j) 成本。任务是找到将所有 1 移动到给定数组的每个索引的成本。
    Input: 
    arr[] = {0, 1, 0, 1}
    Output: 
    4 2 2 2

    解释:

    将元素从索引 1、索引 3 移动到索引 0 需要 abs(0 – 1) + abs(0 – 3) = 4。

    将元素从索引 1、索引 3 移动到索引 1 需要 abs(1 – 1) + abs(1 – 3) = 2。

    将元素从索引 1、索引 2 移动到索引 2 需要 abs(2 – 1) + abs(2 – 3) = 2。

    将元素从索引 1、索引 2 移动到索引 3 需要 abs(3 – 1) + abs(3 – 3) = 2。

    因此,所需的输出是 4 2 2 2。

第 5 轮(放大的 F2F 编码轮):CoderPad 与两名高盛开发人员

  1. 将 N 个国际象棋皇后放在 N×N 棋盘上的问题,以便没有两个皇后互相攻击。

    预期输出是一个二进制矩阵,其中放置皇后的块为 1。

    例如,以下是上述 4 皇后解决方案的输出矩阵。

    { 0,  1,  0,  0}
    { 0,  0,  0,  1}
    { 1,  0,  0,  0}
    { 0,  0,  1,  0}

    解决方案:使用递归和回溯

  2. 实现一个支持以下接口的 SnapshotArray:

    SnapshotArray(int length) 用给定的长度初始化一个类似数组的数据结构。最初,每个元素都等于 0。

    void set(index, val) 将给定索引处的元素设置为等于 val。

    int snap() 获取数组的快照并返回 snap_id:我们调用 snap() 的总次数减 1。

    int get(index, snap_id) 返回给定索引处的值,当时我们使用给定的 snap_id 拍摄快照

    解决方案:使用 Node 类的二维数组,一维用于存储索引,二维用于存储快照。对于每个索引获取特定 snap id 的值,我们可以使用二分搜索,因为每个索引中的 snap 数组将被排序,并且 get 操作的复杂性降低到 log(N)

第 6 轮(F2F Coding Round on Zoom):CoderPad 与两名高盛开发人员

  1. https://www.hackerrank.com/challenges/connected-cell-in-a-grid/problem

第 7 轮(放大的 F2F 编码轮):CoderPad 与两名高盛开发人员

  1. 给定一个随机数数组,将给定数组的所有零推到数组的末尾。例如,如果给定的数组为 {1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0},则应将其更改为 {1, 9, 8, 4, 2, 7, 6, 0, 0, 0, 0}。所有其他元素的顺序应该相同。

    预期时间复杂度为 O(n),额外空间为 O(1)。

  2. Java和Python一些与字符串相关的基础知识和字符串。

第 8 轮(F2F Round on Zoom):CoderPad 与两名高盛开发人员

  1. 关于我最近的项目、我从事的技术和缓存疏散策略的几个问题。
  2. 客户财富管理 (CWM Goldman Sachs) 团队、产品和技术栈简介高盛的用途。

经过这些轮次之后,我终于收到了一封来自 HR 的邮件,要求进行薪酬讨论。