1. 程式人生 > 其它 >盤點3種Python網路爬蟲過程中的中文亂碼的處理方法

盤點3種Python網路爬蟲過程中的中文亂碼的處理方法

一維字首和

普通求和

同常我們對一維陣列求和採用的是從頭到尾遍歷的方式,時間複雜度是O(n),但當計算很龐大的資料量時就很可能會超時!

int sum = 0;
for(int i = 0; i < nums.size(); i++)
	sum += nums[i]

一維字首求和

  1. 初始化字首和陣列(定義一個s[i]陣列,用來記錄(代表)前i項資料的和):s[i] = s[i - 1] + a[i]

  2. 查詢操作:計算[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;
}