[英]is the following solutions' time complexity O(N)?
I tried to calculate the time complexity for the function "twoSum" and wrote the cost of each line and how many times it's executed.我试图计算函数“twoSum”的时间复杂度,并写出每行的成本以及它执行的次数。 Finally, I made two vectors: one for the costs and another for frequencies, then calculated the inner product of them.
最后,我做了两个向量:一个是成本,另一个是频率,然后计算它们的内积。 I got the following:
(n + n + nlogn + n + n + nlogn + n + n + n + n) = 9n + 2logn >> 9n
dominates so the time complexity is O(n)
.我得到以下结果:
(n + n + nlogn + n + n + nlogn + n + n + n + n) = 9n + 2logn >> 9n
占主导地位,所以时间复杂度是O(n)
。 Please correct me if I am wrong!如果我错了,请纠正我!
class Solution(object):
def binarySearch(self,arr, l, r, x):
if r >= l:
mid = l + (r - l)/2
if arr[mid] == x: return mid
elif arr[mid] > x:return self.binarySearch(arr, l, mid-1, x)
else: return self.binarySearch(arr, mid + 1, r, x)
else:return -1
def twoSum(self, nums, target):
temp = [i for i in nums] # o(n) 1 time
nums = list(set(nums)) # o(n) 1 time
nums.sort() # o(nlogn) 1 time
for i in range(len(nums)): # o(n) 1 time
s = target - nums[i] # o(1) n times
idx_binary = self.binarySearch(nums, 0, len(nums)-1, s) # o(logn) > n times
if idx_binary > -1: # o(1) n times
idx = temp.index(s, temp.index(nums[i])+1) # o(n) > 1 time
return [temp.index(nums[i]), idx] # o(n) > 1 time
else:
return [temp.index(nums[i]), temp.index(s)] # o(n) > 1 time
你的简化有一个错误,它应该是 9n + 2 n logn 其中 nlogn 占主导地位,所以答案是 O(nlogn)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.