一維數組求區間和:
preSum 方法能快速計算指定區間段 【i,j】的元素之和。它的計算方法是從左向右遍歷數組,當遍歷到數組的i位置時,preSum 表示 i 位置左邊的元素之和。

算法思路:
1.設原數組nums大小為N,定義一個大小為N+1的數組preum,preSum[i] 表示該元素左邊所有元素之和(不包含 i 元素)。遍歷原數組,利用 preSum[i + 1] = nums[i] + preSum[i]
每次對nums數組的[0,j)范圍求和,賦值給presum[i]。
2.利用  sum(i, j) = preSum[j + 1] - preSum[i] 快速求區間和。
定義N+1大小的presum數組是因為,可以方便地求區間和,不需要對i=0的特殊情況進行處理。
構造時時間復雜度和空間復雜度都是O(n),查詢O(n)。

           class NumArray { 
         
 
         
           public: 
         
 
         
               vector<int> presum; 
         
 
         
               NumArray(vector<int>& nums) 
         
 
         
             { 
         
 
         
                   int N = size(nums); 
         
 
         
                   presum.resize(N+1); 
         
 
         
                   for(int i = 0;i<N;i++) 
         
 
         
                   { 
         
 
         
                        
          presum[i+1] = presum[i] +nums[i]; 
         
 
         
                   } 
         
 
         
               } 
         
 
         
               int sumRange(int i, int j) { 
         
 
         
                   return presum[j+1] - presum[i]; 
         
 
         
               } 
         
 
         
           }; 
         
 
        
二維矩陣版:
同樣的思路,不同的是
1.presum數組的推導方式,利用:
preSum[i+1][j+1] = preSum[i][j+1]+preSum[i+1][j]−preSum[i][j]+matrix[i][j]
2.求任意子矩陣的和:
sum([row1,col1]~[row2,col2]) = preSum[row2+1][col2+1]−preSum[row2+1][col1]−preSum[row1][col2+1]+preSum[row1][col1]
同樣利用了 加一 的方法避免對特殊情況進行處理。
