Python 如果我有两个for循环,一个循环是常量,另一个循环迭代数组大小M,那么时间复杂度是O(M)还是O(kM)?

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

我写了一段代码来回答这个问题:

给定整数数组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, 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)