1588 所有奇數長度子陣列的和(字首和)
1. 問題描述:
給你一個正整數陣列 arr ,請你計算所有可能的奇數長度子陣列的和。子陣列 定義為原陣列中的一個連續子序列。請你返回 arr 中 所有奇數長度子陣列的和 。
示例 1:
輸入:arr = [1,4,2,5,3]
輸出:58
解釋:所有奇數長度子陣列和它們的和為:
[1] = 1
[4] = 4
[2] = 2
[5] = 5
[3] = 3
[1,4,2] = 7
[4,2,5] = 11
[2,5,3] = 10
[1,4,2,5,3] = 15
我們將所有值求和得到 1 + 4 + 2 + 5 + 3 + 7 + 11 + 10 + 15 = 58
示例 2:
輸入:arr = [1,2]
輸出:3
解釋:總共只有 2 個長度為奇數的子陣列,[1] 和 [2]。它們的和為 3
示例 2:
輸入:arr = [10,11,12]
輸出:66
提示:
1 <= arr.length <= 100
1 <= arr[i] <= 1000
2. 思路分析:
① 分析題目可以知道我們是要求解出所有奇數長度的的子陣列的和,所以這裡涉及到一個範圍內的子陣列的和,所以比較容易想到的是字首和的解決方法,我們需要求解出從0到當前位置的字首和(當前位置的最大長度為陣列的長度 + 1),這樣我們就可以通過下標相減的方法來求解某個範圍的子陣列的和,因為是要求解出奇數長度的子陣列,所以我們想到使用兩層for迴圈來解決,第一層for迴圈表示的是子陣列的奇數長度(步長為2),第二層for迴圈是從當前位置開始長度為k的子陣列的範圍(k為當前的子陣列的長度),這樣我們可以通過之前得到的字首和陣列通過下標的方式相減就可以得到長度為奇數的子陣列的和了
② 而且對於陣列邊界的確定問題最好的解決方法是寫出具體的例子進行簡單的分析, 進行debug除錯就可以得到具體的範圍
3. 程式碼如下:
from typing import List
class Solution:
def sumOddLengthSubarrays(self, arr: List[int]) -> int:
presum = [0] * (len(arr) + 1)
for i in range(1, len(arr) + 1):
presum[i] = presum[i - 1] + arr[i - 1]
res = 0
n = len(arr)
# 步長為2,所以得到的奇數長度序列為1,3,5...
for length in range(1, n + 1, 2):
for i in range(length, n + 1):
res += (presum[i] - presum[i - length])
return res
相關文章
- lLeeCode最優題解收錄:1588.所有奇數長度子陣列的和陣列
- 求陣列內所有偶數的和陣列
- 2022-07-09:總長度為n的陣列中,所有長度為k的子序列裡,有多少子序列的和為偶數?陣列
- LeetCode 560. 和為K的子陣列(字首和+雜湊+問題轉化)LeetCode陣列
- 203. 長度最小的子陣列陣列
- POJ 2752+KMP+利用next陣列性質求出所有相同的字首和字尾KMP陣列
- leetcode_209. 長度最小的子陣列LeetCode陣列
- LeetCode-209-長度最小的子陣列LeetCode陣列
- 【LeetCode】209. 長度最小的子陣列LeetCode陣列
- <二分查詢+雙指標+字首和>解決子陣列和排序後的區間和指標陣列排序
- 【貪心法】奇數陣列 思路解析和程式碼陣列
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- 和為 K 的子陣列陣列
- sizeof 和 strlen 計算陣列大小和長度詳解陣列
- 每日一練(45):長度最小的子陣列陣列
- 差分陣列原理與其字首和的應用陣列
- 字元陣列的長度字元陣列
- MyBatis陣列與集合判斷非空和長度MyBatis陣列
- 從陣列中找出N個數,其和為M的所有可能陣列
- 【譯】在 JavaScript 中建立和填充任意長度的陣列JavaScript陣列
- Q11 LeetCode209 長度最小的子陣列LeetCode陣列
- 977.有序陣列的平方 ,209.長度最小的子陣列 ,59.螺旋矩陣II陣列矩陣
- 3254. 長度為 K 的子陣列的能量值 I陣列
- 子陣列異或和問題陣列
- 資料庫系列:字首索引和索引長度的取捨資料庫索引
- 第四章:多維陣列和矩陣 ------------- 4.7 子陣列最大累加和陣列矩陣
- 最大連續子陣列和的實現陣列
- 子陣列的最大異或和問題陣列
- 二分法 字首和 最長子序列
- 最大連續子陣列和(最大子段和)陣列
- 程式碼隨想錄陣列二刷:長度最小的子陣列(滑動視窗)陣列
- 查詢陣列中出現次數大於陣列長度一半的數字陣列
- Python演算法與資料結構--求所有子陣列的和的最大值Python演算法資料結構陣列
- Python演算法與資料結構–求所有子陣列的和的最大值Python演算法資料結構陣列
- 如何查詢總和等於給定數字的整數陣列中的所有對陣列
- C++陣列長度C++陣列
- Javascript - 陣列和陣列的方法JavaScript陣列
- Java 定義長度為 0 的陣列 / 空陣列Java陣列