关于某些在leetcode上的题给定的“注意”一栏的用意不明
来源:5-7 更多和链表相关的问题
SunsunDay
2018-11-23
老师您好。
看完了您数据结构前章的视频之后我决定连练习几天相关专栏的easy题目,其中在练习数组题的时候,刚才做到第566题时
题目:
这道题的时候,看了题意之后,然后看到了如图该题下方leetcode提示的注意的地方。
其中关于第一条,这个信息我不太清楚对我有什么用?或者说,代码层面上即便不告诉我这一条我好像也能正常解题。
问题:
- 关于这道题leetcode这里给这个条件的用意?我做题是否有没有考虑到的地方?
- 关于leetcode的很多道题,题目下方给定的注意条件我似乎都没有必要去关心仍旧可以正确解题?
1回答
-
可以先不纠结这个问题,坚持继续做更多的问题。对于一些简单问题,这个限制确实没有用,但是这类限制并非一直没有用。在算法问题的处理上,很多限制条件本身就决定了算法的选择。
举一个真实的(Leetcode中没有的)的例子来说明这个问题。如果你做自然语言处理,那么你处理的字符串是否包含中文字符(还是只包含英文字符),你所使用的方法,或者策略将完全不同;
再比如,你做字符串处理,字符串中是指包含小写字母,还是大小写都包含,也可能决定你的具体逻辑会有所不同;
比如在这个问答中同学提出的问题,就很好地说明了这一点:https://coding.imooc.com/learn/questiondetail/72038.html
在20号问题中,由于规定了字符串中只可能有'(', ')', '[', ']', '{', '}'六种字符,所以我给出的答案是正确的。但是如果没有这个限制,字符串中可能有其他字符,那么,这个代码就错误了。
再比如,对于求最短路径问题,路径中是否存在负数(是否有负权边),将直接影响算法的选择。(对于Dijkstra算法,不能处理负权边);
对于变量的取值范围,也将帮你在具体编码之前,验证自己的时间复杂度,在大多数面试和算法比赛中,数字范围更多的是用于做这个判断。如果n在100以内,O(n^3)甚至O(n^4)的算法都不会超时,但是如果n的取值范围可以到10^5,那么O(n^2)算法就近乎一定会超时,必须寻找O(nlogn)甚至是O(n)的算法:)
对于这些限制的更多探讨(包括如果想刷Leetcode的话),还是蛮推荐我的《玩转算法面试》课程的(https://coding.imooc.com/class/82.html)。对于上面所说的对问题的数据规模和时间复杂度相关的分析,在《玩转算法面试》中也会有所涉及:)
不过依然是,如果你暂时体会不到题目中的限制的作用,也无妨。慢慢继续做下去,做多了,肯定能有所体会:)
加油!:)
212018-11-25
相似问题