Открытие
Перечислен как легкий, описание:
Учитывая массив 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-го цикла.
Конечно, вы захотите добавить суммированную переменную в список ответов, прежде чем сбрасывать ее. Это медленно, но работает.
Хорошо, спасибо за чтение!