временная сложность следующих решений O (N)? - PullRequest
0 голосов
/ 26 января 2019

Я попытался вычислить временную сложность для функции «twoSum» и записал стоимость каждой строки и сколько раз она была выполнена. Наконец, я сделал два вектора: один для затрат и другой для частот, затем вычислил их внутреннее произведение. Я получил следующее: (n + n + nlogn + n + n + nlogn + n + n + n + n) = 9n + 2logn >> 9n доминирует, поэтому сложность времени составляет O(n). Пожалуйста, поправьте меня, если я ошибаюсь!

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

1 Ответ

0 голосов
/ 26 января 2019

В вашем упрощении есть ошибка, она должна быть 9n + 2 n logn, где nlogn доминирует, поэтому ответ O (nlogn)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...