一个半小时的腾讯一面,人麻了

前言

前两天也是抱着玩一玩的心态投了下腾讯,没想到还真给我约到面试了,心里也是忐忑不安起来,但好在腾讯可以无限复活,无所谓了大不了就挂呗,就当去学习一下了, 上来就是三道算法题,都不让你先自我介绍,写不出来直接别面了😂下面一起来看下腾讯的算法面试题吧。

第一道算法题

笔者找了好久都没找到这道题的原题是什么,上来就是一个文字没有,让实现一个HardMan函数。

刚看到这道题确实是没什么头绪的,于是乎我先去看后面的两道题了,后面才想起来应该要用promise来进行回调什么的,下面是我当时写的代码,写的一坨屎,还不能运行,现场又不会debug😭

面试官看我思路没什么问题就一直在引导我,但是当时人直接懵了😭什么都想不起来什么都不会。来看下正确的答案吧,我写的代码因为promise没有返回,所以就执行不到learn方法,这段代码加个async就很好的可以解决了。

javascript 复制代码
function HardMan(name) {
    console.log(`I am ${name}`);
    return {
        rest: function (seconds) {
            return new Promise((resolve) => {
                setTimeout(() => {
                    console.log(`// 等待 ${seconds} 秒`);
                    resolve();
                }, seconds * 1000);
            });
        },
        learn: async function (subject) {
            await this.rest(5); // 默认等待5秒
            console.log(`Start learning after 5 seconds`);
            console.log(`Learning ${subject}`);
        }
    };
}

打家劫舍II

力扣上213原题,之前跟着代码随想录刷过,脑子里不仅有思路还有完整的代码,心想总算能给我装一下了😂

js 复制代码
var rob = function(nums) {
  const n = nums.length 
  if (n === 0) return 0 // 没有房子
  if (n === 1) return nums[0]
  // 两种情况
  const result1 = robRange(nums, 0, n - 2)
  const result2 = robRange(nums, 1, n - 1)
  return Math.max(result1, result2)
};

const robRange = (nums, start, end) => {
  if (end === start) return nums[start]
  const dp = Array(nums.length).fill(0)
  // 初始化dp数组
  dp[start] = nums[start]
  dp[start + 1] = Math.max(nums[start], nums[start + 1]) // 状态转移方程
  for (let i = start + 2; i <= end; i++) {
    dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1])
  }
  return dp[end]
}

由于笔者对这道题目印象还算深刻,写的时候也是假装在认真思考,然后写点注释,笑死了,面试官还说我思路非常清晰,殊不知我压根就是背出来的,纯属装X😎

打家劫舍III

力扣上337原题,在代码随想录中也有看到过,但是当时觉得有点难就没管,最后这道题也就没写出来😭,这道题跟打家劫舍II如出一辙,不过这个换成树了。

ini 复制代码
const rob = root => {
    // 后序遍历函数
    const postOrder = node => {
        // 递归出口
        if (!node) return [0, 0];
        // 遍历左子树
        const left = postOrder(node.left);
        // 遍历右子树
        const right = postOrder(node.right);
        // 不偷当前节点,左右子节点都可以偷或不偷,取最大值
        const DoNot = Math.max(left[0], left[1]) + Math.max(right[0], right[1]);
        // 偷当前节点,左右子节点只能不偷
        const Do = node.val + left[0] + right[0];
        // [不偷,偷]
        return [DoNot, Do];
    };
    const res = postOrder(root);
    // 返回最大值
    return Math.max(...res);
};

现场因为太紧张了又没刷这道题导致没写出来,但还是依照第二题有模有样的跟面试官说了下思路,现在来看,这道题还是要看对二叉树的后序遍历熟不熟悉,还是得老老实实刷代码随想录😭

相关推荐
拉不动的猪32 分钟前
无缝适配 PC 和移动端‌我们要注意哪些点呢
前端·javascript·面试
酱酱们的每日掘金1 小时前
🔥 4 月精选:AICoding Cursor上新与 MCP 实战揭秘!- AI Coding 周刊第 5 期
前端·ai编程·mcp
天天扭码1 小时前
一分钟解决 | 高频面试算法题——和为 K 的子数组(前缀和)
前端·算法·面试
搞瓶可乐2 小时前
鸿蒙ArkUI之布局实战,线性布局(Column,Row)、弹性布局(Flex)、层叠布局(Stack),详细用法
前端·harmonyos·鸿蒙系统·arkui·弹性布局·布局实战·堆叠布局
爱看书的小沐2 小时前
【小沐杂货铺】基于Three.JS绘制卫星轨迹Satellite(GIS 、WebGL、vue、react,提供全部源代码)
javascript·vue.js·webgl·three.js·卫星轨道·地球earth·satellite
Aphasia3112 小时前
小厂面试常考算法题整合(一)✍🏻
前端·算法·面试
五月仲夏2 小时前
React基础知识(补充中)
前端·react.js·前端框架
王富贵的记录2 小时前
React 函数组件和类组件的区别
前端·javascript·react.js
yuhaiqiang2 小时前
在公司写代码是工作,在开源社区写代码是生活
前端·后端
左耳咚2 小时前
Egg.js 服务端 HTML 强缓存问题排查与解决
前端·egg.js