力扣刷題之區域和檢索 陣列不可變

2022-06-16 12:24:12 字數 444 閱讀 6046

這個題屬於簡單型別,這裡主要是記錄一種思路。

第一反應是迴圈求取陣列中i到j元素的和,當然第一反應得到的答案通常都不是最優解法。

這裡記錄另一種思路,字首和---先計算陣列 nums 在下標 j 和下標 i−1 的字首和,然後計算兩個字首和的差。

其中求和不是利用雙層for迴圈(如果是這樣,那就可以直接for迴圈求下標i到j之間的陣列元素和了),而是使用如下公式

sums[i+1]=sums[i]+nums[i],sums[i]表示陣列nums下標從0到i-1的字首和。

將字首和陣列sums 的長度設為 n+1 的目的是為了方便計算sumrange(i,j),不需要對i=0 的情況特殊處理。

c++**實現如下:

class

numarray

int sumrange(int i, int

j) };

力扣 303 區域和檢索 陣列不可變

題目 給定乙個整數陣列 nums,求出陣列從索引 i 到 j i j 範圍內元素的總和,包含 i,j 兩點。示例 給定 nums 2,0,3,5,2,1 求和函式為 sumrange sumrange 0,2 1 sumrange 2,5 1 sumrange 0,5 3 說明 你可以假設陣列不可變...

力扣刷題之二維區域和檢索 矩陣不可變

這個是這道題的解題思路是分別求一維陣列的字首和,然後再求二位陣列中指定區域的和。具體實現方面,建立 m 行 n 1 列的二維陣列sums,其中 m和 n分別是矩陣matrix 的行數和列數,sums i 為matrix i 的字首和陣列。將sums 的列數設為n 1 的目的是為了方便計算每一行的子陣...

區域和檢索 陣列不可變

注意需要多次呼叫sumrange方法,所以不能簡單的進行區間遍歷求和,動態規劃一下,記錄一下 每個區間的和,然後根據索引直接求出結果。class numarray sums new int length sums 0 nums 0 for int i 1 i length i public int ...