【華為】筆試真題訓練_20250611

在這里插入圖片描述

本篇博客旨在記錄自已的筆試刷題的練習,里面注有詳細的代碼注釋以及和個人的思路想法,希望可以給同道之人些許幫助。本人也是小白,水平有限,如果文章中有什么錯誤或遺漏之處,望各位可以在評論區指正出來,各位共勉💪。

1. 找到通信質量最高的基站

考點:

  • 滑動窗口:維護一個動態窗口內的最優解。
  • 單調隊列:高效獲取窗口內的最小值(或最優解)。

描述

雨市區中有一條馬路,馬路從0號路口開始,到N-1號路口結束,在每個路口都架設了最新技術的通信基站,每個基站的信號可以覆蓋前后各k個路口的范圍,即第i個路口上的基站,可以覆蓋[i-k, i+k]這兩個路口之間的馬路,因此用戶的手機處于多個基站的覆蓋范圍中。每個基站會統計當前接入人數,為保障最佳通信質量,用戶手機應選擇連接人數最少的基站進行通訊。 這條馬路一共N個路口,小明從0號路口出發向前走,求小明在每個路段中的最佳通訊基站。不考慮處于路口中間的特殊場景,只考慮在每個路段中的場景,例如第1個路段為0號路口到1號路口之間的路段,如果基站覆蓋范圍k=2,此時最佳基站應為0、1、2中連接人數最少的基站。

輸入

輸入為兩行 第一行長度為N的整數數組crossroads[],數組元素以空格分隔,其中crossroads[i]表示i號路口基站的當前接入人數。1 <= crossroads.length數組長度 <= 10^5,0 <= crossroads[i] <= 10^2 第二行為基站覆蓋范圍k,1 <= k <= crossroads.length 非法輸入返回-1。

輸出

返回一個數組ret,ret[i]表示i路段上最佳基站的編號,數組元素之間以空格分隔。例如0號路口到1號路口的路段,為0號路段,其最佳基站用ret[0]表示。

用例輸入

3 5 8 7 6 7 4

2

用例輸出

0 0 1 4 6 6

Code

/*** 【華為】20250528_1_最佳基站* @author QIA* @create 2025-07-19-15:52
*/import java.util.*;public class Main01 {public static List<Integer> bestStations(int[] crossroads, int k) {if (crossroads == null || crossroads.length < 1 || k < 1 || k > crossroads.length) {return Arrays.asList(-1);}int n = crossroads.length;List<Integer> result = new ArrayList<>();for (int i = 0; i < n - 1; i++) {int minCount = Integer.MAX_VALUE;int bestIndex = -1;// 枚舉所有基站 jfor (int j = 0; j < n; j++) {int left = j - k;int right = j + k;// 基站 j 能否覆蓋路段 [i, i+1]if (left <= i && right >= i + 1) {if (crossroads[j] < minCount || (crossroads[j] == minCount && j < bestIndex)) {minCount = crossroads[j];bestIndex = j;}}}result.add(bestIndex);}return result;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 讀取第一行String[] line1 = sc.nextLine().trim().split(" ");int[] crossroads = new int[line1.length];try {for (int i = 0; i < line1.length; i++) {crossroads[i] = Integer.parseInt(line1[i]);}} catch (Exception e) {System.out.println(-1);return;}// 讀取第二行int k;try {k = Integer.parseInt(sc.nextLine().trim());} catch (Exception e) {System.out.println(-1);return;}// 處理并輸出結果List<Integer> res = bestStations(crossroads, k);if (res.size() == 1 && res.get(0) == -1) {System.out.println(-1);} else {for (int i = 0; i < res.size(); i++) {System.out.print(res.get(i));if (i != res.size() - 1)System.out.print(" ");}}}
}

2. 游園線路

考點:

  • 最短路徑算法:Dijkstra算法或BFS(因為邊權非負)。
  • 路徑輸出:需要記錄路徑而非僅距離。

描述

某公園每年都會在新年時舉辦燈會,由于公園面積很大且各景點分散,希望你設計一條游園線路,從某個指定入口景點開始,到某個指定出口景點結束,使得游園總路程最短。最短路線不需要走完所有的景點,且中間允許經過其他出入口景點而不離開公園。

輸入

第一行:N,景點個數,景點序號從0開始,N - 1結束。2 <= N <= 15
第二行至第N + 1行:是一個N*N的矩陣,表示各相鄰景點之間的距離,距離為0表示不相鄰。
第N + 2行:該景點是否是公園出入口(1是,0否)。
第N + 3行:要計算最短線路的入口景點序號和出口景點序號
所有用例的輸入確保一定存在符合條件的線路,你無需考慮無解的情況。

輸出

具體游園線路,如果有多條符合條件的線路,按景點序號從小到大進行排序。

用例輸入

5
0 1 2 0 0
1 0 0 3 0
2 0 0 0 10
0 3 0 0 1
0 0 10 1 0
1 0 1 0 1
0 4

用例輸出

0 1 3 4

Code

/*** 【華為】20250528_2_游園線路* @author QIA* @create 2025-07-19-15:55*/
import java.util.*;public class Main02 {static int N;static int[][] graph;static int[] entrances;static int[] dist;static List<Integer>[] prev;static List<Integer> bestPath = null;static List<Integer> path = new ArrayList<>();public static void main(String[] args) {Scanner sc = new Scanner(System.in);try {// 讀取 NN = Integer.parseInt(sc.nextLine().trim());if (N < 2 || N > 15) {System.out.println("非法景點數量");return;}// 讀取鄰接矩陣graph = new int[N][N];for (int i = 0; i < N; i++) {String[] row = sc.nextLine().trim().split("\\s+");if (row.length != N) {System.out.println("鄰接矩陣行數錯誤");return;}for (int j = 0; j < N; j++) {graph[i][j] = Integer.parseInt(row[j]);}}// 讀取出入口信息entrances = new int[N];String[] entryLine = sc.nextLine().trim().split("\\s+");if (entryLine.length != N) {System.out.println("入口數組長度錯誤");return;}for (int i = 0; i < N; i++) {entrances[i] = Integer.parseInt(entryLine[i]);}// 讀取起止點String[] startEnd = sc.nextLine().trim().split("\\s+");if (startEnd.length != 2) {System.out.println("起止點輸入格式錯誤");return;}int start = Integer.parseInt(startEnd[0]);int end = Integer.parseInt(startEnd[1]);// 求最短路徑dijkstra(start);dfs(end, start);// 輸出最短路徑for (int i = 0; i < bestPath.size(); i++) {System.out.print(bestPath.get(i));if (i != bestPath.size() - 1) System.out.print(" ");}} catch (Exception e) {System.out.println("輸入格式錯誤: " + e.getMessage());}}// Dijkstra + prev 路徑追蹤public static void dijkstra(int start) {dist = new int[N];Arrays.fill(dist, Integer.MAX_VALUE);dist[start] = 0;prev = new ArrayList[N];for (int i = 0; i < N; i++) prev[i] = new ArrayList<>();PriorityQueue<int[]> pq = new PriorityQueue<>(Comparator.comparingInt(a -> a[1]));pq.offer(new int[]{start, 0});while (!pq.isEmpty()) {int[] cur = pq.poll();int u = cur[0], d = cur[1];if (d > dist[u]) continue;for (int v = 0; v < N; v++) {if (graph[u][v] > 0) {int newDist = dist[u] + graph[u][v];if (newDist < dist[v]) {dist[v] = newDist;prev[v].clear();prev[v].add(u);pq.offer(new int[]{v, newDist});} else if (newDist == dist[v]) {prev[v].add(u);}}}}}// 回溯尋找字典序最小路徑(關鍵修復:排序 prev[node])public static void dfs(int node, int start) {path.add(node);if (node == start) {List<Integer> temp = new ArrayList<>(path);Collections.reverse(temp);if (bestPath == null || comparePath(temp, bestPath) < 0) {bestPath = temp;}} else {List<Integer> sortedPrev = new ArrayList<>(prev[node]);Collections.sort(sortedPrev); // ? 關鍵排序,保證字典序最小for (int pre : sortedPrev) {dfs(pre, start);}}path.remove(path.size() - 1);}// 比較兩個路徑字典序public static int comparePath(List<Integer> a, List<Integer> b) {int len = Math.min(a.size(), b.size());for (int i = 0; i < len; i++) {if (!a.get(i).equals(b.get(i))) {return Integer.compare(a.get(i), b.get(i));}}return Integer.compare(a.size(), b.size());}
}

3. 爬山路線規劃

考點:

  • BFS(廣度優先搜索):最少步數問題。

描述

給定一個二維數組 mountainMap 表示一座山的地圖,數組中的每個元素 mountainMap[x][y] 代表坐標 (x, y) 處山的高度。登山員從山底出發,爬到山峰。
山底的含義:mountainMap中高度為0的坐標點。
山峰的含義:mountainMap中高度最高的坐標點。
登山員每次移動只能從當前位置向上下左右四個方向移動一格,向高處移動時,移動到的位置山的高度不能高于當前位置的高度加上固定的攀登能力值climbAbility;向低處移動時,移動到的位置的山的高度不能低于當前位置山的高度減去climbAbility。

輸入

  1. 第一行為climbAbility的值。
  2. 第二行為mountainMapRows mountainMapCols。
  3. 從第三行開始為mountainMapRows行mountainMapCols列的高度二維數組mountainMap[mountainMapRows][mountainMapCols],每行的高度數字中間用空格分割。

輸出

從山底移動到山峰,最少移動次數。
如果無法移動至山峰,則輸出-1

用例輸入

1
4 5
1 1 1 1 1
1 0 1 2 1
1 1 1 3 1
1 1 1 1 1

用例輸出

3

Code

/*** 【華為】20250528_3_爬山路線規劃* @author QIA* @create 2025-07-19-16:01*/
import java.util.*;public class Main03 {static int[][] dirs = {{0,1},{1,0},{0,-1},{-1,0}};public static void main(String[] args) {Scanner sc = new Scanner(System.in);int climbAbility = Integer.parseInt(sc.nextLine().trim());String[] dims = sc.nextLine().trim().split("\\s+");int rows = Integer.parseInt(dims[0]);int cols = Integer.parseInt(dims[1]);int[][] map = new int[rows][cols];int maxHeight = Integer.MIN_VALUE;List<int[]> bottoms = new ArrayList<>();  // 高度為0的山底List<int[]> peaks = new ArrayList<>();    // 高度最高的山峰// 讀取地圖并找山底和山峰for (int i = 0; i < rows; i++) {String[] line = sc.nextLine().trim().split("\\s+");for (int j = 0; j < cols; j++) {map[i][j] = Integer.parseInt(line[j]);if (map[i][j] == 0) {bottoms.add(new int[]{i, j});}if (map[i][j] > maxHeight) {maxHeight = map[i][j];peaks.clear();peaks.add(new int[]{i, j});} else if (map[i][j] == maxHeight) {peaks.add(new int[]{i, j});}}}int[][] dist = new int[rows][cols];for (int[] row : dist) Arrays.fill(row, -1);// BFS from all bottomsQueue<int[]> queue = new LinkedList<>();for (int[] b : bottoms) {queue.offer(b);dist[b[0]][b[1]] = 0;}while (!queue.isEmpty()) {int[] cur = queue.poll();int x = cur[0], y = cur[1];for (int[] d : dirs) {int nx = x + d[0], ny = y + d[1];if (nx >= 0 && nx < rows && ny >= 0 && ny < cols) {int heightDiff = Math.abs(map[nx][ny] - map[x][y]);if (heightDiff <= climbAbility && dist[nx][ny] == -1) {dist[nx][ny] = dist[x][y] + 1;queue.offer(new int[]{nx, ny});}}}}// 找到最短步數到達山峰int minSteps = Integer.MAX_VALUE;for (int[] peak : peaks) {int d = dist[peak[0]][peak[1]];if (d != -1) minSteps = Math.min(minSteps, d);}System.out.println(minSteps == Integer.MAX_VALUE ? -1 : minSteps);}
}

有幫助的話,希望可以點贊??+收藏?,謝謝各位大佬~~??????

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

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

相關文章

新浪微博APP v14.5.0:連接世界的社交媒體平臺

新浪微博APP 是一款廣受歡迎的社交媒體應用程序&#xff0c;憑借其強大的功能和豐富的社交生態&#xff0c;成為用戶獲取信息、表達觀點、互動交流的重要平臺。最新版 v14.5.0 內置了微博助手 v2.3.0&#xff0c;進一步提升了用戶體驗和功能多樣性。 軟件功能 1. 發布微博 用…

靜態枚舉返回(簡單實現字典功能)

枚舉緩存策略的實現與應用 通過靜態Map緩存枚舉類的Class對象&#xff0c;避免每次請求時重復反射加載。核心實現是一個包含枚舉類名與對應Class映射的Registry類&#xff1a; public class EnumRegistry {private static final Map<String, Class<?>> ENUM_MAP …

深分頁性能問題分析與優化實踐

在日常測試工作中&#xff0c;我們經常會遇到分頁查詢接口&#xff0c;例如&#xff1a; GET /product/search?keyword&pageNum1&pageSize10乍看之下&#xff0c;這樣的分頁接口似乎并無性能問題&#xff0c;響應時間也很快。但在一次性能壓測中&#xff0c;我們復現了…

LeetCode——1957. 刪除字符使字符串變好

通過萬歲&#xff01;&#xff01;&#xff01; 題目&#xff1a;給你一個字符串&#xff0c;然后讓你刪除幾個字符串&#xff0c;讓他變成好串&#xff0c;好串的定義就是不要出現連續的3個一樣的字符。思路&#xff1a;首先就是要遍歷字符串。我們將要返回的字符串定義為ret&…

Aerospike與Redis深度對比:從架構到性能的全方位解析

在高性能鍵值存儲領域&#xff0c;Aerospike與Redis是兩款備受關注的產品。Redis以其極致的單機性能和豐富的數據結構成為主流選擇&#xff0c;而Aerospike則憑借分布式原生設計和混合存儲架構在大規模場景中嶄露頭角。本文將從架構設計、數據模型、性能表現、擴展性等核心維度…

Linux命令速查手冊

一、命令格式與輔助工具類別符號/命令示例說明基本格式commandls -a /home命令 選項 參數管道符ls -lless重定向>df -h > disk_usage.txt覆蓋寫入文件>>echo "New" >> notes.txt追加寫入文件2>ls non_exist 2> error.txt錯誤輸出重定向快捷…

net-snmp添加自定義mib樹

首先我們把前面mib2c生成的文件修改 下面重新做了個簡單點的MIB樹 -- -- -- MIB generated by MG-SOFT Visual MIB Builder Version 6.0 Build 88 -- Saturday, July 26, 2025 at 09:24:54 --ARHANGELSK-GLOBAL-REG DEFINITIONS :: BEGINIMPORTSenterprises, OBJECT-TYPE, M…

【動態規劃-斐波那契數列模型】理解動態規劃:斐波那契數列的遞推模型

算法相關知識點可以通過點擊以下鏈接進行學習一起加油&#xff01;動態規劃是一種解決最優化問題的強大技術&#xff0c;通過將問題分解為子問題并逐步求解來實現高效計算。斐波那契數列是動態規劃中經典的應用之一&#xff0c;其遞推關系非常適合用動態規劃進行優化。通過動態…

微信小程序 自定義帶圖片彈窗

1. 微信小程序 自定義帶圖片彈窗1.1. 實現思路使用官方組件實現圖片模態彈窗。首先找到官方文檔&#xff1a;?顯示模態彈窗的API wx.showModal(OBJECT)wx.showModal參數介紹發現并沒有設置圖片的參數&#xff0c;但是這是一個API&#xff0c;但是組件呢&#xff1f;我并沒有在…

私有化大模型架構解決方案構建指南

內容概要本指南旨在為企業提供私有化大模型架構解決方案的全面構建路徑&#xff0c;幫助其在保障數據隱私的同時提升業務效率。我們將系統解析關鍵環節&#xff0c;包括安全部署策略設計、模型訓練核心技術、持續優化機制構建以及知識管理實踐路徑。此外&#xff0c;指南還涵蓋…

面試150 查找和最小的K對數字

思路1 超時法&#xff1a;通過兩個循環記錄三元組[num1,num2,num1num2]然后通過num1num2從小到大進行排序&#xff0c;然后返回前K個對數中的前兩個數即可。 class Solution:def kSmallestPairs(self, nums1: List[int], nums2: List[int], k: int) -> List[List[int]]:if n…

vscode目錄,右鍵菜單加入用VSCode打開文件和文件夾(快速解決)(含刪除)(腳本)

1.創建文本文件 在桌面右鍵單擊&#xff0c;選擇“新建” > “文本文檔”&#xff0c;將其命名為“vscode.txt”2.復制代碼內容3.修改文件擴展名 右鍵單擊“vscode.txt”文件&#xff0c;選擇“重命名”&#xff0c;將文件擴展名從.txt改為.reg&#xff0c;使其成為“vscode…

Chart.js 柱形圖詳解

Chart.js 柱形圖詳解 引言 在數據可視化領域&#xff0c;柱形圖是一種非常常見的圖表類型&#xff0c;它能夠直觀地展示不同類別或組的數據之間的比較。Chart.js 是一個基于 HTML5 Canvas 的開源庫&#xff0c;它提供了一系列的圖表繪制功能&#xff0c;其中包括柱形圖。本文將…

沉浸式文旅新玩法-基于4D GS技術的真人數字人賦能VR體驗升級

線下沉浸式劇場與 LBE VR 相結合&#xff0c;會碰撞出什么樣的火花&#xff1f;本次 PICO 視頻、東方演藝集團與火山引擎一起&#xff0c;將沉浸式演出《只此周莊》的部分場景復刻到了 VR 世界&#xff0c;讓用戶在虛擬的古代周莊夜市里&#xff0c;體驗了古老的故事以及精彩紛…

C程序內存布局詳解

C程序內存布局詳解 1. 內存布局概述 C程序在內存中分為以下幾個主要區域&#xff08;從低地址到高地址&#xff09;&#xff1a; 代碼段&#xff08;.text&#xff09;只讀數據段&#xff08;.rodata&#xff09;初始化數據段&#xff08;.data&#xff09;未初始化數據段&…

新手向:Git下載全攻略

Git 的安裝與重要性在現代軟件開發中&#xff0c;版本控制是必不可少的工具&#xff0c;而 Git 是目前最流行的分布式版本控制系統。無論是個人開發者還是大型團隊&#xff0c;Git 都能高效管理代碼變更&#xff0c;確保項目歷史清晰可追溯。安裝 Git 是開發者入門的第一步&…

linux中如何清除history命令

寫在前面 使用ssh遠程連接客戶端連接上linux后操作的命令多了&#xff0c;有時候需要清除對應的歷史命令記錄&#xff0c;可以通過下面幾種方式實現。第一種方法 通過修改.bash_history文件 這是最簡單直接的方法&#xff0c;但是只會影響當前用戶的歷史記錄。執行以下命令即可…

PHP插件開發中的一個錯誤:JSON直接輸出導致網站首頁異常

問題描述 最近在使用步數統計插件&#xff08;WeFootStep&#xff09;時&#xff0c;發現網站首頁完全變成了一段JSON數據&#xff0c;而不是正常的HTML頁面。具體表現為首頁顯示如下內容&#xff1a; {"results":"<li><a href\"https:\/\/blog…

落霞歸雁的思維框架:十大經典思維工具的源頭活水

在當今復雜多變的世界中&#xff0c;思維框架成為了解決問題、優化決策和提升效率的重要工具。提到思維框架&#xff0c;人們往往會想到那些被廣泛認可和應用的十大經典思維工具&#xff1a;金字塔原理、黃金圈法則、5W1H分析法、SWOT分析、SCQA模型、STAR法則、PDCA循環、六頂…

spring Could 高頻面試題

一、基礎概念Spring Cloud 的核心組件有哪些&#xff1f; 答案&#xff1a;Eureka/Nacos&#xff08;服務注冊發現&#xff09;、Ribbon/LoadBalancer&#xff08;負載均衡&#xff09;、Feign/OpenFeign&#xff08;聲明式HTTP客戶端&#xff09;、Hystrix/Sentinel&#xff0…