【2024年華為OD機試】(B卷,100分)- 熱點網站統計(Java JS PythonC/C++)

在這里插入圖片描述

一、問題描述

題目描述

企業路由器的統計頁面需要動態統計公司訪問最多的網頁URL的Top N。設計一個算法,能夠高效動態統計Top N的頁面。

輸入描述

每一行都是一個URL或一個數字:

  • 如果是URL,代表一段時間內的網頁訪問。
  • 如果是數字N,代表本次需要輸出的Top N個URL。

輸入約束:

  1. 總訪問網頁數量小于5000個,單網頁訪問次數小于65535次。
  2. 網頁URL僅由字母、數字和點分隔符組成,且長度小于等于127字節。
  3. 數字是正整數,小于等于10且小于當前總訪問網頁數。

輸出描述

每行輸入對應一行輸出,輸出按訪問次數排序的前N個URL,用逗號分隔。

輸出要求:

  1. 每次輸出要統計之前所有輸入,而不僅僅是本次輸入。
  2. 如果有訪問次數相等的URL,按URL的字符串字典序升序排列,輸出排序靠前的URL。

用例

用例 1

輸入:

news.qq.com
news.sina.com.cn
news.qq.com
news.qq.com
game.163.com
game.163.com
www.huawei.com
www.cctv.com
3
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
3

輸出:

news.qq.com,game.163.com,news.sina.com.cn
www.huawei.com,www.cctv.com,news.qq.com

說明:

  • 第一次輸出時,統計了之前所有輸入的URL訪問次數,輸出Top 3。
  • 第二次輸出時,繼續統計了所有輸入的URL訪問次數,輸出Top 3。

用例 2

輸入:

news.qq.com
www.cctv.com
1
www.huawei.com
www.huawei.com
2
3

輸出:

news.qq.com
www.huawei.com,news.qq.com
www.huawei.com,news.qq.com,www.cctv.com

說明:

  • 第一次輸出時,統計了之前所有輸入的URL訪問次數,輸出Top 1。
  • 第二次輸出時,繼續統計了所有輸入的URL訪問次數,輸出Top 2。
  • 第三次輸出時,繼續統計了所有輸入的URL訪問次數,輸出Top 3。

題目解析

核心邏輯

  1. 動態統計

    • 每次輸入URL時,更新該URL的訪問次數。
    • 每次輸入數字N時,輸出當前訪問次數最多的Top N個URL。
  2. 統計范圍

    • 每次輸出時,統計的是之前所有輸入的URL訪問次數,而不僅僅是本次輸入。
  3. 排序規則

    • 按訪問次數從高到低排序。
    • 如果訪問次數相同,按URL的字典序升序排列。
  4. 性能優化

    • 由于總訪問網頁數量小于5000個,單網頁訪問次數小于65535次,因此需要設計一個高效的算法,確保每次統計和輸出的時間復雜度盡可能低。

關鍵點

  1. 數據結構選擇

    • 使用哈希表(如unordered_map)來存儲每個URL的訪問次數,確保更新和查詢的時間復雜度為O(1)。
    • 使用優先隊列(如堆)或排序算法來快速獲取Top N的URL。
  2. 動態更新

    • 每次輸入URL時,更新哈希表中的訪問次數。
    • 每次輸入數字N時,從哈希表中提取所有URL及其訪問次數,進行排序并輸出Top N。
  3. 排序規則實現

    • 在排序時,先按訪問次數降序排序,如果訪問次數相同,再按URL的字典序升序排序。
  4. 輸出格式

    • 輸出時,將Top N的URL用逗號分隔。

注意事項

  1. 統計范圍

    • 每次輸出時,統計的是之前所有輸入的URL訪問次數,而不僅僅是本次輸入。
  2. 性能優化

    • 由于總訪問網頁數量較大(最多5000個),單網頁訪問次數較多(最多65535次),需要確保算法的效率。
  3. 邊界條件

    • 輸入的數字N必須小于等于10且小于當前總訪問網頁數。
    • 輸入的URL長度不超過127字節。

總結

本題的核心在于動態統計URL的訪問次數,并在每次輸入數字N時快速輸出Top N的URL。通過合理選擇數據結構和排序算法,可以高效地實現這一功能。

二、JavaScript算法源碼

這段代碼實現了一個簡單的URL統計和排序功能。它通過讀取用戶輸入,統計每個URL出現的次數,并根據用戶指定的數量n,返回出現次數最多的前n個URL。以下是代碼的詳細注釋和講解:

// 引入readline模塊,用于從標準輸入讀取數據
const rl = require("readline").createInterface({ input: process.stdin });// 獲取異步迭代器,用于逐行讀取輸入
var iter = rl[Symbol.asyncIterator]();// 定義一個異步函數readline,用于讀取下一行輸入
const readline = async () => (await iter.next()).value;// 使用立即執行函數表達式(IIFE)來執行異步代碼
void (async function () {// 定義一個緩存對象,用于存儲URL及其出現的次數const cache = {};// 進入一個無限循環,持續讀取用戶輸入while (true) {// 等待讀取下一行輸入const line = await readline();// 判斷輸入是否為純數字(即用戶要求輸出前n個URL)if (/^\d+$/.test(line)) {// 如果是數字,調用sortURL函數并輸出結果console.log(sortURL(parseInt(line)));} else {// 如果不是數字,說明是URL,更新緩存中的統計次數cache[line] ? cache[line]++ : (cache[line] = 1);}}// 定義一個函數sortURL,用于根據URL的出現次數進行排序并返回前n個URLfunction sortURL(n) {// 將緩存對象轉換為數組,每個元素是一個[key, value]的數組return Object.entries(cache)// 對數組進行排序.sort((a, b) => {// 首先按出現次數降序排序const res = b[1] - a[1];// 如果出現次數相同,則按URL的字典序升序排序return res == 0 ? (a[0] > b[0] ? 1 : -1) : res;})// 截取前n個元素.slice(0, n)// 將每個元素的key(即URL)提取出來.map((entry) => entry[0])// 將URL數組用逗號連接成一個字符串.join(",");}
})();

代碼講解:

  1. 引入readline模塊

    • readline模塊用于從標準輸入(如終端)逐行讀取數據。這里通過createInterface方法創建了一個接口,并將其輸入流設置為process.stdin
  2. 異步迭代器

    • rl[Symbol.asyncIterator]()返回一個異步迭代器,允許我們使用await逐行讀取輸入。
  3. readline函數

    • 這是一個異步函數,每次調用時會返回輸入流的下一行內容。
  4. 立即執行函數表達式 (IIFE)

    • void (async function () { ... })(); 是一個立即執行的異步函數表達式,用于在代碼加載時立即執行異步操作。
  5. 緩存對象 cache

    • cache是一個普通的JavaScript對象,用于存儲URL及其出現的次數。鍵是URL,值是該URL出現的次數。
  6. 主循環

    • 代碼進入一個無限循環,不斷讀取用戶輸入。
    • 如果輸入是純數字(通過正則表達式/^\d+$/判斷),則調用sortURL函數并輸出結果。
    • 如果輸入不是數字,則認為是URL,更新cache中該URL的計數。
  7. sortURL函數

    • 該函數接受一個參數n,表示要返回的前n個URL。
    • Object.entries(cache)cache對象轉換為一個數組,數組的每個元素是一個[key, value]的數組,其中key是URL,value是出現次數。
    • sort方法對數組進行排序:
      • 首先按出現次數降序排序(b[1] - a[1])。
      • 如果出現次數相同,則按URL的字典序升序排序(a[0] > b[0] ? 1 : -1)。
    • slice(0, n)截取排序后的前n個元素。
    • map((entry) => entry[0])提取每個元素的URL。
    • join(",")將URL數組用逗號連接成一個字符串并返回。

示例運行:

假設輸入如下:

https://example.com
https://example.com
https://example.org
https://example.net
https://example.net
https://example.net
2

程序會輸出:

https://example.net,https://example.com

解釋:

  • https://example.net出現了3次,https://example.com出現了2次,https://example.org出現了1次。
  • 用戶輸入2,表示要輸出出現次數最多的前2個URL,因此輸出https://example.net,https://example.com

總結:

這段代碼通過簡單的緩存和排序機制,實現了對URL出現次數的統計和排序功能。它適用于處理小規模的輸入數據,但對于大規模數據,可能需要更高效的算法和數據結構。

三、Java算法源碼

這段Java代碼實現了一個與之前JavaScript代碼類似的功能:統計URL出現的次數,并根據用戶輸入的正整數n,返回出現次數最多的前n個URL。以下是代碼的詳細注釋和講解:


代碼詳解

import java.util.HashMap;
import java.util.Objects;
import java.util.Scanner;
import java.util.StringJoiner;
import java.util.regex.Pattern;public class Main {// 正則表達式,用于判斷一個字符串是否為正整數static Pattern reg = Pattern.compile("^\\d+$");// 使用HashMap緩存每個URL及其出現次數static HashMap<String, Integer> cache = new HashMap<>();public static void main(String[] args) {// 創建Scanner對象,用于從標準輸入讀取數據Scanner sc = new Scanner(System.in);// 循環讀取每一行輸入while (sc.hasNextLine()) {String tmp = sc.nextLine();// 判斷輸入是否為正整數if (reg.matcher(tmp).find()) {// 如果是正整數,調用sortURL方法并輸出結果System.out.println(sortURL(Integer.parseInt(tmp)));} else {// 如果是URL,更新緩存中的統計次數cache.put(tmp, cache.getOrDefault(tmp, 0) + 1);}}}// 根據URL出現次數排序并返回前n個URLpublic static String sortURL(int n) {// 使用StringJoiner將結果用逗號連接StringJoiner sj = new StringJoiner(",");// 對緩存中的URL進行排序cache.entrySet().stream().sorted((a, b) ->// 首先按出現次數降序排序Objects.equals(a.getValue(), b.getValue())// 如果出現次數相同,則按URL的字典序升序排序? a.getKey().compareTo(b.getKey()): b.getValue() - a.getValue())// 限制只取前n個URL.limit(n)// 提取URL.map(ele -> ele.getKey())// 將URL添加到StringJoiner中.forEach(url -> sj.add(url));// 返回最終的字符串結果return sj.toString();}
}

代碼講解

1. 正則表達式 Pattern reg
  • Pattern.compile("^\\d+$") 用于匹配一個字符串是否為正整數。
  • ^ 表示字符串的開始,\d+ 表示一個或多個數字,$ 表示字符串的結束。
  • 在代碼中,reg.matcher(tmp).find() 用于判斷輸入字符串 tmp 是否為正整數。
2. 緩存 HashMap<String, Integer> cache
  • cache 是一個 HashMap,用于存儲URL及其出現的次數。
  • 鍵(key)是URL(String 類型),值(value)是該URL出現的次數(Integer 類型)。
3. 主方法 main
  • 使用 Scanner 從標準輸入逐行讀取數據。
  • 如果輸入是正整數,調用 sortURL 方法并輸出結果。
  • 如果輸入是URL,更新 cache 中該URL的計數:
    • cache.getOrDefault(tmp, 0):如果 tmp 已經存在于 cache 中,則返回其值;否則返回默認值 0
    • cache.put(tmp, cache.getOrDefault(tmp, 0) + 1):將URL的計數加1。
4. sortURL 方法
  • 該方法接受一個整數 n,表示要返回的前 n 個URL。
  • 使用 StringJoiner 將結果用逗號連接。
  • cache 中的URL進行排序:
    • cache.entrySet().stream():將 cache 轉換為流(Stream),便于后續操作。
    • sorted(...):對流中的元素進行排序:
      • 首先按出現次數降序排序(b.getValue() - a.getValue())。
      • 如果出現次數相同,則按URL的字典序升序排序(a.getKey().compareTo(b.getKey()))。
    • limit(n):限制只取前 n 個URL。
    • map(ele -> ele.getKey()):提取每個元素的URL。
    • forEach(url -> sj.add(url)):將URL添加到 StringJoiner 中。
  • 最終返回 StringJoiner 的結果。

示例運行

假設輸入如下:

https://example.com
https://example.com
https://example.org
https://example.net
https://example.net
https://example.net
2

程序會輸出:

https://example.net,https://example.com

解釋:

  • https://example.net 出現了3次,https://example.com 出現了2次,https://example.org 出現了1次。
  • 用戶輸入 2,表示要輸出出現次數最多的前2個URL,因此輸出 https://example.net,https://example.com

代碼優化建議


總結

這段Java代碼通過 HashMap 統計URL的出現次數,并通過流(Stream)對結果進行排序和限制,最終輸出前 n 個URL。代碼結構清晰,功能明確,適合處理小規模數據。對于大規模數據,可能需要進一步優化性能。

四、Python算法源碼

這段Python代碼實現了一個與之前JavaScript和Java代碼類似的功能:統計URL出現的次數,并根據用戶輸入的正整數n,返回出現次數最多的前n個URL。以下是代碼的詳細注釋和講解:


代碼詳解

# 緩存字典,記錄每個URL出現的次數
cache = {}# 題解列表(未使用,可以刪除)
ans = []# 定義sortURL函數,用于根據URL出現次數排序并返回前n個URL
def sortURL(n):# 將cache字典轉換為列表,每個元素是一個(key, value)的元組urlCount = list(cache.items())# 對列表進行排序# key=lambda x: (-x[1], x[0]) 表示:# 1. 首先按出現次數降序排序(-x[1])# 2. 如果出現次數相同,則按URL的字典序升序排序(x[0])urlCount.sort(key=lambda x: (-x[1], x[0]))# 使用map提取前n個URL,并用逗號連接成一個字符串return ",".join(map(lambda x: x[0], urlCount[:n]))# 主循環,持續讀取用戶輸入
while True:# 讀取一行輸入tmp = input()# 判斷輸入是否為正整數if tmp.isnumeric():# 如果是正整數,調用sortURL函數并輸出結果print(sortURL(int(tmp)))else:# 如果是URL,更新緩存中的統計次數if cache.get(tmp) is None:# 如果URL不在緩存中,初始化次數為1cache[tmp] = 1else:# 如果URL已經在緩存中,次數加1cache[tmp] += 1

代碼講解

1. 緩存字典 cache
  • cache 是一個字典,用于存儲URL及其出現的次數。
  • 鍵(key)是URL(str 類型),值(value)是該URL出現的次數(int 類型)。
2. sortURL 函數
  • 該函數接受一個整數 n,表示要返回的前 n 個URL。
  • cache.items()cache 字典轉換為一個列表,列表的每個元素是一個 (key, value) 的元組。
  • urlCount.sort(key=lambda x: (-x[1], x[0])) 對列表進行排序:
    • 首先按出現次數降序排序(-x[1])。
    • 如果出現次數相同,則按URL的字典序升序排序(x[0])。
  • map(lambda x: x[0], urlCount[:n]) 提取前 n 個URL。
  • ",".join(...) 將URL列表用逗號連接成一個字符串并返回。
3. 主循環
  • 使用 while True 進入一個無限循環,持續讀取用戶輸入。
  • tmp = input() 讀取一行輸入。
  • 判斷輸入是否為正整數:
    • 如果是正整數,調用 sortURL 函數并輸出結果。
    • 如果不是正整數,則認為是URL,更新 cache 中該URL的計數:
      • 如果URL不在 cache 中,初始化次數為1。
      • 如果URL已經在 cache 中,次數加1。

示例運行

假設輸入如下:

https://example.com
https://example.com
https://example.org
https://example.net
https://example.net
https://example.net
2

程序會輸出:

https://example.net,https://example.com

解釋:

  • https://example.net 出現了3次,https://example.com 出現了2次,https://example.org 出現了1次。
  • 用戶輸入 2,表示要輸出出現次數最多的前2個URL,因此輸出 https://example.net,https://example.com

代碼優化建議

  1. 輸入結束條件

    • 當前代碼是一個無限循環,可以通過特定的輸入(如 exit)來結束程序。
  2. 異常處理

    • 可以增加對非法輸入的處理,例如非正整數或空輸入。
  3. 性能優化

    • 如果輸入數據量較大,可以考慮使用更高效的數據結構(如 collections.Counter)來統計URL出現次數。
  4. 代碼簡化

    • cache.get(tmp) is None 可以簡化為 tmp not in cache
    • map(lambda x: x[0], urlCount[:n]) 可以簡化為列表推導式 [x[0] for x in urlCount[:n]]

優化后的代碼

from collections import Counter# 緩存字典,記錄每個URL出現的次數
cache = Counter()# 定義sortURL函數,用于根據URL出現次數排序并返回前n個URL
def sortURL(n):# 對cache字典進行排序sorted_urls = sorted(cache.keys(), key=lambda x: (-cache[x], x))# 返回前n個URL,用逗號連接return ",".join(sorted_urls[:n])# 主循環,持續讀取用戶輸入
while True:# 讀取一行輸入tmp = input()# 判斷輸入是否為正整數if tmp.isnumeric():# 如果是正整數,調用sortURL函數并輸出結果print(sortURL(int(tmp)))else:# 如果是URL,更新緩存中的統計次數cache[tmp] += 1

優化點

  1. 使用 collections.Counter

    • Counter 是一個專門用于計數的字典子類,可以簡化代碼邏輯。
  2. 簡化排序邏輯

    • 直接對 cache.keys() 進行排序,避免轉換為列表。
  3. 代碼更簡潔

    • 使用 Counter 后,代碼邏輯更加清晰和簡潔。

總結

這段Python代碼通過字典統計URL的出現次數,并通過排序和限制返回前 n 個URL。代碼邏輯清晰,適合處理小規模數據。通過優化,代碼可以更加簡潔和高效。

五、C/C++算法源碼:


C++ 實現

#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
#include <sstream>using namespace std;// 緩存map,記錄每個URL出現的次數
map<string, int> cache;// sortURL函數,用于根據URL出現次數排序并返回前n個URL
string sortURL(int n) {// 將map轉換為vector,便于排序vector<pair<string, int>> urlCount(cache.begin(), cache.end());// 對vector進行排序// 使用lambda表達式定義排序規則:// 1. 首先按出現次數降序排序// 2. 如果出現次數相同,則按URL的字典序升序排序sort(urlCount.begin(), urlCount.end(), [](const pair<string, int>& a, const pair<string, int>& b) {if (a.second != b.second) {return a.second > b.second; // 按次數降序} else {return a.first < b.first; // 按URL升序}});// 提取前n個URLstringstream result;for (int i = 0; i < n && i < urlCount.size(); ++i) {if (i > 0) {result << ",";}result << urlCount[i].first;}return result.str();
}int main() {string tmp;// 主循環,持續讀取用戶輸入while (getline(cin, tmp)) {// 判斷輸入是否為正整數bool isNumber = true;for (char ch : tmp) {if (!isdigit(ch)) {isNumber = false;break;}}if (isNumber) {// 如果是正整數,調用sortURL函數并輸出結果int n = stoi(tmp);cout << sortURL(n) << endl;} else {// 如果是URL,更新緩存中的統計次數cache[tmp]++;}}return 0;
}

C++ 代碼講解

  1. map<string, int> cache

    • 使用 map 存儲URL及其出現次數,鍵為URL(string 類型),值為出現次數(int 類型)。
  2. sortURL 函數

    • map 轉換為 vector<pair<string, int>>,便于排序。
    • 使用 sort 函數對 vector 進行排序,排序規則為:
      • 首先按出現次數降序排序。
      • 如果出現次數相同,則按URL的字典序升序排序。
    • 使用 stringstream 將前 n 個URL用逗號連接成一個字符串并返回。
  3. 主循環

    • 使用 getline(cin, tmp) 逐行讀取輸入。
    • 判斷輸入是否為正整數:
      • 如果是正整數,調用 sortURL 函數并輸出結果。
      • 如果是URL,更新 cache 中該URL的計數。
  4. 輸入結束條件

    • 當前代碼是一個無限循環,可以通過特定的輸入(如 exit)來結束程序。

C 語言實現

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define MAX_URL_LENGTH 1000
#define MAX_URLS 10000// 定義URL結構體
typedef struct {char url[MAX_URL_LENGTH];int count;
} URLCount;// 緩存數組,記錄每個URL及其出現次數
URLCount cache[MAX_URLS];
int cacheSize = 0;// 比較函數,用于排序
int compare(const void* a, const void* b) {URLCount* urlA = (URLCount*)a;URLCount* urlB = (URLCount*)b;// 首先按出現次數降序排序if (urlA->count != urlB->count) {return urlB->count - urlA->count;}// 如果出現次數相同,則按URL的字典序升序排序return strcmp(urlA->url, urlB->url);
}// sortURL函數,用于根據URL出現次數排序并返回前n個URL
void sortURL(int n) {// 對緩存數組進行排序qsort(cache, cacheSize, sizeof(URLCount), compare);// 輸出前n個URLfor (int i = 0; i < n && i < cacheSize; ++i) {if (i > 0) {printf(",");}printf("%s", cache[i].url);}printf("\n");
}// 判斷字符串是否為正整數
int isNumeric(const char* str) {for (int i = 0; str[i] != '\0'; ++i) {if (str[i] < '0' || str[i] > '9') {return 0;}}return 1;
}int main() {char tmp[MAX_URL_LENGTH];// 主循環,持續讀取用戶輸入while (fgets(tmp, sizeof(tmp), stdin)) {// 去掉換行符tmp[strcspn(tmp, "\n")] = '\0';// 判斷輸入是否為正整數if (isNumeric(tmp)) {// 如果是正整數,調用sortURL函數并輸出結果int n = atoi(tmp);sortURL(n);} else {// 如果是URL,更新緩存中的統計次數int found = 0;for (int i = 0; i < cacheSize; ++i) {if (strcmp(cache[i].url, tmp) == 0) {cache[i].count++;found = 1;break;}}if (!found) {// 如果URL不在緩存中,添加到緩存strcpy(cache[cacheSize].url, tmp);cache[cacheSize].count = 1;cacheSize++;}}}return 0;
}

C 語言代碼講解

  1. URLCount 結構體

    • 用于存儲URL及其出現次數,包含兩個字段:
      • url:URL字符串。
      • count:URL出現次數。
  2. cache 數組

    • 使用數組存儲URL及其出現次數,cacheSize 記錄當前緩存的大小。
  3. compare 函數

    • 用于 qsort 排序的比較函數,規則為:
      • 首先按出現次數降序排序。
      • 如果出現次數相同,則按URL的字典序升序排序。
  4. sortURL 函數

    • 使用 qsortcache 數組進行排序。
    • 輸出前 n 個URL,用逗號分隔。
  5. isNumeric 函數

    • 判斷字符串是否為正整數。
  6. 主循環

    • 使用 fgets 逐行讀取輸入。
    • 判斷輸入是否為正整數:
      • 如果是正整數,調用 sortURL 函數并輸出結果。
      • 如果是URL,更新 cache 中該URL的計數。

總結

  • C++ 實現:利用了STL的 mapvector,代碼簡潔高效。
  • C 語言實現:使用數組和結構體,適合對內存和性能有嚴格要求的場景。
  • 兩種實現都遵循了相同的邏輯:統計URL出現次數,排序并輸出前 n 個URL。

六、尾言

什么是華為OD?

華為OD(Outsourcing Developer,外包開發工程師)是華為針對軟件開發工程師崗位的一種招聘形式,主要包括筆試、技術面試以及綜合面試等環節。尤其在筆試部分,算法題的機試至關重要。

為什么刷題很重要?

  1. 機試是進入技術面的第一關:
    華為OD機試(常被稱為機考)主要考察算法和編程能力。只有通過機試,才能進入后續的技術面試環節。

  2. 技術面試需要手撕代碼:
    技術一面和二面通常會涉及現場編寫代碼或算法題。面試官會注重考察候選人的思路清晰度、代碼規范性以及解決問題的能力。因此提前刷題、多練習是通過面試的重要保障。

  3. 入職后的可信考試:
    入職華為后,還需要通過“可信考試”。可信考試分為三個等級:

    • 入門級:主要考察基礎算法與編程能力。
    • 工作級:更貼近實際業務需求,可能涉及復雜的算法或與工作內容相關的場景題目。
    • 專業級:最高等級,考察深層次的算法以及優化能力,與薪資直接掛鉤。

刷題策略與說明:

2024年8月14日之后,華為OD機試的題庫轉為 E卷,由往年題庫(D卷、A卷、B卷、C卷)和全新題目組成。刷題時可以參考以下策略:

  1. 關注歷年真題:

    • 題庫中的舊題占比較大,建議優先刷歷年的A卷、B卷、C卷、D卷題目。
    • 對于每道題目,建議深度理解其解題思路、代碼實現,以及相關算法的適用場景。
  2. 適應新題目:

    • E卷中包含全新題目,需要掌握全面的算法知識和一定的靈活應對能力。
    • 建議關注新的刷題平臺或交流群,獲取最新題目的解析和動態。
  3. 掌握常見算法:
    華為OD考試通常涉及以下算法和數據結構:

    • 排序算法(快速排序、歸并排序等)
    • 動態規劃(背包問題、最長公共子序列等)
    • 貪心算法
    • 棧、隊列、鏈表的操作
    • 圖論(最短路徑、最小生成樹等)
    • 滑動窗口、雙指針算法
  4. 保持編程規范:

    • 注重代碼的可讀性和注釋的清晰度。
    • 熟練使用常見編程語言,如C++、Java、Python等。

如何獲取資源?

  1. 官方參考:

    • 華為招聘官網或相關的招聘平臺會有一些參考信息。
    • 華為OD的相關公眾號可能也會發布相關的刷題資料或學習資源。
  2. 加入刷題社區:

    • 找到可信的刷題交流群,與其他備考的小伙伴交流經驗。
    • 關注知名的刷題網站,如LeetCode、牛客網等,這些平臺上有許多華為OD的歷年真題和解析。
  3. 尋找系統性的教程:

    • 學習一本經典的算法書籍,例如《算法導論》《劍指Offer》《編程之美》等。
    • 完成系統的學習課程,例如數據結構與算法的在線課程。

積極心態與持續努力:

刷題的過程可能會比較枯燥,但它能夠顯著提升編程能力和算法思維。無論是為了通過華為OD的招聘考試,還是為了未來的職業發展,這些積累都會成為重要的財富。

考試注意細節

  1. 本地編寫代碼

    • 在本地 IDE(如 VS Code、PyCharm 等)上編寫、保存和調試代碼,確保邏輯正確后再復制粘貼到考試頁面。這樣可以減少語法錯誤,提高代碼準確性。
  2. 調整心態,保持冷靜

    • 遇到提示不足或實現不確定的問題時,不必慌張,可以采用更簡單或更有把握的方法替代,確保思路清晰。
  3. 輸入輸出完整性

    • 注意訓練和考試時都需要編寫完整的輸入輸出代碼,尤其是和題目示例保持一致。完成代碼后務必及時調試,確保功能符合要求。
  4. 快捷鍵使用

    • 刪除行可用 Ctrl+D,復制、粘貼和撤銷分別為 Ctrl+CCtrl+VCtrl+Z,這些可以正常使用。
    • 避免使用 Ctrl+S,以免觸發瀏覽器的保存功能。
  5. 瀏覽器要求

    • 使用最新版的 Google Chrome 瀏覽器完成考試,確保攝像頭開啟并正常工作。考試期間不要切換到其他網站,以免影響考試成績。
  6. 交卷相關

    • 答題前,務必仔細查看題目示例,避免遺漏要求。
    • 每完成一道題后,點擊【保存并調試】按鈕,多次保存和調試是允許的,系統會記錄得分最高的一次結果。完成所有題目后,點擊【提交本題型】按鈕。
    • 確保在考試結束前提交試卷,避免因未保存或調試失誤而丟分。
  7. 時間和分數安排

    • 總時間:150 分鐘;總分:400 分。
    • 試卷結構:2 道一星難度題(每題 100 分),1 道二星難度題(200 分)。及格分為 150 分。合理分配時間,優先完成自己擅長的題目。
  8. 考試環境準備

    • 考試前請備好草稿紙和筆。考試中盡量避免離開座位,確保監控畫面正常。
    • 如需上廁所,請提前規劃好時間以減少中途離開監控的可能性。
  9. 技術問題處理

    • 如果考試中遇到斷電、斷網、死機等技術問題,可以關閉瀏覽器并重新打開試卷鏈接繼續作答。
    • 出現其他問題,請第一時間聯系 HR 或監考人員進行反饋。

祝你考試順利,取得理想成績!

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

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

相關文章

《DeepSeek 網頁/API 性能異常(DeepSeek Web/API Degraded Performance):網絡安全日志》

DeepSeek 網頁/API 性能異常&#xff08;DeepSeek Web/API Degraded Performance&#xff09;訂閱 已識別 - 已識別問題&#xff0c;并且正在實施修復。 1月 29&#xff0c; 2025 - 20&#xff1a;57 CST 更新 - 我們將繼續監控任何其他問題。 1月 28&#xff0c; 2025 - 22&am…

基于微信小程序的輔助教學系統的設計與實現

標題:基于微信小程序的輔助教學系統的設計與實現 內容:1.摘要 摘要&#xff1a;隨著移動互聯網的普及和微信小程序的興起&#xff0c;基于微信小程序的輔助教學系統成為了教育領域的一個新的研究熱點。本文旨在設計和實現一個基于微信小程序的輔助教學系統&#xff0c;以提高教…

智能汽車網絡安全威脅報告

近年來隨著智能汽車技術的快速發展&#xff0c;針對智能汽車的攻擊也逐漸從傳統的針對單一車輛控制器的攻擊轉變為針對整車智能化服務的攻擊&#xff0c;包括但不限于對遠程控制應用程序的操控、云服務的滲透、智能座艙系統的破解以及對第三方應用和智能服務的攻擊。隨著WP.29 …

docker中運行的MySQL怎么修改密碼

1&#xff0c;進入MySQL容器 docker exec -it 容器名 bash 我運行了 docker ps命令查看。正在運行的容器名稱。可以看到MySQL的我起名為db docker exec -it db bash 這樣就成功的進入到容器中了。 2&#xff0c;登錄MySQL中 mysql -u 用戶名 -p 回車 密碼 mysql -u root -p roo…

創建 priority_queue - 進階(內置類型)c++

內置類型就是 C 提供的數據類型&#xff0c;?如 int 、 double 、 long long 等。以 int 類型為例&#xff0c;分 別創建?根堆和?根堆。 這種寫法意思是&#xff0c;我要告訴這個優先級隊列要建一個什么樣的堆&#xff0c;第一個int是要存什么數據類型&#xff0c;vecto…

解鎖微服務:五大進階業務場景深度剖析

目錄 醫療行業&#xff1a;智能診療的加速引擎 電商領域&#xff1a;數據依賴的破局之道 金融行業&#xff1a;運維可觀測性的提升之路 物流行業&#xff1a;智慧物流的創新架構 綜合業務&#xff1a;服務依賴的優化策略 醫療行業&#xff1a;智能診療的加速引擎 在醫療行業邁…

Cloudreve:Star22.3k,免費開源的網盤,支持多種存儲方式,它允許用戶快速搭建個人或團隊的私有云存儲服務。

嗨&#xff0c;大家好&#xff0c;我是小華同學&#xff0c;關注我們獲得“最新、最全、最優質”開源項目和高效工作學習方法 Cloudreve是一個基于Web的文件管理和分享系統&#xff0c;它允許用戶快速搭建個人或團隊的私有云存儲服務。該項目以其高度的可定制性和靈活性&#x…

Day28(補)-【AI思考】-AI會不會考慮自己的需求?

文章目錄 AI會不會考慮自己的需求&#xff1f;一、**技術本質&#xff1a;深度≠理解**二、**傳播機制&#xff1a;熱搜如何制造幻覺**三、**倫理考量&#xff1a;為何必須"撇清"**關鍵結論 AI會不會考慮自己的需求&#xff1f; 讓思想碎片重煥生機的靈魂&#xff1a…

AIGC(生成式AI)試用 20 -- deepseek 初識

>> 基本概念 Ollama -- 運行大模型&#xff0c;管理運行AI大模型的工具&#xff0c;用來安裝布置DeepSeek https://ollama.com/ , Get up and running with large language models. AnythingLLM -- 大模型增強應用&#xff0c;GUI大模型交互程序 Download AnythingLLM …

解決Oracle SQL語句性能問題(10.5)——常用Hint及語法(7)(其他Hint)

10.5.3. 常用hint 10.5.3.7. 其他Hint 1)cardinality:顯式的指示優化器為SQL語句的某個行源指定勢。該Hint具體語法如下所示。 SQL> select /*+ cardinality([@qb] [table] card ) */ ...; --注: 1)這里,第一個參數(@qb)為可選參數,指定查詢語句塊名;第二個參數…

Axure PR 9 旋轉效果 設計交互

大家好&#xff0c;我是大明同學。 這期內容&#xff0c;我們將學習Axure中的旋轉效果設計與交互技巧。 旋轉 創建旋轉效果所需的元件 1.打開一個新的 RP 文件并在畫布上打開 Page 1。 2.在元件庫中拖出一個按鈕元件。 創建交互 創建按鈕交互狀態 1.選中按鈕元件&#xf…

SSM開發(三) spring與mybatis整合(含完整運行demo源碼)

目錄 本文主要內容 一、Spring整合MyBatis的三個關鍵點 二、整合步驟 1、創建一個Maven項目 2、在pom.xml文件中添加jar包的依賴 3、配置MyBatis 注解實現方式 XML配置文件實現 4、配置Spring 5、測試運行 本文主要內容 1. Spring + Mybatis整合; 2. MyBatis兩種SQL…

Attention--人工智能領域的核心技術

1. Attention 的全稱與基本概念 在人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;領域&#xff0c;Attention 機制的全稱是 Attention Mechanism&#xff08;注意力機制&#xff09;。它是一種能夠動態分配計算資源&#xff0c;使模型在處理輸入數據…

相同的樹及延伸題型(C語言詳解版)

從LeetCode 100和101看二叉樹的比較與對稱性判斷 今天要講的是leetcode100.相同的樹&#xff0c;并且本文章還會講到延伸題型leetcode101.對稱二叉樹。本文章編寫用的是C語言&#xff0c;大家主要是學習思路&#xff0c;學習過后可以自己點擊鏈接測試&#xff0c;并且做一些對…

Carla-ModuleNotFoundError: No module named ‘agents.navigation‘

解決辦法&#xff1a; You need to make sure that _agents _ is in your (PYTHON)PATH variable or your working dictionary. Setting your working dictionary to <CARLA_ROOT>/PythonAPI/carla would fix it as agents is a sub dictionary. Similarly adding the c…

【Rust自學】15.0. 智能指針(序):什么是智能指針及Rust智能指針的特性

喜歡的話別忘了點贊、收藏加關注哦&#xff0c;對接下來的教程有興趣的可以關注專欄。謝謝喵&#xff01;(&#xff65;ω&#xff65;) 15.0.1 指針的基本概念 指針是一個變量在內存中包含的是一個地址&#xff0c;指向另一個數據。 Rust 中最常見的指針是引用&#xff0c…

數據結構:線性表查找的三種方式

只要是靜態查找表即可 #define ElemType int typedef struct { ElemType *d; int length; }SSTable; 順序查找 S(n)O(1) 哨兵空間 int Search_Seq(SSTable t,ElemType key) {t.d[0]key;for (int i t.length; i >0 ; i--) {if(t.d[i]t.d[0]){return i;}}return 0; } 折半查找…

記錄一次,PyQT的報錯,多線程Udp失效,使用工具如netstat來檢查端口使用情況。

1.問題 報錯Exception in thread Thread-1: Traceback (most recent call last): File "threading.py", line 932, in _bootstrap_inner File "threading.py", line 870, in run File "main.py", line 456, in udp_recv IndexError: list…

電路研究9.2.5——合宙Air780EP中GPS 相關命令使用方法研究

注&#xff1a;本命令僅適用于合宙 4G CAT1 模塊&#xff08;Air780EG 系列&#xff09;。 正好&#xff0c;我們使用的Air780EP好像也有4G CAT1模塊&#xff0c;好像也屬于Air780EG系列吧。 這個例子好像比較少就個。 18.9 使用方法舉例 18.1GPS 開關&#xff1a;ATCGNSPWR 這…

【C語言】在Windows上為可執行文件.exe添加自定義圖標

本文詳細介紹了在 Windows 環境下,如何為使用 GCC 編譯器編譯的 C程序 添加自定義圖標,從而生成帶有圖標的 .exe 可執行文件。通過本文的指導,讀者可以了解到所需的條件以及具體的操作步驟,使生成的程序更具專業性和個性化。 目錄 1. 準備條件2. 具體步驟步驟 1: 準備資源文…