華為OD機試_2025 B卷_最差產品獎(Python,100分)(附詳細解題思路)

題目描述

A公司準備對他下面的N個產品評選最差獎,
評選的方式是首先對每個產品進行評分,然后根據評分區間計算相鄰幾個產品中最差的產品。
評選的標準是依次找到從當前產品開始前M個產品中最差的產品,請給出最差產品的評分序列。

輸入描述
第一行,數字M,表示評分區間的長度,取值范圍是0<M<10000
第二行,產品的評分序列,比如[12,3,8,6,5],產品數量N范圍是-10000 < N <10000

輸出描述
評分區間內最差產品的評分序列

用例

輸入3
12,3,8,6,5
輸出3,3,5
說明

12,3,8 最差的是3

3,8,6 最差的是3

8,6,5 最差的是5

滑動窗口最小值問題詳解

一、核心解題思路

問題分析
題目要求計算產品評分序列中每個長度為M的連續子序列(滑動窗口)的最小值。具體來說:

  • 給定一個長度為N的產品評分序列
  • 對于每個位置i(起始位置),計算從i開始連續M個產品中的最低評分
  • 最終輸出所有窗口最小值組成的序列

關鍵特性

  1. 滑動窗口:窗口大小固定為M,每次向右移動一個位置
  2. 實時計算:需要高效獲取每個新窗口的最小值
  3. 邊界處理:當窗口超出序列邊界時停止計算

暴力解法的問題
直接遍歷每個窗口找最小值的時間復雜度是O(N×M),當N和M較大時(最大10000),計算量可達1億次,效率低下。

優化方案:單調隊列
使用雙端隊列維護一個單調遞增序列:

  1. 隊列中存儲元素索引,對應值保持遞增關系
  2. 隊首元素始終是當前窗口的最小值
  3. 添加新元素時,從隊尾移除比它大的元素
  4. 移動窗口時,檢查隊首元素是否過期

算法流程

初始化空隊列
遍歷序列中的每個評分:1. 移除過期元素(不在當前窗口的)2. 移除隊尾比當前元素大的元素3. 將當前元素加入隊尾4. 記錄當前窗口最小值(隊首元素)
二、完整代碼實現
from collections import dequedef main():# 讀取輸入M = int(input().strip())scores = list(map(int, input().split(',')))# 邊界檢查if M <= 0 or M > len(scores):print("")returnresult = []  # 存儲結果dq = deque()  # 雙端隊列(存儲索引)for i in range(len(scores)):# 1. 移除過期元素(不在當前窗口內)if dq and dq[0] <= i - M:dq.popleft()# 2. 移除隊尾比當前元素大的元素while dq and scores[dq[-1]] >= scores[i]:dq.pop()# 3. 添加當前元素索引dq.append(i)# 4. 記錄窗口最小值(當窗口完全形成時)if i >= M - 1:result.append(str(scores[dq[0]]))# 輸出結果print(",".join(result))if __name__ == "__main__":main()

代碼解析

  1. 輸入處理

    • 讀取窗口大小M
    • 讀取評分序列并轉為整數列表
    • 邊界檢查:M必須合法(0<M≤序列長度)
  2. 數據結構

    • 結果列表result存儲最小值序列
    • 雙端隊列dq存儲元素索引
  3. 核心算法

    • 移除過期元素:檢查隊首索引是否在窗口外(索引 ≤ i-M)
    • 維護單調性:從隊尾移除比當前元素大的值
    • 添加新元素:將當前索引加入隊尾
    • 記錄結果:當窗口完全形成(i ≥ M-1)時記錄隊首值
  4. 輸出處理

    • 將結果列表轉為逗號分隔字符串
三、示例解析

輸入:M=3, 序列=[12,3,8,6,5]

執行過程

當前索引當前值操作步驟隊列狀態窗口范圍最小值
i=012添加索引0-
i=13移除比3大的12 → 添加索引1[0-1]-
i=28添加索引2[1,2][0-2]3
i=36移除比6大的8 → 添加索引3[1,3][1-3]3
i=45移除過期索引1 → 移除比5大的6 → 添加索引4[2-4]5

隊列狀態變化

i=0: 隊列=[0] → 對應值[12]
i=1: 隊列=[1] → 對應值[3](移除12)
i=2: 隊列=[1,2] → 對應值[3,8]
i=3: 隊列=[1,3] → 對應值[3,6](移除8)
i=4: 隊列=[4] → 對應值[5](移除3和6)

輸出:3,3,5

窗口最小值計算

  1. 窗口[12,3,8] → 最小值3
  2. 窗口[3,8,6] → 最小值3
  3. 窗口[8,6,5] → 最小值5
四、總結

關鍵要點

  • 單調隊列維護:確保隊列中元素對應值單調遞增
  • 索引存儲:通過索引同時獲取元素值和位置信息
  • 過期檢查:每次迭代檢查隊首是否在窗口內
  • 及時清理:添加新元素時移除無效的較大元素

適用場景

  • 需要高效計算滑動窗口最小值的場景
  • 實時數據流中的統計分析
  • 序列處理中的連續區間計算

此解法完全滿足題目要求,通過維護單調隊列高效解決了滑動窗口最小值問題,適合處理大規模數據序列。

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

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

相關文章

飛算JavaAI:重塑Java開發效率的智能引擎

飛算JavaAI:重塑Java開發效率的智能引擎 一、飛算JavaAI核心價值 飛算JavaAI是全球首款專注Java語言的智能開發助手,由飛算數智科技(深圳)有限公司研發。它通過AI大模型技術實現: 全流程自動化:從需求分析→軟件設計→代碼生成一氣呵成工程級代碼輸出:生成包含配置類、…

Java和Go各方面對比:現代編程語言的深度分析

Java和Go各方面對比&#xff1a;現代編程語言的深度分析 引言 在當今的軟件開發領域&#xff0c;選擇合適的編程語言對項目的成功至關重要。Java作為一門成熟的面向對象語言&#xff0c;已經在企業級開發中占據主導地位超過25年。而Go&#xff08;Golang&#xff09;作為Google…

CloudCanal:一款企業級實時數據同步、遷移工具

CloudCanal 是一款可視化的數據同步、遷移工具&#xff0c;可以幫助企業構建高質量數據管道&#xff0c;具備實時高效、精確互聯、穩定可拓展、一站式、混合部署、復雜數據轉換等優點。 應用場景 CloudCanal 可以幫助企業實現以下數據應用場景&#xff1a; 數據同步&#xff…

如何發現 Redis 中的 BigKey?

如何發現 Redis 中的 BigKey&#xff1f; Redis 因其出色的性能&#xff0c;常被用作緩存、消息隊列和會話存儲。然而&#xff0c;在 Redis 的使用過程中&#xff0c;BigKey 是一個不容忽視的問題。BigKey 指的是存儲了大量數據或包含大量成員的鍵。它們不僅會占用大量內存&…

Golang讀取ZIP壓縮包并顯示Gin靜態html網站

Golang讀取ZIP壓縮包并顯示Gin靜態html網站Golang讀取ZIP壓縮包并顯示Gin靜態html網站1. 讀取ZIP壓縮包2. 解壓并保存靜態文件3. 設置Gin靜態文件服務基本靜態文件服務使用StaticFS更精細控制單個靜態文件服務4. 完整實現示例5. 高級優化內存映射優化使用Gin-Static中間件6. 部…

參數列表分類法:基本參數與擴展參數的設計模式

摘要 本文提出了我設計的一種新的函數參數設計范式——參數列表分類法&#xff0c;將傳統的"單一參數列表"擴展為"多參數列表協同"模式。通過引入"基本參數列表"和"擴展參數列表"的概念&#xff0c;為復雜對象構建提供了更靈活、更具表…

Ajax之核心語法詳解

Ajax之核心語法詳解一、Ajax的核心原理與優勢1.1 什么是Ajax&#xff1f;1.2 Ajax的優勢二、XMLHttpRequest&#xff1a;Ajax的核心對象2.1 XHR的基本使用流程2.2 核心屬性與事件解析2.2.1 readyState&#xff1a;請求狀態2.2.2 status&#xff1a;HTTP狀態碼2.2.3 響應數據屬性…

ArcGIS 打開 nc 降雨量文件

1. 打開ArcToolbox&#xff0c;依次打開 多維工具 → 創建 NetCDF 柵格圖層&#xff0c;將 nc 文件拖入 輸入 NetCDF 文件輸入框&#xff0c;確認 X維度&#xff08;經度&#xff09;、Y維度&#xff08;經度&#xff09; 的變量名是否正確&#xff0c;點擊 確定。圖 1 加載nc文…

01-elasticsearch-搭個簡單的window服務-ik分詞器-簡單使用

1、elasticsearch下載地址 如果是其他版本可以嘗試修改鏈接中的版本信息下載 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-windows-x86_64.zip 2、ik分詞器下載地址 ik分詞器下載的所有版本地址&#xff1a;Index of: analysis-ik/stable/…

[數據結構與算法] 優先隊列 | 最小堆 C++

下面是關于 C 中 std::priority_queue 的詳細說明&#xff0c;包括初始化、用法和常見的應用場景。什么是 priority_queue&#xff1f; priority_queue&#xff08;優先隊列&#xff09;是 C 標準庫中的一個容器適配器。它和普通隊列&#xff08;queue&#xff09;最大的不同在…

零基礎入門物聯網-遠程門禁開關:硬件介紹

一、成品展示 遠程門禁最終效果 二、項目介紹 整個項目主要是實際使用案例為主&#xff0c;根據自己日常生活中用到物聯網作品為原型&#xff0c;通過項目實例快速理解。項目分為兩部分&#xff1a;制作體驗和深入學習。 制作體驗部分 會提供所有項目資料及制作說明文檔&a…

軟件系統國產化改造開發層面,達夢(DM)數據庫改造問題記錄

本系統前&#xff08;vue&#xff09;后端(java spring boot)為列子&#xff0c;數據庫由MySQL--->DM&#xff08;達夢&#xff09;&#xff0c;中間件為中創的國產化相關軟件&#xff0c;如tomcat、nginx、redis等。重點講數據庫及代碼端的更改&#xff0c;中間件在服務端以…

N8N與Dify:自動化與AI的完美搭配

“N8N”和“Dify”這兩個工具徹底理清楚&#xff0c;它們其實是兩個定位完全不同的開源平臺&#xff0c;各自擅長解決不同類型的問題&#xff0c;但也能協同工作。以下是詳細說明&#xff1a;1. n8n&#xff1a;工作流自動化平臺定位&#xff1a;n8n 是一個專注于跨系統連接與任…

ARM匯編編程(AArch64架構)課程 - 第5章函數調用規范

目錄AAPCS64調用約定參數傳遞規則返回值規則棧幀管理SP寄存器FP寄存器 (X29)棧幀布局示例AAPCS64調用約定 ARM Architecture Procedure Call Standard for 64-bit (AAPCS64) 參數傳遞規則 參數位置寄存器分配特殊規則參數1-8X0-X7 (64-bit) / W0-W7 (32-bit)浮點數使用 V0-V7參…

軟考(軟件設計師)軟件工程-成本評估模型,軟件能力成熟度,軟件配置管理

成本評估模型 Putnam 下面通過一個具體案例&#xff0c;逐步說明Putnam模型的計算過程。我們將開發一個銀行核心交易系統&#xff0c;規模為80萬行代碼&#xff08;LOC&#xff09;&#xff0c;要求24個月內交付。參數符號值說明軟件規模L800,000 LOC通過功能點轉換獲得開發時間…

SASSNet復現

復現結果–Dice&#xff1a;89.354614&#xff0c;Jaccard&#xff1a;80.968917&#xff0c;95HD&#xff1a;7.3987764&#xff0c;誤差在接受范圍 MethodDiceJaccardJaccard # 感想 第19篇完全復現的論文

大數據學習5:網站訪問日志分析

1.數據處理1.1 環境準備進入cd /opt/server/hadoop-3.1.0/sbin文件夾&#xff0c;停止hdfs服務cd /opt/server/hadoop-3.1.0/sbin ./stop-dfs.sh進入/opt/server/hadoop-3.1.0/etc/hadoop文件夾&#xff0c;編輯yarn-site.xml文件/opt/server/hadoop-3.1.0/etc/hadoop vim yarn…

力扣1310. 子數組異或查詢

這一題很明顯的就是用前綴和異或來解決&#xff0c;只要清楚異或的性質&#xff0c;這一題就十分容易。 對異或的性質的講解如下&#xff1a; 異或運算解析 具體代碼如下&#xff1a; class Solution { public:int sum[30005]; vector<int> xorQueries(vector<int>…

React Native 狀態管理方案全面對比

React Native 狀態管理方案全面對比 在 React Native 開發中&#xff0c;狀態管理是構建復雜應用的核心問題。以下是主流狀態管理方案的深度對比分析&#xff1a; 一、基礎方案&#xff1a;useState/useReducer 適用場景 簡單的組件級狀態中等復雜度的局部狀態管理不需要跨組件…

基于Python的程序員數據分析與可視化系統的設計與實現

文章目錄有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主項目介紹背景意義項目展示總結每文一語有需要本項目的代碼或文檔以及全部資源&#xff0c;或者部署調試可以私信博主 項目介紹 互聯網技術飛速發展&#xff0c;數據分析與可視化在程序員工…