Открытие

Перечислен как легкий, описание:

Учитывая массив nums. Мы определяем текущую сумму массива как runningSum[i] = sum(nums[0]…nums[i]).

Вернуть текущую сумму nums.

Пример 1:

Input: nums = [1,2,3,4]
Output: [1,3,6,10]
Explanation: Running sum is obtained as follows: [1, 1+2, 1+2+3, 1+2+3+4].

Пример 2:

Input: nums = [1,1,1,1,1]
Output: [1,2,3,4,5]
Explanation: Running sum is obtained as follows: [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1].

Пример 3:

Input: nums = [3,1,2,10,1]
Output: [3,4,6,16,17]

Ограничения:

  • 1 <= nums.length <= 1000
  • -10^6 <= nums[i] <= 10^6

Решение

Если эта проблема сложна, это тот факт, что вам нужно отслеживать несколько инвариантов.

class Solution:
    def runningSum(self, nums: List[int]) -> List[int]:
        ans = []
        sum = 0
        for i in range(len(nums)):
            for j in range(i+1):
                sum += nums[j]
            ans.append(sum)
            sum = 0
            
        return ans

Я только что дал вам ответ. Ну, это первое, что я придумал. Так как я пытаюсь сделать как можно больше, я оставляю оптимизацию на вас. Или, может быть, я вернусь к этому в другой раз.

Вы создаете пустой список для хранения своего ответа и устанавливаете переменную суммы на ноль. Переменная ans — это то, что вы вернете.

Часть, на которую вы хотите обратить внимание, — это двойная петля. Первая петля будет определять, как далеко зайдет вторая петля. Если есть 5 чисел, то второй цикл будет повторяться, пока не достигнет 5 чисел.

Значение +1 во втором цикле важно, потому что оно указывает программе учитывать последний элемент для суммирования. Переменная суммы сбрасывается до 0 после каждого i-го цикла.

Конечно, вы захотите добавить суммированную переменную в список ответов, прежде чем сбрасывать ее. Это медленно, но работает.

Хорошо, спасибо за чтение!