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-ый элемент. Это решение тоже пройдет. for i in range(len(a)):
j = random.randint(0, i);
a[i], a[j] = a[j], a[i]