首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >昨天的文章,有朋友给出"更好的"解法,其实并不是...

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

作者头像
double
发布2020-07-14 10:28:01
3330
发布2020-07-14 10:28:01
举报
文章被收录于专栏:算法channel算法channel

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

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

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

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

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

这是昨天的文章:

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

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

1

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

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

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

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

O(n^2)

2

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

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

总结

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

1\leq nums[i] \leq len(nums)

这个条件。

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

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

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

加油!

写于 2020.7.10. 早6点50

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1
  • 2
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档