并没有 100 题,还有一个是 plus 会员才能查看的题目,然后花了二十天还是一个月忘记了,做了这么多题目感觉还是没有入门但是却吸引起了我的注意,有些东西你说了别人也不会懂学会了和没有学会的区别自己也说不出来的区别,这个就像采用vim键位编写代码无法非常直观的告诉旁边的同事这和普通的编辑器存在什么不一样,学习算法也是这种感觉,没学算法之前你就是个搬砖的然后学了之后还是搬砖的,即使是搬砖的姿势也没什么变化,但是要说有没有用,我觉得非常的有用。给事物命名是人类非常了不起的技能,不一定是物理空间存在的物品,也可能是想象空间的存在概念。就是因为会给各种概念命名然后你先学会这个词的发音然后里面里面表示的内在含义然后知道怎么用,就是这种感觉,不刷题也能凭感觉写出代码但是通过刷题学习到一些新的概念能理解问题并且更加有效的解决问题而不是凭感觉在不断调试的过程中解决问题,虽然最终结果是一样的但是里面有着更加本质的区别。

力扣的题解里面会有这种标签,比如递归回溯动态规划单调栈归并等,也有许多目前我还没有接触到的东西,总的来说先学到这些单词然后再去思考单词的含义去模仿题目解决的思路然后达到熟能生巧的地步,当然我基本都是看题解,即使是简单的题目说不定也会有特定的技巧,中等的题目也是根据讨论区其他人的思路去复现代码。有的时候也会因为状态不好而一直出错的情况发生,我想起之前有一题一直过不了测试,然后我就放着到了最后回去看那个搁置的题目突然想起来要怎么做然后噼里啪啦改代码提交就过了。因此感觉这种刷题目的事情,不要太急于求成,而且在平均层面上大家都差不多,只要不断练习都能熟能生巧。查看别人的做法,应该是非常高效的的学习方式。不过现在的我还是没法做到应付自如,在刷一段时间再看看是什么感觉。

我使用的是 C 语言去解答问题,也许因为 C 语言用的比较少所以我提交的时候优化一下代码基本都能达到超过80%-90%的运行速度但是在内存方面控制就比较糟糕开始的时候也会多提交几次后面就懒得折腾了感觉意义不大因为是测试环境测试用例跑过就行所以那些针对测试的优化没啥用时间复杂度和空间复杂度放那呢。讨论区比较热门的是用 CPP / Java / Python 这几个编程语言,它们的标准库里面都有一些便利的高级数据类型可以直接使用。

刷题过程中发现 C 语言竟然存在可变长度数组,算是知识盲点,以前一直以为数组必须在编译时候就确定长度然后分配在栈上,不过可变长数组我也不清楚是分配在堆上还是栈上,总之这些不重要。

C 语言比较爽的指针的操作非常的方便,不爽的是指针越界的时候报错信息竟然没有标出哪一行代码,然后我全程打印日志调试非常的累人。还有就是没有哈希表带有一个uthash不过我也是刚刚开始使用,因为 C 语言是弱类型语言,然后这个uthash查询的时候传递的是一个通用指针,根据场景需要传递一个指针或是指针的指针甚至三级指针,但是不管你传递那一种类型都不会报错运行时也无法检测出。用其他带运行时的编程语言都有可变长度的数组哈希地图这种高级类型,数组也不用一开始就指定多长,但是 C 语言这些通通都没有,需要用到数组什么的就直接申请一个大大的内存块就行了,而且刚刚开始的时候我还在纠结返回一个矩阵需要怎么返回,然后就啃别人代码发现各种指针操作。总的来说就是 C 语言核心就是几个内存操作函数然后用这些内存操作函数就可能完成大部分题目,后面我又去看了一些字符串操作的函数感觉真香。我主要用 C 语言刷题然后还是有部分题目用到uthash怎么搞都搞不定,在思考各种边界问题的时候还要停下来思考这玩意用得怎么这么难受然后实在受不了这破玩意然后就用 Go 改写了一遍提交完美通过虽然效率惨不忍睹就是了。