有哪些有梯度的刷题网站或app推荐

2,920 阅读8分钟

本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构等核心知识点,欢迎star~

Github地址:github.com/Tyson0314/J…

Gitee地址:gitee.com/tysondai/Ja…

话不多说,直接上干货!

首先推荐几个学习数据结构和算法的网站和可视化工具。

Data Structure Visualizations

这是一个在线数据可视化工具,可以手动创建各种数据结构,包括队列、栈、堆、树等等,并且支持递归、排序、搜索等算法的动态演示。该工具由旧金山大学开发,地址:www.cs.usfca.edu/~galles/vis…

这个工具通过可视化的方式展现了数据结构和算法,方便我们理解其中的原理。网站容易操作、内容丰富且容易理解,非常nice~虽然网站是英文的,不过都是些容易理解的术语,英文不好的小伙伴也不会有很大的阅读障碍。

下图演示红黑树插入节点的操作,非常直观!

visualgo

该网站由 Steven Halim 博士开发,对于理解数据结构与算法非常有帮助。网站里面包含了排序、链表、哈希表、二叉搜索树、递归树、循环查找等常见算法动画。

地址:visualgo.net/zh

在动画执行的过程中,还会在网站右下角高亮展示动画的代码逻辑。非常适合初学者学习巩固自己的算法知识。

BinaryTreeVisualiser

一款二叉树可视化的工具,可以用来学习二叉树,超级好用。地址:btv.melezinek.cz/home.html

btree-js

这是一个专门演示B树的工具,可以在上面插入节点模拟B树的构建过程,对于理解B树这种数据结构非常有帮助。

地址:yangez.github.io/btree-js/

Algorithm Visualizer

Algorithm Visualizer 是一个可视化代码算法的交互式平台,内含多种算法(回溯、动态规划、贪心等)并进行了可视化动画呈现,让学习算法和数据结构更加直观。

地址:algorithm-visualizer.org/

目前支持的算法包括回溯法、动态规划、贪婪算法、排序算法、搜索算法等。

Algorithm Visualizer支持js/C++/Java语言,运行会有动态图演示代码运行过程,日志输出区记录每次搜索的过程。

bigocheatsheet

这个网站总结了常用算法的时空Big-O复杂性,常见数据结构操作的时间复杂度。

链接直达:www.bigocheatsheet.com/

Algorithms-DataStructures-BigONotation

这也是一个可以查看算法分析的网站工具,功能相比bigocheatsheet,更丰富一些。

地址:cooervo.github.io/Algorithms-…

在看了上面这些网站之后,想必你的算法水平已经有了非常大的进步[狗头],接下来就可以刷题实践。

下面推荐几个比较好用的刷题网站。难度从易到难。

Programming by Doing

网站的宗旨就是:“学习的最好方法就是去做”。

地址:www.programmingbydoing.com/

以作业的形式整理的编程基础题,题目相对还是比较简单的,适合刚入门的初学者。

洛谷

地址:www.luogu.com.cn/

洛谷上的题目很多,还有很多的基础题,使用体验良好。

缺点是没有相应的阶梯训练,筛选方式比较少。

牛客网

作为牛客红名大佬,来给牛客宣传一波!(牛客打钱!)

牛客网拥有超级丰富的 IT 题库,题库+面试+学习+求职+讨论,基本涵盖所有面试笔试题型,堪称"互联网求职神器"。在这里不仅可以刷题,还可以跟其他牛友讨论交流,一起成长。牛客上还会各种的内推机会,对于求职的同学也是极其不错的。

LeetCode

力扣,强推!力扣虐我千百遍,我待力扣如初恋!

从现在开始,每天一道力扣算法题,坚持几个月的时间,你会感谢我的(傲娇脸)

我刚开始刷算法题的时候,就选择在力扣上刷。最初刷easy级别题目的时候,都感觉有点吃力,坚持半年之后,遇到中等题目甚至hard级别的题目都不慌了。

LintCode

与Leetcode类似的刷题网站。

LeetCode/LintCode的题目量差不多。LeetCode的test case比较完备,并且LeetCode有讨论区,看别人的代码还是比较有意义的。

LintCode的UI、tagging、filter更加灵活,更有优点,大家选择其中一个进行刷题即可。

UVa Online Judge

西班牙Valladolid大学的Online Judge,最古老也是全世界最知名的Online Judge,题库有详细的分类,题目类型非常广泛。最重要的是,题目类型属于中等,适合有一定基础的刷题选手。

地址:onlinejudge.org/

Codeforces

地址:codeforces.com

Codeforce是一个位于俄罗斯的编程比赛网站,它会定期举办竞赛,会有全球顶尖的程序员们参赛。在这个网站,可以练习从初级到高级的题目。

Codeforce每周会有2-3场比赛,感兴趣的小伙伴可以去挑战下~


最后分享几点我自己的刷题经验,看看我是如何在最短时间内搞定数据结构与算法,达到应付面试的程度的。

主要有以下3点技巧:

  1. 按题目分类来刷
  2. 难度要循序渐进
  3. 做好总结

按题目分类刷题

LeetCode上面的题目都有进行分类,建议在一个时间段只刷同一类型的题目,可以更全面的认识这一类型的数据结构or算法,以加深对此类题型的理解。就好比练功夫,前期把一些基本招式都熟悉掌握,后面再串通这些招式,融会贯通。

我个人也是比较习惯按照分类来刷题,自我感觉效果还可以。

我将LeetCode题目进行了整理分类,大家可以参考下(以下出现的题型都是需要掌握的):

数组操作

  • LeetCode54 螺旋矩阵
  • LeetCode76 最小覆盖子串
  • LeetCode75 颜色分类
  • LeetCode73 矩阵置零
  • LeetCode384 打乱数组
  • LeetCode581 最短无序连续子数组
  • LeetCode945 使数组唯一的最小增量

链表操作

  • LeetCode206 反转链表
  • LeetCode19 删除链表的倒数第N个节点
  • LeetCode25 k个一组翻转链表
  • LeetCode141 环形链表
  • LeetCode142 环形链表Ⅱ
  • LeetCode61 旋转链表
  • LeetCode138 复制带随机指针的链表
  • LeetCode160 相交链表
  • LeetCode707 设计链表

  • LeetCode20 有效的括号
  • LeetCode32 最长有效括号
  • LeetCode155 最小栈
  • LeetCode224 基本计算器
  • LeetCode232 用栈实现队列
  • LeetCode316 去除重复字母

树的遍历

  • LeetCode94 二叉树的中序遍历
  • LeetCode102 二叉树的层次遍历
  • LeetCode110 平衡二叉树
  • LeetCode144 二叉树的前序遍历
  • LeetCode145 二叉树的后序遍历

二叉搜索树

  • LeetCode98 验证二叉搜索树
  • LeetCode450 删除二叉搜索树中的节点
  • LeetCode701 二叉搜索树中的插入操作

递归

  • LeetCode21 合并两个有序链表
  • LeetCode101 对称二叉树
  • LeetCode104 二叉树的最大深度
  • LeetCode226 翻转二叉树
  • LeetCode236 二叉树的最近公共祖先

双指针/滑动窗口

  • LeetCode3 无重复字符的最长子串
  • LeetCode11 盛最多水的容器
  • LeetCode15 三数之和
  • LeetCode16 最接近的三数之和
  • LeetCode26 删除排序数组中的重复项
  • LeetCode42 接雨水
  • LeetCode121 买卖股票的最佳时机
  • LeetCode209 长度最小的子数组

快慢指针遍历

  • LeetCode141 环形链表
  • LeetCode202 快乐数
  • LeetCode876 链表的中间结点

动态规划

  • LeetCode5 最长回文子串
  • LeetCode53 最大子序和
  • LeetCode62 不同路径
  • LeetCode64 最小路径和
  • LeetCode70 爬楼梯
  • LeetCode118 杨辉三角
  • LeetCode300 最长上升子序列
  • LeetCode1143 最长公共子序列

回溯算法

  • LeetCode10 正则表达式匹配
  • LeetCode22 括号生成
  • LeetCode40 组合总和2
  • LeetCode46 全排列

贪心算法

  • LeetCode 11. 盛最多水的容器
  • LeetCode 406. 根据身高重建队列
  • LeetCode 55. 跳跃游戏
  • LeetCode 122. 买卖股票的最佳时机 II
  • LeetCode 309. 最佳买卖股票时机含冷冻期
  • LeetCode 714. 买卖股票的最佳时机含手续费

并查集

  • LeetCode200 岛屿的个数
  • LeetCode547 省份数量

位运算

  • LeetCode52 N皇后Ⅱ
  • LeetCode338 比特位计数
  • LeetCode191 位1的个数
  • LeetCode231 2的幂

难度要循序渐进

这一点是针对初学者来说的,切记一上来就干hard级别的题目,会让你怀疑人生的。。。

正确的做法是循序渐进,从容易到中等,再过渡到困难级别。不过国内大厂考察算法,一般都是中等难度,困难级别的应该很少考察。

做好总结

多做总结!多做总结!多做总结!

做好总结很重要,特别是对于没思路的题目,看了其他大佬的解法之后,多思考有哪些题目也是类似解法,这种题目的关键解题步骤,把自己的理解写下来,方便自己日后查看。

虽然总结可能会花费你半个钟甚至更多的时间,但是不总结的话,下次你遇到这个题目,可能会花更多的时间去思考、解答。

最后给大家分享一个Github仓库,上面有大彬整理的300多本经典的计算机书籍PDF,包括C语言、C++、Java、Python、前端、数据库、操作系统、计算机网络、数据结构和算法、机器学习、编程人生等,可以star一下,下次找书直接在上面搜索,仓库持续更新中~ Github地址github.com/Tyson0314/j…