本文转自掘金 - 图雀社区:字节跳动最爱考的64道算法题(JS版)
缘起
现在大厂面试中,算法题几乎为必考项,且近几年频现 LeetCode真题,此篇为拿到字节、腾讯、京东 Offer的笔者本人在准备面试过程中亲自刷过以及遇到过高频算法题。文章内容会分模块整理,对于笔者在面试过程中遇到的真题,会给予着重
【🔥】标出。
同时,可以毫不客气的说,如果你准备时间有限,又想追求算法题准备效率最大化,那么你只需要按照大纲把下面的题目刷完,并把代码烂熟于心,就几乎可以应对
90% 的面试算法考题了。
整理这篇内容的目的一个是笔者在之前准备面试时的一点积累,而它确实也帮助笔者在面试算法题中过关斩将,同时呢,也希望能够在金三银四给予拼搏的你,一点点帮助就好!💪
文末有福利 :)😈
本篇内容包括如下模块:
- 高频算法题系列:链表
- 【🔥】【有真题】高频算法题系列:字符串
- 【🔥】【有真题】高频算法题系列:数组问题
- 高频算法题系列:二叉树
- 【🔥】高频算法题系列:排序算法
- 【🔥】高频算法题系列:二分查找
- 【🔥】高频算法题系列:动态规划
- 高频算法题系列:BFS
- 【🔥】高频算法题系列:栈
- 【🔥】高频算法题系列:DFS
- 【🔥】高频算法题系列:回溯算法
其中标🔥的部分代表非常高频的考题,其中不乏笔者遇到的原题。其中对于每一类,首先会列出包含的考题,然后针对每一道考题会给出难度、考察知识点、是否是面试真题,在每道题详细介绍时,还会给出每道题的LeetCode链接,帮助读者理解题意,以及能够进行实际的测验,还可以观看其他人的答案,更好的帮助准备。
高频算法题系列:链表
笔者遇到的高频链表题主要包含这几道:
- 通过链表的后续遍历判断回文链表问题 【简单】
- 链表的反向输出 【简单】
- 合并 K 个升序链表 【困难】
- K个一组翻转链表 【困难】
- 环形链表 【简单】
- 排序链表 【中等】
- 相交链表 【简单】
前序遍历判断回文链表
题解1
利用链表的后续遍历,使用函数调用栈作为后序遍历栈,来判断是否回文
/* |
题解2
通过快、慢指针找链表中点,然后反转链表,比较两个链表两侧是否相等,来判断是否是回文链表
/** |
反转链表
题解
/** |
合并K个升序链表
👉 【LeetCode 直通车】:23合并K个升序链表(困难)
题解
/** |
K 个一组翻转链表
👉 【LeetCode 直通车】:25 K个一组翻转链表(困难)
题解
/** |
环形链表
题解
/** |
排序链表
题解
/** |
相交链表
题解
/** |
【🔥】高频算法题系列:字符串
主要有以下几类高频考题:
- 最长回文子串 【中等】【双指针】【面试真题】
- 最长公共前缀 【简单】【双指针】
- 无重复字符的最长子串【中等】【双指针】
- 最小覆盖子串 【困难】【滑动窗口】【面试真题】
【面试真题】最长回文子串【双指针】
题解
/** |
最长公共前缀【双指针】
题解
/** |
无重复字符的最长子串【双指针】
👉 【LeetCode 直通车】:3无重复字符的最长子串(中等)
题解
/** |
【面试真题】 最小覆盖子串【滑动窗口】
题解
/** |
【🔥】高频算法题系列:数组问题
主要有几类高频考题:
- 俄罗斯套娃信封问题【困难】【排序+最长上升子序列】【面试真题】
- 最长连续递增序列 【简单】【双指针】
- 最长连续序列【困难】【哈希表】
- 盛最多水的容器【困难】【面试真题】
- 寻找两个正序数组的中位数【困难】【双指针】
- 删除有序数组中的重复项【简单】【快慢指针】
- 和为K的子数组【中等】【哈希表】
- nSum 问题【系列】【简单】【哈希表】
- 接雨水【困难】【暴力+备忘录优化】【面试真题】
- 跳跃游戏【系列】【中等】【贪心算法】
【面试真题】俄罗斯套娃信封问题【排序+最长上升子序列】
👉 【LeetCode 直通车】:354俄罗斯套娃信封问题(困难)
题解
/** |
最长连续递增序列【快慢指针】
👉 【LeetCode 直通车】:674最长连续递增序列(简单)
题解
/** |
最长连续序列 【哈希表】
👉 【LeetCode 直通车】:128最长连续序列(困难)
题解
/** |
【面试真题】盛最多水的容器【哈希表】
👉 【LeetCode 直通车】:11盛最多水的容器(中等)
题解
/** |
寻找两个正序数组的中位数【双指针】
👉 【LeetCode 直通车】:4寻找两个正序数组的中位数(困难)
题解
/** |
删除有序数组中的重复项【快慢指针】
👉 【LeetCode 直通车】:26删除有序数组中的重复项(简单)
题解
/** |
和为K的子数组【哈希表】
👉 【LeetCode 直通车】:560和为K的子数组(中等)
题解
/** |
nSum问题【哈希表】【系列】
- 👉 【LeetCode 直通车】:1两数之和(简单)
- 👉 【LeetCode 直通车】:167 两数之和 II - 输入有序数组(简单)
- 👉 【LeetCode 直通车】:15 三数之和(中等)
- 👉 【LeetCode 直通车】:18 四数之和(中等)
受限于篇幅,这里只给出第一道题的代码模板,也是一面常考真题。
题解
/** |
【面试真题】接雨水【暴力+备忘录优化】
题解
/** |
跳跃游戏【贪心算法】【系列】
受限于篇幅,这里只给出第一道题的代码模板,也是一面常考真题。
题解
/** |
高频算法题系列:二叉树
主要有以下几类高频考题:
- 二叉树的最近公共祖先【简单】【二叉树】
- 二叉搜索树中的搜索【简单】【二叉树】
- 删除二叉搜索树中的节点【中等】【二叉树】
- 完全二叉树的节点个数【中等】【二叉树】
- 二叉树的锯齿形层序遍历【中等】【二叉树】
二叉树的最近公共祖先【二叉树】
👉 【LeetCode 直通车】:236 二叉树的最近公共祖先(简单)
题解
/** |
二叉搜索树中的搜索【二叉树】
👉 【LeetCode 直通车】:700 二叉搜索树中的搜索(简单)
题解
/** |
删除二叉搜索树中的节点【二叉树】
👉 【LeetCode 直通车】:450 删除二叉搜索树中的节点(中等)
题解
/** |
完全二叉树的节点个数【二叉树】
👉 【LeetCode 直通车】:222 完全二叉树的节点个数(中等)
题解
/** |
二叉树的锯齿形层序遍历【二叉树】
👉 【LeetCode 直通车】:103 二叉树的锯齿形层序遍历(中等)
题解
/** |
【🔥】高频算法题系列:排序算法
主要有以下几类高频考题:
- 用最少数量的箭引爆气球【中等】【排序】
- 合并区间【中等】【排序算法+区间问题】【面试真题】
用最少数量的箭引爆气球【排序算法】
👉 【LeetCode 直通车】:452 用最少数量的箭引爆气球(中等)
题解
/** |
合并区间【排序算法+区间问题】
题解
/** |
高频算法题系列:二分查找
主要有以下几类高频考题:
- 寻找两个正序数组的中位数【困难】【二分查找】
- 判断子序列【简单】【二分查找】
- 在排序数组中查找元素的第一个和最后一个位置【中等】【二分查找】
寻找两个正序数组的中位数【二分查找】
👉 【LeetCode 直通车】:4 寻找两个正序数组的中位数(困难)
题解
/** |
判断子序列【二分查找】
👉 【LeetCode 直通车】:392 判断子序列(简单)
题解
/** |
💁 在排序数组中查找元素的第一个和最后一个位置【二分搜索】
👉 【LeetCode 直通车】:34 在排序数组中查找元素的第一个和最后一个位置(中等)
题解
/** |
【🔥】高频算法题系列:动态规划
主要有以下几类高频考题:
- 最长递增子序列【中等】【动态规划】
- 零钱兑换【中等】【动态规划】【面试真题】
- 最长公共子序列 【中等】【动态规划】【面试真题】
- 编辑距离 【困难】【动态规划】
- 最长回文子序列【中等】【动态规划】【面试真题】
- 最大子序和【简单】【动态规划】【面试真题】
- 买卖股票的最佳时机系列【系列】【动态规划】【面试真题】
最长递增子序列【动态规划】
👉 【LeetCode 直通车】:300 最长递增子序列(中等)
题解
/** |
【面试真题】 零钱兑换【动态规划】
题解
/** |
【面试真题】 最长公共子序列【动态规划】
👉 【LeetCode 直通车】:1143 最长公共子序列(中等)
题解
/** |
编辑距离【动态规划】
题解
/** |
【面试真题】最长回文子序列【动态规划】
👉 【LeetCode 直通车】:516 最长回文子序列(中等)
题解
/** |
【面试真题】💁 最大子序和【动态规划】
题解
/** |
【面试真题】💁 买卖股票的最佳时机【动态规划】
- 👉 【LeetCode 直通车】:121 买卖股票的最佳时机(简单)【面试真题】
- 👉 【LeetCode 直通车】:122 买卖股票的最佳时机 II(简单)
- 👉 【LeetCode 直通车】:123 买卖股票的最佳时机 III(困难)
- 👉 【LeetCode 直通车】:188 买卖股票的最佳时机IV(困难)
- 👉 【LeetCode 直通车】:309 买卖股票的最佳时机含冷冻期(中等)
- 👉 【LeetCode 直通车】:714 买卖股票的最佳时机含手续费(中等)
受限于篇幅,这里只给出第一道题的代码模板,也是一面常考真题,笔者在面试字节跳动时就遇到过。
题解
/** |
高频算法题系列:BFS
主要有以下几类高频考题:
- 打开转盘锁【中等】【BFS】
- 二叉树的最小深度【简单】【BFS】
打开转盘锁【BFS】
👉 【LeetCode 直通车】:752 打开转盘锁(中等)
题解
/** |
二叉树的最小深度【BFS】
👉 【LeetCode 直通车】:111 二叉树的最小深度(简单)
题解
/** |
【🔥】高频算法题系列:栈
主要有以下几类高频考题:
- 最小栈【简单】【栈】
- 有效的括号【中等】【栈】【面试真题】
- 简化路径【中等】【栈】
- 下一个更大元素 【系列】【栈】
最小栈【栈】
题解
/** |
【系列】下一个更大元素 【栈】
受限于篇幅,这里只给出第一道题的代码模板
题解
/** |
【面试真题】有效的括号【栈】
题解
/** |
简化路径【栈】
题解
/** |
【🔥】高频算法题系列:DFS
主要有以下几类高频考题:
- 岛屿的最大面积【中等】【DFS】
- 相同的树【简单】【DFS】
岛屿的最大面积【DFS】
👉 【LeetCode 直通车】:695 岛屿的最大面积(中等)
题解
/** |
相同的树【DFS】
题解
/** |
【🔥】高频算法题系列:回溯算法
主要有以下几类高频考题:
- N皇后【困难】【回溯算法】【面试真题】
- 全排列【中等】【回溯算法】
- 括号生成【中等】【回溯算法】
- 复原 IP 地址【中等】【回溯算法】
- 子集 【简单】【回溯算法】
【面试真题】N皇后【回溯算法】
题解
/** |
全排列【回溯算法】
题解
/** |
括号生成【回溯算法】
题解
/** |
复原 IP 地址【回溯算法】
👉 【LeetCode 直通车】:93 复原 IP 地址(中等)
题解
/** |
子集【回溯算法】
题解
/** |
文末福利
推荐一个非常有帮助的刷算法题的网址,labuladong的算法小抄,通过套路,认准高频题目,直通大厂;这本小抄目前已经出版成书,对应的Github 仓库也有 86.2K Star,而且作者还在频繁更新,非常值得学习!
❤️谢谢
往期精文
- 字节跳动最爱考的前端面试题:JavaScript基础 2696 👍
- 字节跳动最爱考的前端面试题:CSS基础 687 👍
- 字节跳动最爱考的前端面试题:计算机网络基础 761 👍
欢迎关注公众号:图雀社区
如果你想从零开始以实战的方式学习一门技术,亦或是想动手做一个比较完整的项目以准备面试,相信「图雀社区」的内容都能够帮助到你,成为初入前端的你成长路上的指南针。