Это проблема leetcode, в которой нам дан несортированный массив целых чисел, который действует как стены на земле с индексами массива, указывающими их положение по отношению друг к другу.

См. leetcode для более подробного описания проблемы.

Теперь моей первой мыслью было взять два индекса i , j , которые представляют две предложенные граничные линии.

Теперь, если i+1 элемент массива больше i и j-1 элемент больше j . Тогда, безусловно, вы можете обесценить i и j. Каким бы способом вы ни заливали воду, она всегда будет ограничена двумя большими перемычками.

так что в этом случае

площадь (i, j) = max (площадь (i + 1, j-1), площадь (j-1, j), площадь (i, i + 1))

аналогично, если оба этих следующих бара меньше, чем i & j . Ясно, что границу i и j можно включить в максимальную площадь

площадь (i, j) = площадь (i + 1, j-1) + площадь (j-1, j) + площадь (i, i + 1)

Если одна полоса меньше другой

are(i,j) = max(площадь(i,i+1), площадь(i+1,j))

и наоборот для другого случая

Теперь это занимает n2 времени, что дало мне результат превышения TTL.

Задача требует N раз

поэтому задача потребовала O(n) времени

Алгоритм:

инициализировать индексы для первого и последнего элемента массива

если первый элемент больше последнего элемента, вам больше не нужен последний элемент, поэтому вы уменьшаете последний индекс

иначе увеличить первый индекс

Алгоритм довольно упрощен, и кажется, что он пропустит один или два случая, но оказывается, что алгоритм довольно упрощен.