2020/9/30 Acwing-字首和
題目
輸入一個長度為n的整數序列。
接下來再輸入m個詢問,每個詢問輸入一對l, r。
對於每個詢問,輸出原序列中從第l個數到第r個數的和。
輸入格式
第一行包含兩個整數n和m。
第二行包含n個整數,表示整數數列。
接下來m行,每行包含兩個整數l和r,表示一個詢問的區間範圍。
輸出格式
共m行,每行輸出一個詢問的結果。
資料範圍
1≤l≤r≤n,
1≤n,m≤100000,
−1000≤數列中元素的值≤1000
輸入樣例:
5 3
2 1 3 6 4
1 2
1 3
2 4
輸出樣例:
3
6
10
題目分析
使用字首和陣列,能夠更方便的得到原陣列部分連續的元素的和,優勢在於只有第一次儲存字首和陣列的時間複雜度是O(n),而求和時的複雜度都是O(1)
原始碼
import java.util.Scanner;
class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
//int[] q=new int[100000];
int[] q_sum=new int[100100];
for(int i=1;i<=n;i++){
int x=sc.nextInt();
q_sum[i]=q_sum[i-1]+x;
}
while(m-->0){
int l=sc.nextInt();
int r=sc.nextInt();
System.out.println(q_sum[r]-q_sum[l-1]);
}
}
}
題目很簡單,我這裡可以看到並沒有儲存原陣列,而是直接把原陣列的元素經過計算,直接存入到字首和陣列中了.對於給出一個陣列,要求其字首和陣列,可採用的方式:
for(int i=1;i<=n;i++){
q_sum[i]=q_sum[i-1]+q[i];}
本題屬於簡單題,唯一值得注意的是,在儲存資料時,最好從角標1開始存,這樣角標為0的數就是0.字首和陣列也是從0開始存.這樣做的好處是,字首和陣列的第一項是原陣列的第0項(即0)+第一項,這樣初始條件就沒有問題了. (如果從0開始存,那字首和的第0項需要自己寫值,因為原陣列沒有-1項)
相關文章
- 2020年9月30日 晴
- 2020-9-30數學作業
- 字首和與二維字首和
- 字首和
- (Day4)字首和&二維字首和
- 高維字首和
- 字首和&差分
- 字首和 & 差分
- 2020_9_29_集合和字串字串
- 2020 年 9 月中國廠商及應用出海收入 30 強
- 高維字首和SOSDP
- 字首和與差分
- 組合數字首和
- 9月30日總結
- 二維字首和&差分
- MySQL 字串索引和字首索引MySql字串索引
- 淺記高維字首和
- 1.Prefix字首和【模板】
- 高維字首和(SOS DP)
- App Annie :2020 年 9 月中國廠商及應用出海收入 30 強APP
- 2020-10-30
- 2020-09-30
- 2020-11-30
- 2020-12-30
- 字首和的基礎講解
- 1048 數字加密(字首和思想)加密
- 樹上字首和與差分
- 中綴轉字尾和字首
- 字首和的n個神奇操作
- Sensor Tower:2020年9月成功出海的中國手遊TOP30
- 2020-09-30 PCI
- 二維字首和 & 二維差分
- 2020-9-23
- 2020-10-31 最長公共字首【簡單題14】
- leetcode1546題解【字首和+貪心】LeetCode
- 自2021年9月30日起,谷歌將強制徵收30%抽成谷歌
- 字首樹
- luoguP5369 [PKUSC2018] 最大字首和