x_i*a+y_i*b = r_i
x_prev*a+y_prev*b = r_prev
и x_cur*a+y_cur*b = r_cur
. Вам надо составить линейную комбинацию r_prev - r_cur. Ну вычтите одно уравнение из другого и все.x_cur = x_prev - x_cur
y_cur = y_prev - y_cur
а общее число перераспределений для n добавлений уменьшается как O(logn). Почему тогда в таком случае для n последовательности append-ов общая сложность равна O(n), а не O(n logn)?
1+4+10+⋯≤O(n)
if i == middle - 1 or i >= 5 and len(list) <= 4:
return -1
i = 0
while i < len(arr):
x = arr[i]
j = i+1
while j < len(arr):
if ShouldDelete(arr[j], arr[i]):
del a[j]
arr[i+1:] = y for y in arr[i+1:] if not ShouldDelete(x, arr[i])
second_element = ctypes.c_int(A[1])
begin = ctypes.pointer(second_element)
last_element = ctypes.c_int(A[size - 1])
end = ctypes.pointer(last_element)
IndentationError: unexpected unindentозначает, что форматирование файла кривое. Скорее всего, табы вместо пробелов или наоборот в 22 строке. При форматировании не то вставили. Выглядеть оно может правильно, но питону важно, чтобы все было идентично.
def GenerateAll(source, rep):
for comb in itertools.combinations(range(len(source)), len(source)-len(rep)):
s = list()
prev = 0
for (i, j) in enumerate(comb):
s.append(source[j]);
yield "".join(s)
def GenerateAll(source, rep):
for comb in itertools.combinations(range(len(source)), len(rep)):
s = list()
prev = 0
last = 0
for (i, j) in enumerate(comb):
while (last < j):
s.append(source[last]);
last += 1
last += 1
while (last < len(source)):
s.append(source[last]);
last += 1
yield "".join(s)
O(n^2)
. Вы для каждого числа в массиве считатете, сколько раз оно туда входит проходя по массиву через nums.count(i)
. Оптимальное же решение работает O(n)
. Надо в хеш-таблице подсчитать, сколько раз каждое число встречается, потом через алгоритм QuickSelect выбрать k-ый c конца элемент.O(n log n)
отсортировать массив и потом за один проход подсчитать сколько раз каждое число встречается. Дальше можно второй раз отсортировать по количеству вхождений и выдать k-ый элемент. Это решение тоже пройдет.