#python #enumerate
Вопрос:
Я новичок в функции перечисления, я только начал ее использовать. В этом блоке кода я несколько раз перечисляю «высоту» :
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
if len(height) == 2:
return (min(height))
maxArea = -1
for i, a in enumerate(height):
maxIndex, maxDistance = i, 0
for j, s in enumerate(height):
distance = abs(j-i)
if distance>maxDistance and s>=a:
maxIndex, maxDistance = j, distance
area = abs(maxIndex - i) * a
maxArea = max(area,maxArea)
return maxArea
Я думал, что способ оптимизировать это-установить переменную enumerate(высота), чтобы уменьшить количество раз, когда высота была введена в функцию enumerate:
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
if len(height) == 2:
return (min(height))
maxArea = -1
enumeratedHeight = enumerate(height)
for i, a in enumeratedHeight:
maxIndex, maxDistance = i, 0
for j, s in enumeratedHeight:
distance = abs(j-i)
if distance>maxDistance and s>=a:
maxIndex, maxDistance = j, distance
area = abs(maxIndex - i) * a
maxArea = max(area,maxArea)
return maxArea
Я протестировал эту новую функцию в этом случае [1,8,6,2,5,4,8,3,7]. Функция » До » правильно ответила на 49, но эта возвращает 8?
(этот код предназначен для решения проблемы с большинством воды в Leetcode, я знаю, что он неэффективен, но мне сказали написать неэффективный код, если я не могу найти эффективное решение)
Комментарии:
1.
enumerate
объекты могут быть повторены только один раз.2. @rdas, есть ли у меня способ не перечислять высоту более одного раза?
3. Ваше первое решение делает именно это.
4. Вам нужно
height
несколько раз повторить содержимое цикла, если только сам алгоритм не может быть изменен. Нет способа сделать это, не перебирая содержимоеheight
несколько раз. Есть ли какая-то особая причина для того, чтобы пытаться изменить то, как вы это делаете? Это похоже на то, что, даже если бы это сработало, не принесло бы никакой пользы.5. @rdas Я в замешательстве, в первом решении я несколько раз вызывал enumerate(высота). Разве это не добавляет к необходимым вычислениям?