Следующий алгоритм находит max QAZ. QAZ элемента - это число элементов с более высоким значением после индекса этого элемента. Популярным ответом является использование divide и решение с использованием O (nLog (n)).«Разделяет и побеждает» дает O (log N) для несортированного массива?
Массив не отсортирован. В худшем случае «Divide & Conquer» коснется всех n элементов. Также 'цикл' будет касаться п/2 элементов в худшем .. Как это п * журнала (п) .. Не должно быть O (N^2) .. спасибо
class QAZ:
def __init__(self, min, qaz):
self.min = min
self.qaz = qaz
def max_qaz(arr):
n = len(arr)
def max_qaz_util(start, end):
if end <= start:
return QAZ(arr[end], 0)
elif start == (end + 1):
return QAZ(arr[start], 1) if arr[start] < arr[end] else QAZ(arr[end], 0)
mid = int((start + end)/2)
left = max_qaz_util(start, mid)
right = max_qaz_util(mid + 1, end)
if left.min < right.min:
left.qaz += end - mid
return left
else:
for i in range(mid + 1, end + 1):
if arr[i] > left.min:
left.qaz += 1
return left if left.qaz > right.qaz else right
result = max_qaz_util(0, n - 1)
print("minval", result.min)
print("qaz", result.qaz)
max_qaz([33, 25, 26, 58, 41, 59])
Почему отрицательный голос без объяснения причин – om471987