给定数组元素最大频率求解:评估解法的Big O最优性
数组元素最大出现频率解法的时间复杂度分析
需求为找出给定数组中元素的最大出现频率。本人已实现如下解法,但不确定该解法从Big O复杂度的角度来看是否为最优方案:
def solution(A): B = [0, 0, 0, 0, 0] for i in range (len(A)): if A[i] == "Cardiology": B[0] += 1 elif A[i] == "Neurology": B[1] += 1 elif A[i] == "Orthopaedics": B[2] += 1 elif A[i] == "Gynaecology": B[3] += 1 elif A[i] == "Oncology": B[4] += 1 max_patients = max(B) return max_patients
你的解法时间复杂度是O(n)(n为数组A的长度),属于线性时间复杂度:遍历数组一次,每个元素的分支判断是O(1)操作,最后求数组最大值是固定的O(5)=O(1)操作,整体没有额外的嵌套循环或高复杂度逻辑。
从Big O复杂度的角度来说,这个解法已经是最优的——因为要统计元素出现频率,必须至少遍历数组一次,不可能存在比O(n)更快的算法(毕竟你得每个元素都看一遍才能统计次数)。
不过你的写法有局限性:只能处理代码里硬编码的5个科室名称,后续如果新增科室,就得修改代码添加新的判断分支和数组位置。可以用字典实现更通用的版本,时间复杂度依然是O(n),扩展性更好:
def solution(A): freq = {} for dept in A: freq[dept] = freq.get(dept, 0) + 1 return max(freq.values()) if freq else 0
这个版本不管数组里有多少种不同的元素,都能正确统计最大出现频率,效率和你的原解法完全一致,但不需要修改代码适配新元素。
内容的提问来源于stack exchange,提问作者da2ksentine7
相关产品推荐
相关产品推荐

