自助建站软件微信app小程序开发

一、问题描述
题目解析
我们需要找到一个下标 i,使得表达式 X[i] - X[i + 1] - ... - X[i + K - 1] 的结果最接近于数组的中位数。如果有多个 i 满足条件,则返回最大的 i。
关键点:
- 中位数计算: 
- 将数组排序后,中位数是 
X[N/2],其中N是数组的长度。 
 - 将数组排序后,中位数是 
 - 滑动窗口计算: 
- 对于每个窗口 
[i, i + K - 1],计算表达式X[i] - X[i + 1] - ... - X[i + K - 1]。 - 使用滑动窗口优化计算,避免重复计算。
 
 - 对于每个窗口 
 - 状态转移: 
- 当窗口右移时,新的窗口结果可以通过旧窗口结果推导出来:
new_window = old_window - X[i - 1] + 2 * X[i] - X[i + K - 1] - 这是因为在新窗口中,
X[i]从负变正,而X[i + K - 1]是新加入的负值。 
 - 当窗口右移时,新的窗口结果可以通过旧窗口结果推导出来:
 
代码实现
以下是完整的代码实现,包括输入输出处理和核心逻辑:
1. 输入输出处理
# 输入处理
def get_input():# 示例输入:[50, 50, 2, 3], 2input_str = input().strip()  # 读取输入x_str, k_str = input_str.split('],')  # 分割数组和Kx = list(map(int, x_str[1:].split(',')))  # 解析数组k = int(k_str)  # 解析Kreturn x, k# 输出处理
def print_output(result):print(result)
 
2. 核心逻辑
def find_closest_index(x, k):n = len(x)mid = sorted(x)[n // 2]  # 计算中位数# 初始化窗口结果window = x[0]for i in range(1, k):window -= x[i]min_diff = abs(window - mid)  # 当前最小差距result = 0  # 结果下标# 滑动窗口for i in range(1, n - k + 1):# 状态转移window = window - x[i - 1] + 2 * x[i] - x[i + k - 1]# 计算当前差距diff = abs(window - mid)# 更新结果if diff < min_diff or (diff == min_diff and i > result):min_diff = diffresult = ireturn result
 
3. 主函数
def main():x, k = get_input()  # 获取输入result = find_closest_index(x, k)  # 计算结果print_output(result)  # 输出结果if __name__ == "__main__":main()
 
代码详细注释
1. 输入处理
def get_input():input_str = input().strip()  # 读取输入并去除首尾空格x_str, k_str = input_str.split('],')  # 分割数组和Kx = list(map(int, x_str[1:].split(',')))  # 解析数组k = int(k_str)  # 解析Kreturn x, k
 
- 功能:从控制台读取输入并解析为数组 
x和整数k。 - 关键点: 
input().strip():读取输入并去除首尾空格。split('],'):将输入字符串分割为数组部分和K部分。map(int, x_str[1:].split(',')):将数组部分解析为整数列表。
 
2. 核心逻辑
def find_closest_index(x, k):n = len(x)mid = sorted(x)[n // 2]  # 计算中位数# 初始化窗口结果window = x[0]for i in range(1, k):window -= x[i]min_diff = abs(window - mid)  # 当前最小差距result = 0  # 结果下标# 滑动窗口for i in range(1, n - k + 1):# 状态转移window = window - x[i - 1] + 2 * x[i] - x[i + k - 1]# 计算当前差距diff = abs(window - mid)# 更新结果if diff < min_diff or (diff == min_diff and i > result):min_diff = diffresult = ireturn result
 
- 功能:找到使表达式结果最接近于中位数的下标 
i。 - 关键点: 
- 中位数计算:
sorted(x)[n // 2]。 - 窗口初始化:计算第一个窗口的结果 
window = x[0] - x[1] - ... - x[k - 1]。 - 滑动窗口: 
- 使用状态转移公式更新窗口结果。
 - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 
 - 中位数计算:
 
3. 主函数
def main():x, k = get_input()  # 获取输入result = find_closest_index(x, k)  # 计算结果print_output(result)  # 输出结果if __name__ == "__main__":main()
 
- 功能:调用输入处理、核心逻辑和输出处理函数,完成整个流程。
 
示例运行
输入:
[50,50,2,3],2
 
输出:
1
 
解释:
- 中位数为 
50。 - 窗口计算结果: 
i = 0:50 - 50 = 0,差距为|0 - 50| = 50。i = 1:50 - 2 = 48,差距为|48 - 50| = 2。i = 2:2 - 3 = -1,差距为|-1 - 50| = 51。
 - 最接近中位数的是 
i = 1,差距为2。 
总结
- 通过滑动窗口和状态转移公式,代码能够高效地计算每个窗口的结果。
 - 时间复杂度为 
O(n log n)(排序) +O(n)(滑动窗口),适合处理长度为1000的数组。 - 代码逻辑清晰,易于理解和扩展。
 
二、JavaScript算法源码
代码详细注释与讲解
以下是代码的逐行注释和逻辑讲解:
1. 输入获取
const readline = require("readline");const rl = readline.createInterface({input: process.stdin,output: process.stdout,
});rl.on("line", (line) => {const i = line.lastIndexOf(","); // 找到最后一个逗号的位置const x = line.slice(1, i - 1) // 提取数组部分.split(",") // 分割为字符串数组.map(Number); // 转换为数字数组const k = parseInt(line.slice(i + 1)); // 提取K的值console.log(getResult(x, k)); // 调用核心逻辑并输出结果
});
 
- 功能:从控制台读取输入并解析为数组 
x和整数k。 - 关键点: 
line.lastIndexOf(","):找到最后一个逗号的位置,用于分割数组和k。line.slice(1, i - 1):提取数组部分,去除开头的[和结尾的]。split(","):将数组部分分割为字符串数组。map(Number):将字符串数组转换为数字数组。parseInt(line.slice(i + 1)):提取k的值。
 
2. 核心逻辑
function getResult(x, k) {const n = x.length; // 数组长度const midIdx = Math.floor(n / 2); // 中位数的索引// x数组的中位数const mid = [...x].sort((a, b) => a - b)[midIdx];// 初始化滑窗0~k-1, window为滑窗内部元素的表达式计算结果let window = x[0];for (let i = 1; i < k; i++) {window -= x[i];}// window和中位数的差距let minDiff = Math.abs(mid - window);// window滑窗起始索引let idx = 0;// 滑窗右移for (let i = 1; i <= n - k; i++) {// 右移一格后,新滑窗的表达式计算结果window += -x[i - 1] + 2 * x[i] - x[i + k - 1];// 新滑窗window值和中位数的差距const diff = Math.abs(mid - window);// 结果最接近于数组中位数的下标 i ,如果有多个 i 满足条件,请返回最大的 iif (diff <= minDiff) {minDiff = diff;idx = i;}}return idx;
}
 
- 功能:找到使表达式结果最接近于中位数的下标 
i。 - 关键点: 
- 中位数计算: 
[...x].sort((a, b) => a - b)[midIdx]:将数组排序后取中位数。
 - 窗口初始化: 
- 计算第一个窗口的结果 
window = x[0] - x[1] - ... - x[k - 1]。 
 - 计算第一个窗口的结果 
 - 滑动窗口: 
- 使用状态转移公式更新窗口结果:
window += -x[i - 1] + 2 * x[i] - x[i + k - 1] - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 - 使用状态转移公式更新窗口结果:
 - 结果选择: 
- 如果当前差距小于等于最小差距,则更新最小差距和结果下标。
 - 如果差距相等,则选择更大的下标 
i。 
 
 - 中位数计算: 
 
代码逻辑总结
-  
输入处理:
- 从控制台读取输入并解析为数组 
x和整数k。 
 - 从控制台读取输入并解析为数组 
 -  
中位数计算:
- 将数组排序后取中位数。
 
 -  
窗口初始化:
- 计算第一个窗口的结果。
 
 -  
滑动窗口:
- 使用状态转移公式更新窗口结果。
 - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 -  
结果输出:
- 返回最接近中位数的下标 
i。 
 - 返回最接近中位数的下标 
 
示例运行
输入:
[50,50,2,3],2
 
输出:
1
 
解释:
- 中位数为 
50。 - 窗口计算结果: 
i = 0:50 - 50 = 0,差距为|0 - 50| = 50。i = 1:50 - 2 = 48,差距为|48 - 50| = 2。i = 2:2 - 3 = -1,差距为|-1 - 50| = 51。
 - 最接近中位数的是 
i = 1,差距为2。 
总结
- 通过滑动窗口和状态转移公式,代码能够高效地计算每个窗口的结果。
 - 时间复杂度为 
O(n log n)(排序) +O(n)(滑动窗口),适合处理长度为1000的数组。 - 代码逻辑清晰,易于理解和扩展。
 
三、Java算法源码
代码详细注释与讲解
以下是代码的逐行注释和逻辑讲解:
1. 输入获取
Scanner sc = new Scanner(System.in); // 创建 Scanner 对象,用于从控制台读取输入String line = sc.nextLine(); // 读取一行输入int i = line.lastIndexOf(","); // 找到最后一个逗号的位置int[] x = Arrays.stream(line.substring(1, i - 1).split(",")) // 提取数组部分并分割为字符串数组.mapToInt(Integer::parseInt) // 将字符串数组转换为整数数组.toArray();
int k = Integer.parseInt(line.substring(i + 1)); // 提取 K 的值System.out.println(getResult(x, k)); // 调用核心逻辑并输出结果
 
- 功能:从控制台读取输入并解析为数组 
x和整数k。 - 关键点: 
line.lastIndexOf(","):找到最后一个逗号的位置,用于分割数组和k。line.substring(1, i - 1):提取数组部分,去除开头的[和结尾的]。split(","):将数组部分分割为字符串数组。mapToInt(Integer::parseInt):将字符串数组转换为整数数组。Integer.parseInt(line.substring(i + 1)):提取k的值。
 
2. 核心逻辑
public static int getResult(int[] x, int k) {int n = x.length; // 数组长度// x数组的中位数int mid = Arrays.stream(x).sorted().toArray()[n / 2];// 初始化滑窗0~k-1, window为滑窗内部元素的表达式计算结果int window = x[0];for (int i = 1; i < k; i++) {window -= x[i];}// window和中位数的差距int minDiff = Math.abs(mid - window);// window滑窗起始索引int idx = 0;// 滑窗右移for (int i = 1; i <= n - k; i++) {// 右移一格后,新滑窗的表达式计算结果window += -x[i - 1] + 2 * x[i] - x[i + k - 1];// 新滑窗window值和中位数的差距int diff = Math.abs(mid - window);// 结果最接近于数组中位数的下标 i ,如果有多个 i 满足条件,请返回最大的 iif (diff <= minDiff) {minDiff = diff;idx = i;}}return idx;
}
 
- 功能:找到使表达式结果最接近于中位数的下标 
i。 - 关键点: 
- 中位数计算: 
Arrays.stream(x).sorted().toArray()[n / 2]:将数组排序后取中位数。
 - 窗口初始化: 
- 计算第一个窗口的结果 
window = x[0] - x[1] - ... - x[k - 1]。 
 - 计算第一个窗口的结果 
 - 滑动窗口: 
- 使用状态转移公式更新窗口结果:
window += -x[i - 1] + 2 * x[i] - x[i + k - 1] - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 - 使用状态转移公式更新窗口结果:
 - 结果选择: 
- 如果当前差距小于等于最小差距,则更新最小差距和结果下标。
 - 如果差距相等,则选择更大的下标 
i。 
 
 - 中位数计算: 
 
代码逻辑总结
-  
输入处理:
- 从控制台读取输入并解析为数组 
x和整数k。 
 - 从控制台读取输入并解析为数组 
 -  
中位数计算:
- 将数组排序后取中位数。
 
 -  
窗口初始化:
- 计算第一个窗口的结果。
 
 -  
滑动窗口:
- 使用状态转移公式更新窗口结果。
 - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 -  
结果输出:
- 返回最接近中位数的下标 
i。 
 - 返回最接近中位数的下标 
 
示例运行
输入:
[50,50,2,3],2
 
输出:
1
 
解释:
- 中位数为 
50。 - 窗口计算结果: 
i = 0:50 - 50 = 0,差距为|0 - 50| = 50。i = 1:50 - 2 = 48,差距为|48 - 50| = 2。i = 2:2 - 3 = -1,差距为|-1 - 50| = 51。
 - 最接近中位数的是 
i = 1,差距为2。 
总结
- 通过滑动窗口和状态转移公式,代码能够高效地计算每个窗口的结果。
 - 时间复杂度为 
O(n log n)(排序) +O(n)(滑动窗口),适合处理长度为1000的数组。 - 代码逻辑清晰,易于理解和扩展。
 
四、Python算法源码
代码详细注释与讲解
以下是代码的逐行注释和逻辑讲解:
1. 输入获取
tmp = input()  # 从控制台读取输入i = tmp.rfind(",")  # 找到最后一个逗号的位置x = list(map(int, tmp[1:i-1].split(",")))  # 提取数组部分并转换为整数列表
k = int(tmp[i+1:])  # 提取 K 的值
 
- 功能:从控制台读取输入并解析为数组 
x和整数k。 - 关键点: 
tmp.rfind(","):找到最后一个逗号的位置,用于分割数组和k。tmp[1:i-1]:提取数组部分,去除开头的[和结尾的]。split(","):将数组部分分割为字符串列表。map(int, ...):将字符串列表转换为整数列表。int(tmp[i+1:]):提取k的值。
 
2. 核心逻辑
def getResult():n = len(x)  # 数组长度# x数组的中位数mid = sorted(x)[n // 2]# 初始化滑窗0~k-1, window为滑窗内部元素的表达式计算结果window = x[0]for j in range(1, k):window -= x[j]# window和中位数的差距minDiff = abs(mid - window)# window滑窗起始索引idx = 0# 滑窗右移for i in range(1, n-k+1):# 右移一格后,新滑窗的表达式计算结果window += -x[i-1] + 2 * x[i] - x[i + k -1]# 新滑窗window值和中位数的差距diff = abs(mid - window)# 结果最接近于数组中位数的下标 i ,如果有多个 i 满足条件,请返回最大的 iif diff <= minDiff:minDiff = diffidx = ireturn idx
 
- 功能:找到使表达式结果最接近于中位数的下标 
i。 - 关键点: 
- 中位数计算: 
sorted(x)[n // 2]:将数组排序后取中位数。
 - 窗口初始化: 
- 计算第一个窗口的结果 
window = x[0] - x[1] - ... - x[k - 1]。 
 - 计算第一个窗口的结果 
 - 滑动窗口: 
- 使用状态转移公式更新窗口结果:
window += -x[i-1] + 2 * x[i] - x[i + k -1] - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 - 使用状态转移公式更新窗口结果:
 - 结果选择: 
- 如果当前差距小于等于最小差距,则更新最小差距和结果下标。
 - 如果差距相等,则选择更大的下标 
i。 
 
 - 中位数计算: 
 
3. 算法调用
print(getResult())  # 调用核心逻辑并输出结果
 
- 功能:调用 
getResult方法并输出结果。 
代码逻辑总结
-  
输入处理:
- 从控制台读取输入并解析为数组 
x和整数k。 
 - 从控制台读取输入并解析为数组 
 -  
中位数计算:
- 将数组排序后取中位数。
 
 -  
窗口初始化:
- 计算第一个窗口的结果。
 
 -  
滑动窗口:
- 使用状态转移公式更新窗口结果。
 - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 -  
结果输出:
- 返回最接近中位数的下标 
i。 
 - 返回最接近中位数的下标 
 
示例运行
输入:
[50,50,2,3],2
 
输出:
1
 
解释:
- 中位数为 
50。 - 窗口计算结果: 
i = 0:50 - 50 = 0,差距为|0 - 50| = 50。i = 1:50 - 2 = 48,差距为|48 - 50| = 2。i = 2:2 - 3 = -1,差距为|-1 - 50| = 51。
 - 最接近中位数的是 
i = 1,差距为2。 
总结
- 通过滑动窗口和状态转移公式,代码能够高效地计算每个窗口的结果。
 - 时间复杂度为 
O(n log n)(排序) +O(n)(滑动窗口),适合处理长度为1000的数组。 - 代码逻辑清晰,易于理解和扩展。
 
五、C/C++算法源码:
以下是代码的 C++ 和 C 语言实现,并附带详细的中文注释和讲解。
C++ 实现
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>using namespace std;// 核心逻辑函数
int getResult(const vector<int>& x, int k) {int n = x.size();// 复制数组并排序,用于计算中位数vector<int> x_cp(x);sort(x_cp.begin(), x_cp.end());// 计算中位数int mid = x_cp[n / 2];// 初始化滑窗 0~k-1,window 为滑窗内部元素的表达式计算结果int window = x[0];for (int i = 1; i < k; i++) {window -= x[i];}// window 和中位数的差距int minDiff = abs(mid - window);// window 滑窗起始索引int idx = 0;// 滑窗右移for (int i = 1; i <= n - k; i++) {// 右移一格后,新滑窗的表达式计算结果window += -x[i - 1] + 2 * x[i] - x[i + k - 1];// 新滑窗 window 值和中位数的差距int diff = abs(mid - window);// 结果最接近于数组中位数的下标 i,如果有多个 i 满足条件,返回最大的 iif (diff <= minDiff) {minDiff = diff;idx = i;}}return idx;
}int main() {string s;cin >> s; // 读取输入字符串// 找到最后一个逗号的位置size_t lastComma = s.rfind(',');// 提取数组部分string arrStr = s.substr(1, lastComma - 2); // 去掉开头的 '[' 和结尾的 ']'// 提取 k 的值int k = stoi(s.substr(lastComma + 1));// 将数组部分分割为整数vector<int> x;size_t pos = 0;while ((pos = arrStr.find(',')) != string::npos) {x.push_back(stoi(arrStr.substr(0, pos)));arrStr.erase(0, pos + 1);}x.push_back(stoi(arrStr)); // 添加最后一个元素// 调用核心逻辑并输出结果cout << getResult(x, k) << endl;return 0;
}
 
C 语言实现
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>#define MAX_SIZE 1000// 比较函数,用于 qsort
int cmp(const void *a, const void *b) {return (*(int *)a) - (*(int *)b);
}// 核心逻辑函数
int getResult(const int x[], int n, int k) {int x_cp[n];for (int i = 0; i < n; i++) {x_cp[i] = x[i]; // 复制数组}// 排序数组,用于计算中位数qsort(x_cp, n, sizeof(int), cmp);// 计算中位数int mid = x_cp[n / 2];// 初始化滑窗 0~k-1,window 为滑窗内部元素的表达式计算结果int window = x[0];for (int i = 1; i < k; i++) {window -= x[i];}// window 和中位数的差距int minDiff = abs(mid - window);// window 滑窗起始索引int idx = 0;// 滑窗右移for (int i = 1; i <= n - k; i++) {// 右移一格后,新滑窗的表达式计算结果window += -x[i - 1] + 2 * x[i] - x[i + k - 1];// 新滑窗 window 值和中位数的差距int diff = abs(mid - window);// 结果最接近于数组中位数的下标 i,如果有多个 i 满足条件,返回最大的 iif (diff <= minDiff) {minDiff = diff;idx = i;}}return idx;
}int main() {char s[100000];scanf("%s", s); // 读取输入字符串// 找到最后一个逗号的位置char *p = strrchr(s, ',');*p = '\0'; // 将逗号替换为字符串结束符// 提取数组部分int nums[MAX_SIZE];int nums_size = 0;char *token = strtok(s + 1, ","); // 跳过开头的 '['while (token != NULL) {nums[nums_size++] = atoi(token); // 将字符串转换为整数token = strtok(NULL, ",");}// 提取 k 的值int k = atoi(p + 1);// 调用核心逻辑并输出结果printf("%d\n", getResult(nums, nums_size, k));return 0;
}
 
代码详细注释与讲解
1. 输入处理
- C++: 
- 使用 
cin读取输入字符串。 - 使用 
substr和find提取数组部分和k的值。 - 将数组部分分割为整数并存入 
vector<int>。 
 - 使用 
 - C: 
- 使用 
scanf读取输入字符串。 - 使用 
strrchr找到最后一个逗号的位置,并分割字符串。 - 使用 
strtok将数组部分分割为整数并存入数组。 
 - 使用 
 
2. 核心逻辑
- 中位数计算: 
- 复制原数组并排序,取排序后数组的中间值作为中位数。
 
 - 滑动窗口初始化: 
- 计算第一个窗口的结果 
window = x[0] - x[1] - ... - x[k - 1]。 
 - 计算第一个窗口的结果 
 - 滑动窗口右移: 
- 使用状态转移公式更新窗口结果:
window += -x[i - 1] + 2 * x[i] - x[i + k - 1] - 计算当前窗口结果与中位数的差距。
 - 更新最小差距和结果下标。
 
 - 使用状态转移公式更新窗口结果:
 - 结果选择: 
- 如果当前差距小于等于最小差距,则更新最小差距和结果下标。
 - 如果差距相等,则选择更大的下标 
i。 
 
3. 输出结果
- C++:使用 
cout输出结果。 - C:使用 
printf输出结果。 
示例运行
输入:
[50,50,2,3],2
 
输出:
1
 
解释:
- 中位数为 
50。 - 窗口计算结果: 
i = 0:50 - 50 = 0,差距为|0 - 50| = 50。i = 1:50 - 2 = 48,差距为|48 - 50| = 2。i = 2:2 - 3 = -1,差距为|-1 - 50| = 51。
 - 最接近中位数的是 
i = 1,差距为2。 
总结
- C++ 和 C 的实现逻辑一致,主要区别在于输入处理和数据结构的使用。
 - C++ 使用 
vector和string简化了数组和字符串的操作。 - C 使用数组和指针手动处理字符串分割和数组操作。
 - 代码通过滑动窗口和状态转移公式高效地计算每个窗口的结果,时间复杂度为 
O(n log n)(排序) +O(n)(滑动窗口)。 
六、尾言
什么是华为OD?
华为OD(Outsourcing Developer,外包开发工程师)是华为针对软件开发工程师岗位的一种招聘形式,主要包括笔试、技术面试以及综合面试等环节。尤其在笔试部分,算法题的机试至关重要。
为什么刷题很重要?
-  
机试是进入技术面的第一关:
华为OD机试(常被称为机考)主要考察算法和编程能力。只有通过机试,才能进入后续的技术面试环节。 -  
技术面试需要手撕代码:
技术一面和二面通常会涉及现场编写代码或算法题。面试官会注重考察候选人的思路清晰度、代码规范性以及解决问题的能力。因此提前刷题、多练习是通过面试的重要保障。 -  
入职后的可信考试:
入职华为后,还需要通过“可信考试”。可信考试分为三个等级:- 入门级:主要考察基础算法与编程能力。
 - 工作级:更贴近实际业务需求,可能涉及复杂的算法或与工作内容相关的场景题目。
 - 专业级:最高等级,考察深层次的算法以及优化能力,与薪资直接挂钩。
 
 
刷题策略与说明:
2024年8月14日之后,华为OD机试的题库转为 E卷,由往年题库(D卷、A卷、B卷、C卷)和全新题目组成。刷题时可以参考以下策略:
-  
关注历年真题:
- 题库中的旧题占比较大,建议优先刷历年的A卷、B卷、C卷、D卷题目。
 - 对于每道题目,建议深度理解其解题思路、代码实现,以及相关算法的适用场景。
 
 -  
适应新题目:
- E卷中包含全新题目,需要掌握全面的算法知识和一定的灵活应对能力。
 - 建议关注新的刷题平台或交流群,获取最新题目的解析和动态。
 
 -  
掌握常见算法:
华为OD考试通常涉及以下算法和数据结构:- 排序算法(快速排序、归并排序等)
 - 动态规划(背包问题、最长公共子序列等)
 - 贪心算法
 - 栈、队列、链表的操作
 - 图论(最短路径、最小生成树等)
 - 滑动窗口、双指针算法
 
 -  
保持编程规范:
- 注重代码的可读性和注释的清晰度。
 - 熟练使用常见编程语言,如C++、Java、Python等。
 
 
如何获取资源?
-  
官方参考:
- 华为招聘官网或相关的招聘平台会有一些参考信息。
 - 华为OD的相关公众号可能也会发布相关的刷题资料或学习资源。
 
 -  
加入刷题社区:
- 找到可信的刷题交流群,与其他备考的小伙伴交流经验。
 - 关注知名的刷题网站,如LeetCode、牛客网等,这些平台上有许多华为OD的历年真题和解析。
 
 -  
寻找系统性的教程:
- 学习一本经典的算法书籍,例如《算法导论》《剑指Offer》《编程之美》等。
 - 完成系统的学习课程,例如数据结构与算法的在线课程。
 
 
积极心态与持续努力:
刷题的过程可能会比较枯燥,但它能够显著提升编程能力和算法思维。无论是为了通过华为OD的招聘考试,还是为了未来的职业发展,这些积累都会成为重要的财富。
考试注意细节
-  
本地编写代码
- 在本地 IDE(如 VS Code、PyCharm 等)上编写、保存和调试代码,确保逻辑正确后再复制粘贴到考试页面。这样可以减少语法错误,提高代码准确性。
 
 -  
调整心态,保持冷静
- 遇到提示不足或实现不确定的问题时,不必慌张,可以采用更简单或更有把握的方法替代,确保思路清晰。
 
 -  
输入输出完整性
- 注意训练和考试时都需要编写完整的输入输出代码,尤其是和题目示例保持一致。完成代码后务必及时调试,确保功能符合要求。
 
 -  
快捷键使用
- 删除行可用 
Ctrl+D,复制、粘贴和撤销分别为Ctrl+C,Ctrl+V,Ctrl+Z,这些可以正常使用。 - 避免使用 
Ctrl+S,以免触发浏览器的保存功能。 
 - 删除行可用 
 -  
浏览器要求
- 使用最新版的 Google Chrome 浏览器完成考试,确保摄像头开启并正常工作。考试期间不要切换到其他网站,以免影响考试成绩。
 
 -  
交卷相关
- 答题前,务必仔细查看题目示例,避免遗漏要求。
 - 每完成一道题后,点击【保存并调试】按钮,多次保存和调试是允许的,系统会记录得分最高的一次结果。完成所有题目后,点击【提交本题型】按钮。
 - 确保在考试结束前提交试卷,避免因未保存或调试失误而丢分。
 
 -  
时间和分数安排
- 总时间:150 分钟;总分:400 分。
 - 试卷结构:2 道一星难度题(每题 100 分),1 道二星难度题(200 分)。及格分为 150 分。合理分配时间,优先完成自己擅长的题目。
 
 -  
考试环境准备
- 考试前请备好草稿纸和笔。考试中尽量避免离开座位,确保监控画面正常。
 - 如需上厕所,请提前规划好时间以减少中途离开监控的可能性。
 
 -  
技术问题处理
- 如果考试中遇到断电、断网、死机等技术问题,可以关闭浏览器并重新打开试卷链接继续作答。
 - 出现其他问题,请第一时间联系 HR 或监考人员进行反馈。
 
 
祝你考试顺利,取得理想成绩!
