def balancedSums(arr):
    n = len(arr)
    for i in range(0, n):
        lsum = sum(arr[0 : i])
        rsum = sum(arr[i + 1 : n])
        if lsum == rsum:
            return "YES"
    return "NO"

Я получаю все тестовые примеры, кроме двух, которые не выполняются из-за тайм-аута. Какие у меня варианты?

-1
Apurva Gaurav 26 Сен 2021 в 01:58

2 ответа

Лучший ответ

Вы можете сделать что-то подобное:

def balancedSums(arr):
    lsum = 0
    rsum = sum(arr)
    n = len(arr)
    for i in range(0, n):
        rsum -= arr[i]
        if lsum == rsum:
            return "YES"
        lsum += arr[i - 1]
    return "NO"

Временная сложность этого составляет O(n)

2
Anwarvic 25 Сен 2021 в 23:39

Я попытался придумать векторизованный способ сделать это с помощью Numpy. Это лучшее, что я придумал на данный момент:

import numpy as np

def balancedSums(arr):
    ltr = np.cumsum(arr)
    rtl = np.cumsum(arr[::-1])[::-1]
    if np.any(ltr == rtl):
        return("YES")
    else:
        return("NO")

assert(balancedSums([1, 2, 3]) == "NO")
assert(balancedSums([3, 2, 1, 2, 3]) == "YES")
assert(balancedSums([10]) == "YES")
assert(balancedSums([1, 1]) == "NO")
assert(balancedSums([0]) == "YES")
assert(balancedSums([]) == "NO")
1
Bill 25 Сен 2021 в 23:41