代码随想录 贪心算法-难度题目-区间问题
目录
55.跳跃游戏
45.跳跃游戏||
452.用最少数量的箭引爆气球
435.无重叠区间
763.划分字母区间
56.合并区间
55.跳跃游戏
55. 跳跃游戏
中等
给你一个非负整数数组 nums
,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true
;否则,返回 false
。
示例 1:
输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。
示例 2:
输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。
提示:
1 <= nums.length <= 104
0 <= nums[i] <= 105
运用覆盖位置来求解此题,每到一个位置都去尝试更新cover的值(如果走此步比之前的覆盖位置更大的情况下),如果覆盖位置覆盖到了最后一个数,,表示可以从起点跳到终点,返回true。遍历的结束位置是覆盖位置的最大点,如果此时cover还没有覆盖到最后一个数,说明不能从起点跳到终点。
class Solution { public boolean canJump(int[] nums) { // cover变量用来记录当前能够到达的最远位置 int cover = 0; // 如果数组只有一个元素,则显然可以从该位置跳到终点(自己),返回true if(nums.length == 1){ return true; } // 遍历数组,直到到达当前能够到达的最远位置cover for(int i = 0; i <= cover; i++){ // 更新当前能够到达的最远位置,取当前位置能够到达的最远位置i + nums[i]和当前已知的最远位置cover中的较大值 cover = Math.max(cover, i + nums[i]); // 如果当前能够到达的最远位置cover已经大于等于数组长度减一(即已经能够到达或超过数组的最后一个位置), // 则表示可以从起点跳到终点,返回true if(cover >= nums.length - 1){ return true; } } // 如果遍历完数组后仍然没有找到能够到达终点的路径,则返回false return false; }
}
45.跳跃游戏||
45. 跳跃游戏 II
中等
给定一个长度为 n
的 0 索引整数数组 nums
。初始位置为 nums[0]
。
每个元素 nums[i]
表示从索引 i
向前跳转的最大长度。换句话说,如果你在 nums[i]
处,你可以跳转到任意 nums[i + j]
处:
0 <= j <= nums[i]
i + j < n
返回到达 nums[n - 1]
的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]
。
示例 1:
输入: nums = [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是2
。从下标为 0 跳到下标为 1 的位置,跳1
步,然后跳3
步到达数组的最后一个位置。
示例 2:
输入: nums = [2,3,0,1,4] 输出: 2
提示:
1 <= nums.length <= 104
0 <= nums[i] <= 1000
- 题目保证可以到达
nums[n-1]
这里有nowcover和nextMaxCover两个变量,分别代表这一步能覆盖到的最远地点和下一步能覆盖到的最远地点 ,如果当前位置已经到了这一步能覆盖到的最远地点,跳出这一步,然后一步的nowcover换为在上一步中求得的nextMaxCover,继续向后遍历,如果nextMaxCover覆盖到了最后一个值,跳出这一步,到达最后一个值
class Solution { public int jump(int[] nums) { // 如果数组为空或者只有一个元素,则不需要跳跃,直接返回0 if(nums.length < 2 || nums == null){ return 0; } // 跳跃次数 int count = 0; // 当前覆盖的最远位置 int nowCover = 0; // 下一次跳跃能够覆盖的最远位置 int nextMaxCover = 0; // 遍历当前覆盖位置中的每个位置 for(int i = 0; i <= nowCover; i++){ // 更新下一次跳跃能够覆盖的最远位置 nextMaxCover = Math.max(i + nums[i], nextMaxCover); // 如果下一次跳跃能够直接到达数组末尾,则增加一次跳跃并跳出循环 if(nextMaxCover >= nums.length - 1){ count++; break; } // 如果当前位置到达了当前能够覆盖的最远位置,说明需要进行一次跳跃 if(i == nowCover){ count++; // 更新当前能够覆盖的最远位置为下一次跳跃能够覆盖的最远位置 nowCover = nextMaxCover; } } // 返回跳跃次数 return count; }
}
452.用最少数量的箭引爆气球
452. 用最少数量的箭引爆气球
中等
有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points
,其中points[i] = [xstart, xend]
表示水平直径在 xstart
和 xend
之间的气球。你不知道气球的确切 y 坐标。
一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x
处射出一支箭,若有一个气球的直径的开始和结束坐标为 x
start
,x
end
, 且满足 xstart ≤ x ≤ x
end
,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。
给你一个数组 points
,返回引爆所有气球所必须射出的 最小 弓箭数 。
示例 1:
输入:points = [[10,16],[2,8],[1,6],[7,12]] 输出:2 解释:气球可以用2支箭来爆破: -在x = 6处射出箭,击破气球[2,8]和[1,6]。 -在x = 11处发射箭,击破气球[10,16]和[7,12]。
示例 2:
输入:points = [[1,2],[3,4],[5,6],[7,8]] 输出:4 解释:每个气球需要射出一支箭,总共需要4支箭。
示例 3:
输入:points = [[1,2],[2,3],[3,4],[4,5]] 输出:2 解释:气球可以用2支箭来爆破: - 在x = 2处发射箭,击破气球[1,2]和[2,3]。 - 在x = 4处射出箭,击破气球[3,4]和[4,5]。
提示:
1 <= points.length <= 105
points[i].length == 2
-231 <= xstart < xend <= 231 - 1
思路:用最少的箭射最多的气球
从第二个气球开始,因为之前已经排过序,直接比较第二个气球的最左侧和第一个气球的最右侧,如果第二个气球的最左侧更大,说明两个气球没有交集,需要一支箭来射第二个气球。否则第二个气球和第一个气球有交集,可用同一根箭射,因为第二支箭的最左侧一定大于第一支箭的最左侧,选择第一个气球和第二个气球的最后侧中的最小值,赋值给第二个气球,得到第二个气球的范围即为第一二个气球的交集,之后的第三个气球如果和第二个气球现在的范围有交集,则说明前三个气球和前两个气球可以用同一支箭射,以此类推。
class Solution { // 方法:找到射穿所有气球所需的最少箭数量 public int findMinArrowShots(int[][] points) { // 根据每个气球的水平位置x进行排序,如果x相同,则保持原顺序 Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0])); // 初始化箭的数量为1,因为至少需要一支箭来射穿第一个气球 int count = 1; // 遍历所有气球(从第二个开始,因为第一个已经有一支箭了) for(int i = 1; i < points.length; i++){ // 如果当前气球的水平位置最左侧大于前一个气球的水平位置最右侧if(points[i][0] > points[i-1][1]){ // 则需要增加一支箭来射穿当前气球 count++; }else{ // 如果当前气球与前一个气球有重叠 // 则更新当前气球的垂直位置y为两个气球中更小的y值 // 这样做是为了保证在后续的迭代中,如果还有气球在这个垂直范围内,它们也可以被这支箭射穿 points[i][1] = Math.min(points[i][1],points[i - 1][1]); } } // 返回所需的箭的数量 return count; }
}
435.无重叠区间
435. 无重叠区间
中等
给定一个区间的集合 intervals
,其中 intervals[i] = [starti, endi]
。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
示例 1:
输入: intervals = [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠。
示例 2:
输入: intervals = [ [1,2], [1,2], [1,2] ] 输出: 2 解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。
示例 3:
输入: intervals = [ [1,2], [2,3] ] 输出: 0 解释: 你不需要移除任何区间,因为它们已经是无重叠的了。
提示:
1 <= intervals.length <= 105
intervals[i].length == 2
-5 * 104 <= starti < endi <= 5 * 104
思路: 首先对数组进行排序,从第二个开始遍历区间,如果区间和前一个区间有重合,这个时候我们要考虑删除该区间还是前一个区间,为了尽可能避免和后面的区间重合,我们留下结束位置更小的区间以求和下一个区间的开始位置保持距离。
class Solution { // 方法:删除尽可能多的重叠区间,返回删除的数量 public int eraseOverlapIntervals(int[][] intervals) { // 根据区间的起始位置进行排序,如果起始位置相同,则保持原顺序 Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); // 初始化计数器,记录重叠区间的数量 int count = 0; // 遍历所有区间(从第二个区间开始,因为第一个区间不需要比较) for (int i = 1; i < intervals.length; i++) { // 如果当前区间的起始位置小于前一个区间的结束位置,说明有重叠 if (intervals[i][0] < intervals[i - 1][1]) { // 更新当前区间的结束位置为两个区间结束位置的较小值(这里相当于删除结束位置较大的区间) // 这样做是为了保留和下一个区间尽可能远的距离,避免和下一个区间重合intervals[i][1] = Math.min(intervals[i][1], intervals[i - 1][1]); // 重叠区间数量加1 count++; } } // 返回删除的重叠区间的数量 return count; }
}
763.划分字母区间
763. 划分字母区间
中等
提示
给你一个字符串 s
。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s
。
返回一个表示每个字符串片段的长度的列表。
示例 1:
输入:s = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。
示例 2:
输入:s = "eccbbbbdec" 输出:[10]
提示:
1 <= s.length <= 500
s
仅由小写英文字母组成
先遍历一遍数组,得到每一个字母的最后出现位置。
再次遍历数组,记录当前区间中所有字母的最后出现位置的最大值,当索引等于该最大值位置时,说明当前区间中的所有字母在后边的数组中都不会出现,故得到一个区间,将长度存入结果集合中,并记录该区间的最后位置用来计算下一个区间的长度
class Solution { // 方法:将字符串划分为若干个子串,使得每个子串中的所有字符都属于同一个字符集 public List<Integer> partitionLabels(String s) { // 用于存储最终结果的列表,每个元素代表一个分区的长度 List<Integer> result = new ArrayList<>(); // 用于存储每个字符在字符串中最后出现的位置的数组 int[] charLastIndex = new int[27]; // 因为字符a到z共26个,再加上字符'a'的ASCII码值,所以数组大小为27 // 将字符串转换为字符数组,方便后续遍历 char[] sChar = s.toCharArray(); // 遍历字符串的每个字符,记录它们最后一次出现的位置 for (int i = 0; i < sChar.length; i++) { charLastIndex[sChar[i] - 'a'] = i; } // 当前遍历到的字符在字符串中最后出现的位置 int nowLastIndex = 0; // 上一个分区的结束位置//相当于第一个区间之前的区间在index为-1的时候结束 int lastEndIndex = -1; // 遍历字符串的每个字符 for (int i = 0; i < sChar.length; i++) { // 更新当前遍历到的字符集中所有字符在字符串中最后出现的位置 nowLastIndex = Math.max(nowLastIndex, charLastIndex[sChar[i] - 'a']); // 如果当前位置是当前字符集中所有字符最后出现的位置 if (i == nowLastIndex) { // 将当前分区长度(当前位置与上一个分区结束位置之差)加入结果列表 result.add(i - lastEndIndex); // 更新上一个分区的结束位置为当前位置 lastEndIndex = i; } } // 返回分区长度的列表 return result; }
}
56.合并区间
56. 合并区间
中等
以数组 intervals
表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]
。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入:intervals = [[1,4],[4,5]] 输出:[[1,5]] 解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
提示:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
思路:首先对数组排序。从第二个区间开始遍历,如果和前一个区间有交集,就将该区间更新为与前一个区间的并集。如果和前一个区间没有交集,则前一个区间为合并好的区间,放入结果集合中,如果遍历到最后一个区间,直接将最后一个区间放入结果数组中。
class Solution { public int[][] merge(int[][] intervals) { // 根据区间的起始位置对数组进行排序 Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); // 用于存储合并后结果的列表 List<int[]> result = new ArrayList<>(); // 如果区间数组为空或只有一个区间,则无需合并,直接返回原数组 if (intervals.length < 2 || intervals == null) { return intervals; } // 从第二个区间开始遍历(第一个区间不需要比较) for (int i = 1; i < intervals.length; i++) { // 如果当前区间的起始位置大于前一个区间的结束位置,说明两个区间没有重叠 if (intervals[i][0] > intervals[i - 1][1]) { // 将前一个区间添加到结果列表中 result.add(intervals[i - 1]); } else { // 两个区间有重叠,合并这两个区间 // 更新当前区间的起始位置为两个区间中较小的起始位置 intervals[i][0] = intervals[i - 1][0]; // 更新当前区间的结束位置为两个区间中较大的结束位置 intervals[i][1] = Math.max(intervals[i][1], intervals[i - 1][1]); } // 如果是遍历的最后一个区间,则需要将其添加到结果列表中 // 因为如果两个区间有重叠,它们会在下一个循环迭代中被合并,当前区间不会在前面的迭代中被添加到结果列表 if (i == intervals.length - 1) { result.add(intervals[i]); } } // 将结果列表转换为数组并返回 return result.toArray(new int[result.size()][]); }
}
相关文章:
代码随想录 贪心算法-难度题目-区间问题
目录 55.跳跃游戏 45.跳跃游戏|| 452.用最少数量的箭引爆气球 435.无重叠区间 763.划分字母区间 56.合并区间 55.跳跃游戏 55. 跳跃游戏 中等 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大…...

地理数据 vs. 3D数据
在表示我们周围的物理世界时,地理空间数据和 3D 建筑数据是两个最常见的选择。 他们在各个行业和项目中发挥着至关重要的作用。 从构建数字孪生到可视化城市景观和创建沉浸式应用程序。 尽管地理空间和 3D 建筑数据有相似之处,但它们不可互换。 虽然地…...
Redis删除
一、del命令 del命令是Redis提供的一个常规的删除键的命令。它的语法如下: DEL key [key …] 其中,key是要删除的键名。可以指定多个键名,删除多个键。如果指定的键不存在,则会被忽略。 del命令会直接删除指定的键以及与之相关联…...

力扣细节题:字符串中的最大奇数
奇数只要找到第一位是奇数的即可,不是找单个数字 //即从最低位开始,找到第一位为奇数的位 //然后之前的就是需要的数字char * largestOddNumber(char * num){int i strlen(num) - 1;while(i > 0){if((num[i] - 0) % 2 1)break;i--;}//先找到低位开…...

Unity PS5开发 天坑篇 之 申请开发者与硬件部署01
腾了好几天终于把PS5开发机调试部署成功, 希望能帮到国内的开发者, 主机游戏PlayStation/Nintendo Switch都是比较闭塞的,开发者账号是必须的。 开发环境有两个部分,一是DEV Kit 开发机, TEST Kit测试机两部分组成,二是Unity的支持库(安装后…...

十四届蓝桥杯省赛Java B组 合并区域
就是将两个矩阵进行拼接,两矩阵可以旋转90 180 270 度。 因为数据比较小,所以这基本上就是一个大的枚举模拟加搜索,直接暴力求解。 import java.io.*; import java.util.*;public class Main{static int n;static int N 101;static int mo…...

SpringBoot高级
1.自动配置-Condition Condition是Spring4.0后引入的条件化配置接口,通过实现Condition接口可以完成有条件的加载相应的Bean 进入 SpringBoot 启动类,点击进入 run() 可以看到这个方法是有返回值的,返回值为 ConfigurableApplicationConte…...

机试:偶数分解
题目描述: 代码示例: #include <bits/stdc.h> using namespace std; int main(){ // 算法思想1:遍历小于该偶数的所有素数,存入数组中,遍历数组找出两个数之和等于偶数的数int n;cout << "输入样例" << endl;cin >> n;int nums[n];int k …...

一周学会Django5 Python Web开发-Jinja3模版引擎-安装与配置
锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计35条视频,包括:2024版 Django5 Python we…...
python前端开发
前端开发 快速网站开发 from flask import Flask appFlask(__name__) #创建网址/show/info 和函数index的对应关系, #访问网站,执行index()函数 app.route("/show/info") def index():return "中国联通" if __name__"__main_…...

web学习笔记(三十三)
目录 1.严格模式 1.1严格模式的概念: 1.2严格模式在语义上更改的地方: 1.3如何开启严格模式 1.4严格模式应用上的变化 2.原型链 1.严格模式 1.1严格模式的概念: 严格模式有点像es5向es6过渡而产生的一种模式,因为es6的语法…...

flask库
文章目录 flask库1. 基本使用2. 路由路径和路由参数3. 请求跳转和请求参数4. 模板渲染1. 模板变量2. 过滤器3. 测试器 5. 钩子函数与响应对象 flask库 flask是python编写的轻量级框架,提供Werkzeug(WSGI工具集)和jinjia2(渲染模板…...

专业无网设备如何远程运维?向日葵远程控制能源场景案例解析
清洁能源领域,拥有庞大的上下游产业链,涉及的相关工业设备门类多、技术覆盖全、行业应用广。在这一领域内,相关专业设备的供应商的核心竞争力除了本身产品的技术能力之外,服务也是重要的一环。 某企业作为致力于节能环保方向的气…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的稻田虫害检测系统详解(深度学习+Python代码+UI界面+训练数据集)
摘要:本篇文章深入探讨了如何利用深度学习技术开发一个用于检测稻田虫害的系统,并且分享了完整的实现过程和资源代码下载。该系统采用了当前的YOLOv8、YOLOv7、YOLOv6、YOLOv5算法,对其进行了性能对比,包括mAP、F1 Score等关键指标…...
实现upt下客户端用tftp文件传输协议编写客户端发送下载文件
#include <myhead.h> #define SEP_IP #define SEP_PORT int main(int argc, const char *argv[]) {//创建套接字if(int crdsocket(AF_INET,SOCK-DGRAM)-1);{perror("socket error");return -1;}printf("创建成功\n");//填充地址struct sockaddr_in s…...
什么软件可以改ip地址
修改ip地址的软件有哪些,什么软件可以切换电脑手机的ip地址想必很多朋友都在寻找类似的软件,也想知道其中的答案,也能提高自己工作的效率。 经过小编在互联网摸爬滚打这些年,测试认证和整理后,发现一款名叫深度IP转换…...

C#,文字排版的折行问题(Word-wrap problem)的算法与源代码
1、英文的折行问题 给定一个单词序列,以及一行中可以输入的字符数限制(线宽)。 在给定的顺序中放置换行符,以便打印整齐。 假设每个单词的长度小于线宽。 像MS word这样的文字处理程序负责放置换行符。 这个想法是要有平衡的线条。…...
VUE+VScode+elementUI开发环境
0.vue官方文档 你正在阅读的是 Vue 3 的文档! 1.前端准备阶段 VUEVScodeelementUI开发环境 2.Vue外部组件 element-ui 3.angular外部组件 angular-ui 4.教学视频 尚学堂b站视频 5.教学视频配套文档 D:\BaiduNetdiskDownload\025【尚学堂】全新2022版WEB前端为初学者…...

第十四届蓝桥杯省赛真题 Java A 组【原卷】
文章目录 发现宝藏【考生须知】试题 A \mathrm{A} A : 特殊日期试题 B: 与或异或试题 C : \mathrm{C}: C: 平均试题 D: 棋盘试题 E : \mathrm{E}: E: 互质数的个数试题 F: 阶乘的和试题 G: 小蓝的旅行计划试题 H: 太阳试题 I: 高塔试题 J \mathrm{J} J : 反异或 01 串 发现…...

可视化展示与交互编辑:探索3D Web轻量化平台HOOPS WEB Platform在BIM中的新可能性
随着数字技术的飞速发展,建筑行业也在不断迈向数字化转型的道路。在这个过程中,BIM(Building Information Modeling,建筑信息模型)技术已经成为建筑设计、施工和管理领域中的一项重要工具。 而在BIM的应用中ÿ…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

智警杯备赛--excel模块
数据透视与图表制作 创建步骤 创建 1.在Excel的插入或者数据标签页下找到数据透视表的按钮 2.将数据放进“请选择单元格区域“中,点击确定 这是最终结果,但是由于环境启不了,这里用的是自己的excel,真实的环境中的excel根据实训…...