python字典的空间复杂性
这是一个利兹密码问题 他们在说: 不能修改数组(假定数组为只读)。 只能使用常量O(1)额外空间。 您的运行时复杂性应小于O(n^2)。 数组中只有一个重复的数字,但可以重复多次 因此,在我的代码中,我使用python中的集合创建了一个字典 我的代码是如何满足这一行“必须只使用常量,O(1)额外空间”的要求的。这一行的意思是什么?它们考虑了空间复杂性。下面是我的代码,它清除了所有测试用例python字典的空间复杂性,python,python-3.x,algorithm,space-complexity,Python,Python 3.x,Algorithm,Space Complexity,这是一个利兹密码问题 他们在说: 不能修改数组(假定数组为只读)。 只能使用常量O(1)额外空间。 您的运行时复杂性应小于O(n^2)。 数组中只有一个重复的数字,但可以重复多次 因此,在我的代码中,我使用python中的集合创建了一个字典 我的代码是如何满足这一行“必须只使用常量,O(1)额外空间”的要求的。这一行的意思是什么?它们考虑了空间复杂性。下面是我的代码,它清除了所有测试用例 from collections import Counter class Solution:
from collections import Counter
class Solution:
def findDuplicate(self, nums: List[int]) -> int:
dict1=Counter(nums)
for i in dict1:
if(dict1[i]>1):
return(i)
请帮忙。提前感谢。通常,字典的空间复杂度总是
O(N)
,因为它取决于数组的元素数
空间复杂度O(1)
意味着无论数组大小,指针的数量都相同。例如,如果在搜索算法中使用布尔变量来获取副本,这意味着O(1)
旁注:
另一件事是运行时的复杂性,对于字典来说,它是O(1)
,因为它们基于哈希表,您只需要一个键就可以获得值。相反,要在列表中查找特定的值,运行时的复杂性是O(N)
,因为在最坏的情况下,您必须迭代所有元素。字典占用O(N)空间,因此您的解决方案占用O(N)空间,并且违反了O(1)空间要求
这是一个古老的LeetCode问题,当时LeetCode的重点是工作面试,在面试中可以提出并讨论这些需求(过去常常在LeetCode论坛上讨论)。LeetCode系统从来没有强制执行它,这就是为什么您的解决方案尽管违反了要求,但仍然被接受的原因。到目前为止,LeetCode已经成为了一个以竞争为中心的网站,并且已经变得和其他任何编码挑战网站一样:重要的是你的解决方案是否被接受,现在如何接受。他们仍然没有(不能?)执行这样的空间要求,我认为他们的新问题不再要求这样的东西了。我怀念过去。你的主要问题已经回答了。对于此问题,我们建议使用二进制搜索:
class Solution:
def findDuplicate(self, nums):
lo, hi = 0, len(nums) - 1
mid = (lo + hi) // 2
while hi - lo > 1:
count = 0
for num in nums:
if mid < num <= hi:
count += 1
if count > hi - mid:
lo = mid
else:
hi = mid
mid = (lo + hi) // 2
return hi
类解决方案:
def查找副本(自身、nums):
lo,hi=0,len(nums)-1
mid=(低+高)//2
当hi-lo>1时:
计数=0
对于num中的num:
如果mid<数值hi-mid:
lo=中
其他:
高=中
mid=(低+高)//2
回电
工具书类
- 有关其他详细信息,请参见。这里有很多公认的解决方案,有各种解释和解释,有高效的算法,还有渐近/复杂性分析