写点什么

无敌!全面对标字节跳动 2-2:算法与数据结构突击手册 (leetcode)

发布于: 2021 年 01 月 20 日

算法能力是每一个程序员的基本功,只懂模型不懂算法,注定只是一个“绣花枕头”,而非真正的工程师。


众所周知,程序员求职面试必考算法,题刷得好,拿 Offer 更有优势。但是,没有坚实的算法知识体系储备,没有长期持之以恒算法题目训练,很难脱颖而出。


所以,为有需要的朋友们送上一套【算法与数据结构突击手册】的福利。按照算法知识体系,精心筛选 leetcode、HDU 等平台 1000+经典题目。


需要获取得话麻烦一键三连之后看下图小助理的微信:(vip1024x)添加即可免费获取到哦


话不多说直接上文档展示图:


字符串


  • 旋转词

  • 单词间逆序

  • 字符串循环左移

  • 字符串数组拼接为最小字符串

  • 变形词

  • 括号匹配

  • 最长无重复子串长度

  • 正则表达式匹配

  • 替换空格

  • 第一个只出现一次的字符

  • atoi



二叉树


  • 非递归先中后序遍历

  • 层序遍历

  • 换行层序遍历

  • 层序遍历至二维数组

  • 之字形打印二叉树

  • 二叉树的深度(递归;非递归)

  • 前序遍历重建二叉树

  • 翻转二叉树

  • 判断一棵二叉树是否是另-棵二叉树的子树

  • 平衡二叉树判断(后序遍历)

  • 二叉搜索树判断(4 种算法,中序遍历最优)

  • 完全二叉树判断( 层序遍历)

  • 求任意节点的后继节点

  • 折纸的折痕(RVL 中序遍历)

  • 二叉搜索树查错(中序遍历)

  • 二叉树节点间最大距离(后序遍历)

  • 二叉树中的最大二叉搜索子树(后序遍历)

  • 前中序遍历重建二叉树

  • 二叉树判断是否对称(先序遍历)

  • 二又树的所有路径(先序遍历)

  • 二叉树中和为某值的所有路径

  • 二叉搜索树转为有序双向链表(中序遍历)

  • 二叉搜索树的第 k 个节点(从小到大)

  • 二叉树父节点(先序遍历)

  • 二叉树第 k 层节点个数

  • 有序数组重建 BST/AVL

  • 有序链表重建 BST/AVL

  • (Skip)二叉树中两节点的最小公共祖先 LeastCommonAncestor LCA

  • 二叉树节点间的最短路径

  • 递归打印文件和目录



排序


  • 快速排序(拆分为 qui ckSor t 和 parti ti on 的版本)

  • 快速排序非递归实现

  • 数组中出现次数超过一半的数字/中位数 ( 类似于快速排序)

  • 无序数组 Top K

  • 无序数组中的第 k 大元素(基于 partition)

  • 数据流中的中位数

  • 两个有序数组找中位数( 待解决)

  • 几乎有序的数组排序(改进后的堆排序)

  • 有序数组合并

  • 有序矩阵搜索

  • 需要排序的最短子数组长度

  • 三色排序(类似快排)

  • 数组中的逆序对(待解决)

  • 有序数组中和为某值的数对( 2Sum )

  • 3Sum

  • 数组中所有数对的最大差值

  • (Skip)数组中邻近数对的最大差值


二分搜索


  • 简单二分搜索

  • 二分搜索最小位置

  • 二分搜索最大位置

  • 有序数组中某个数字的出现次数

  • 搜索任意一个局部最小的位置

  • 循环有序数组的最小值

  • 最左侧『数值和下标相等』的元素

  • 完全二叉树计数

  • 快速 N 次方



栈与队列


  • 数组实现循环队列

  • 可以查询最值的栈

  • 双栈实现队列

  • 栈逆序

  • 双栈排序

  • 滑动窗口

  • (Skip)数组转类似于大顶堆的二叉树 MaxTree

  • 调整数组顺序使奇数位于偶数前面

  • 栈的压入、弹出序列是否匹配

  • 逆序打印链表



链表


  • 单链表翻转

  • 有序循环链表插入

  • 单链表删除当前节点

  • 链表分化(按与某值比较结果分化为三条小链表)

  • 调整链表顺序使奇数位于偶数前面

  • 两个有序链表的公共值

  • 链表每 K 个节点间逆序

  • 链表删除指定值

  • 无序链表删除重复节点

  • 有序链表删除重复节点

  • 判断链表是否为回文

  • 简单链表复制

  • 复杂链表复制

  • 链表判环

  • 无环单链表判交

  • 有环单链表判交

  • 单链表判交(可能有环也可能无环)

  • 约瑟夫问题

  • 找到倒数第 k 个节点(双指针,一指针先移动 k 步)

  • 删除倒数第 k 个节点

  • 合并两个有序链表

  • 单链表归并排序



位运算


  • 交换(异或)

  • 比较(移位,与,异或)

  • 寻找数组中唯一出现奇数次数的元素(异或)

  • 寻找数组中唯二出现奇数次数的元素(异或)

  • 寻找乱序后的连续数字[1,N]中缺失的数字/数组中唯一的重复数字

  • 二进制中 1 的个数

  • 判断是否是 2 的幂次

  • 求一个数的临近的较大的 2 的幂次(HashMap)

  • (Skip)数字序列中某一位的数字

  • 寻找重复数字(整数范围内) bitmap

  • 无序数组中数字的重复次数 hashmap

  • 求一个字符集合的所有可能子集 int as bitmap

  • 布隆过滤器



排列组合


  • 方格移动

  • 全排列

  • 打印从 1 到最大的 n 位数



矩阵


  • 口顺时针打印 m*n 矩阵

  • 口之字形打印 m*n 矩阵

  • 口从右上角到左下角打印 n*n 矩阵

  • 口从左上角到右下角打印 n*n 矩阵



概率


  • 两强相遇概率

  • 蚂蚁碰头

  • 随机函数

  • 随机 01

  • 随机数组打印



海量数据


  • 哈希函数

  • Map-Reduce

  • 词频统计——哈希表

  • 词频统计——Trie 树(还可以查询、前缀匹配、排序、去重)

  • 海量数据解题关键

  • 10 亿 IP 地址排序/10 亿数字排序

  • 10 亿人的年龄排序

  • 20 亿数字中出现次数最多的数

  • 40 亿数字中在 42 亿范围内没有出现过的数

  • 百亿词中出现次数最高的 10 个



动态规划 Dynamic Programming DP


  • 准则

  • 解法

  • 斐波那契序列/跳台阶

  • 换零钱

  • 最大连续子序列和

  • 最长上升子序列(不必连续) LIS longest increasing subsequence

  • 最长公共子序列(不必连续) LCS longest common subsequence

  • 01 背包

  • 矩阵最小路径和

  • 剪绳子 O(n^2)

  • 最长回文子串(待解决)

  • 数对之差的最大值(待解决)



回溯法


  • 矩阵中的路径

  • (Skip)机器人的运动范围

  • 数组中和为某值的所有子序列(待解决)



其他


  • 汉诺塔

  • 求素数/质数

  • 递归求阶乘

  • 求最大的 n,要求 n 的阶乘范围在 int 内

  • 数组中元素范围为[0,N-1],找出所有的/任意一个重复数字

  • 并集、交集、差集

  • 最小公倍数和最大公约数

  • 判断是否是回文数

  • 数组中第二大的数字

  • 数组中重复次数最多的数 hashmap



总目录展示



面试官为什么爱问数据结构与算法,答案很简单:


  • 算法能力能够准确辨别一个程序员的技术功底是否扎实;

  • 算法能力是发掘程序员的学习能力与成长潜力的关键手段;

  • 算法能力能够协助判断程序员在面对新问题时,分析并解决问题的能力;

  • 算法能力是设计一个高性能系统、性能优化的必备基础。


BAT 等国内的一线名企,在招聘工程师的过程中,对算法和数据结构都会重点考察。但算法易学难精,我的很多读者技术能力不错,但面试时总败在算法这一关,拿不到好 Offer。但说实话,数据结构和算法花点时间,用对方法,很容易解决。


以上的这份算法与数据结构突击手册,我相信能够很好的帮你搞定这个难题,需要的朋友们麻烦一键三连+评论,然后添加 VX(tkzl6666)即可免费领取




用户头像

微信:tkzl6666 添加获取你想要的Java资料 2019.01.29 加入

添加VX(tkzl6666 ) 获取大厂面试真题,面试复习资料,Java进阶资料,Java实战项目。

评论 (1 条评论)

发布
用户头像
无敌!全面对标字节跳动 2-2:算法与数据结构突击手册 (leetcode)
2021 年 01 月 20 日 16:34
回复
没有更多了
无敌!全面对标字节跳动2-2:算法与数据结构突击手册(leetcode)