昨天的文章,有朋友给出"更好的"解法,其实并不是...

昨天推送一道题目分析,一方面学习一个颇具特色的数组,它的取值不大于数组长度;另一方面通过这道题充分体会算法分析、逻辑推理的重要性。只有做好充分的分析,才可能写出对这道题的时间复杂度O(n),空间复杂度O(1)的解。

时间、空间复杂度关乎程序的性能,时间复杂度低跑的就快,空间复杂度小占用的内存空间小。谁会乐意手机的一个app动不动就占用我们大几百M的内存呢。

所以,程序的性能评判,就是对以上两个指标的评判,要给予很高的重视。

昨天几位朋友文章下的留言比较典型,在此不是有意针对,而是把问题拿出来,纠正有一样认识的朋友。

写文章帮助大家共同提高,是一直不变的目标。

这是昨天的文章:

我分析的一道笔试题,留言说说你是否看懂了?

下面是留言区几位朋友给出的解题思路:

1

昨天的文章,有朋友给出

依次遍历列表,通过count统计每个元素的出现次数。

大家可能有一个误区:认为调用API时间复杂度就为O(1),很明显并不是。

我们可想一下count的时间复杂度,如果换成我们自己去实现某个元素在列表中的出现次数,一般肯定是遍历一遍统计出结果,时间复杂度为O(n).

所以,外层遍历列表,内层count,时间复杂度为

2

先排序一遍,一趟循环就可以了。

有这种想法的朋友,要先问问自己排序的时间复杂度为多少?O(nlogn)

昨天的文章,有朋友给出

总结

昨天文章给出的解法:时间复杂度为O(n),空间复杂度为O(1),应该是最好的求解方法之一。它之所以能到最好,是因为充分利用了列表取值范围: 这个条件。

而上面的两个解法,完全没有考虑数组的这个特点,自然就难以达到最优。

这体现了算法的重要性,开展算法分析的必要性。

我们的目标:追求极致,多角度深入剖析一道题,并应用到实际工作中。

加油!

写于 2020.7.10. 早6点50

你可能感兴趣的:(昨天的文章,有朋友给出"更好的"解法,其实并不是...)