王炸!MarsCode甄选算法题,面试官在力扣之外新选择(1)多米诺骨牌

一键直达 100 道甄选算法题 #豆包 MarsCode 放码过来 #豆包MarsCode 双节创意征文

面试痛点

程序员面试嘛,尤其是技术面,你懂的,管你熟不熟,上来先手撕算法题。这无疑是程序员们绕不开的痛点。无论是面试者还是面试官,都清楚算法题的难度所在。这种筛选方式常常让面试者绞尽脑汁,但只有当了面试官之后才会发现,出一道好的算法题,比做题更为艰难。

首先,日常工作中真正用到的算法,往往和具体的业务场景密切相关,适合通过行为面试来探讨,而非单纯的算法题来解决。而且,作为面试官,出题时必须对这些算法有极深的理解,甚至比面试者站得更高。若出题难度不够,可能会被经验丰富的候选人轻松"秒杀";如果出的是网上的经典题目,更是无法防住那些背题的面试者。

现场技术面还好一些,线上技术面的话,我就静静看应届生表演微笑不说话。一开始我总感觉这种表演对不起我的时间,现在我只觉得我的尬笑对得起他们各种渠道找的代充拼车 ChatGPT plus 每周的 o1 额度。

其次,题目不能太难。难度过高的话,不仅很少有人能解出来,也会失去筛选的意义------毕竟我们需要的是能体现面试者真实水平的区分度。而这恰恰是最具挑战的部分:既要出难度适中的题目,又要符合公司具体的技术需求。要知道,世界上顶级技术公司屈指可数,而绝大多数面试官并非都身处这些公司。因此,设计出能真正评估面试者实力的算法题,成了每个面试官的一道考验。

所以,算法题并非只让面试者头疼,对于面试官来说,也是"道高一尺,魔高一丈"的博弈过程。

面试官出算法题的心路历程

  1. vocal 我业务代码还没写完 / 我一个小时后还有会要开 / 这小孩简历上的学校甩我 18 条街 / 这小孩简历上的项目比我们组做的还🐂🍺 / 小孩哥项目里用的器材我不吃不喝干一年也买不起 / 这小孩哥水这么多论文不去读博要来狠赚笔 / 这小孩哥把 Java 之父的网站干崩了 叫我来面试?啊???
  2. 心态重建
  3. 一般到这时候还剩半小时,如果通知的时间更紧,这个时候也会剩下一半的时间,心情好一点了就选一个力扣中等题,心态崩了就在困难题里找了,实在没时间了就接雨水了。有点水平的面试官会在 codeforces 里按心情挑题。有公司题库就舒服了,挑一两个题库里的原题。
  4. 适用于没时间也要硬挤时间的情况:同学你做一下自我介绍吧,然后题库里挑一个题。
  5. 有准备的面试官会根据挑选出来的原题当母题,自己改编一下,比如数字换一换,比如把自己做题的时候卡的用例直接告诉面试者(对于困难题目)等等。

面试官出算法题的新选择

没错,就是 MarsCode 的刷题功能。这里的题目区分度好,而且界面也很适合模拟面试场景。我不是专业前端,只能从用户角度谈看法,轻喷。

总览

题目列表

在页面左侧是题目列表,就 100 题,可以收起。

收起以后三栏在屏幕里就不会特别挤,当然如果已经是带鱼屏了就当我没说。

题目详情栏和编辑器栏

我的建议是把题目栏往左边缩到最窄,这样之后点击题目名称的按钮就是题目栏最大,点击编辑器里的编程语言栏就是编辑器栏最大,写题的时候看着题目那么多字只会徒增焦虑。看不进去题目多半是被太多字给吓到了。

这是编辑器栏展开题目栏最窄:

这是题目栏展开编辑器栏最窄:

不用每次点两栏中间手动拖,一开始把题目栏拖到最窄,后面就不用管了。

编辑器栏可以切换语言:

这次咱们世界上最好的语言退环境了。

输出底栏

输出是跟着用例走的,好多人做算法题是不适应编辑器调试的,更喜欢打印大法

鼠标悬停在错误输出上是有 AI 帮忙改的选项的,省了一步把错误信息粘贴出来扔到和 AI 的对话框的力气。

AI 助手

这个 AI 助手聪明又不太聪明,这也是我推荐用这个来刷题的原因。

多米诺骨牌 - 题目原文www.marscode.cn/practice/9e...

自己去看 100 题列表里的这道题就行,我这个原文可能点进去是我的聊天记录带着我的代码。

我都这么问了,AI 也很听话,直接给答案代码,但是这个代码跑出来是错的:

python 复制代码
def solution(num, data):
    # 首先创建一个列表来记录每个骨牌的状态,0 表示竖立,-1 表示向左倒,1 表示向右倒
    state = [0] * num
    for i, c in enumerate(data):
        if c == 'L':
            state[i] = -1
        elif c == 'R':
            state[i] = 1
    # 从左到右遍历,处理向右倒的骨牌对相邻骨牌的影响
    for i in range(num - 1):
        if state[i] == 1 and state[i + 1] == 0:
            state[i + 1] = 1
    # 从右到左遍历,处理向左倒的骨牌对相邻骨牌的影响
    for i in range(num - 1, 0, -1):
        if state[i] == -1 and state[i - 1] == 0:
            state[i - 1] = -1
    # 统计竖立骨牌的数量和位置
    count = 0
    positions = []
    for i in range(num):
        if state[i] == 0:
            count += 1
            positions.append(i + 1)
    return count, positions

看完题目原文和这个代码就知道了,这样是没法找出正好在左 R 右 L 中间是奇数张牌情况下竖立骨牌的位置的。

而如果用太聪明的 AI,得出的结果就是这样的:

python 复制代码
def solution(num, data):
    # Please write your code here
    INF = float('inf')
    left_time = [INF] * num
    right_time = [INF] * num

    # 从左到右,记录向右的推力时间
    t = INF
    for i in range(num):
        if data[i] == 'R':
            t = 0
        elif data[i] == 'L':
            t = INF
        else:
            if t != INF:
                t += 1
        right_time[i] = t

    # 从右到左,记录向左的推力时间
    t = INF
    for i in range(num-1, -1, -1):
        if data[i] == 'L':
            t = 0
        elif data[i] == 'R':
            t = INF
        else:
            if t != INF:
                t += 1
        left_time[i] = t

    # 比较左右推力时间,确定骨牌状态
    upright = []
    for i in range(num):
        lt = left_time[i]
        rt = right_time[i]
        if lt == rt:
            upright.append(i+1)  # 位置从1开始
        # else:
        #     # 倾倒方向不影响输出
        #     pass

    if upright == []:
        return "0"

    def format_return_value(num, lst):
        return f"{num}:{','.join(map(str, lst))}"

    return format_return_value(len(upright), upright)


if __name__ == "__main__":
    #  You can add more test cases here
    print(solution(14, ".L.R...LR..L.."))
    print(solution(14, ".L.R...LR..L..") == "4:3,6,13,14" )
    print(solution(5, "R....") == "0" )
    print(solution(1, ".") == "1:1" )

这份代码能够过用例,和面试官一聊就会露馅。面试官期待的情况是允许面试者求助,但是能得到的帮助有限,而不是面试者得到帮助后题做出来了还没通过面试,被筛掉了。做出来题肯定是有兴奋感的,这个时候面试还不过这么强一个负反馈,放在谁身上都不好受。就是这种有限的提示和有限的帮助最适合模拟面试情况。

这个算是省力气的按钮,一般来说不给强 prompt,AI 都会给完整的代码,就算插入到光标处,还是要掐头去尾的,对于 python 来说可能还得整块改缩进。

这个是生产力按钮,尤其是这个不愿意直接给你正确答案的 AI,让他帮你解释实际上也是再读题的过程,多解释几遍自己就能真正理解题意了。

最下面会有新对话联想,对话联想最大的用处是你不懂某个错误,在输出里点 AI Fix 之后按照提示错误没修好,再在这里看对话联想的内容,这里能帮你拓展思路。

当然如果觉得这点提示不如不提示,越提示我我自己的思路越歪,还可以把 AI 聊天栏关掉,这样就是一个正常的刷题页面:

调试界面

就是普通的类似 VS Code 的调试界面,不是所有人都喜欢这个方式来调试,如果之前用 Jet Brains 家的 IDE 多,这里要花时间熟悉。

代码提示

也是有限的代码提示,对于面试来说刚刚好,足够克制,提示也到位了

自己模拟母题变形题

点页面中间的加号

然后把母题粘贴进去

假如母题是力扣原题,自己改动一点,这里的提示都会有变化。当然,错误的提示也是模拟面试中的一环。能在错误提示下自己找到正确思路然后把题的样例都过了,这样的人没有面试官不爱的。

题目区分度

困难 6 道

中等 57 道

简单 37 道

因为这里面的题都算新题,这个区分度和《剑指 offer》比起来要更适合当前的环境。

面试官对 AI 的态度

道高一尺魔高一丈,宁愿你大大方方用,拿着能正常写业务的 AI 来帮忙。这种级别的场外援助以后会越来越常见,而且和 AI 工作的能力也是一个面试考察点,不管日后是作为面试者还是面试官都要适应这种新的环境。当然面试者真的靠 AI 回复冒出来一两个题,再多出几道就能检验出真正的水平了。

相关推荐
P.H. Infinity6 分钟前
【LeetCode周赛】第 418 场
算法·leetcode·职场和发展
secaiyingzi37 分钟前
面试--开源框架面试题集合
redis·spring·面试·eureka·开源·rabbitmq·dubbo
水之魂201838 分钟前
leetcode数组(一)--二分查找
数据结构·算法
洛溪之恋1 小时前
一种用于超稳激光的数字控制锁频电路
算法
OCR_wintone4211 小时前
易泊:精准与高效的车牌识别解决方案
人工智能·深度学习·数码相机·ocr
luthane1 小时前
python 实现graph matrix图矩阵算法
python·算法·矩阵
ACALJJ321 小时前
CUDA:Sobel算子处理
人工智能·opencv·计算机视觉
luthane1 小时前
python 实现寻找无向图的关节点Articulation Points算法
python·算法·深度优先
说私域2 小时前
基于场景的营销:开源AI智能名片S2B2C商城小程序的机遇与挑战
人工智能·小程序
荔枝要好学2 小时前
排序算法之选择排序
数据结构·算法·排序算法