当我在range
对象中查找的answers中遇到一个常量时间操作时,我在StackOverflow上浏览了很多列表和范围相关的问题!在O(1)中如何做到这一点没有意义,您将不得不遍历该范围以查看是否存在数字。范围对象是否像某些hashmap / dictionary一样工作?
def usingRange(x):
return x in range(0, 100000000)
print(usingRange(9999999))
def noRange(x):
return x in list(range(0, 100000000))
print(noRange(9999999))
%timeit usingRange(9999999)
%timeit noRange(9999999)
我得到的输出为:
True
True
443 ns ± 8.83 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
6.89 s ± 380 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
我想知道其恒定时间的原因是因为
有人告诉我不要过于专注于在Python中进行编程面试学习“技巧”!因为您所做的所有事情,您都将不得不解释时间的复杂性,所以您要么记住i in list1
是O(N),要么使用for循环遍历列表:
for j in range(len(list1)):
if list1[j] == i:
print(True)
else:
print(False)
,然后得出结论,实际上它是O(N),因为要检查元素是否存在,您必须遍历列表的每个元素,直到列表结尾(最坏的情况)。但是一些固定时间的操作似乎不太明显!我可以接受这样一个事实,即哈希表中的循环为O(1),因为存在一个称为哈希的大概念(尚未遍历它),但不确定它如何用于range
对象。>
有人告诉我,了解基本知识至关重要!并尽力解释每一行的内容以及为什么要在白板上书写。我认识的一个人实际上是在为一家非常著名的技术公司的SWE职位实施HASHMAP。
我有很多时间(1年)来准备并且对事物有疑问。