2020.10.14 算法复杂度分析

算法复杂度分析若干实例

记录leetcode每日一题算法复杂度分析过程:

2020.10.14

查找常用字符

题目链接 == >https://leetcode-cn.com/problems/find-common-characters/

class Solution:
    def commonChars(self, A: List[str]) -> List[str]:
        minfreq = [float("inf")] * 26
        for word in A:
            freq = [0] * 26
            for ch in word:
                freq[ord(ch) - ord("a")] += 1
            for i in range(26):
                minfreq[i] = min(minfreq[i], freq[i])
        
        ans = list()
        for i in range(26):
            ans.extend([chr(i + ord("a"))] * minfreq[i])
        return ans

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/find-common-characters/solution/cha-zhao-chang-yong-zi-fu-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

复杂度分析

  • 时间复杂度:O(n(m+|Σ|)),其中 n是数组 A 的长度(即字符串的数目),m是字符串的平均长度,Σ为字符集,在本题中字符集为所有小写字母,|Σ|=26

    • 遍历所有字符串并计算freq的时间复杂度为O(nm)
    • 使用freq更新minfreq的时间复杂度为O(n|Σ|)
    • 由于最终答案包括的字符合数不会超过最短的字符串长度,因此构造最终答案的时间复杂度为O(m+|Σ|)。这一项在渐进意义上小于前两者可以忽略。个人理解本项计算分为两部分,遍历的部分操作时间复杂度为O(|Σ|1),扩充答案列表的操作时间复杂度O(minLength(A)1)<=O(m1)
  • 空间复杂度:O(|Σ|),这里只计算存储答案之外的空间我们使用数组freqminfreq,他们的长度均为|Σ|

posted @   biiigwang  阅读(106)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示