Понимание логических различий между двумя похожими частями кода - PullRequest
0 голосов
/ 28 мая 2020

В настоящее время я решаю разные проблемы, и я наткнулся на это: https://leetcode.com/problems/container-with-most-water/submissions/

Один ответ, который я решил, был:

class Solution:
    def maxArea(self, height: List[int]) -> int:
        maxarea = 0
        for x in height:
            for y in range(x+1,len(height)):
                maxarea = max((y-x)*(min(height[x],height[y])), maxarea)

        return maxarea

, а другой был :

class Solution:
    def maxArea(self, height: List[int]) -> int:
        maxarea = 0
        for x in range(len(height)-1):
            for y in range(x+1,len(height)):
                maxarea = max(maxarea, min(height[x], height[y])*(y-x))

        return maxarea

Однако эти двое решают разное количество тестовых случаев. Второй решает это нормально, хотя и превышает время, а первый - нет.

Я понимаю, что это не самый эффективный способ, но может ли кто-нибудь просмотреть лог c и объяснить, почему один ведет себя не так, как другой? Проблема должна быть в двух операторах for l oop, в строках 4 и 5 для обоих. .

1 Ответ

0 голосов
/ 28 мая 2020

Первый блок кода получает значения массива высот и затем использует их в качестве индексов в этом массиве. Чтобы получить то же поведение, что и вторая функция, вам нужно будет выполнить maxarea = max((y-x)*(min(x,height[y])), maxarea), поскольку x в первой функции эквивалентно height[x] во второй

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...