前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode刷题_LeetCode刷题手册

LeetCode刷题_LeetCode刷题手册

作者头像
全栈程序员站长
发布于 2022-11-19 09:37:30
发布于 2022-11-19 09:37:30
2.6K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

  虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 LeetCode。 LeetCode收录了许多互联网公司的算法题目,被称为刷题神器,我虽然早有耳闻,不过却一直没有上面玩过。

  据了解,LeetCode 是一个非常棒的 OJ(Online Judge)平台,收集了许多公司的面试题目。相对其他 OJ 平台而言,有着下面的几个优点:

  • 题目全部来自业内大公司的真实面试
  • 不用处理输入输出,精力全放在解决具体问题上
  • 题目有丰富的讨论,可以参考别人的思路
  • 精确了解自己代码在所有提交代码中运行效率的排名
  • 支持多种主流语言:C/C++,Python, Java
  • 可以在线进行测试,方便调试

笔者刷leetcode的主要目的 1、熟悉各互联网公司的算法题目,为找工作做准备。 2、复习以前学过的编程语言,LeetCode支持几乎所有主流编程语言,大家可以用不同语言来做题。 3、熟悉常见的算法和数据结构,LeetCode提供了交流平台,一些大神会将自己的解法贴出来共享,有些巧妙的解法实在令人叫绝。 4、学习别人的编程思维,加快编程的速度,避免常见的BUG。   另外LeetCode的题型都非常简单明了,并不需要的复杂的理解,一般都在50行以内就可以解决了,如果你写了上百行代码,就肯定说明你想太多了或太复杂,虽然都能用很短的代码就能解决,但并不意味着LeetCode的题目非常简单,实际上LeetCode基本上涉及到了所有常规的算法类型。 下面是我刷 LeetCode 的一些收获,希望能够引诱大家有空时刷刷题目。

问题:抽象思维 波利亚用三本书:《How To Solve It》、《数学的发现》、《数学与猜想》来试图阐明人类解决问题的一般性的思维方法,总结起来主要有以下几种:

  1. 时刻不忘未知量。即时刻别忘记你到底想要求什么,问题是什么。(动态规划中问题状态的设定)
  2. 试错。对题目这里捅捅那里捣捣,用上所有的已知量,或使用所有你想到的操作手法,尝试着看看能不能得到有用的结论,能不能离答案近一步(回溯算法中走不通就回退)。
  3. 求解一个类似的题目。类似的题目也许有类似的结构,类似的性质,类似的解方案。通过考察或回忆一个类似的题目是如何解决的,也许就能够借用一些重要的点子(比较 Ugly Number 的三个题目:263. Ugly Number, 264. Ugly Number II, 313. Super Ugly Number)。
  4. 用特例启发思考。通过考虑一个合适的特例,可以方便我们快速寻找出一般问题的解。
  5. 反过来推导。对于许多题目而言,其要求的结论本身就隐藏了推论,不管这个推论是充分的还是必要的,都很可能对解题有帮助。

  刷 LeetCode 的最大好处就是可以锻炼解决问题的思维能力,相信我,如何去思考本身也是一个需要不断学习和练习的技能。此外,大量高质量的题目可以加深我们对计算机科学中经典数据结构的深刻理解,从而可以快速用合适的数据结构去解决现实中的问题。我们看到很多ACM大牛,拿到题目后立即就能想出解法,大概就是因为他们对于各种数据结构有着深刻的认识吧。LeetCode 上面的题目涵盖了几乎所有常用的数据结构:

  1. Stack:简单来说具有后进先出的特性,具体应用起来也是妙不可言,可以看看题目 32. Longest Valid Parentheses。
  2. Linked List:链表可以快速地插入、删除,但是查找比较费时(具体操作链表时结合图会简单很多,此外要注意空节点)。通常链表的相关问题可以用双指针巧妙的解决,160. Intersection of Two Linked Lists 可以帮我们重新审视链表的操作。
  3. Hash Table:利用 Hash 函数来将数据映射到固定的一块区域,方便 O(1) 时间内读取以及修改。37. Sudoku Solver 数独是一个经典的回溯问题,配合 HashTable 的话,运行时间将大幅减少。
  4. Tree:树在计算机学科的应用十分广泛,常用的有二叉搜索树,红黑书,B+树等。树的建立,遍历,删除相对来说比较复杂,通常会用到递归的思路,113. Path Sum II 是一个不错的开胃菜。
  5. Heap:特殊的完全二叉树,“等级森严”,可以用 O(nlogn) 的时间复杂度来进行排序,可以用 O(nlogk) 的时间复杂度找出 n 个数中的最大(小)k个,具体可以看看 347. Top K Frequent Elements。

算法设计和分析比实现更重要   我们知道,除了数据结构,具体算法在一个程序中也是十分重要的,而算法效率的度量则是时间复杂度和空间复杂度。对于一道编程问题,选用不同的数据结构和算法会得到不同的实现方式,比如“最长公共子串”。所以光能写出问题的实现还不够,还需要知道怎么针对问题设计算法,然后分析算法的复杂度来比较不同实现直接的优缺点。因此刷题之外,还需要记住每种算法实现的时间复杂度和空间复杂度。最常用的是Big O notation。一般情况下,人们更关注时间复杂度,往往希望找到比 O( n^2 ) 快的算法,在数据量比较大的情况下,算法时间复杂度最好是O(logn)或者O(n)。计算机学科中经典的算法思想就那么多,LeetCode 上面的题目涵盖了其中大部分,下面大致来看下。

  1. 分而治之:有点类似“大事化小、小事化了”的思想,经典的归并排序和快速排序都用到这种思想,可以看看 Search a 2D Matrix II 来理解这种思想。
  2. 动态规划:有点类似数学中的归纳总结法,找出状态转移方程,然后逐步求解。 309. Best Time to Buy and Sell Stock with Cooldown 是理解动态规划的一个不错的例子。
  3. 贪心算法:有时候只顾局部利益,最终也会有最好的全局收益。122. Best Time to Buy and Sell Stock II 看看该如何“贪心”。
  4. 搜索算法(深度优先,广度优先,二分搜索):在有限的解空间中找出满足条件的解,深度和广度通常比较费时间,二分搜索每次可以将问题规模缩小一半,所以比较高效。
  5. 回溯:不断地去试错,同时要注意回头是岸,走不通就换条路,最终也能找到解决问题方法或者知道问题无解,可以看看 131. Palindrome Partitioning。

  当然,还有一部分问题可能需要一些数学知识去解决,或者是需要一些位运算的技巧去快速解决。总之,我们希望找到时间复杂度低的解决方法。为了达到这个目的,我们可能需要在一个解题方法中融合多种思想,比如在 300. Longest Increasing Subsequence 中同时用到了动态规划和二分查找的方法,将复杂度控制在 O(nlogn)。如果用其他方法,时间复杂度可能会高很多,这种题目的运行时间统计图也比较有意思,可以看到不同解决方案运行时间的巨大差异,如下:

语言:各有千秋 对一个问题来说,解题逻辑不会因编程语言而不同,但是具体coding起来语言之间的差别还是很大的。用不同语言去解决同一个问题,可以让我们更好地去理解语言之间的差异,以及特定语言的优势。笔者会针对每题使用三种语言解决问题c++、java、python。

千里之行,始于足下,接下来笔者讲讲如何使用leetcode。

一、选择题目类型 最上面标签栏Problems,给出了三个分类:Algorithms、Database、Shell,分别表示算法题、数据库题、Shell脚本题,第一个就是我们所需要的算法题。

二、选择算法题 点开Algorithms后,我们可以看到一列题目的列表,每个题目都有独一无二序号,后面的接受率(Acceptance)表示提交的正确率,Difficulty表示难易程度。 LeetCode按难易程度分成了:Hard、Medium、Easy三个级别。 Easy级别一般并不需要太多思考就可以想到算法,甚至可以通过直接的方式,特别适合新手去熟悉编程语言。 Medium级别就会有些难度,一般都会涉及到经典的算法,需要一定的思考。 Hard级别是最难的,有些时候是算法本身的难度,有些时候特别需要你考虑到各种细节。 每个题目前面的小箭头表示该题已经完成。题目列表最上方有一个Choose one filter,可以将已完成的题目从列表中去掉。

三、筛选某一类型的题 如果我们只想要找某一类型的题,可以通过Tags或Company来筛选,如果我们只想做关于字符串、数组或链表相关题,可以通过Tags, 在Tags旁边可以根据公司找题(这一功能需要收费)。 如果我们再做某一题时,觉得还想再做一个类似的,巩固一下,可以通过该题下面的Show Similar Problems和Tags来找到相似的问题

四、如何和别人讨论 每个题目都有各自的Discuss按钮,点击进入后,就能看到了讨论区。 在这里,许多人都把自己的代码放到了上面,就像BBS一样,你可以发贴提问,也可以回复别人。

五、关于代码编写、测试与提交 点开我们选择的题目后,就可以进行代码编写了,LeetCode一般都会直接提供一个函数式接口,我们只需要编写函数内部就可以了,而需要考虑到库文件,另外,在上面选择栏中,可以切换选择自己需要的编程语言。

程序编写完了之后,不要急着提交(Submit Solution 按钮),先可以测试运行下(Run Code),我们还可以点开Custom TestCase旁边的小框,点开后,可以在里面输入我们自己设定的输入值。 一般情况,数组的输入形式是[a1,a2,a3,a4……] 当然我们测试完整无误后,再选择提交Submit Solution。 如果出现错误,会有提示。 如果正确无误,会有如下提示:

我们可以点开More Details查看详细结果说明 或者点开Next challenges 旁边的题继续做题。

六、查看自己提交的题目

在最上面标签栏找到自己,选择: My Submissions:可以找到自己提交的题目(包括了正确提交和错误提交)提交的代码也是都是可以看到的 Manage Sessions:主要是管理自己的提交情况,错误率和正确率,总完成率之类。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   每道题旁边的My Submissions可以找到自己的对于该题的提交情况,点开后,就可以找到自己过去所有的提交。

  点Accepted 或 Wrong Answer就可以查看自己过去提交的代码情况,当然还有得分。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/204276.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月23日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
面试官系列 - LeetCode链表知识点&题型总结
前段时间,写了面试必备的一系列文章,反应还不错。有一些读者反馈说,能不能整理一些面试常见的算法。前段时间,我恰好总结了 LeetCode 常见的面试算法题目。今天给大家分享一下。
程序员徐公
2022/01/20
7010
面试官系列 - LeetCode链表知识点&题型总结
题型篇 | 数据结构与算法之链表系列
如果你和小鹿一样,刚开始对链表的操作代码实现很懵的话,不妨按照小鹿经过一个月的时间对链表相关操作以及题型的整理总结,由浅入深进行适当的练习,我相信,当你真正的练习完这些题目,不但会让你放下对链表心理上的困惑,而且对你学习其他数据结构有很大的信心和帮助!
小小詹同学
2019/06/20
6190
题型篇 | 数据结构与算法之链表系列
两个月刷400道leetcode之后的经验与心得总结、真题整理分享
随着互联网寒潮的到来, 越来越多的互联网公司提高了面试的难度,其中之一就是加大了面试当中手撕算法题的比例。这里说的算法题不是深度学习,机器学习这类的算法,而是排序,广度优先,动态规划这类既考核数据结构也考核编程能力的题目。刷题的网址非常的多,其中以leetcode是最为出名的。
Java_老男孩
2019/09/18
3.6K0
非算法工程师面试必问的算法面试理论 顶
数据结构是算法的基础。大家需要对数据结构有个清晰的概念,因为大部分的算法题均需要带入数据结构的概念来处理。科班出身的程序员或多或少学习过数据结构。我们推荐大家可以重温下这本书,温故而知新。
个推君
2019/12/24
4750
LeetCode 算法题详解 JAVA 版 开始刷题啦~
从大一就知道了 leetcode,但刷题总是三天打鱼,两天晒网,会发现刷过的题,隔一段时间再看还是需要很久才能再想起来,于是就萌发了刷一题总结一题的想法。
猫头虎
2024/04/07
1610
我是这么刷题的!
大家在刷《代码随想录》的时候,都会有疑惑: 第一遍刷完应该用多久? 第一遍我需要把每道题目都弄清楚么? 刷了一遍,感觉都忘了怎么办? 需要刷两遍么? 对于这些问题,星球里有一位录友分享了自己 刷了三遍代码随想录的完整历程,第一遍照着抄,第二遍开始能自己写一部分,第三遍开始系统总结,并用清楚了各个题目间的内在联系。 最后他也成功上岸了北美亚马逊,他的刷题经历,非常值得算法小白们的参考,这是从被杀到乱杀的进阶之路。 以下是他在今年四月份分享在知识星球里的刷题心得,行文十分接地气,刷题的录友们一定要耐心看完,你
博文视点Broadview
2023/04/04
4520
我是这么刷题的!
​LeetCode刷题实战81:搜索旋转排序数组 II
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
4420
​LeetCode刷题实战81:搜索旋转排序数组 II
leetcode 刷500道题,笔试/面试稳吗?谈谈算法的学习
想要学习算法、应付笔试或者应付面试手撕算法题,相信大部分人都会去刷 Leetcode,有读者问?如果我在 leetcode 坚持刷它个 500 道题,以后笔试/面试稳吗?
帅地
2019/10/08
1K0
leetcode 刷500道题,笔试/面试稳吗?谈谈算法的学习
新手如何有效的刷算法题(LeetCode)
作为一名非科班出身的程序员,我是参加工作之后才开始接触算法,学算法至今有将近五年的时间,期间输出文字约 100 多万,从算法小白到写出百万阅读的算法文章,这一路历程,有心酸也有掌声。
五分钟学算法
2020/04/26
9110
双指针法:总结篇!
相信大家已经对双指针法很熟悉了,但是双指针法并不隶属于某一种数据结构,我们在讲解数组,链表,字符串都用到了双指针法,所有有必要针对双指针法做一个总结。
代码随想录
2020/09/27
1.6K0
程序员练习算法的几个实用技巧
上周在公司分享了自己练习算法的心得和经验,有小伙伴表示分享的内容给他带来了价值,也很具备参考意义,于是就算法写成文章分享出来,近几个月来,自己每周都会花1、2小时在 Leetcode 上面练习算法,短短几个月下来也陆陆续续交出 40~50 的解题作业,算是一个小小的里程碑吧,以下是我最近的刷题记录:
phoenix.xiao
2021/01/21
5940
前端应该如何准备数据结构和算法?
据我了解,前端程序员有相当一部分不是科班出身,以至于对“数据结构”和“算法”的基础概念都不是很清晰,这直接导致很多人在看到有关这部分的内容就会望而却步。
ConardLi
2019/08/21
9950
前端应该如何准备数据结构和算法?
看到后台这么多人私信我说:算法越学越扎心,有没啥破解之法?帅地熬夜撸出了这篇学习心得!
对于算法的学习,我也是从一个小白一步步走来,当然,现在仍然很菜,,,不过,鉴于我觉得还有一些人比我更菜了,我决定谈谈我算法学习过程走过的坑,以及自己总结的一些经验,之前也有写过一篇类似的,那时粉丝才几千,这篇算是修正版。
帅地
2020/03/16
5050
看到后台这么多人私信我说:算法越学越扎心,有没啥破解之法?帅地熬夜撸出了这篇学习心得!
【已完结】手把手跟饲养员刷算法+jucdemo
好家伙,平时也不推文了,写了技术类文章都不闻不问,写点心理活动都看的起劲。讲真,我通宵加完班那天,做了个实现弹幕的梦,我的天,没把我累屎,最近的研究一下这个
疯狂的KK
2021/05/17
3550
【已完结】手把手跟饲养员刷算法+jucdemo
坚持刷题678天的感受!
刷题的原因各种各样,结合本人和朋友的经历,以及网上大家的分享,比较有代表性的原因有以下四种:
Datawhale
2021/06/01
9970
坚持刷题678天的感受!
我是如何学习数据结构与算法的?
数据结构与算法的地位对于一个程序员来说不言而喻。今天这篇文章不是来劝你们学习数据结构与算法的,也不是来和你们说数据结构与算法有多重要。
帅地
2018/10/18
1.5K0
卷王 ,不能倒在刷力扣的路上
最近在一些群聊、私聊中遇到很多小伙伴的一个问题就是:刷题,大家也都重视到算法刷题对冲击大厂的重要性,越来越多的人开始卷起来了!
bigsai
2021/10/20
1.3K0
LeetCode链表知识点&题型总结
刚开始准备刷算法题目的时候,感觉真的是好难,十道题目有九道是不会的。心中曾一万只草泥马跑过,自己怎么这么辣鸡。
程序员徐公
2020/08/04
1.7K0
LeetCode链表知识点&题型总结
《算法和数据结构》题海战术篇
大家好,又见面了,我是你们的朋友全栈君。 文章目录 1️⃣前言:追忆我的刷题经历 2️⃣算法和数据结构的重要性 👪1、适用人群 🎾2、有何作用 📜3、算法简介 🌲4、数据结构 3️⃣如何开始持续的刷题 📑1、立军令状 👩‍❤️‍👩2、培养兴趣 🚿3、狂切水题 💪🏻4、养成习惯 🈵5、一周出师 4️⃣简单数据结构的掌握 🚂1、数组 🎫2、字符串 🎇3、链表 🌝4、哈希表 👨‍👩‍👧5、队列 👩‍👩‍👦‍👦6、栈 🌵7、二叉树 🌳8、多叉树 🌲9、森林 🍀10、树状数组 🌍11、图 5️
全栈程序员站长
2022/09/05
3210
《算法和数据结构》题海战术篇
LeetCode通关:听说链表是门槛,这就抬脚跨门而入
一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的引用。也可以称之为数据域和指针域。
三分恶
2021/07/27
4410
相关推荐
面试官系列 - LeetCode链表知识点&题型总结
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验