Учитывая два массива:Количество элементов, которые удовлетворяют соотношению
2 5 6 4 3 7 1
5 1 6 2 3 7 4
сосчитать число элементов x, y
, которые удовлетворяют условию, что x
находится перед y
в обоих массивах.
Прогресс до сих пор:
Отсортировать массивы по их индексам. Например, это будет:
object: 1 2 3 4 5 6 7
indexes in the first array: 6 0 4 3 1 2 5
indexes in the secnod array: 1 3 4 6 0 2 5
и сравнить каждый кортеж с другим. Если кортеж a
имеет либо оба индекса ниже или выше, чем кортеж b
, увеличивайте количество элементов, удовлетворяющих условию.
Это временная сложность (N^2)/2, поэтому O (N^2), которая слишком медленная. Я понимаю, что не может быть лучшего худшего сценария сложности, но меня больше всего интересует средний результат. Итак: есть ли лучший способ/алгоритм?
Я думал об использовании переходных свойств (если оба (x,y)
и (y,z)
удовлетворяют условию, то (x,z)
удовлетворяет его также), но не повезло.
Тестовые
Для массивов:
2 5 6 4 3 7 1
5 1 6 2 3 7 4
Пары, которые удовлетворяют условию являются:
(5,1) (2,3) (2,4) (2,7) (5,3) (6,3) (3,7) (5,4) (6,4) (5,6) (5,7) (6,7)
Для массивов:
1 2 3 4 5 6 7
1 2 3 4 5 6 7
Пары, которые удовлетворяют условию являются:
(1,2) (1,3) (1,4) (1,5) (1,6) (1,7) (2,3) (2,4) (2,5) (2,6) (2,7) (3,4) (3,5) (3,6) (3,7) (4,5) (4,6) (4,7) (5,6) (5,7) (6,7)
'(x, y)' принимает значения '(2,5), (5,1), ..., (1,4)' в вашем примере? –
В первом массиве 2 до 5, но в следующем 5 это путь до 2. (5,1), однако это правда. (1,4) нет. (6,7), (5,6) и т. Д. Является правильным. – FigsHigs
А, ок. У вас есть несколько тестовых случаев? –