華為OD機試真題——智能駕駛(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳實現

在這里插入圖片描述

2025 A卷 200分 題型

本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式;
并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析;
本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分享》

華為OD機試真題《智能駕駛》:


文章快捷目錄

題目描述及說明

Java

python

JavaScript

C

GO


題目名稱:智能駕駛


  • 知識點:動態規劃、貪心算法、圖搜索(BFS/DFS)
  • 時間限制:1秒
  • 空間限制:256MB
  • 限定語言:不限

題目描述

一輛汽車需要從 ( m \times n ) 的地圖左上角(起點)行駛到右下角(終點)。每個格子有以下屬性:

  • -1:加油站,可加滿油(油箱容量最大為100)。
  • 0:障礙物,無法通過。
  • 正整數:通過該格子需消耗的油量。

規則

  1. 汽車可上下左右移動。
  2. 初始油量需確保能到達終點,計算最少初始油量。若無法到達,返回-1。
  3. 油箱初始為空,若起點為加油站則初始油量為100。

輸入

  • 首行兩個整數 ( m ) 和 ( n ),表示地圖行數和列數。
  • 接下來 ( m ) 行,每行 ( n ) 個整數,表示地圖數據。

輸出

  • 最少初始油量或-1。

示例
輸入:

2 2  
10 20  
30 40  

輸出:

70  

解釋:路徑為右→下,初始油量需 ≥ 10(起點) + 30(下一步) = 40,但實際需覆蓋路徑最大累計消耗(10+20+40=70)。


Java

問題分析

汽車需要從地圖左上角移動到右下角,每個格子可能有不同的油量消耗或加油站。油箱容量最大為100,初始油量為空。若起點是加油站,初始油量為100。要求找到能到達終點的最小初始油量,若無法到達返回-1。

解題思路

  1. 動態規劃與優先隊列:使用Dijkstra算法,優先擴展當前最大油量消耗最小的路徑。
  2. 狀態定義:每個狀態包括當前位置、當前區段累計油量、路徑最大油量消耗。
  3. 加油站處理:到達加油站時,油量加滿,當前區段累計油量重置為0。
  4. 障礙物處理:遇到障礙物直接跳過。

代碼實現

import java.util.*;class State implements Comparable<State> {int i, j;int currentSegment;int maxSoFar;public State(int i, int j, int currentSegment, int maxSoFar) {this.i = i;this.j = j;this.currentSegment = currentSegment;this.maxSoFar = maxSoFar;}@Overridepublic int compareTo(State other) {return Integer.compare(this.maxSoFar, other.maxSoFar);}
}public class Main {private static String getKey(int i, int j, int segment) {return i + "," + j + "," + segment;}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int m = scanner.nextInt();int n = scanner.nextInt();int[][] grid = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {grid[i][j] = scanner.nextInt();}}// 起點是障礙物if (grid[0][0] == 0) {System.out.println(-1);return;}PriorityQueue<State> pq = new PriorityQueue<>();Map<String, Integer> dist = new HashMap<>();// 初始化起點if (grid[0][0] == -1) {pq.offer(new State(0, 0, 0, 0));dist.put(getKey(0, 0, 0), 0);} else {int initialCost = grid[0][0];pq.offer(new State(0, 0, initialCost, initialCost));dist.put(getKey(0, 0, initialCost), initialCost);}int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};while (!pq.isEmpty()) {State state = pq.poll();int i = state.i;int j = state.j;int currentSegment = state.currentSegment;int maxSoFar = state.maxSoFar;// 到達終點if (i == m - 1 && j == n - 1) {System.out.println(maxSoFar);return;}String currentKey = getKey(i, j, currentSegment);if (dist.getOrDefault(currentKey, Integer.MAX_VALUE) < maxSoFar) {continue;}for (int[] dir : dirs) {int ni = i + dir[0];int nj = j + dir[1];if (ni < 0 || nj < 0 || ni >= m || nj >= n) continue;int cellValue = grid[ni][nj];if (cellValue == 0) continue;int cost = cellValue == -1 ? 0 : cellValue;int newSegment = currentSegment + cost;boolean isGasStation = cellValue == -1;int newMax = Math.max(maxSoFar, newSegment);// 處理加油站if (isGasStation) {if (newSegment > 100) continue;newSegment = 0; // 加滿油,新區段從0開始} else {// 來自加油站或起點是加油站,新區段不能超過100if (currentSegment == 0 && newSegment > 100) {continue;}}int newSegmentAfter = isGasStation ? 0 : newSegment;State newState = new State(ni, nj, newSegmentAfter, newMax);String newKey = getKey(ni, nj, newSegmentAfter);if (!dist.containsKey(newKey) || newMax < dist.getOrDefault(newKey, Integer.MAX_VALUE)) {dist.put(newKey, newMax);pq.offer(newState);}}}System.out.println(-1);}
}

代碼詳解

  1. State類:存儲當前位置、當前區段累計油量、路徑最大油量消耗,并實現優先隊列比較接口。
  2. 輸入處理:讀取地圖數據,處理起點障礙物情況。
  3. 優先隊列初始化:根據起點是否為加油站設置初始狀態。
  4. 狀態擴展:遍歷四個方向,計算新位置的油量消耗,處理加油站邏輯,更新狀態并加入優先隊列。
  5. 終點檢測:到達終點時輸出結果。

示例測試

示例1輸入

2 2
10 20
30 40

輸出:70

示例2輸入

3 3
-1 20 0
30 0 40
50 60 70

輸出:100(路徑包含加油站,最大區段消耗為30+50=80,但需加滿油)

示例3輸入

2 2
0 10
20 30

輸出:-1(起點障礙物)

綜合分析

  • 時間復雜度:使用優先隊列處理狀態,最壞情況O(N log N),適用于小規模地圖。
  • 空間復雜度:存儲狀態信息,O(MNC),C為區段油量可能值。
  • 正確性:通過Dijkstra算法保證找到最優路徑,處理加油站和障礙物邏輯。
  • 適用性:適用于各種地圖配置,正確處理油量限制和加油站邏輯。

python

問題分析

汽車需要從地圖左上角移動到右下角,每個格子可能有不同的油量消耗或加油站。油箱容量最大為100,初始油量為空。若起點是加油站,初始油量為100。要求找到能到達終點的最小初始油量,若無法到達返回-1。

解題思路

  1. 優先隊列(Dijkstra算法):每次擴展當前最大油量消耗最小的路徑。
  2. 狀態定義:每個狀態包括位置、當前區段累計油量、路徑最大油量消耗。
  3. 加油站處理:到達加油站時,油量加滿,當前區段累計油量重置為0。
  4. 障礙物處理:遇到障礙物直接跳過。

代碼實現

import heapqdef min_initial_fuel(grid):m = len(grid)if m == 0:return -1n = len(grid[0])if grid[0][0] == 0:return -1  # 起點是障礙物start_val = grid[0][0]# 初始化起點狀態if start_val == -1:initial_segment = 0initial_max = 0else:if start_val > 100:return -1  # 初始油量不足initial_segment = start_valinitial_max = start_valheap = []heapq.heappush(heap, (initial_max, 0, 0, initial_segment))visited = {}visited_key = (0, 0, initial_segment)visited[visited_key] = initial_maxdirs = [(-1, 0), (1, 0), (0, -1), (0, 1)]while

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

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

相關文章

速賣通,國際站測評補單,如何平衡效率和安全

測評能夠幫助賣家讓平臺更喜歡自己的產品&#xff0c;給予更好排名的同時也讓后續進入店鋪的買家更容易認可自己的產品。這是進行真實交易后形成的評價&#xff0c;而不是通過機器軟件生成&#xff0c;形成虛擬數據后&#xff0c;那種刷評形式產生的評論。它符合任何電商平臺的…

學習路之PHP--easyswoole3.3入門及文件熱加載

學習路之PHP--easyswoole入門 一、框架說明二、常用命令三、文件熱加載 一、框架說明 目錄結構 目錄結構 project 項目部署目錄 ├─App 應用目錄(可以有多個) │ ├─HttpController 控制器目錄 │ │ └─Index.php …

設計模式26——解釋器模式

寫文章的初心主要是用來幫助自己快速的回憶這個模式該怎么用&#xff0c;主要是下面的UML圖可以起到大作用&#xff0c;在你學習過一遍以后可能會遺忘&#xff0c;忘記了不要緊&#xff0c;只要看一眼UML圖就能想起來了。同時也請大家多多指教。 解釋器模式&#xff08;Interp…

第三屆寧波技能大賽網絡安全賽項樣題

2025 第三屆寧波技能大賽網絡安全賽項樣題 模塊A: 網絡安全事件響應、數字取證調查和應用安全任務一:應急響應任務二:操作系統取證任務三:網絡數據包分析任務四:代碼審計 模塊B:CTF 奪旗-攻擊模塊C:CTF 奪旗-防御需要環境培訓可以私信博主&#xff01;&#xff01;&#xff01;…

GO語言進階:掌握進程OS操作與高效編碼數據轉換

&#x1f49d;&#x1f49d;&#x1f49d;歡迎蒞臨我的博客&#xff0c;很高興能夠在這里和您見面&#xff01;希望您在這里可以感受到一份輕松愉快的氛圍&#xff0c;不僅可以獲得有趣的內容和知識&#xff0c;也可以暢所欲言、分享您的想法和見解。 推薦&#xff1a;「storms…

IO進程(進程 Process)

什么是進程&#xff1f; 1.概念 程序&#xff1a;編譯好的可執行文件&#xff0c;存放在磁盤上的指令和數據的有序集合。 由此可見程序是靜態的&#xff0c;沒有執行的概念。 進程&#xff1a;是程序的一次執行的過程&#xff0c;是一個可調度的任務&#xff0c;也是執行一…

CSS傳統布局與定位詳解與TDK三大標簽SEO優化

一、傳統布局基礎 1. 文檔流布局 瀏覽器默認的文檔流布局方式遵循以下規則&#xff1a; 塊級元素&#xff08;如<div>、<p>、<h1>&#xff09;&#xff1a; 獨占一行寬度默認100%可以設置寬高、內外邊距 div {width: 500px;height: 200px;margin: 10px …

【GraphQL】深入解析 Apollo Client:從架構到實踐的一站式 GraphQL 解決方案

深入解析 Apollo Client&#xff1a;從架構到實踐的一站式 GraphQL 解決方案 1. 引言 GraphQL 作為現代 API 開發的核心技術&#xff0c;其靈活性和高效性正在重塑數據交互模式。Apollo Client 作為 GraphQL 生態中最受歡迎的客戶端庫&#xff0c;憑借強大的緩存機制、框架集…

docker學習基本使用教程

docker是一款用于開發部署和運行容器化平臺&#xff0c;能將應用及其依賴打包成輕量級、可移植的容器&#xff0c;實現一次構建&#xff0c;隨處運行。docker是cs架構程序&#xff08;客戶端和服務端&#xff09;&#xff0c;docker客戶端向docker守護進程發送請求&#xff0c;…

萬字詳解RTR RTSP SDP RTCP

目錄 1 RTSP1.1 RTSP基本簡介1.2 RSTP架構1.3 重點內容分析 2 RTR2.1 RTR簡介2.2 RTP 封裝 H.2642.3 RTP 解封裝 H.2642.4 RTP封裝 AAC2.5 RTP解封裝AAC 3 SDP3.1 基礎概念3.2 SDP協議示例解析3.3 重點知識 4 RTCP4.1 RTCP基礎概念4.2 重點 5 總結 1 RTSP 1.1 RTSP基本簡介 一…

唯一原生適配鴻蒙電腦的遠程控制應用,向日葵正式上線

近日&#xff0c;華為正式發布鴻蒙電腦新品&#xff0c;標志著HarmonyOS在PC端生態的進一步拓展。作為遠程控制領域的先行者&#xff0c;貝銳科技旗下的向日葵遠程控制軟件也在第一時間完成了對鴻蒙電腦系統的原生適配&#xff0c;并已正式上線華為鴻蒙電腦應用市場&#xff0c…

vue2中,codemirror編輯器的使用

交互說明 在編輯器中輸入{時&#xff0c;會自動彈出選項彈窗&#xff0c;然后可以選值插入。 代碼 父組件 <variable-editorv-model"content":variables"variables"placeholder"請輸入模板內容..."blur"handleBlur" />data…

Kafka自定義分區策略實戰避坑指南

文章目錄 概要代碼示例小結 概要 kafka生產者發送消息默認根據總分區數和設置的key計算哈希取余數&#xff0c;key不變就默認存放在一個分區&#xff0c;沒有key則隨機數分區&#xff0c;明顯默認的是最不好用的&#xff0c;那kafka也提供了一個輪詢分區策略&#xff0c;我自己…

WPF 全屏顯示實現(無標題欄按鈕 + 自定義退出按鈕)

WPF 全屏顯示實現&#xff08;無標題欄按鈕 自定義退出按鈕&#xff09; 完整實現代碼 MainWindow.xaml <Window x:Class"FullScreenApp.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas…

sqli_labs第二十九/三十/三十一關——hpp注入

一&#xff1a;HTTP參數污染&#xff1a; hpp&#xff08;http parameter pollution)注入中&#xff0c;可以通過在hppt的請求中注入多個同名參數來繞過安全過濾 原理&#xff1a;php默認只取最后一個同名參數 比如在這一關里&#xff0c;可能對第一個id參數進行消毒處理&a…

【STM32】按鍵控制LED 光敏傳感器控制蜂鳴器

&#x1f50e;【博主簡介】&#x1f50e; &#x1f3c5;CSDN博客專家 &#x1f3c5;2021年博客之星物聯網與嵌入式開發TOP5 &#x1f3c5;2022年博客之星物聯網與嵌入式開發TOP4 &#x1f3c5;2021年2022年C站百大博主 &#x1f3c5;華為云開發…

華為OD機試真題——斗地主之順子(2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳實現

2025 B卷 100分 題型 本專欄內全部題目均提供Java、python、JavaScript、C、C++、GO六種語言的最佳實現方式; 并且每種語言均涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、3個測試用例以及綜合分析; 本文收錄于專欄:《2025華為OD真題目錄+全流程解析+備考攻略+經驗分…

Qt找不到windows API報錯:error: LNK2019: 無法解析的外部符號 __imp_OpenClipboard

筆者在開發中出現的bug完整報錯如下&#xff1a; spcm_ostools_win.obj:-1: error: LNK2019: 無法解析的外部符號 __imp_OpenClipboard&#xff0c;函數 "void __cdecl spcmdrv::vCopyToClipboard(char const *,unsigned __int64)" (?vCopyToClipboardspcmdrvYAXPE…

4.8.4 利用Spark SQL實現分組排行榜

在本次實戰中&#xff0c;我們的目標是利用Spark SQL實現分組排行榜&#xff0c;特別是計算每個學生分數最高的前3個成績。任務的原始數據由一組學生成績組成&#xff0c;每個學生可能有多個成績記錄。我們首先將這些數據讀入Spark DataFrame&#xff0c;然后按學生姓名分組&am…

[PyMySQL]

掌握pymysql對數據庫實現增刪改查數據庫工具類封裝,數據庫操作應用場景數據庫操作應用場景 校驗測試數據 : 刪除員工 :構造測試數據 : 測試數據使用一次就失效,不能重復使用 : 添加員工(is_delete)測試數據在展開測試前無法確定是否存在 : 查詢,修改,刪除員工操作步驟:!~~~~~~~…