zoukankan      html  css  js  c++  java
  • 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+|Sigma|))),其中 (n)是数组 (A) 的长度(即字符串的数目),(m)是字符串的平均长度,(Sigma)为字符集,在本题中字符集为所有小写字母,(|Sigma|=26)

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

  • 相关阅读:
    linq to sql的性能和reader相比只是差一点点吗
    Win11删除右键菜单open in windows Terminal
    jdk1.8
    mvcc read view
    javascript 跨域双向通信方案,通过postMessage和window.name实现
    [原创]如何加载动态库、获取方法委托、卸载动态库
    awseks创建与使用
    aiops 调研
    consul调研
    机器学习调研
  • 原文地址:https://www.cnblogs.com/Biiigwang/p/13819601.html
Copyright © 2011-2022 走看看