如果我有两个 for 循环,一个循环一个常量值,另一个循环遍历数组大小 M,那么时间复杂度是 O(M) 还是 O(kM)?
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)?
我写了一个代码来回答这个问题:
给定一个整数数组 nums 和一个整数 k,return k 个出现频率最高的元素。您可以 return 以任何顺序回答。
示例 1:
输入:nums = [1,1,1,2,2,3], k = 2
输出:[1,2]
为了总结我的代码,我将 nums 中的每个项目作为键输入到我的字典中,然后通过遍历 nums 简单地对每个元素进行计数,并将对象的 'count' 作为值存储在词典:
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)
我的问题是关于时间和 SPACE 复杂性。
我相信两者都是O(Mk);其中 M 是输入 nums 的大小,数组“sorted_values”(即 k)的大小
但由于 k 是常数,是否可以得出两个复杂度均为 O(M) 的结论?
它似乎只是 在最好的情况下 O(M)。 在最坏的情况下 当 nums 列表是连续的数字 [1,2,3...M] 时,大 O 变为 O(MlogM) 由于排序。
我写了一个代码来回答这个问题:
给定一个整数数组 nums 和一个整数 k,return k 个出现频率最高的元素。您可以 return 以任何顺序回答。
示例 1: 输入:nums = [1,1,1,2,2,3], k = 2 输出:[1,2]
为了总结我的代码,我将 nums 中的每个项目作为键输入到我的字典中,然后通过遍历 nums 简单地对每个元素进行计数,并将对象的 'count' 作为值存储在词典:
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)
我的问题是关于时间和 SPACE 复杂性。
我相信两者都是O(Mk);其中 M 是输入 nums 的大小,数组“sorted_values”(即 k)的大小
但由于 k 是常数,是否可以得出两个复杂度均为 O(M) 的结论?
它似乎只是 在最好的情况下 O(M)。 在最坏的情况下 当 nums 列表是连续的数字 [1,2,3...M] 时,大 O 变为 O(MlogM) 由于排序。