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.所有奇數長度子陣列的和陣列
- 陣列進行奇數和偶數操作 把奇數放在陣列前面 偶數放在陣列後面陣列
- 求陣列內所有偶數的和陣列
- HDU 1588 斐波那契數列數列變形和矩陣連乘矩陣
- Java 陣列的不同定義方式和陣列長度為可變引數Java陣列
- 2022-07-09:總長度為n的陣列中,所有長度為k的子序列裡,有多少子序列的和為偶數?陣列
- 203. 長度最小的子陣列陣列
- 【貪心法】奇數陣列 思路解析和程式碼陣列
- 每日一練(45):長度最小的子陣列陣列
- sizeof 和 strlen 計算陣列大小和長度詳解陣列
- <二分查詢+雙指標+字首和>解決子陣列和排序後的區間和指標陣列排序
- LeetCode 560. 和為K的子陣列(字首和+雜湊+問題轉化)LeetCode陣列
- 繩子的長度;及找陣列的波谷分析陣列
- javascript如何獲取陣列的長度和遍歷陣列的每一項JavaScript陣列
- 和為 K 的子陣列陣列
- javascript刪除陣列中所有奇數程式碼例項JavaScript陣列
- POJ 2752+KMP+利用next陣列性質求出所有相同的字首和字尾KMP陣列
- 字元陣列的長度字元陣列
- 差分陣列原理與其字首和的應用陣列
- MyBatis陣列與集合判斷非空和長度MyBatis陣列
- 演算法陣列中降序數列的最大長度演算法陣列
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- 【譯】在 JavaScript 中建立和填充任意長度的陣列JavaScript陣列
- 3254. 長度為 K 的子陣列的能量值 I陣列
- 程式碼隨想錄陣列二刷:長度最小的子陣列(滑動視窗)陣列
- 資料庫系列:字首索引和索引長度的取捨資料庫索引
- 從陣列中找出N個數,其和為M的所有可能陣列
- LeetCode-209-長度最小的子陣列LeetCode陣列
- 【LeetCode】209. 長度最小的子陣列LeetCode陣列
- leetcode_209. 長度最小的子陣列LeetCode陣列
- 查詢陣列中出現次數大於陣列長度一半的數字陣列
- C++陣列長度C++陣列
- HDU5147 Sequence II(樹狀陣列+字首和+字尾和)陣列
- 子陣列異或和問題陣列
- POJ 2217-Secretary(字尾陣列+高度陣列-最大公共子串長度)陣列
- 第四章:多維陣列和矩陣 ------------- 4.7 子陣列最大累加和陣列矩陣
- Java 定義長度為 0 的陣列 / 空陣列Java陣列
- 子陣列的最大異或和問題陣列