藍橋杯沖刺:一維前綴和

系列文章目錄

藍橋杯系列:一維前綴和


文章目錄

  • 系列文章目錄
  • 前言
  • 一、暴力的寫法:
  • 二、一維前綴和的模板:
    • 具體實現:
  • 三、具體例題:求和
    • 1.題目參考:
    • 2.以下是具體代碼實現:
  • 總結


前言

? ? 上次我介紹了一下模擬和枚舉類的題目,這次我想給大家介紹一種必會的思想,就是一維前綴和,因為假設我們要確定一個區間的和,我們每次確定一個范圍就是遍歷一次,時間復雜度有可能會很高,而我們如果構建出來前綴和數組的話就方便很多了,下面我們來看具體的:


?前綴和是以空間換時間

一、暴力的寫法:

? ? ? ? 先給大家來看一種暴力的寫法,這種相信大家只要思路是對的應該都可以直接寫出來。

? ? ? ? ? ?

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();      // 數組長度int q = scan.nextInt();      // 查詢次數int[] arr = new int[n + 1];  // 假設數組從索引1開始存儲(方便輸入)// 讀取數組元素(1-based)for (int i = 1; i <= n; i++) {arr[i] = scan.nextInt();}// 處理每個查詢for (int j = 0; j < q; j++) {int l = scan.nextInt(); // 區間左端點int r = scan.nextInt(); // 區間右端點// 暴力累加區間和int sum = 0;for (int k = l; k <= r; k++) {sum += arr[k];}System.out.println(sum);}scan.close();}
}

? ?

這種方式

  1. 超時風險:??當?n = 1e5?且?q = 1e5?時,總操作次數高達?1e10,遠超程序的時間限制(通常 1秒內只能處理約?1e8?次操作)。
  2. ?重復計算:??相同區間多次查詢時,暴力法會重復計算,而前綴和只需一次預處理。

二、一維前綴和的模板:

? ? ? ??

? ? ? ?具體實現:

? ? ? ?

public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此輸入您的代碼...int t = 1;while(t>0){solve(scan);t--;}scan.close();}public static void solve(Scanner scan){int n = scan.nextInt();int q = scan.nextInt();int[] arr = new int[n+1];int[] pre = new int[n+1];arr[0] = 0;pre[0] = 0;for(int i = 1;i<=n;i++){arr[i] = scan.nextInt();pre[i] = pre[i-1]+arr[i];//將前綴和確定}  for(int j = 0;j<q;j++){int l = scan.nextInt();int r = scan.nextInt();System.out.println(pre[r]-pre[l-1]);}       }}

? ? ? 這個就是創建出來了一個前綴和數組,然后開始進行賦值。? ?

? ? ? ? 下面我們通過這個畫像來幫大家形象的理解一下:

? ? ? ? ? ? ? ? ?

? ?這個就是用畫圖來具體的給大家來呈現的方式。

三、具體例題:求和??

? ? 題目參考:

?

? ? ?

這也是一道有關前綴和的題,我們分析題可以發現一些規律

????a1(a2+....+an)?+a2(a3+....+an)+a3(a4+....+an)

??????所以通項就是:ai(a(i+1)+.....+a(n))

這道題還有一種考點,就是要用合適的數據類型來判斷,因為S的值可能會超過int類型,int類型大概范圍是2*10的9次方,而long的大概范圍是9*10的18次方,這個很明顯會超過int范圍,所以所以sum應該定義為long類型。而arr[i]*(pre[n]-pre[i])也有可能溢出,所以我們也要把arr[i]轉換為long類型的,防止出錯。
? ?

以下是具體代碼實現:

? ??

public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此輸入您的代碼...int n = scan.nextInt();System.out.println(sum(n,scan));scan.close();}//這也是一道有關前綴和的題,我們分析題可以發現一些規律//a1(a2+....+an) +a2(a3+....+an)+a3(a4+....+an)//所以通項就是:ai(a(i+1)+.....+a(n))public static long sum(int n,Scanner scan){int[] arr = new int[n+1];int[] pre = new int[n+1];arr[0] = 0;pre[0] = 0;                for(int i = 1;i<=n;i++){arr[i] = scan.nextInt();pre[i] = pre[i-1]+arr[i];//計算前綴和的和                     }long sum = 0;for(int i = 1;i<n;i++){sum += (long)arr[i]*(pre[n]-pre[i]);}return sum;}}

?對于一維前綴和數組來說:

時間復雜度大幅降低

  • ?暴力法:每次查詢需要遍歷區間?[l, r],時間復雜度為 O(n)。
  • ?前綴和:預處理 O(n),之后每次查詢只需 O(1)。

總結

? 以上就是今天要講的內容,其實前綴和就像一個基本的組件可以作為其他算法的組件,像動態規劃等等,下面我們講dp的時候我也會給大家更新的,接下來我會一直給大家更新藍橋杯的算法題的,大家一起加油,積極向上就完了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75272.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75272.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用UDP建立連接,會存在什么問題?

使用UDP建立連接&#xff0c;會存在可靠性、有序性、連接狀態管理等方面的問題&#xff1a; 1、數據傳輸不可靠&#xff1a; UDP沒有確認和重傳機制&#xff0c;發送方發送數據后&#xff0c;不會等待接收方的確認消息。這意味著如果數據在傳輸過程中丟失&#xff0c;發送方不…

YOLOv5配置訓練以及華為昇騰910B推理

參考文章&#xff1a; 保姆式yolov5教程&#xff0c;訓練你自己的數據集 - 知乎 Windows 10|11下安裝mmyolo-0.5.0版本 - 知乎 Ubuntu22.04安裝教程&基于華為Ascend AI處理器的om模型atc轉換環境安裝_ubuntu安裝atc工具-CSDN博客嵌入式AI---在華為昇騰推理自己的yolov5目標…

基于yolov11的汽車損傷檢測系統python源碼+onnx模型+評估指標曲線+精美GUI界面

【算法介紹】 基于YOLOv11的汽車損傷檢測系統是一種先進的計算機視覺技術&#xff0c;旨在快速準確地識別汽車的各種損傷類型。該系統利用YOLOv11模型的強大性能&#xff0c;實現了對車輛損傷的精確檢測與分類。 該系統能夠識別的損傷類型包括裂紋&#xff08;crack&#xff…

[ 3分鐘算法 ] | 遞歸搜索題目 : 合并兩個有序鏈表(遞歸版)

目錄 1. 題目鏈接&#xff1a; 2. 思路分析&#xff1a; 1. 重復子問題&#xff1f; 2. 具體子問題&#xff1f; 3. 遞歸出口&#xff1f; 3. 代碼實現&#xff1a; 4. 小結&#xff1a; 1. 循環(迭代) vs 遞歸 2. 遞歸 vs 深搜 1. 題目鏈接&#xff1a; 21. 合并…

單元測試原則之——不要模擬值對象 (1)

1. 什么是值對象(Value Objects)? 值對象是指那些不可變且僅通過其屬性(數據)來定義的對象。它們通常沒有復雜的邏輯或行為,主要用于存儲和傳遞數據。例如: ● 字符串(String) ● 數字(Integer, Double) ● 日期(LocalDate, Instant) ● 自定義的簡單數據類(如…

【軟件】在Windows和Ubuntu上使用TFTP和NFS

在Windows和Ubuntu上使用TFTP和NFS 零、介紹 最近在玩Linux開發板&#xff0c;在開發的過程中發現需要用到tftp和nfs來幫助傳輸文件&#xff0c;故此記錄如何使用這兩種軟件。 TFTP&#xff08;Trivial File Transfer Protocol&#xff09; &#xff1a;是一種簡化的文件傳輸…

JS判斷變量是否為空的方法

在 JavaScript 中&#xff0c;判斷變量是否為空需要根據不同的數據類型和具體需求來處理。以下是常見場景的解決方案&#xff1a; 1. 基礎判斷&#xff1a;null 或 undefined javascript if (value null || value undefined) {// 變量為空 } 或簡寫為&#xff1a; javasc…

Linux更換掛載nfs遷移數據流程

當前&#xff1a;原nfs&#xff08;10.16.2.1:/myData&#xff09;掛載在/myData&#xff0c;新的nfs&#xff08;10.16.2.2:/myData&#xff09;未掛載 目標&#xff1a;把舊nfs的數據遷移到新的nfs上&#xff0c;并把新nfs掛載到/myData 步驟&#xff1a; 1、新nfs掛載到一…

深入解析音頻:格式、同步及封裝容器

物理音頻和數字音頻 物理音頻 定義&#xff1a;物理音頻就是聲音在自然界中的物理表現形式&#xff0c;本質上是一種機械波&#xff0c;通過空氣或其他介質傳播。例如&#xff0c;當我們說話、樂器演奏或物體碰撞時&#xff0c;都會產生振動&#xff0c;這些振動會引起周圍介…

AI與.NET技術實操系列(四):使用 Semantic Kernel 和 DeepSeek 構建AI應用

1. 引言 在人工智能技術飛速發展的今天&#xff0c;大型語言模型&#xff08;Large Language Models, LLMs&#xff09;已成為智能應用開發的核心驅動力。從智能客服到自動化內容生成&#xff0c;LLMs的應用正在深刻改變我們的工作和生活方式。 對于.NET開發者而言&#xff0c;…

導出cad實體所有信息到txt并打開(生成唯一文件名) ——c#cad二次開發

效果如下: 建議在保存時指定編碼為UTF-8&#xff1a; using (StreamWriter sw new StreamWriter(filePath, false, Encoding.UTF8)) { // 寫入內容 } 最終 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD…

Redis 源碼硬核解析系列專題 - 第一篇:Redis源碼入門與整體架構

1. 引言 Redis作為一個高性能的內存鍵值數據庫,其源碼以簡潔高效著稱。通過解析Redis源碼,我們可以深入理解其單線程模型、事件驅動機制以及模塊化設計的精髓。本篇將從Redis的源碼目錄結構入手,剖析其整體架構,并聚焦啟動流程和事件循環的核心實現。 2. Redis源碼目錄結構…

異步加載+內存分析

異步加載 Resources和AB包的同步加載與異步加載對比代碼&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class AsyncLoad : MonoBehaviour {// Start is called before the first frame updatev…

將視頻m4s文件轉換為mp4格式

將視頻m4s文件轉換為mp4格式 一般情況&#xff1a;偏大的文件為視頻&#xff0c;偏小的文件為音頻。 環境要求&#xff1a;下載并安裝ffmpeg&#xff0c;并配置好環境變量&#xff0c;如下圖&#xff1a; 轉換代碼&#xff1a; import subprocessdef merge_m4s_to_mp4(vide…

EXCEL報錯:無法共享此工作薄,因表包含excel表或xml映射的解決方法

在分享工作薄是&#xff0c;如果出現了“無法共享此工作薄&#xff0c;因表包含excel表或xml映射”的報錯&#xff0c;那么有兩個原因&#xff1a; 1.包含Excel表格&#xff0c;這個也是相對比較常見的原因。 首先選中表格。如果你不知道表的位置在哪&#xff0c;那么在Excel左…

w2ui 水平滾動移動 虛擬列 數據丟失

https://w2ui.com/web/docs/1.5/w2grid.disableCVS https://github.com/vitmalina/w2ui/issues/1398 解決方案來源 問題現象: 窗口縮小 導致多列 出現水平滾動,滾動時觸發本地樣式重繪,導致record undefined,從而引發多列報錯 解決方案: 使用 disableCVS : true 一次加載到d…

在ensp進行OSPF+RIP+靜態網絡架構配置

一、實驗目的 1.Ospf與RIP的雙向引入路由消息 2.Ospf引入靜態路由信息 二、實驗要求 需求&#xff1a; 路由器可以互相ping通 實驗設備&#xff1a; 路由器router7臺 使用ensp搭建實驗壞境&#xff0c;結構如圖所示 三、實驗內容 1.配置R1、R2、R3路由器使用Ospf動態路由…

基于mediapipe深度學習和限定半徑最近鄰分類樹算法的人體摔倒檢測系統python源碼

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1 Mediapipe人體姿態檢測原理 4.2 限定半徑最近鄰分類樹算法原理 5.算法完整程序工程 1.算法運行效果圖預覽 (完整程序運行后無水印) 2.算法運行軟件版本 人工智能算法python程序運行環…

deep-sync開源程序插件導出您的 DeepSeek 與 public 聊天

一、軟件介紹 文末提供下載 deep-sync開源程序插件導出您的 DeepSeek 與 public 聊天&#xff0c;這是一個瀏覽器擴展&#xff0c;它允許用戶公開、私下分享他們的聊天對話&#xff0c;并使用密碼或過期鏈接來增強 Deepseek Web UI。該擴展程序在 Deepseek 界面中添加了一個 “…

蘋果簽名是否一定安全呢?

蘋果簽名是一種數字簽名技術&#xff0c;用于驗證應用程序的來源和完整性。當開發者將應用程序提交到蘋果應用商店時&#xff0c;蘋果會對應用進行簽名&#xff0c;這個簽名包含了開發者的身份信息以及應用的相關數據。用戶安裝應用時&#xff0c;設備會驗證簽名的有效性&#…