Python 如果我有两个for循环,一个循环是常量,另一个循环迭代数组大小M,那么时间复杂度是O(M)还是O(kM)?
我写了一段代码来回答这个问题: 给定整数数组nums和整数k,返回k个最频繁的元素。您可以按任何顺序返回答案 例1: 输入:nums=[1,1,1,2,2,3],k=2 输出:[1,2] 为了总结我的代码,我在nums中输入每个项作为字典中的键,然后简单地对每个元素进行计数,方法是迭代numbs,并将对象的“计数”作为值存储在字典中:Python 如果我有两个for循环,一个循环是常量,另一个循环迭代数组大小M,那么时间复杂度是O(M)还是O(kM)?,python,time-complexity,Python,Time Complexity,我写了一段代码来回答这个问题: 给定整数数组nums和整数k,返回k个最频繁的元素。您可以按任何顺序返回答案 例1: 输入:nums=[1,1,1,2,2,3],k=2 输出:[1,2] 为了总结我的代码,我在nums中输入每个项作为字典中的键,然后简单地对每个元素进行计数,方法是迭代numbs,并将对象的“计数”作为值存储在字典中: from collections import defaultdict class Solution: def topKFrequent(self, n
from collections import defaultdict
class Solution:
def topKFrequent(self, nums: List[int], k: int) -> List[int]:
my_dict = defaultdict(int)
top_two_final = []
for i in range(len(nums)):
my_dict[nums[i]] += 1
sorted_values = sorted(my_dict.values(), reverse=True)
for j in my_dict:
for l in sorted_values[:k]:
if my_dict[j] == l:
top_two_final.append(j)
return set(top_two_final)
我的问题是关于时间和空间的复杂性
我相信两者都是O(Mk);其中M是输入num的大小,数组“排序的_值”(即k)的大小
但既然k是一个常数,那么得出两种复杂度都是O(M)的结论是否正确呢?在最好的情况下,它似乎是在最坏的情况下当nums列表是连续的数字[1,2,3…M]时,由于排序,大O变为O(MlogM)