昨天推送一道题目分析,一方面学习一个颇具特色的数组,它的取值不大于数组长度;另一方面通过这道题充分体会算法分析、逻辑推理的重要性。只有做好充分的分析,才可能写出对这道题的时间复杂度O(n),空间复杂度O(1)的解。
时间、空间复杂度关乎程序的性能,时间复杂度低跑的就快,空间复杂度小占用的内存空间小。谁会乐意手机的一个app动不动就占用我们大几百M的内存呢。
所以,程序的性能评判,就是对以上两个指标的评判,要给予很高的重视。
昨天几位朋友文章下的留言比较典型,在此不是有意针对,而是把问题拿出来,纠正有一样认识的朋友。
写文章帮助大家共同提高,是一直不变的目标。
这是昨天的文章:
我分析的一道笔试题,留言说说你是否看懂了?
下面是留言区几位朋友给出的解题思路:

依次遍历列表,通过count统计每个元素的出现次数。
大家可能有一个误区:认为调用API时间复杂度就为O(1),很明显并不是。
我们可想一下count的时间复杂度,如果换成我们自己去实现某个元素在列表中的出现次数,一般肯定是遍历一遍统计出结果,时间复杂度为O(n).
所以,外层遍历列表,内层count,时间复杂度为
先排序一遍,一趟循环就可以了。
有这种想法的朋友,要先问问自己排序的时间复杂度为多少?O(nlogn)

昨天文章给出的解法:时间复杂度为O(n),空间复杂度为O(1),应该是最好的求解方法之一。它之所以能到最好,是因为充分利用了列表取值范围:
这个条件。
而上面的两个解法,完全没有考虑数组的这个特点,自然就难以达到最优。
这体现了算法的重要性,开展算法分析的必要性。
我们的目标:追求极致,多角度深入剖析一道题,并应用到实际工作中。
加油!
写于 2020.7.10. 早6点50
本文分享自 程序员郭震zhenguo 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!