Учитывая массив из N положительных целых чисел. Он может содержать поддиапазоны n*(n+1)/2
, включая одноэлементные подматрицы. Каждая подматрица имеет сумму S
. Найти S's
для всех подматриц, очевидно, O(n^2)
, так как количество подмассивов O(n^2)
. Можно также повторить много сумм S's
. Есть ли способ найти количество всех различных сумм (а не точные значения сумм, но только счет) в O(n logn)
.Поиск суммы подматрицы в целочисленном массиве
Я пробовал подход, но застрял в пути. Я повторил массив из индекса 1 в n.
Скажем a[i]
- данный массив. Для каждого индекса i
, a[i]
будет добавлен ко всем суммам, в которых участвует a[i-1]
, и будет включать себя также как отдельный элемент. Но дубликат появится, если среди сумм, в которых участвует a[i-1]
, разница в двух суммах равна a[i]
. Я имею в виду, что, например, суммы Sp
и Sq
заканчиваются на a[i-1]
, а разница составляет a[i]
. Затем Sp + a[i]
равно Sq
, что дает Sq
как дубликат.
Скажите C[i]
- количество отличных сумм, в которых заканчивается a[i]
.
So C[i] = C[i-1] + 1 - numbers of pairs of sums in which a[i-1] is involved whose difference is a[i]
.
Но проблема заключается в том, чтобы найти часть числа пар в O(log n)
. Пожалуйста, дайте мне некоторый намек на это или если я ошибаюсь, и совершенно другой подход требует проблемного момента.
Ну, это интересная проблема.Все, что я придумал, потенциально требует рассмотрения всех пар входных элементов, который является O (n^2). Моя кишка говорит, что это невозможно. – user2357112
Я был уверен тем, кто дал мне проблему, что O (n logn) существует. Я целыми днями думал. – user2011120
Если вы все еще застряли завтра, спросите его о временной демонстрации, поэтому вы знаете, что он не возится с вами. – user2357112