Требование состоит в том, что ввод будет установлен в диапазоне от -5 до 5, результат должен дать самое длинное подмножество целого числа, в котором общее значение должно быть больше или равно нулю.Как сделать время выполнения программы равным Θ n
Я могу только придумать следующее: вход будет вход [0 до п]
let start, longestStart, end, longestEnd, sum = 0
for i=0 to n-1
start = i
sum = input[i]
for j=1 to n
if sum + input[j] >= 0 then
end=j;
if end - start > longestEnd - longestStart then
longestStart = start;
longestEnd = end;
Однако это Θ (п^2). Я хотел бы знать, каковы способы, чтобы сделать этот цикл стал Θ (п) Спасибо вам
Благодарим вас за ответ. Я все еще немного смущен. Если у меня есть вход с [1, 2, 3, -5, 4, 3, -1], и сумма этого массива равна [1, 3, 6, 1, 5, 8, 7]. Очевидно, что весь массив является самым длинным подмассивом, но как его получить с помощью локальных минимумов и максимумов? – swordgit
@swordgit: для вашего примера не весь массив, на который вы ищете ответ? Вы задавали самое длинное подмножество целого числа, сумма которого больше или равна нулю. –