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

leetCode - - - 哈希表

目录

1.模拟行走机器人(LeetCode 874)

2.数组的度(LeetCode 697)

3.子域名访问次数(LeetCode 811)

4.字母异位词分组(LeetCode 49)

5.小结

1.常见的哈希表实现

2.遍历Map


1.模拟行走机器人(LeetCode 874)

机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands :

  • -2 :向左转 90 度
  • -1 :向右转 90 度
  • 1 <= x <= 9 :向前移动 x 个单位长度

在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位于网格点  obstacles[i] = (xi, yi) 。

机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,并继续执行下一个命令。

返回机器人距离原点的 最大欧式距离 的 平方 。(即,如果距离为 5 ,则返回 25 )

注意:

  • 北方表示 +Y 方向。
  • 东方表示 +X 方向。
  • 南方表示 -Y 方向。
  • 西方表示 -X 方向。
  • 原点 [0,0] 可能会有障碍物。

示例 1:

输入:commands = [4,-1,3], obstacles = []
输出:25
解释:
机器人开始位于 (0, 0):
1. 向北移动 4 个单位,到达 (0, 4)
2. 右转
3. 向东移动 3 个单位,到达 (3, 4)
距离原点最远的是 (3, 4) ,距离为 32 + 42 = 25

class Solution {public int robotSim(int[] commands, int[][] obstacles) {// 初始化结果int result = 0;// 从原点( 0 ,0 )位置开始出发int x = 0, y = 0;// 机器人前进的方向// 初始方向:正北int direction = 0;// 定义四个方向int[][] direxy = new int[][]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};// 障碍物有多个,所以需要有一个障碍物坐标点集合// 使用 集合 Set 存储障碍物的坐标,用来检查下一步是否受阻// 机器人每试图走一个位置,就用此位置与障碍物集合列表里的坐标进行比较,看是否刚好是障碍物坐标点HashSet<String> obstaclesSet = new HashSet<String>();// 存储障碍物坐标点for (int[] obs : obstacles) {// 以坐标的形式存储obstaclesSet.add(obs[0] + "," + obs[1]);}// 机器人开始行走for (int com : commands) {// -2:向左转 90 度if (com == -2) {direction = (direction == 0) ? 3 : direction - 1;// -1:向右转 90 度} else if (com == -1) {direction = (direction == 3) ? 0 : direction + 1;// 1 <= x <= 9 :向前移动 x 个单位长度} else {// 没有遇到障碍物,一直往前走 com 个单位长度while (com-- > 0 && !obstaclesSet.contains((x + direxy[direction][0]) + "," + (y + direxy[direction][1]))) {x += direxy[direction][0];y += direxy[direction][1];}// 机器人停下来后开始计算最大欧式距离的平方// 更新结果result = Math.max(result, x * x + y * y);}}return result;}
}

知识点:

1. 二维数组的使用
定义:int[] obs 表示一个一维数组,每个 obs 是 obstacles 数组的元素。obstacles 是一个二维数组,其中的每个元素都是表示障碍物坐标的数组。
访问元素:通过 obs[0] 和 obs[1] 可以访问障碍物的 x 和 y 坐标。
2. 集合(HashSet)的使用
定义:HashSet 是一个集合类,它不允许重复的元素,并且提供了高效的查找、添加和删除操作。
用法:在这里,obstaclesSet 被用来存储障碍物的坐标,以便快速查找。这种存储方式提高了查找效率,尤其是在处理大量障碍物数据时。
3. 字符串的连接
操作:obs[0] + "," + obs[1] 将 x 和 y 坐标值转换为字符串格式 "x,y"。这种格式使得坐标可以被轻松地存储和比较。
应用:将坐标以字符串形式存储到 HashSet 中,便于进行后续的查找和操作。
4. 增强的 for 循环
定义:for (int[] obs : obstacles) 是 Java 的增强型 for 循环(或称为 foreach 循环),它用于遍历数组或集合中的每一个元素。
用法:这使得遍历 obstacles 数组中的每个障碍物坐标变得简单和直观。
5. 坐标系统
概念:x 和 y 坐标用于表示二维空间中的位置。在代码中,obs[0] 和 obs[1] 分别代表 x 和 y 坐标值。


2.数组的度(LeetCode 697)

给定一个非空且只包含非负数的整数数组 nums,数组的  的定义是指数组里任一元素出现频数的最大值。

你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。

示例 1:

输入:nums = [1,2,2,3,1]
输出:2
解释:
输入数组的度是 2 ,因为元素 1 和 2 的出现频数最大,均为 2 。
连续子数组里面拥有相同度的有如下所示:
[1, 2, 2, 3, 1], [1, 2, 2, 3], [2, 2, 3, 1], [1, 2, 2], [2, 2, 3], [2, 2]
最短连续子数组 [2, 2] 的长度为 2 ,所以返回 2 。

示例 2:

输入:nums = [1,2,2,3,1,4,2]
输出:6
解释:
数组的度是 3 ,因为元素 2 重复出现 3 次。
所以 [2,2,3,1,4,2] 是最短子数组,因此返回 6 。

解题思路

1.哈希表:使用 HashMap 存储每个元素的出现次数及其最早和最后出现的位置。
2.数组遍历:通过遍历数组来填充哈希表的信息。
3.度量最大出现次数:在哈希表中查找出现次数最多的元素。(第一次遍历)
4.计算最短子数组长度:遍历哈希表,找到包含出现次数最多元素的最短子数组。(第二次遍历)

知识点运用

Map.Entry 是 Map 接口中的一个嵌套接口,表示 Map 中的一个键值对。
1.主要方法:
getKey():获取 Map.Entry 的键。
getValue():获取 Map.Entry 的值。
setValue(V value):设置 Map.Entry 的值。
2.遍历 Map:最常用的方式是通过 entrySet() 方法,该方法返回 Map 中所有键值对的集合(Set<Map.Entry<K, V>>)。

Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 2);for (Map.Entry<String, Integer> entry : map.entrySet()) {String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + ": " + value);
}

解题代码: 

class Solution {public int findShortestSubArray(int[] nums) {// 初始化长度为一个大数值,方便后续更新int minLength = Integer.MAX_VALUE;// Map存储每个元素的出现次数及其最早和最晚出现位置Map<Integer, int[]> map = new HashMap<>();// 遍历数组,统计每个元素的信息for (int i = 0; i < nums.length; i++) {if (map.containsKey(nums[i])) {int[] value = map.get(nums[i]);value[0]++; // 增加出现次数value[2] = i; // 更新最后出现的位置} else {// 第一次出现该元素map.put(nums[i], new int[]{1, i, i});}}// 计算数组中出现次数最多的元素int maxTimes = 0;for (int[] value : map.values()) {maxTimes = Math.max(maxTimes, value[0]);}// 再次遍历map来找到最短长度for (Map.Entry<Integer, int[]> entry : map.entrySet()) {int[] value = entry.getValue();if (value[0] == maxTimes) {minLength = Math.min(minLength, value[2] - value[1] + 1);}}return minLength;}
}

3.子域名访问次数(LeetCode 811)

网站域名 "discuss.leetcode.com" 由多个子域名组成。顶级域名为 "com" ,二级域名为 "leetcode.com" ,最低一级为 "discuss.leetcode.com" 。当访问域名 "discuss.leetcode.com" 时,同时也会隐式访问其父域名 "leetcode.com" 以及 "com" 。

计数配对域名 是遵循 "rep d1.d2.d3" 或 "rep d1.d2" 格式的一个域名表示,其中 rep 表示访问域名的次数,d1.d2.d3 为域名本身。

  • 例如,"9001 discuss.leetcode.com" 就是一个 计数配对域名 ,表示 discuss.leetcode.com 被访问了 9001 次。

给你一个 计数配对域名 组成的数组 cpdomains ,解析得到输入中每个子域名对应的 计数配对域名 ,并以数组形式返回。可以按 任意顺序 返回答案。

示例 1:

输入:cpdomains = ["9001 discuss.leetcode.com"]
输出:["9001 leetcode.com","9001 discuss.leetcode.com","9001 com"]
解释:例子中仅包含一个网站域名:"discuss.leetcode.com"。
按照前文描述,子域名 "leetcode.com" 和 "com" 都会被访问,所以它们都被访问了 9001 次。

示例 2:

输入:cpdomains = ["900 google.mail.com", "50 yahoo.com", "1 intel.mail.com", "5 wiki.org"]
输出:["901 mail.com","50 yahoo.com","900 google.mail.com","5 wiki.org","5 org","1 intel.mail.com","951 com"]
解释:按照前文描述,会访问 "google.mail.com" 900 次,"yahoo.com" 50 次,"intel.mail.com" 1 次,"wiki.org" 5 次。
而对于父域名,会访问 "mail.com" 900 + 1 = 901 次,"com" 900 + 50 + 1 = 951 次,和 "org" 5 次。

class Solution {public List<String> subdomainVisits(String[] cpdomains) {// 使用哈希表记录每个子域名的计数Map<String, Integer> map = new HashMap<>();// 遍历数组for (String s : cpdomains) {// 获取当前字符串的长度int n = s.length();// 每个字符串都是由数字 + 域名组成// 先去获取这个字符串中的数字// 从 0 开始,向后扫描到空格位置int idx = 0;// 从前向后扫描到空格位置while (idx < n && s.charAt(idx) != ' ') idx++;// 截取出数字来// tips: substring() 方法返回字符串的子字符串// beginIndex -- 起始索引(包括), 索引从 0 开始// endIndex -- 结束索引(不包括)int cnt = Integer.parseInt(s.substring(0, idx));// 从后往前处理域名部分,直到处理完毕int start = idx + 1; // 从后往前处理域名部分idx = n - 1;// 直到处理完毕while (idx >= start) {// 每个域名由多个子域名组成// 通过 . 来截取while (idx >= start && s.charAt(idx) != '.') idx--;// 获取当前子域名String cur = s.substring(idx + 1);// 更新这个子域名的计数map.put(cur, map.getOrDefault(cur, 0) + cnt);// idx 继续向前移动idx--;}}// 从哈希表中构造出数组答案来List<String> ans = new ArrayList<>();// keySet() 方法返回映射中所有 key 组成的 Set 视图for (String key : map.keySet()) {// key 是域名,map.get(key) 获取 valueans.add(map.get(key) + " " + key);}// 返回结果return ans;}
}

区别keySet() 和 entrySet()
keySet():
返回 Map 中所有键的集合 (Set<K>).
适合只需要处理键的情况。例如,只需要检查键是否存在或者只需要获取键的列表。
entrySet():
返回 Map 中所有键值对的集合 (Set<Map.Entry<K, V>>).
更适合同时需要访问键和值的情况。通过 Map.Entry<K, V> 对象可以直接访问键和值,提高效率

for (String key : map.keySet()) {System.out.println(key + " -> " + map.get(key));
}for (Map.Entry<String, Integer> entry : map.entrySet()) {System.out.println(entry.getKey() + " -> " + entry.getValue());
}

4.字母异位词分组(LeetCode 49)

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]
输出: [[""]]

做题思路:

1.遍历所有字符串,计算每个字符串的字符频次。
2.将频次转换为唯一的键,并使用哈希表将具有相同键的字符串分组。
3.返回哈希表中所有分组的值,即字母异位词的分组结果

较为严谨的解法:不确定每个字符串是否可以有重复的字符,这里计算了每个字符出现的频次

class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>> map=new HashMap<String,List<String>>();for(String str:strs){// count 代表每个小写字母出现的频次int[] count=new int[26];// 利用 for 循环,统计 str 当中每个字母出现的频次for(int i=0;i<str.length();i++){count[str.charAt(i) -'a']++;}StringBuffer sb=new StringBuffer();// // 将每个出现次数大于 0 的字母和出现次数按顺序拼接成字符串,作为哈希表的键for(int i=0;i<26;i++){if(count[i]!=0){// 先记录字母,比如记录了字母 ksb.append((char)(i+'a'));// 再记录次数,比如记录了次数 9sb.append(count[i]);}}// 转换为字符串的形式,比如为 a1c9q7String key=sb.toString();// 在哈希表 map 当中找出这个 key 对应的字符串 str 来// 1、如果有这个 key,那么这个 key 对应的 数组 会新增一个 str 进去// 2、如果没有这个 key,那么会初始化一个数组,用来新增这个 strList<String> list=map.getOrDefault(key,new ArrayList<String>());list.add(str);map.put(key,list);}//return new ArrayList<>(map.values());return  new ArrayList<List<String>>(map.values()); }
}

力扣给的通过率最高的解法:默认每个字符串中不会出现重复的字母

class Solution {public List<List<String>> groupAnagrams(String[] strs) {HashMap<String, List<String>> hashMap = new HashMap<>();for (String str : strs) {char[] charArray = str.toCharArray();Arrays.sort(charArray);String key = new String(charArray);List<String> list = hashMap.getOrDefault(key, new ArrayList<String>());list.add(str);hashMap.put(key, list);}return  new ArrayList<>(hashMap.values());}
}

5.小结

1.常见的哈希表实现

HashMap:

用于存储键值对,每个键(key)与一个值(value)相关联。

Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
int value = map.get("apple");


使用:使用 HashMap 统计元素出现的次数

Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {map.put(num, countMap.getOrDefault(num, 0) + 1);
}


HashSet:

适用于需要存储唯一元素的场景(类似于 HashMap 的键部分)

Set<String> set = new HashSet<>();
set.add("apple");
boolean exists = set.contains("apple"); // true


使用:通过 HashSet 快速查找元素是否出现过

Set<Integer> set = new HashSet<>();
for (int num : nums) {if (!set.add(num)) {// 如果返回 false,说明 num 已经存在}

2.遍历Map


entrySet() 是最常用的方法,适合遍历 Map 中的键值对。
keySet() 和 values() 方法适合只需要键或值时使用。

 // 遍历 entrySet()for (Map.Entry<String, Integer> entry : map.entrySet()) {String key = entry.getKey();Integer value = entry.getValue();System.out.println("Key: " + key + ", Value: " + value);}// 遍历 keySet()
for (String key : map.keySet()) {Integer value = map.get(key);System.out.println("Key: " + key + ", Value: " + value);
}// 遍历 values()
for (Integer value : map.values()) {System.out.println("Value: " + value);
}

相关文章:

leetCode - - - 哈希表

目录 1.模拟行走机器人&#xff08;LeetCode 874&#xff09; 2.数组的度&#xff08;LeetCode 697&#xff09; 3.子域名访问次数&#xff08;LeetCode 811&#xff09; 4.字母异位词分组&#xff08;LeetCode 49&#xff09; 5.小结 1.常见的哈希表实现 2.遍历Map 1.模…...

NGINX自动清理180天之前的日志

需求描述 日志每天会以天为单位产生一个日志&#xff0c;不清理的话会越来越多。这里写一个Lua自定定时清理日志目录下的日志文件。 依赖安装 安装 lfs 模块 yum install luarocks yum install lua-develluarocks install luafilesystem 创建模拟旧文件 创建了一个1月的旧…...

jackson 轻松搞定接口数据脱敏

一、简介 实际的业务开发过程中&#xff0c;我们经常需要对用户的隐私数据进行脱敏处理&#xff0c;所谓脱敏处理其实就是将数据进行混淆隐藏&#xff0c;例如下图&#xff0c;将用户的手机号、地址等数据信息&#xff0c;采用*进行隐藏&#xff0c;以免泄露个人隐私信息。 如…...

Nginx 正则表达式与rewrite

目录 一、正则表达式 二、rewrite 2.1 rewrite简述 2.2 rewrite 跳转 2.3 rewrite 执行顺序 2.4 rewrite 语法格式 三、location 3.1 location 类别 3.2 location常用匹配规则 3.3 location优先级 3.4 示例说明 3.5 匹配规则总结 3.6 三个匹配规则定义 四、实战…...

tekton什么情况下在Dockerfile中需要用copy

kaniko配置如下 如果docker中的workDir跟tekton中的workDir不一致需要copy。也可以通过mv&#xff0c;cp达到类似效果...

第九届世界渲染大赛在哪里提交作品呢?

自第九届世界渲染大赛开放投稿以来&#xff0c;已经过去了10天。在这段时间里&#xff0c;众多CG爱好者已经完成了他们的动画创作。然而&#xff0c;许多参赛者对于如何提交他们的作品仍然感到困惑。接下来&#xff0c;让我们一起了解具体的投稿流程和入口&#xff0c;确保每位…...

fastjson(autoType)反序列化漏洞

1. 温少和他的fastjson 阿里巴巴的 FastJSON&#xff0c;也被称为 Alibaba FastJSON 或阿里巴巴 JSON&#xff0c;是一个高性能的 Java JSON 处理库&#xff0c;用于在 Java 应用程序中解析和生成 JSON 数据。FastJSON 以其卓越的性能和功能丰富的特点而闻名&#xff0c;并在…...

Java入门基础16:集合框架1(Collection集合体系、List、Set)

集合体系结构 Collection是单列集合的祖宗&#xff0c;它规定的方法&#xff08;功能&#xff09;是全部单列集合都会继承的。 collection集合体系 Collection的常用方法 package com.itchinajie.d1_collection;import java.util.ArrayList; import java.util.HashSet;/* * 目…...

Qt如何调用接口

在Qt中&#xff0c;你可以使用QNetworkAccessManager类来调用API。以下是一个简单的示例&#xff1a; cpp #include <QCoreApplication> #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> int main(int arg…...

Android14之解决编译libaaudio.so报错问题(二百二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…...

【专题】2024年7月人工智能AI行业报告合集汇总PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p37350 随着人工智能技术的飞速发展&#xff0c;AI已经成为当今时代的重要驱动力。本报告将聚焦于人工智能AI行业的最新动态&#xff0c;涵盖客户服务、体验营销、资产管理以及国产AI大模型应用等多个领域。通过深入研究和分析&#xff0c;我们…...

干货分享|如何使用Stable Diffusion打造会说话的数字人?

数字人已不是什么新鲜名词了。在许多领域&#xff0c;尤其是媒体和娱乐领域&#xff0c;经常可以看到卡通形象的人物或逼真的虚拟主持人。在Stable Diffusion中&#xff0c;我们可以上传一段录制好的音频文件&#xff0c;然后使用SadTalker插件&#xff0c;将音频和图片相结合&…...

OrangePi AIpro学习4 —— 昇腾AI模型推理 C++版

目录 一、ATC模型转换 1.1 模型 1.2 ATC工具 1.3 实操模型转换 1.4 使用ATC工具时的一些关键注意事项 1.5 ATC模型转换命令举例 二、运行昇腾AI模型应用样仓程序 2.1 程序目录 2.2 下载模型和模型转换 2.3 下载图片和编译程序 2.4 解决报错 2.5 运行程序 三、运行…...

vue js 多组件异步请求解决方案

接口之间异步问题可以采用Promiseasyncawait 链接&#xff1a; https://blog.csdn.net/qq_39816586/article/details/103517416 使用场景&#xff1a; 1.保障用户必须完成自动登录&#xff0c;才调用后续逻辑 2.保障必须完成初始启动&#xff0c;才调用后续逻辑 3.保障先执行on…...

【Android】不同系统版本获取设备MAC地址

【Android】不同系统版本获取设备MAC地址 尝试实现 尝试 在开发过程中&#xff0c;想要获取MAC地址&#xff0c;最开始想到的就是WifiManager&#xff0c;但结果始终返回02:00:00:00:00:00&#xff0c;由于用得是wifi &#xff0c;考虑是不是因为用得网线的原因&#xff0c;但…...

残差网络--NLP上的应用

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;残差网络&#xff08;ResNet&#xff09;同样有着广泛的应用。虽然最初的残差网络设计是为了处理图像任务&#xff0c;但其核心思想也被成功地迁移到了自然语言处理任务中&#xff0c;以解决深层神经网络中的退化问题…...

1章4节:数据可视化, R 语言的静态绘图和 Shiny 的交互可视化演示(更新2024/08/14)

在数据科学的世界中,“一图胜千言”的古老谚语依然适用。数据可视化不仅仅是将数据以图形化的方式展现,更是帮助我们发现数据背后隐藏模式、趋势和异常的强大工具。R语言作为数据科学的主要编程语言之一,以其强大的可视化能力而闻名,许多数据科学家和分析师因此选择了R作为…...

浅谈个人用户如何玩转HTTP代理

今天&#xff0c;准备和大家聊聊我是如何玩转HTTP代理的&#xff0c;希望能给大家带来一些启发和帮助。 犹记得刚开始接触HTTP代理时&#xff0c;我对它还是一无所知。那时我总被各种网络限制所困扰&#xff0c;无法随心所欲地访问我想看的网站。直到HTTP代理的出现&#xff0c…...

动手研发实时口译系统

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

C#(asp.net)电商后台管理系统-计算机毕业设计源码70015

摘 要 随着互联网技术的不断发展&#xff0c;电商行业也越来越受到人们的关注。为了提高电商行业的管理效率和服务水平&#xff0c;本文提出了一种基于ASP.NET电商后台管理系统的设计与实现方案。 电商管理系统基于VisualStudio开发平台&#xff0c;采用C#编程语言和ASP.NET等技…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...