Установка значения перечисления в переменную изменяет выходные данные функции

#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(высота). Разве это не добавляет к необходимым вычислениям?