当前位置: 首页 > news >正文

【2024年华为OD机试】(B卷,100分)- 计算最接近的数 (Java JS PythonC/C++)

在这里插入图片描述

一、问题描述

题目解析

我们需要找到一个下标 i,使得表达式 X[i] - X[i + 1] - ... - X[i + K - 1] 的结果最接近于数组的中位数。如果有多个 i 满足条件,则返回最大的 i

关键点:
  1. 中位数计算
    • 将数组排序后,中位数是 X[N/2],其中 N 是数组的长度。
  2. 滑动窗口计算
    • 对于每个窗口 [i, i + K - 1],计算表达式 X[i] - X[i + 1] - ... - X[i + K - 1]
    • 使用滑动窗口优化计算,避免重复计算。
  3. 状态转移
    • 当窗口右移时,新的窗口结果可以通过旧窗口结果推导出来:
      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
解释:
  1. 中位数为 50
  2. 窗口计算结果:
    • i = 050 - 50 = 0,差距为 |0 - 50| = 50
    • i = 150 - 2 = 48,差距为 |48 - 50| = 2
    • i = 22 - 3 = -1,差距为 |-1 - 50| = 51
  3. 最接近中位数的是 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

代码逻辑总结

  1. 输入处理

    • 从控制台读取输入并解析为数组 x 和整数 k
  2. 中位数计算

    • 将数组排序后取中位数。
  3. 窗口初始化

    • 计算第一个窗口的结果。
  4. 滑动窗口

    • 使用状态转移公式更新窗口结果。
    • 计算当前窗口结果与中位数的差距。
    • 更新最小差距和结果下标。
  5. 结果输出

    • 返回最接近中位数的下标 i

示例运行

输入:
[50,50,2,3],2
输出:
1
解释:
  1. 中位数为 50
  2. 窗口计算结果:
    • i = 050 - 50 = 0,差距为 |0 - 50| = 50
    • i = 150 - 2 = 48,差距为 |48 - 50| = 2
    • i = 22 - 3 = -1,差距为 |-1 - 50| = 51
  3. 最接近中位数的是 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

代码逻辑总结

  1. 输入处理

    • 从控制台读取输入并解析为数组 x 和整数 k
  2. 中位数计算

    • 将数组排序后取中位数。
  3. 窗口初始化

    • 计算第一个窗口的结果。
  4. 滑动窗口

    • 使用状态转移公式更新窗口结果。
    • 计算当前窗口结果与中位数的差距。
    • 更新最小差距和结果下标。
  5. 结果输出

    • 返回最接近中位数的下标 i

示例运行

输入:
[50,50,2,3],2
输出:
1
解释:
  1. 中位数为 50
  2. 窗口计算结果:
    • i = 050 - 50 = 0,差距为 |0 - 50| = 50
    • i = 150 - 2 = 48,差距为 |48 - 50| = 2
    • i = 22 - 3 = -1,差距为 |-1 - 50| = 51
  3. 最接近中位数的是 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 方法并输出结果。

代码逻辑总结

  1. 输入处理

    • 从控制台读取输入并解析为数组 x 和整数 k
  2. 中位数计算

    • 将数组排序后取中位数。
  3. 窗口初始化

    • 计算第一个窗口的结果。
  4. 滑动窗口

    • 使用状态转移公式更新窗口结果。
    • 计算当前窗口结果与中位数的差距。
    • 更新最小差距和结果下标。
  5. 结果输出

    • 返回最接近中位数的下标 i

示例运行

输入:
[50,50,2,3],2
输出:
1
解释:
  1. 中位数为 50
  2. 窗口计算结果:
    • i = 050 - 50 = 0,差距为 |0 - 50| = 50
    • i = 150 - 2 = 48,差距为 |48 - 50| = 2
    • i = 22 - 3 = -1,差距为 |-1 - 50| = 51
  3. 最接近中位数的是 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 读取输入字符串。
    • 使用 substrfind 提取数组部分和 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
解释:
  1. 中位数为 50
  2. 窗口计算结果:
    • i = 050 - 50 = 0,差距为 |0 - 50| = 50
    • i = 150 - 2 = 48,差距为 |48 - 50| = 2
    • i = 22 - 3 = -1,差距为 |-1 - 50| = 51
  3. 最接近中位数的是 i = 1,差距为 2

总结

  • C++C 的实现逻辑一致,主要区别在于输入处理和数据结构的使用。
  • C++ 使用 vectorstring 简化了数组和字符串的操作。
  • C 使用数组和指针手动处理字符串分割和数组操作。
  • 代码通过滑动窗口和状态转移公式高效地计算每个窗口的结果,时间复杂度为 O(n log n)(排序) + O(n)(滑动窗口)。

六、尾言

什么是华为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 或监考人员进行反馈。

祝你考试顺利,取得理想成绩!

相关文章:

【2024年华为OD机试】(B卷,100分)- 计算最接近的数 (Java JS PythonC/C++)

一、问题描述 题目解析 我们需要找到一个下标 i&#xff0c;使得表达式 X[i] - X[i 1] - ... - X[i K - 1] 的结果最接近于数组的中位数。如果有多个 i 满足条件&#xff0c;则返回最大的 i。 关键点&#xff1a; 中位数计算&#xff1a; 将数组排序后&#xff0c;中位数…...

Pytorch 自学笔记(三):利用自定义文本数据集构建Dataset和DataLoader

Pytorch 自学笔记&#xff08;三&#xff09; 1. Dataset与DataLoader1.1 torch.utils.data.Dataset1.2 torch.utils.data.DataLoader Pytorch 自学笔记系列的第三篇。针对Pytorch的Dataset和DataLoader进行简单的介绍&#xff0c;同时&#xff0c;介绍如何使用自定义文本数据集…...

QT 使用QSqlTableModel对数据库进行创建,插入,显示

文章目录 效果图概述功能点代码分析初始数据插入数据数据显示 总结 效果图 概述 本案例用于对数据库中的数据进行显示等其他操作&#xff0c;其他表格筛选&#xff0c;过滤等功能可看此博客 框架&#xff1a;数据模型使用QSqlTableModel&#xff0c;视图使用QTableView&#x…...

如何学习Transformer架构

Transformer架构自提出以来&#xff0c;在自然语言处理领域引发了革命性的变化。作为一种基于注意力机制的模型&#xff0c;Transformer解决了传统序列模型在并行化和长距离依赖方面的局限性。本文将探讨Transformer论文《Attention is All You Need》与Hugging Face Transform…...

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…...

计算 SAMOut V3 在将词汇表从1万 增加到6千万的情况下能够减少多少参数

当我们将词汇表从 60,000,000&#xff08;六千万&#xff09;减少到 10,000 时&#xff0c;实际上是在缩小模型的词嵌入层及其共享的语言模型头&#xff08;LM Head&#xff09;的规模。这将导致参数量显著减少。我们可以通过以下步骤来计算具体的参数减少量。 参数量减少计算…...

03.选择排序

一、题目思路 选择排序是一种简单直观的排序算法。它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;或最大&#xff…...

02_登录窗口

新建场景 重命名为GameRoot 双击GameRoot进入新场景 同样摄像机清除格式 删除平行光并关闭渲染灯光的天空盒 新建空节点重命名为GameRoot GameRoot为游戏的根节点 在整个游戏中都不会被删除 在游戏的根节点下创建UI的根节点Canvas 创建一个空节点 作为UI根节点下的 登录场景UI…...

NodeJS | 搭建本地/公网服务器 live-server 的使用与安装

目录 介绍 安装 live-server 安装方法 安装后的验证 环境变量问题 Node.js 环境变量未配置正确 全局安装的 live-server 路径未添加到环境变量 运行测试 默认访问主界面 访问文件 报错信息与解决 问题一&#xff1a;未知命令 问题二&#xff1a;拒绝脚本 公网配置…...

SystemUI 实现音量条同步功能

需求&#xff1a;SystemUI 实现音量条同步功能 具体问题 以前在SystemUI 下拉框添加了音量条控制&#xff0c;目前发现在SystemUI下拉框显示状态的情况下&#xff0c; 按键或者底部虚拟导航点击音量加减时候&#xff0c;SystemUI音量条不更新。 如下图&#xff1a;两个Syste…...

嵌入式知识点总结 C/C++ 专题提升(一)-关键字

针对于嵌入式软件杂乱的知识点总结起来&#xff0c;提供给读者学习复习对下述内容的强化。 目录 1.C语言宏中"#“和"##"的用法 1.1.(#)字符串化操作符 1.2.(##)符号连接操作符 2.关键字volatile有什么含意?并举出三个不同的例子? 2.1.并行设备的硬件寄存…...

基础入门-传输加密数据格式编码算法密文存储代码混淆逆向保护安全影响

知识点&#xff1a; 1、传输格式&传输数据-类型&编码&算法 2、密码存储&代码混淆-不可逆&非对称性 一、演示案例-传输格式&传输数据-类型&编码&算法 传输格式 JSON XML WebSockets HTML 二进制 自定义 WebSockets&#xff1a;聊天交互较常…...

几个Linux系统安装体验(续): 统信桌面系统

本文介绍统信桌面系统&#xff08;uos&#xff09;的安装。 下载 下载地址&#xff1a; https://www.chinauos.com/resource/download-professional 下载文件&#xff1a;本文下载文件名称为uos-desktop-20-professional-1070-amd64.iso。 下载注意事项&#xff1a;可直接下…...

算法日记6.StarryCoding P52:我们都需要0(异或)

一、题目 二、题解&#xff1a; 1、对于这道题&#xff0c;题意为让我们寻找一个数x使得 b[i]a[i]^x&#xff0c; 并且b[1]^b[2]^b[3]^ b[4]^b[5]....0 2、我们把b[i]给拆开&#xff0c;可以得到 3、又因为^满足结合律&#xff0c;因此&#xff0c;可以把括号给拆开 4、接着…...

【网络协议】RFC3164-The BSD syslog Protocol

引言 Syslog常被称为系统日志或系统记录&#xff0c;是一种标准化的协议&#xff0c;用于网络设备、服务器和应用程序向中央Syslog服务器发送日志消息。互联网工程任务组&#xff08;IETF&#xff09;发布的RFC 3164&#xff0c;专门定义了BSD Syslog协议的规范和实现方式。通…...

SpringCloud -根据服务名获取服务运行实例并进行负载均衡

Nacos注册中心 每个服务启动之后都要向注册中心发送服务注册请求&#xff0c;注册中心可以和各个注册客户端自定义协议实现服务注册和发现。 pom.xml <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-na…...

CentOS 安装Redis

1. 安装 Redis 安装 EPEL 仓库&#xff08;对于 CentOS/RHEL 系统&#xff09;&#xff1a; 首先安装 EPEL 仓库&#xff0c;因为 Redis 存在于 EPEL 仓库中&#xff1a; yum install epel-release安装 Redis 数据库&#xff1a; yum install redis2. 修改 Redis 配置文件 …...

Linux网络 TCP socket

TCP简介 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议。它位于OSI模型的第四层&#xff0c;主要为应用层提供数据传输服务。TCP通过三次握手建立连接&#xff0c;确保数据在发送和接收过程中的准确性和顺序…...

(一)相机标定——四大坐标系的介绍、对应转换、畸变原理以及OpenCV完整代码实战(C++版)

一、四大坐标系介绍 1&#xff0c;世界坐标系 从这个世界&#xff08;world&#xff09;的视角来看物体 世界坐标系是3D空间坐标&#xff0c;每个点的位置用 ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw​,Yw​,Zw​)表示 2&#xff0c;相机坐标系 相机本身具有一个坐标系&…...

【Linux网络编程】高效I/O--I/O的五种类型

目录 I/O的概念 网络通信的本质 I/O的本质 高效I/O 五种I/O模型 阻塞I/O 非阻塞I/O 信号驱动I/O 多路转接/多路复用I/O 异步I/O 非阻塞I/O的实现 I/O的概念 网络通信的本质 网络通信的本质其实就是I/O I&#xff1a;表示input(输入)O&#xff1a;表示ou…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...