【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.mzph.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…

智能汽车网络安全威胁报告

近年来随着智能汽车技术的快速发展&#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…

解锁微服务:五大进阶业务场景深度剖析

目录 医疗行业&#xff1a;智能诊疗的加速引擎 电商领域&#xff1a;数据依赖的破局之道 金融行业&#xff1a;运维可观测性的提升之路 物流行业&#xff1a;智慧物流的创新架构 综合业务&#xff1a;服务依赖的优化策略 医疗行业&#xff1a;智能诊疗的加速引擎 在医疗行业迈…

Cloudreve:Star22.3k,免费开源的网盘,支持多种存储方式,它允许用户快速搭建个人或团队的私有云存储服务。

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Cloudreve是一个基于Web的文件管理和分享系统&#xff0c;它允许用户快速搭建个人或团队的私有云存储服务。该项目以其高度的可定制性和灵活性&#x…

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 …

Axure PR 9 旋转效果 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件&#xf…

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;并且做一些对…

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

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址&#xff0c;指向另一个数据。 Rust 中最常见的指针是引用&#xff0c…

记录一次,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: 准备资源文…

python编程环境安装保姆级教程--python-3.7.2pycharm2021.2.3社区版

第1步安装解释器python-3.7.2&#xff0c;第2步安装pycharm编程软件 1、安装解释器 1.1 什么是解释器 就是将Python高级程序语言翻译成为计算机可以识别的0、1代码 1.2 安装解释器python-3.7.2&#xff08;根据自己的操作系统安装适配的解释器&#xff0c;以Windows为例&…

STM32 TIM输入捕获 测量频率

输入捕获简介&#xff1a; IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中&#xff0c;可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器…

21.3-启动流程、编码风格(了解) 第21章-FreeRTOS项目实战--基础知识之新建任务、启动流程、编码风格、系统配置 文件组成和编码风格(了解)

21.3-启动流程、编码风格(了解) 启动流程 第一种启动流程(我们就使用这个): 在main函数中将硬件初始化、RTOS系统初始化&#xff0c;同时创建所有任务&#xff0c;再启动RTOS调度器。 第二种启动流程&#xff1a; 在main函数中将硬件初始化、RTOS系统初始化&#xff0c;只…

【AI非常道】二零二五年一月(二),AI非常道

经常在社区看到一些非常有启发或者有收获的话语&#xff0c;但是&#xff0c;往往看过就成为过眼云烟&#xff0c;有时再想去找又找不到。索性&#xff0c;今年开始&#xff0c;看到好的言语&#xff0c;就记录下来&#xff0c;一月一发布&#xff0c;亦供大家参考。 有关AI非…

Mac Electron 应用签名(signature)和公证(notarization)

在MacOS 10.14.5之后&#xff0c;如果应用没有在苹果官方平台进行公证notarization(我们可以理解为安装包需要审核&#xff0c;来判断是否存在病毒)&#xff0c;那么就不能被安装。当然现在很多人的解决方案都是使用sudo spctl --master-disable&#xff0c;取消验证模式&#…

1、开始简单使用rag

文章目录 前言数据存放申请api开始代码安装依赖从文件夹中读取文档文档切块将分割嵌入并存储在向量库中检索部分代码构造用户接口演示提示 整体代码 前言 本章只是简单使用rag的一个示例&#xff0c;为了引出以后的学习&#xff0c;将整个rag的流程串起来 数据存放 一个示例…

爱书爱考平台说明

最近我开发了一个综合性的考试平台&#xff0c;内容包括但不限于职业资格证考试、成人教育、国家公务员考试等内容。目前1.0版本已经开发完成&#xff0c;其他的功能陆续完善中。 微信小程序搜索"爱书爱考" 微信小程序图标如下图: 目前维护了java相关的面试题的考题…