【2024年华为OD机试】 (A卷,100分)- 二元组个数(Java JS PythonC/C++)

在这里插入图片描述

一、问题描述

以下是题目描述的 Markdown 格式:


题目描述

给定两个数组 ab,若 a[i] == b[j],则称 [i, j] 为一个二元组。求在给定的两个数组中,二元组的个数。


输入描述

  • 第一行输入 m,表示第一个数组的长度。
  • 第二行输入 m 个数,表示第一个数组 a
  • 第三行输入 n,表示第二个数组的长度。
  • 第四行输入 n 个数,表示第二个数组 b

输出描述

输出二元组的个数。


用例

用例 1

输入

4
1 2 3 4
1
1

输出

1

说明
二元组个数为 1 个。


用例 2

输入

6
1 1 2 2 4 5
3
2 2 4

输出

5

说明
二元组个数为 5 个。


代码实现思路

  1. 输入处理

    • 读取两个数组的长度 mn
    • 读取两个数组 ab
  2. 统计二元组

    • 遍历数组 ab,统计满足 a[i] == b[j] 的二元组个数。
  3. 输出结果

    • 输出统计结果。

题目解析

题目要求计算两个数组 arrMarrN 中相同元素的出现次数的乘积之和。具体来说,对于每个在 arrM 中出现的元素,如果它也在 arrN 中出现,则计算它在两个数组中出现次数的乘积,并将这些乘积相加。

问题分析

  1. 暴力解法

    • 使用双重 for 循环遍历 arrMarrN,统计相同元素的出现次数。
    • 时间复杂度为 O(m * n),其中 mn 分别是 arrMarrN 的长度。
    • 这种方法在 mn 较大时效率较低。
  2. 优化解法

    • 使用哈希表(字典)分别统计 arrMarrN 中每个元素的出现次数。
    • 然后遍历其中一个哈希表,计算相同元素的出现次数的乘积,并将这些乘积相加。
    • 时间复杂度为 O(m + n),空间复杂度为 O(m + n)

优化解法详细步骤

  1. 统计 arrM 中每个元素的出现次数

    • 使用一个哈希表 countM,键为元素,值为该元素在 arrM 中出现的次数。
  2. 统计 arrN 中每个元素的出现次数

    • 使用一个哈希表 countN,键为元素,值为该元素在 arrN 中出现的次数。
  3. 计算相同元素的出现次数的乘积

    • 遍历 countM,对于每个键 key,如果 key 也在 countN 中出现,则计算 countM[key] * countN[key],并将结果累加到 count 中。

二、JavaScript算法源码

以下是带有详细中文注释和逻辑讲解的 JavaScript 代码:


代码实现

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");// 创建 readline 接口,用于从控制台读取输入
const rl = readline.createInterface({input: process.stdin,  // 输入流为标准输入output: process.stdout, // 输出流为标准输出
});// 存储输入的行数据
const lines = [];// 监听 'line' 事件,每次读取一行输入
rl.on("line", (line) => {lines.push(line); // 将输入的行数据存入 lines 数组// 当 lines 数组中有 4 行数据时,表示输入完成if (lines.length === 4) {// 解析输入数据const m = lines[0] - 0; // 第一个数组的长度,转换为数字const arrM = lines[1].split(" ").map(Number); // 第一个数组,转换为数字数组const n = lines[2] - 0; // 第二个数组的长度,转换为数字const arrN = lines[3].split(" ").map(Number); // 第二个数组,转换为数字数组// 调用算法函数,计算二元组个数并输出结果console.log(getResult(arrM, m, arrN, n));// 清空 lines 数组,以便处理下一组输入lines.length = 0;}
});/*** 计算二元组个数的函数* @param {number[]} arrM 第一个数组* @param {number} m 第一个数组的长度* @param {number[]} arrN 第二个数组* @param {number} n 第二个数组的长度* @returns {number} 二元组的个数*/
function getResult(arrM, m, arrN, n) {// 使用 Set 数据结构存储两个数组的元素,方便快速查找const setM = new Set(arrM); // 第一个数组的元素集合const setN = new Set(arrN); // 第二个数组的元素集合// 统计第一个数组中每个元素在第二个数组中出现的次数const countM = {};for (let m of arrM) {if (setN.has(m)) { // 如果第二个数组中包含当前元素countM[m] ? countM[m]++ : (countM[m] = 1); // 统计该元素的出现次数}}// 统计第二个数组中每个元素在第一个数组中出现的次数const countN = {};for (let n of arrN) {if (setM.has(n)) { // 如果第一个数组中包含当前元素countN[n] ? countN[n]++ : (countN[n] = 1); // 统计该元素的出现次数}}// 计算二元组的总数let count = 0;for (let k in countM) {// 对于每个共同元素,其二元组个数为 countM[k] * countN[k]count += countM[k] * countN[k];}// 返回二元组的总数return count;
}

代码讲解

1. 输入处理
  • 使用 readline 模块从控制台读取输入。
  • 将输入的行数据存储在 lines 数组中。
  • lines 数组中有 4 行数据时,表示输入完成,开始解析数据:
    • 第一行:第一个数组的长度 m
    • 第二行:第一个数组 arrM
    • 第三行:第二个数组的长度 n
    • 第四行:第二个数组 arrN
2. 算法逻辑:getResult 函数
  • 步骤 1:使用 Set 存储数组元素
    • 将两个数组 arrMarrN 转换为 Set 集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 arrM,统计每个元素在 arrN 中出现的次数,结果存储在 countM 对象中。
    • 遍历 arrN,统计每个元素在 arrM 中出现的次数,结果存储在 countN 对象中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM[k] * countN[k]
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • arrM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • arrN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过 Set 和哈希表(对象)高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

如果有其他问题,欢迎随时提问!

三、Java算法源码

以下是带有详细中文注释和逻辑讲解的 Java 代码:


代码实现

import java.util.*;
import java.util.stream.Collectors;public class Main {public static void main(String[] args) {// 创建 Scanner 对象,用于从控制台读取输入Scanner sc = new Scanner(System.in);// 读取第一个数组的长度 mint m = Integer.parseInt(sc.nextLine());// 读取第一个数组,并将其转换为 List<Integer>List<Integer> listM =Arrays.stream(sc.nextLine().split(" ")) // 按空格分割字符串.map(Integer::parseInt)          // 将字符串转换为整数.collect(Collectors.toList());   // 收集为 List// 读取第二个数组的长度 nint n = Integer.parseInt(sc.nextLine());// 读取第二个数组,并将其转换为 List<Integer>List<Integer> listN =Arrays.stream(sc.nextLine().split(" ")) // 按空格分割字符串.map(Integer::parseInt)          // 将字符串转换为整数.collect(Collectors.toList());   // 收集为 List// 调用算法函数,计算二元组个数并输出结果System.out.println(getResult(listM, listN));}/*** 计算二元组个数的函数* @param listM 第一个数组* @param listN 第二个数组* @return 二元组的个数*/public static int getResult(List<Integer> listM, List<Integer> listN) {// 使用 HashSet 存储两个数组的元素,方便快速查找HashSet<Integer> setM = new HashSet<Integer>(listM); // 第一个数组的元素集合HashSet<Integer> setN = new HashSet<Integer>(listN); // 第二个数组的元素集合// 统计第一个数组中每个元素在第二个数组中出现的次数HashMap<Integer, Integer> countM = new HashMap<>();for (Integer m : listM) {if (setN.contains(m)) { // 如果第二个数组中包含当前元素// 使用 getOrDefault 方法统计该元素的出现次数countM.put(m, countM.getOrDefault(m, 0) + 1);}}// 统计第二个数组中每个元素在第一个数组中出现的次数HashMap<Integer, Integer> countN = new HashMap<>();for (Integer n : listN) {if (setM.contains(n)) { // 如果第一个数组中包含当前元素// 使用 getOrDefault 方法统计该元素的出现次数countN.put(n, countN.getOrDefault(n, 0) + 1);}}// 计算二元组的总数int count = 0;for (Integer k : countM.keySet()) {// 对于每个共同元素,其二元组个数为 countM.get(k) * countN.get(k)count += countM.get(k) * countN.get(k);}// 返回二元组的总数return count;}
}

代码讲解

1. 输入处理
  • 使用 Scanner 从控制台读取输入。
  • 读取第一个数组的长度 m 和数组内容,并将其转换为 List<Integer>
  • 读取第二个数组的长度 n 和数组内容,并将其转换为 List<Integer>
2. 算法逻辑:getResult 函数
  • 步骤 1:使用 HashSet 存储数组元素
    • 将两个数组 listMlistN 转换为 HashSet 集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 listM,统计每个元素在 listN 中出现的次数,结果存储在 countM 哈希表中。
    • 遍历 listN,统计每个元素在 listM 中出现的次数,结果存储在 countN 哈希表中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM.get(k) * countN.get(k)
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • listM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • listN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过 HashSetHashMap 高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

如果有其他问题,欢迎随时提问!

四、Python算法源码

以下是带有详细中文注释和逻辑讲解的 Python 代码:


代码实现

# 输入获取
# 读取第一个数组的长度 m
m = int(input())
# 读取第一个数组,并将其转换为整数列表
arrM = list(map(int, input().split()))# 读取第二个数组的长度 n
n = int(input())
# 读取第二个数组,并将其转换为整数列表
arrN = list(map(int, input().split()))# 算法入口
def getResult(arrM, arrN):# 使用集合存储两个数组的元素,方便快速查找setM = set(arrM)  # 第一个数组的元素集合setN = set(arrN)  # 第二个数组的元素集合# 统计第一个数组中每个元素在第二个数组中出现的次数countM = {}for m in arrM:if m in setN:  # 如果第二个数组中包含当前元素if countM.get(m) is None:  # 如果该元素还未被统计过countM[m] = 1  # 初始化计数为 1else:countM[m] += 1  # 否则计数加 1# 统计第二个数组中每个元素在第一个数组中出现的次数countN = {}for n in arrN:if n in setM:  # 如果第一个数组中包含当前元素if countN.get(n) is None:  # 如果该元素还未被统计过countN[n] = 1  # 初始化计数为 1else:countN[n] += 1  # 否则计数加 1# 计算二元组的总数count = 0for k in countM.keys():  # 遍历所有共同元素# 对于每个共同元素,其二元组个数为 countM[k] * countN[k]count += countM[k] * countN[k]# 返回二元组的总数return count# 算法调用
print(getResult(arrM, arrN))

代码讲解

1. 输入处理
  • 使用 input() 函数从控制台读取输入。
  • 读取第一个数组的长度 m 和数组内容,并将其转换为整数列表 arrM
  • 读取第二个数组的长度 n 和数组内容,并将其转换为整数列表 arrN
2. 算法逻辑:getResult 函数
  • 步骤 1:使用集合存储数组元素
    • 将两个数组 arrMarrN 转换为集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 arrM,统计每个元素在 arrN 中出现的次数,结果存储在字典 countM 中。
    • 遍历 arrN,统计每个元素在 arrM 中出现的次数,结果存储在字典 countN 中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM[k] * countN[k]
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • arrM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • arrN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过集合和字典高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

如果有其他问题,欢迎随时提问!

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

以下是C++ 实现,并附有详细的中文注释和逻辑讲解:


C++ 代码实现

#include <iostream>
#include <vector>
#include <unordered_set>
#include <unordered_map>using namespace std;/*** 计算二元组个数的函数* @param arrM 第一个数组* @param arrN 第二个数组* @return 二元组的个数*/
int getResult(const vector<int>& arrM, const vector<int>& arrN) {// 使用 unordered_set 存储两个数组的元素,方便快速查找unordered_set<int> setM(arrM.begin(), arrM.end()); // 第一个数组的元素集合unordered_set<int> setN(arrN.begin(), arrN.end()); // 第二个数组的元素集合// 统计第一个数组中每个元素在第二个数组中出现的次数unordered_map<int, int> countM;for (int m : arrM) {if (setN.count(m)) { // 如果第二个数组中包含当前元素countM[m]++; // 统计该元素的出现次数}}// 统计第二个数组中每个元素在第一个数组中出现的次数unordered_map<int, int> countN;for (int n : arrN) {if (setM.count(n)) { // 如果第一个数组中包含当前元素countN[n]++; // 统计该元素的出现次数}}// 计算二元组的总数int count = 0;for (const auto& pair : countM) {int k = pair.first; // 共同元素// 对于每个共同元素,其二元组个数为 countM[k] * countN[k]count += pair.second * countN[k];}// 返回二元组的总数return count;
}int main() {// 读取第一个数组的长度 mint m;cin >> m;// 读取第一个数组vector<int> arrM(m);for (int i = 0; i < m; i++) {cin >> arrM[i];}// 读取第二个数组的长度 nint n;cin >> n;// 读取第二个数组vector<int> arrN(n);for (int i = 0; i < n; i++) {cin >> arrN[i];}// 调用算法函数,计算二元组个数并输出结果cout << getResult(arrM, arrN) << endl;return 0;
}

代码讲解

1. 输入处理
  • 使用 cin 从标准输入读取数据。
  • 读取第一个数组的长度 m 和数组内容,并将其存储在 vector<int> arrM 中。
  • 读取第二个数组的长度 n 和数组内容,并将其存储在 vector<int> arrN 中。
2. 算法逻辑:getResult 函数
  • 步骤 1:使用 unordered_set 存储数组元素
    • 将两个数组 arrMarrN 转换为 unordered_set 集合 setMsetN,方便快速查找。
  • 步骤 2:统计共同元素的出现次数
    • 遍历 arrM,统计每个元素在 arrN 中出现的次数,结果存储在 unordered_map<int, int> countM 中。
    • 遍历 arrN,统计每个元素在 arrM 中出现的次数,结果存储在 unordered_map<int, int> countN 中。
  • 步骤 3:计算二元组总数
    • 对于每个共同元素 k,其二元组个数为 countM[k] * countN[k]
    • 将所有共同元素的二元组个数累加,得到总数 count
  • 步骤 4:返回结果
    • 返回二元组的总数 count

示例解析

输入
6
1 1 2 2 4 5
3
2 2 4
运行结果
5
  • 解析
    • 共同元素为 24
    • arrM 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • arrN 中:
      • 2 出现 2 次。
      • 4 出现 1 次。
    • 二元组总数:
      • 2 的二元组个数:2 * 2 = 4
      • 4 的二元组个数:1 * 1 = 1
      • 总数为 4 + 1 = 5

总结

  • 该代码通过 unordered_setunordered_map 高效地统计了共同元素的出现次数。
  • 时间复杂度为 O(m + n),空间复杂度为 O(m + n),适用于处理大规模数据。
  • 代码逻辑清晰,注释详细,易于理解和扩展。

如果有其他问题,欢迎随时提问!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/418.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法之二叉树: LeetCode 543. 二叉树的直径 (Ts版)

二叉树的直径 https://leetcode.cn/problems/diameter-of-binary-tree/description/ 描述 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 两节点之间路径的 长度 …

C# OpenCV机器视觉:OCR产品序列号识别

在一个看似平常却又暗藏玄机的工作日&#xff0c;阿明正坐在办公室里&#xff0c;对着堆积如山的文件唉声叹气。突然&#xff0c;电话铃声如炸雷般响起&#xff0c;吓得他差点从椅子上摔下来。原来是公司老板打来的紧急电话&#xff1a;“阿明啊&#xff0c;咱们刚生产出来的那…

【Powershell】Windows大法powershell好(二)

PowerShell基础&#xff08;二&#xff09; 声明&#xff1a;该笔记为up主 泷羽的课程笔记&#xff0c;本节链接指路。 警告&#xff1a;本教程仅作学习用途&#xff0c;若有用于非法行为的&#xff0c;概不负责。 1. powershell 执行外部命令 powershell也可以执行一些外部的…

JVM之垃圾回收器概述(续)的详细解析

ParNew(并行) Par 是 Parallel 并行的缩写&#xff0c;New 是只能处理的是新生代 并行垃圾收集器在串行垃圾收集器的基础之上做了改进&#xff0c;采用复制算法&#xff0c;将单线程改为了多线程进行垃圾回收&#xff0c;可以缩短垃圾回收的时间 对于其他的行为&#xff08;…

WPF系列八:图形控件Path

简介 Path控件支持一种称为路径迷你语言&#xff08;Path Mini-Language&#xff09;的紧凑字符串格式&#xff0c;用于描述复杂的几何图形。这种语言通过一系列命令字母和坐标来定义路径上的点和线段&#xff0c;最终绘制出想要的图形。 绘制任意形状&#xff1a;可以用来绘…

基类指针指向派生类对象,基类指针的首地址永远指向子类从基类继承的基类首地址

文章目录 基类指针指向派生类对象&#xff0c;基类指针的首地址永远指向子类从基类继承的基类起始地址。代码代码2 基类指针指向派生类对象&#xff0c;基类指针的首地址永远指向子类从基类继承的基类起始地址。 代码 #include <iostream> using namespace std;class b…

《Spring Framework实战》3:概览

欢迎观看《Spring Framework实战》视频教程 Spring Framework 为基于现代 Java 的企业应用程序提供了全面的编程和配置模型 - 在任何类型的部署平台上。 Spring 的一个关键要素是应用程序级别的基础设施支持&#xff1a;Spring 专注于企业应用程序的 “管道”&#xff0c;以便…

antd-design-vue1.7.8浏览器中使用

快速开始 引入js和css <link href"antd/antd.css" rel"stylesheet"> <script src"vue2/vue.js" type"text/javascript"></script> <script src"antd/antd.js" type"text/javascript">&…

SQL美化器优化

文章目录 1.目录2.代码 1.目录 2.代码 package com.sunxiansheng.mybatis.plus.inteceptor;import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.*; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.*…

【前端】【HTML】入门基础知识

参考视频&#xff1a;【狂神说Java】HTML5完整教学通俗易懂_哔哩哔哩_bilibili 一、基本结构 二、基本标签 <h1>&#xff1a;一级标题&#xff0c;通常用于页面的主标题&#xff0c;字体较大且醒目。 <h2>&#xff1a;二级标题&#xff0c;用于副标题或主要章节标…

游戏引擎学习第78天

Blackboard: Position ! Collision “网格” 昨天想到的一个点&#xff0c;可能本来就应该想到&#xff0c;但有时反而不立即思考这些问题也能带来一些好处。节目是周期性的&#xff0c;每天不需要全程关注&#xff0c;通常只是在晚上思考&#xff0c;因此有时我们可能不能那么…

后端服务集成ElasticSearch搜索功能技术方案

文章目录 一、为什么选用ElasticSearch二、ElasticSearch基本概念1、文档和字段2、索引和映射3、倒排索引、文档和词条4、分词器 三、ElasticSearch工作原理1、Term Dictionary、Term index2、Stored Fields3、Docs Values4、Segment5、Lucene6、高性能、高扩展性、高可用①高性…

js:正则表达式

目录 正则表达式的语法 定义 检测 检索 元字符 边界符 量词 字符类 表单判断案例 修饰符 过滤敏感词 正则表达式是一种用于匹配和操作文本的强大工具&#xff0c;它是由一系列字符和特殊字符组成的模式&#xff0c;用于描述要匹配的文本字符组合模式 正则表达式是一…

[创业之路-242]:《华为双向指挥系统》-1-组织再造-企业普遍采用的5种组织结构形式

目录 一、直线式 二、职能式 三、直线职能式 四、矩阵式&#xff08;项目矩阵&#xff09; 五、事业部式 企业采用哪一种管理组织形式要根据企业具体的生产经营活动特点而定&#xff0c;不同的企业组织形式也不同&#xff0c;目前企业中普遍采用的组织形式主要有直线式、职…

elasticsearch中IK分词器

1、什么是IK分词器 ElasticSearch 几种常用分词器如下&#xff1a; 分词器分词方式StandardAnalyzer单字分词CJKAnalyzer二分法IKAnalyzer词库分词 分词∶即把一段中文或者别的划分成一个个的关键字&#xff0c;我们在搜索时候会把自己的信息进行分词&#xff0c;会把数据库…

【简博士统计学习方法】第2章:3. 感知机——学习算法之原始形式:算法解说

3. 感知机——学习算法之原始形式&#xff1a;算法解说 3.1 学习问题 给定训练数据集&#xff1a; T { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯ , ( x N , y N ) } T\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right) \cdots,\left(x_{N}, y_{N}\right)\right\} T{(x…

Browser-Use Web UI:浏览器自动化与AI的完美结合

Browser-Use Web UI:浏览器自动化与AI的完美结合 前言简介一、克隆项目二、安装与环境配置1. Python版本要求2. 安装依赖3. 安装 Playwright4. 配置环境变量(非必要步骤)三、启动 WebUI四、配置1. Agent设置2. 大模型设置3. 浏览器相关设置4. 运行 Agent结语前言 Web UI是在…

C# XPTable 日期字段处理(XPTable控件使用说明十三)

1、SQLite数据库定义为日期类型 2、XPtable中日期字段定义与显示 //显示时间表columnModel1.Columns.Clear();columnModel1.Columns.Add(new NumberColumn("id", 30));NumberColumn numberColumn new NumberColumn("次数", 50);numberColumn.Maximum 100…

笔记本电脑 选购 回收 特权模式使用 指南

笔记本电脑 factor 无线网卡&#xff1a;有些笔记本无法检测到特定频段的信息&#xff0c;会导致连不上校园网 sudo iwlist wlp2s0 scan | grep Frequency > net.txt cat net.txt>表示用终端输出覆盖后续文件&#xff0c;>>表示添加到后续文件的末尾 一种更简…

openCvSharp 计算机视觉图片找茬

一、安装包 <PackageReference Include"OpenCvSharp4" Version"4.10.0.20241108" /> <PackageReference Include"OpenCvSharp4.runtime.win" Version"4.10.0.20241108" /> 二、准备两张图片 三、编写代码 using OpenCv…