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

相关文章
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
41 6
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
35 4
|
1月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
73 2
|
1月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
36 7
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
17 4
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
40 5
|
1月前
|
算法 Python
【Leetcode刷题Python】 LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色
本文介绍了LeetCode 2038题的解法,题目要求在一个由'A'和'B'组成的字符串中,按照特定规则轮流删除颜色片段,判断Alice是否能够获胜,并提供了Python的实现代码。
36 3
|
1月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
15 3
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
28 3
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode题目"剑指 Offer 21. 调整数组顺序使奇数位于偶数前面"的两种Python解决方案,一种是使用双端队列调整数组顺序,另一种是使用双指针法将奇数移到数组前半部分,偶数移到后半部分。
21 4