藍橋杯-小明的彩燈(差分)

問題描述:

在這里插入圖片描述

差分數組

1. 什么是差分數組?

差分數組 c 是原數組 a 的“差值表示”,其定義如下:

  • c[0] = a[0]
  • c[i] = a[i] - a[i-1]i ≥ 1

差分數組記錄了相鄰元素的差值。例如,原數組 a = [1, 3, 5, 2] 對應的差分數組為 c = [1, 2, 2, -3]

2. 差分數組的優勢

通過差分數組,可以將區間操作轉換為兩次單點操作:

  • 若要將區間 [l, r] 的所有元素增加 k,只需執行:
    • c[l] += k
    • c[r+1] -= k
      這一操作的時間復雜度為 O(1),徹底避免了遍歷區間。

3. 還原原數組

對差分數組進行前綴和運算即可還原原數組:

  • a[i] = c[0] + c[1] + ... + c[i]
    前綴和的本質是逐步累加差分值,恢復出原數組的實際數值。

解題思路詳解

步驟1:構建差分數組

  1. 初始化差分數組 c,長度為 n+1(多一位用于處理右邊界)。
  2. 根據原數組 a 的相鄰差值填充 c,確保 c[i] = a[i] - a[i-1]

步驟2:處理區間操作

對于每個操作 [l, r, k]

  • c[l] += k,表示從 l 開始的所有元素增加 k
  • c[r+1] -= k,表示在 r+1 處抵消多余的 k,保證操作僅作用于 [l, r]

步驟3:還原修改后的數組

通過前綴和還原最終的數組:

  • c[1] 開始,依次累加 c[i] += c[i-1],最終 c[0...n-1] 即為修改后的原數組。

代碼:

public static void main(String[] args) {//通過原數組計算 差分 數組//再通過計算出的 差分 數組做 數據操作,例如(要將[l,r]區間所有數組+1)就將c[l]+1 c[r+1]-1//對差分數組,做前綴和操作得到原數組//有一個坑,雖然數據都是在int范圍內,但是會涉及到相加操作,可能會超出int范圍,所以我們的差分數組應該設置為longScanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] a = new int[n];//在創建差分數組的時候長度要設置為a.length + 1這是很有必要的,防止數組越界 這個邊界操作(c[r + 1] -= 1;)long[] c = new long[n + 1];a[0] = sc.nextInt();//初始化差分數組c[0] = a[0];for (int i = 1; i < n; i++) {a[i] = sc.nextInt();c[i] = a[i] - a[i - 1];}
//        System.out.println("原數組a:" + Arrays.toString(a));
//        System.out.println("差分數組c:" + Arrays.toString(c));//要將[l,r]區間所有數組+cfor (int i = 0; i < m; i++) {int l = sc.nextInt();int r = sc.nextInt();int sum = sc.nextInt();c[l - 1] += sum;c[r] -= sum;}for (int i = 1; i < n; i++) {//這里復原的原理其實很簡單// 例如對 1 2 3 4 5的[2,4]區間做+1操作,// 由于差分數組記錄的是第i個數比第i-1個數大多少,之前i比i-1大1,+1操作之后,就是i比i-1大2了,// 但是由于我們要求在到[l,r]區間,所以r之后的差分就得還原 所以再做一個-1操作還原// 所以還原的時候,就能得到題目要求的數組了c[i] += c[i - 1];}for (int i = 0; i < n; i++) {if (c[i] < 0) {System.out.print(0 + " ");} elseSystem.out.print(c[i] + " ");}}

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

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

相關文章

精品可編輯PPT | 基于湖倉一體構建數據中臺架構大數據湖數據倉庫一體化中臺解決方案

本文介紹了基于湖倉一體構建數據中臺架構的技術創新與實踐。它詳細闡述了數據湖、數據倉庫和數據中臺的概念&#xff0c;分析了三者的區別與協作關系&#xff0c;指出數據湖可存儲大規模結構化和非結構化數據&#xff0c;數據倉庫用于高效存儲和快速查詢以支持決策&#xff0c;…

最近api.themoviedb.org無法連接的問題解決

修改NAS的host需要用到SSH終端連接工具&#xff0c;比如常見的Putty&#xff0c;XShell&#xff0c;或者FinalShell等都可以&#xff0c;我個人還是習慣Putty。 1.輸入命令“ sudo -i ”回車&#xff0c;提示輸入密碼&#xff0c;密碼就是我們NAS的登錄密碼&#xff0c;輸入的…

0.機器學習基礎

0.人工智能概述&#xff1a; &#xff08;1&#xff09;必備三要素&#xff1a; 數據算法計算力 CPU、GPU、TPUGPU和CPU對比&#xff1a; GPU主要適合計算密集型任務&#xff1b;CPU主要適合I/O密集型任務&#xff1b; 【筆試問題】什么類型程序適合在GPU上運行&#xff1…

多類型醫療自助終端智能化升級路徑(代碼版.下)

醫療人機交互層技術實施方案 一、多模態交互體系 1. 醫療語音識別引擎 # 基于Wav2Vec2的醫療ASR系統 from transformers import Wav2Vec2Processor, Wav2Vec2ForCTC import torchaudioclass MedicalASR:def __init__(self):self.processor = Wav2Vec2Processor.from_pretrai…

前端基礎:React項目打包部署服務器教程

問題背景 我做了一個React框架的前端的Node項目&#xff0c;是一個單頁面應用。 頁面路由用的是&#xff0c;然后使用了React.lazy在路由層級對每一個不同頁面進行了懶加載&#xff0c;只有打開那個頁面才會加載對應資源。 然后現在我用了Webpack5對項目進行了打包&#xff…

【深度學習:理論篇】--Pytorch基礎入門

目錄 1.Pytorch--安裝 2.Pytorch--張量 3.Pytorch--定義 4.Pytorch--運算 4.1.Tensor數據類型 4.2.Tensor創建 4.3.Tensor運算 4.4.Tensor--Numpy轉換 4.5.Tensor--CUDA&#xff08;GPU&#xff09; 5.Pytorch--自動微分 &#xff08;autograd&#xff09; 5.1.back…

使用 Spring Boot 快速構建企業微信 JS-SDK 權限簽名后端服務

使用 Spring Boot 快速構建企業微信 JS-SDK 權限簽名后端服務 本篇文章將介紹如何使用 Spring Boot 快速構建一個用于支持企業微信 JS-SDK 權限校驗的后端接口&#xff0c;并提供一個簡單的 HTML 頁面進行功能測試。適用于需要在企業微信網頁端使用掃一掃、定位、錄音等接口的…

工程師 - FTDI SPI converter

中國網站&#xff1a;FTDIChip- 首頁 UMFT4222EV-D UMFT4222EV-D - FTDI 可以下載Datasheet。 UMFT4222EVUSB2.0 to QuadSPI/I2C Bridge Development Module Future Technology Devices International Ltd. The UMFT4222EV is a development module which uses FTDI’s FT4222H…

rcore day6

批處理系統 (Batch System) 出現于計算資源匱乏的年代&#xff0c;其核心思想是&#xff1a; 將多個程序打包到一起輸入計算機&#xff1b;當一個程序運行結束后&#xff0c;計算機會 自動 執行下一個程序 應用程序難免會出錯&#xff0c;如果一個程序的錯誤導致整個操作系統都…

Linux系統學習Day2——在Linux系統中開發OpenCV

一、OpenCV簡介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的跨平臺計算機視覺和機器學習庫&#xff0c;廣泛應用于圖像處理、視頻分析、物體檢測等領域。它提供了豐富的算法和高效的工具集&#xff0c;支持C、Python等多種語言&#xff0c…

SAP Overview

SAP—企業運營的數字化引擎 在數字化轉型的浪潮中&#xff0c;SAP以其全面的企業應用軟件套件&#xff0c;為全球企業提供了強大的運營支持。SAP的模塊化解決方案覆蓋了企業運作的每一個關鍵環節&#xff0c;從銷售到倉庫管理&#xff0c;每個模塊都是針對特定業務需求精心設計…

Kafka 中的冪等機制

Kafka 中的 冪等性&#xff08;Idempotence&#xff09; 是生產者端的重要機制&#xff0c;旨在確保即使在網絡抖動、重試、Broker 重啟等情況下&#xff0c;同一條消息不會被重復寫入到 Topic 中。這是實現可靠消息傳遞、避免重復消費的關鍵手段之一。 ? 什么是冪等性&#…

用c語言寫一個linux進程之間通信(聊天)的簡單程序

使用talk 用戶在同一臺機器上talk指令格式如下&#xff1a; ? talk 用戶名ip地址 [用戶終端號] 如果用戶只登錄了一個終端&#xff0c;那么可以不寫用戶終端號&#xff0c;如&#xff1a; talk userlocalhost可以使用who指令來查看當前有哪些用戶登錄&#xff0c;他的終端號…

深入探索Scala:從基礎到進階的全面總結

在大數據技術領域&#xff0c;Scala語言憑借其獨特優勢占據重要地位。它與Spark緊密相連&#xff0c;為大數據計算提供強大支持。今天&#xff0c;讓我們一同深入回顧Scala從基礎到進階的關鍵知識點。 Scala開發環境搭建是入門的第一步&#xff0c;需確保JDK安裝成功&#xff0…

【每日一個知識點】分布式數據湖與實時計算

在現代數據架構中&#xff0c;分布式數據湖&#xff08;Distributed Data Lake&#xff09; 結合 實時計算&#xff08;Real-time Computing&#xff09; 已成為大數據處理的核心模式。數據湖用于存儲海量的結構化和非結構化數據&#xff0c;而實時計算則確保數據能夠被迅速處理…

GPT-5、o3和o4-mini即將到來

原計劃有所變更: 關于我們應有何期待的一些零散想法。 深度研究(Deep Research)確實強大但成本高昂且速度較慢(當前使用o3模型)。即將推出的o4-mini在性能上可能與o3相近,但將突破這些限制,讓全球用戶——甚至免費用戶(盡管會有速率限制)——都能用上世界頂級AI研究助…

Spring Cloud LoadBalancer負載均衡+算法切換

目錄 介紹核心功能負載均衡啟動兩個支付服務訂單模塊引入依賴LoadBalanced 注解啟動訂單服務測試結果 負載均衡算法切換總結 介紹 Spring Cloud LoadBalancer 是 Spring Cloud 提供的客戶端負載均衡解決方案&#xff0c;提供更現代化的 API 和更好的 Spring 生態系統集成。它支…

Chrome 瀏覽器插件收錄

1. Responsive Viewer 可以在同個窗口內&#xff0c;針對同一網站&#xff0c;添加多個不同設備屏幕顯示。 在前端開發&#xff0c;需要多端適配&#xff0c;尤其是移動端響應式適配的網站開發中&#xff0c;可以同時測試多個不同屏幕的適配效果。 2. VisBug 提供工具欄&#x…

SQL 函數概述

SQL 函數概述 SQL 函數可以分為幾大類&#xff0c;不同數據庫系統可能有略微不同的實現。以下是主要的 SQL 函數分類&#xff1a; 1. 聚合函數 (Aggregate Functions) COUNT() - 計算行數 SUM() - 計算總和 AVG() - 計算平均值 MIN() - 找最小值 MAX() - 找最大值 GROUP…

MySQL學習筆記九

第十一章使用數據處理函數 11.1函數 SQL支持函數來處理數據但是函數的可移植性沒有SQL強。 11.2使用函數 11.2.1文本處理函數 輸入&#xff1a; SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 輸出&#xff1a; 說明&#…