My solutions to leetcode problems.
algs
├── 0001.thought.md // 思路、正确性证明、复杂度分析
├── 0001.two_sum.go // 实现代码
└── 0001.two_sum_test.go // 测试代码
make test
my solutions to leetcode problems
License: MIT License
My solutions to leetcode problems.
algs
├── 0001.thought.md // 思路、正确性证明、复杂度分析
├── 0001.two_sum.go // 实现代码
└── 0001.two_sum_test.go // 测试代码
make test
背景
在尝试解决leecode的第十题时,逐渐感受到解题过程的大致样子。
虽然在刷题过程中,算法都是用编程语言来实现的。但是这仅仅是用编程语言来描述人的解题思路。
所以在着手解决一个leetcode问题前,要做的是首先搞清楚自己的大脑是用何思路去解决问题的,归纳总结出一个通用的解题思路。然后寻找各种极端的测试用例去检验这个通用的解题思路,慢慢修正自己的解题思路。当较难通过测试用例去验证自己的解题思路时,就开始去证明或者证伪自己的解题思路。最后再用编程语言去描述自己的解题思路。
当尝试用上面的想法指导自己解题时,猛然发现这个解题过程是完全可以流程化、标准化的。就像解数学题一样😊
试验了下在力扣**上写题解,再提交代码,发现可以很好的走完上面整条流程
发现的问题:
解决办法:
谋定而后动。第一要尽量去详尽、精确的思考;第二写代码前先想好自己要怎么组织代码,对于自己没有想出来的代码组织方式就在脑海里多理解几遍。
昨晚学习了动态规划。上周就看别人说用动态规划啥的。当时觉得这个方法应该很高级吧。但自己学习了之后发现其并不是空中楼阁,理解起来也并不难。之所以算法书上描述的很复杂,是因为算法这个东西描述起来就很不容易,要想描述的清楚就需要长篇大论。算法书的优点是将大量常用的技巧给你汇总出来,缺点就是大量描述性文字,让人学习起来比较枯燥。
昨天刷了leetcode的第22题--生成括号。通过结合具体问题反复思考,最终得出思路,发现就是个排列组合题目。当我写完题解,提交代码后发现很多人的题解说什么动态规划、回溯法啥的,发现这也太唬人了。这种问题根本不需要套算法,直接解决具体问题的思考比什么都有锻炼思维的效果。
刷题时不光要自己想解法,还要学习别人的解法,把别人解法中优秀的**、观念提炼出来,这样自己在解决后面的问题时就会有更多的**工具可以使用。
在脑海中将思路转换为代码时,就应该先估算出大致的时间复杂度。这样做是为了提早排除低效的算法。
理解题意 --> 得出思路 --> 使用编程语言描述
理解题意似乎没什么好说的。
通过上面的简单分析不难的得出,算法并不是什么天赋、妙笔生花似的东西,而是一种只有脚踏实地的积累才能逐步培养出来的技能。这段时间积累了些解题经验后,我觉得已经到了在做题过程中按照整套解题流程将各个**、方案整理出来,帮助自己培养、优化解题能力的时候了。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.