常见数据结构: Stack(栈)、Queue(队列)、LinkedList(链表)、Set(集合)、Hash Table(哈希表/散列表)、Tree(树)、Trie(字典树)、Graph(图)
- Stack实现
- Stack-进制转换问题
- Stack-平衡圆括号问题
- Stack-汉诺塔问题
- Stack-棒球比赛问题
- 查找数组中某个数的位置
- 使用归并排序合并两个有序数组
- 电话号码的组合问题(公式运算,主要涉及排列组合)
- 卡牌问题(归类运算)
- 种花问题(筛选运算/过滤运算)
- 格雷编码问题(二进制运算)
- Queue实现
- Queue-deque实现(双端队列)
- Queue-击鼓传花游戏问题(循环队列)
- Queue-回文检查器问题(双端队列)
- 单向链表和双向链表实现
- 循环链表实现
- 链表排序问题
- 环形链表问题
- Set实现
- 集合运算(并、交、差、子集,ES5和ES6以及扩展运算符实现)
- 唯一的摩尔斯密码词问题
- 两个数组的交集Ⅰ问题
- Map实现
- 两个数组的交集Ⅱ问题
- HasbTable实现
- 散列表处理冲突
- 字符串中的第一个唯一字符问题
- 计算一个数的阶乘
- 斐波那契数列
- 复原IP地址问题
- 二叉树和二叉搜索树
- 树的遍历(中序遍历、先序遍历和后序遍历)
- 搜索树中的值
- 自平衡树(AVL树和红黑树)
- 二叉堆
- 堆排序(Heapsort)
- 冒泡排序
- 选择排序
- 插入排序
- 归并排序
- 快速排序
- 计数排序
- 桶排序
- 基数排序
- 顺序搜索
- 二分搜索
- 内插搜索
- 分而治之(二分搜索)
- 动态规划(最少硬币找零问题、背包问题、最长公共子序列问题、矩阵链相乘问题)
- 贪心算法(最少硬币找零问题、分数背包问题)
- 回溯算法(迷宫老鼠问题、数独解题器)
- 分支限界法
十大经典排序算法
- 插入排序
- 希尔排序
- 选择排序
- 冒泡排序
- 归并排序
- 快速排序
- 堆排序
- 基数排序
关于时间复杂度:
- 平方阶 (O(n2)) 排序 各类简单排序:插入排序、选择排序和冒泡排序。
- 线性对数阶 (O(nlog2n)) 排序:快速排序、堆排序和归并排序;
- O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序
- 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。
关于稳定性:
稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。
不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。
参考地址:
https://juejin.cn/post/6844903875904815111#comment
https://github.com/DavidChen93/-offer-JS-
https://github.com/luxiangqiang/JianZhi-Offer_JavaScript
https://shenlvmeng.github.io/blog/2017/07/27/interview-algorithm-md/
https://juejin.cn/post/6844903921496899592#comment
https://github.com/14glwu/FEInterviewBox/tree/master/%E5%89%91%E6%8C%87offer
https://www.cnblogs.com/wuguanglin/p/code-interview.html
JS刷题经验:https://www.nowcoder.com/discuss/72658
- 替换空格
- 字符串的全排列
- 翻转单词顺序
- 实现atoi
- 旋转数组最小的数字
- 数字在排序数组中出现的次数
- 从尾到头打印链表
- 快速删除链表节点
- 链表倒数第k节点
- 反转链表
- 合并两个有序链表
- 复杂链表的复制
- 两个链表中的第一个公共节点
- 二维数组中的查找
- 数组顺序调整
- 把数组排成最小的数
- 数组值的逆序对
- 用两个栈实现队列
- 包含min函数的栈
- 栈的压入弹出序列
- 青蛙跳台阶
- 数值的整次方
- 打印从1到最大的n位数
- 顺时针打印矩阵
- 数组中出现次数超过一半的数字
- 最小的k个数
- 和为s的连续正数序列
- n个骰子的点数
- 扑克牌的顺子
- 圆圈中最后剩下的数字
- 重建二叉树
- 判断是否子树
- 二叉树的镜像
- 二叉搜索树的后序遍历序列
- 二叉树中和为某一值的路径
- 二叉树层序遍历
- 二叉树转双向链表
- 判断是否是平衡二叉树
- 二进制中1的个数
- 二进制中1的个数进阶版
- 数组中只出现一次的数字
- 丑数
- 第一次只出现一次的字符
- 最小的k个数
本仓库主要结合书籍、视频和网络文章进行资料整合和学习,记录自己学习数据结构与算法的过程。
参考书籍: 《我的第一本算法书》及配套APP、《学习JavaScript数据结构与算法》、《算法图解》、《数据结构与算法图解》
参考视频: bobo老师的《玩转算法系列——数据结构精讲》、《算法与数据结构》、快乐动起来老师的《JavaScript数据结构与算法》,请支持老师正版。
参考文章(不断更新): https://www.cnblogs.com/xiaohuochai/tag/javascript%E6%80%BB%E7%BB%93/ https://github.com/biaodigit/JavaScriptAlgorithms https://segmentfault.com/a/1190000020011987
剑指Offer的JavaScript分类整理: https://xin-tan.com/passages/2019-06-23-algorithm-offer/#%E4%BB%8B%E7%BB%8D
bobo老师课程JavaScript版本: https://github.com/biaodigit/Play-with-Data-Structures
十大经典排序算法: https://github.com/hustcc/JS-Sorting-Algorithm
坚持坚持坚持!!!