一. 有效括号序列
https://www.nowcoder.com/practice/37548e94a270412c8b9fb85643c8ccc2
我开始做错了,只是简单的把各种括号计数,有左括号就++,有右括号就–,这样最后为0,说明配对成功。
这题还要求括号的配对要按顺序来,就是左括号对应的右括号要先配对,才能出现其它括号(花括号,中括号)的右括号。
增益点:栈空间的使用
有序,要按顺序排列,左括号先有,右括号后有,最右边的左括号要和最左边的右括号配对
栈空间是可以先进后出,后进先出的:这就模拟了最右边的左括号在栈顶,只要最左边的右括号来配对成功,则弹出。
最后查看栈空间是否还有剩余的括号,有就没配对好,没有就配对好了。
对于要求顺序的思路可以想想栈的后进先出。
(思路是这么个思路,但对于C语言的解法,栈空间和开辟一个动态数组是一回事,你还是要看倒数第二个数是不是和新进的右括号配对,对于其它语言应该不一样)
二. 长度为 K 的重复字符子串
https://www.nowcoder.com/practice/4fe306a84f084c249e4afad5edf889cc?tpId=196&tqId=37187&ru=/exam/oj
个人思路:先把字符串前K个数据保存在一个数组里,再判断这个数组是否有重复字符。并不断右移,遍历所有值。
增益点:滑动窗口
把这个K长度想象为一个滑动窗口,将原始的长字符串,分解为一个个遍历后的小字符串解决。
三. 最长重复子串
https://www.nowcoder.com/practice/4fe306a84f084c249e4afad5edf889cc?tpId=196&tqId=37187&ru=/exam/oj
这题想了挺久的,好在完成了(因为没有C的标准答案)。最后和滑动窗口类似,不断缩小窗口大小,遍历所有数组。
增益点:可变动大小的滑动窗口
1)先考虑窗口为最大的情况,原字符串的一半长度
2)滑动窗口减1,再跑一遍。以此类推,直到窗口大小为1.
3)再将起始位置,定位到原始数据的第二个位置,滑动窗口变为(原字符串-1)一半的长度。一次类推,遍历所有字符。
个人感受
如果仅仅是为了获得一份工作,类似的这种oj题(似乎)满足相应的笔试要求(做了机考,也是类似这种题目),那确实是跳一跳能够到的高度。
但是这些题做起来,思考需要时间,真的比不过那些天才。我是切切实实地见过天才,不用高考,靠竞赛就进名校的人,我也曾和他们一起上过课,很多人,不止几个人。有的题目,我一点思路都没有,即使是练过一些题目,换了另一种题型,我就一筹莫展;那些人思考,他们也需要思考时间,但是他们可以做的出来。其中有的人就是搞计算机的,几乎全是童子功,这让我直到大学毕业前,也就是去年,都持有一种观点:有这种天才和他们童子功的存在,我又何必挤入计算机这条路上?
现在嘛,天才就做天才的事,他们去研究算法,研究卫星;我嘛,尽量在放弃前能让学校学习的理论知识能落实,能被应用。说实话,编程语言还是挺有魅力的,和吉他,诗歌差不多,就是偏数学了,我讨厌数学。
在这个做题网站上看到人发帖,说通信工程能干嘛,下面一条评论说“matlab秋招啥用没有”,哈哈,确实,哪家公司没事推动最底层的科技进步呢?也只有研究所和大学会做了。多感受感受,找到热爱的研究目标,读博去了(可能性很低)。