【问题标题】:if I have two for loops and one loops a constant value and the other iterates over array size M, is the time complexity O(M) or O(kM)?如果我有两个 for 循环,一个循环一个常数值,另一个循环遍历数组大小 M,时间复杂度是 O(M) 还是 O(kM)?
【发布时间】:2021-06-04 10:36:13
【问题描述】:

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

给定一个整数数组 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 是输入 nums 的大小,数组“sorted_values”的大小(即 k)

但是由于 k 是一个常数,是否可以得出两个复杂度都是 O(M) 的结论?

【问题讨论】:

    标签: python time-complexity


    【解决方案1】:

    似乎只是最好的情况 O(M)。 在最坏的情况下,当 nums 列表是连续数字 [1,2,3...M] 时,由于排序,大 O 变为 O(MlogM)

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 1970-01-01
      • 2021-11-25
      • 2013-11-06
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多