盤點3種Python網路爬蟲過程中的中文亂碼的處理方法
阿新 • • 發佈:2021-10-15
一維字首和
普通求和
同常我們對一維陣列求和採用的是從頭到尾遍歷的方式,時間複雜度是O(n)
,但當計算很龐大的資料量時就很可能會超時!
int sum = 0;
for(int i = 0; i < nums.size(); i++)
sum += nums[i]
一維字首求和
-
初始化字首和陣列(定義一個
s[i]
陣列,用來記錄(代表)前i項資料的和
):s[i] = s[i - 1] + a[i]
-
查詢操作:計算[l ~ r]的和:
s[r] - s[l - 1]
。時間複雜度是O(1)
【acwing.795字首和】
輸入一個長度為 nn 的整數序列。
接下來再輸入 mm 個詢問,每個詢問輸入一對 l,rl,r。
對於每個詢問,輸出原序列中從第 ll 個數到第 rr 個數的和。
輸入格式
第一行包含兩個整數 nn 和 mm。
第二行包含 nn 個整數,表示整數數列。
接下來 mm 行,每行包含兩個整數 ll 和 rr,表示一個詢問的區間範圍。
輸出格式
共 mm 行,每行輸出一個詢問的結果。
資料範圍
1≤l≤r≤n1≤l≤r≤n,
1≤n,m≤1000001≤n,m≤100000,
−1000≤數列中元素的值≤1000−1000≤數列中元素的值≤1000輸入樣例:
5 3 2 1 3 6 4 1 2 1 3 2 4
輸出樣例:
3 6 10
#include<iostream> using namespace std; int n,m; const int N = 100000+10; int a[N],s[N]; int main() { cin>>n>>m; for(int i = 1; i <= n; i++) cin>>a[i]; //初始化字首和陣列s[i] for(int i = 1; i <= n; i++) s[i] = s[i -1] + a[i]; int l, r; while(m--) { cin>>l>>r; //求[l~r]的和 cout<<s[r] - s[l - 1]<<endl; } return 0; }