LeetCode刷题技巧

简介: LeetCode刷题技巧

LeetCode 是一个上提供一系列的算法题,并且具备多种编程语言优秀在线编辑体验。在这样的基础之上,LeetCode 对于各类题目的描述简洁易懂,题库更新极快,最重要的是它的含金量受到大众的认可,拥有庞大的用户群体,对于每一道算法题基本能够寻找到较好的解题思路。特别说明的是,该平台更为着重对于算法思路的训练,采取的并非 ACM 模式的全包全揽,而是提供一个需要实现的函数,测试用例的定义和主方法的调用等等将由系统提供。 需要训练 ACM 模式的,可以尝试牛客网的刷题模式。

LeeCode 刷题思路 作为一个初学者,对于 LeetCode 刷题并不敢说有多聪明,仅仅从我这段时间的刷题经验以及所了解到的相关知识做一个简单的分享。

刷题顺序 目前 LeetCode 对于题目的难度分类为 简单、中等、困难。并且题库规模已达两千多条,仍在更新中,这么庞大的题库,从何刷起。每次遇到各种刷题问题又找不到很好的解决方案。比方说:

刷题方向不明确 刷题难度定位不清晰 题目优质解析还需时间寻找 首先,先简单说明一下,LeetCode 的难度水平:

简单 这个级别的题目旨在帮助大家熟悉基本技巧。通常来说,它们有一些简单粗暴的解答方法,我们需要学习的,则是应用这些小技巧来改进自己略显粗糙的解题方案。当我们随机点开一道数据结构或算法的简单题目,能在几分钟内列出最优解决方案并完成它们

中等 这个级别的题目旨在锻炼大家看穿问题的能力,它们通常是一些简单题目的 “伪装” 或“变化”。使用简单粗暴的解决方法可能会导致答题超时。我们需要学习的是分辨问题,并找出正确的解题方式。随机点开一个数据结构、算法的中等题目,如果我们能找出它们掩盖的问题,并可以在半小时内写出接近最优的答案,那么我们就可以适当挑战困难级别的题目了。

困难 通常情况下,这个难度,45 分钟的时间几乎不足以让我们写出一个完整的答案。我们需要学习的,是确定解题的正确方向。困难级别的问题可以暂不考虑最优答案,我们从成功解决问题开始,也可以适当取消答题的时间、空间限制。 解决问题之后,才来真正思考优化问题。

对于刷题的方向,具体看不同类型的刷题背景,介绍如下:

算法入门 如果是刚刚入门算法领域,想要刷刷算法题练练手的话,建议从难度为简单的算法题下手,并且,尽可能在一段时间内(一周 10 题,时间充裕 30 题)刷相同类型的算法题,直至提交成功率达到 80% 且提交代码用时尽可能达到超过 100% ,毕竟,成功率方面可能存在一些比较特殊的测试用例,无法达到 100% 。对于刷题类别的选择,可能各有各人的理解,这里提一下我的刷题顺序,不一定适合你:

数组-> 链表-> 哈希表->字符串->栈与队列->树->回溯算法->贪心算法->动态规划->图论->高级数据结构

如果,如果可能的话,对于之前做过的题目进行一次二刷,尽可能快速度地完成一道道算法题。锻炼解题思路的获取能与实现力。倘若已经刷完以上的算法题目且能以较快速度完成,那就可以适当选择参加 LeetCode 每周周赛,体验一下竞赛的感觉。

算法进阶 如果是已经在算法领域浸淫多年,我这篇教程就是在您面前班门弄斧了,见笑了。不过,从我稚嫩的想法出发,目前的刷题方向着重于真题的相关研究,面对就业,刷各大公司算法真题,面对竞赛,刷往年竞赛真题。LeetCode 上也有每周周赛,建议前往外网版 LeetCode 参加周赛,国内周赛竞争还不是特别激烈,可能满足不了该有的竞争压力。争取拿到 LeetCode 周赛前几就是胜利的终点了。

刷题方法 刷题不是说看着别人的刷题思路甚至别人的代码对着一点点敲就行,最需要的是,对于每一道算法题目解题思路的理解,建议每刷完一道算法题就写相对应的笔记,不仅仅能够加深对当前算法题思路的理解,更方便后来对于同类型题目的归纳总结、融会贯通。

LeetCode 平台刷题策略 筛选完所需训练的算法问题,开始进入编辑页面,左边为问题描述,右边为代码编辑区,代码编辑区可以更改语言、测试用例、执行代码等等,对于代码的智能补全与语法高亮也有比较好的支持。

理解算法题目要求并编辑完算法代码之后,先执行代码,解决对应报错且题目出现的测试用例都能通过即可进行第一次提交。切记,不要去看题目评论与题解,独立完成一次题目的解决。

倘若第一次提交之后解答错误,可以在左边界面点击解答错误选项,进入相应页面,即可了解是哪个测试用例不通过,复制当前用例,返回代码编辑界面,重新编写代码,在右边底部测试用例栏内填入刚刚复制的测试用例,再次执行代码,执行无误后,再次提交即可。

顺利通过代码提交之后,就能知道当前代码的质量问题,如果没有达到 100% ,说明仍然存在优化的空间。倘若,一直无法得到算法优化的思路,那就可以前往题目的评论区与题解区,从而获取相对应的优化解析思路。

认真分析对比每一个解答的题目思路,从而学习他们解决问题的方法,做好相应笔记,真正化为己用。

如果对于 LeetCode 自带的编辑器不适应,需要拉取到本地进行的话,只需在代码中定义 main 函数,构造个输入用例,最后复制代码编辑区的代码作为方法函数,并在 main 函数中调用即可。

基本对于 LeetCode 的刷题方面的问题也基本介绍完毕了。还有几点需要说明的是,珍惜每一次的提交,(执行代码不会记录)平台都会记录提交详情,并计算每一道题的提交完成率,最后,在个人资料会有相应的统计数据与擅长技能的计算。

相关文章
|
4天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
8 0
|
4天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
9 0
|
4天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
21 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
4天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
4天前
|
存储 算法 测试技术
|
4天前
|
算法 C语言 C++
|
存储 算法 C语言
C语言刷题~Leetcode与牛客网简单题
C语言刷题~Leetcode与牛客网简单题
|
20天前
刷题之Leetcode160题(超级详细)
刷题之Leetcode160题(超级详细)
13 0
|
20天前
|
Java
刷题之Leetcode19题(超级详细)
刷题之Leetcode19题(超级详细)
13 0