力扣hot100-->滑动窗口、贪心

你好呀,欢迎来到 Dong雨 的技术小栈 🌱

在这里,我们一同探索代码的奥秘,感受技术的魅力 ✨。

👉 我的小世界:Dong雨

📌 分享我的学习旅程
🛠️ 提供贴心的实用工具
💡 记录每一个灵感火花

🌟✨ Hello,探索技术的你,这里是本篇的地图指南! ✨🌟

目录

🌟✨ Hello,探索技术的你,这里是本篇的地图指南! ✨🌟

滑动窗口

1. 3. 无重复字符的最长子串

2. 76. 最小覆盖子串

3. 239. 滑动窗口最大值

4. 438. 找到字符串中所有字母异位词

 贪心

1. 55. 跳跃游戏

数学

1. 48. 旋转图像

其他

1. 253. 会议室 II

2.621. 任务调度器

🎉🌈 陪伴至此,感谢有你 🌈🎉


滑动窗口

1. 3. 无重复字符的最长子串

算术评级: 5

提示

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
// 双指针
class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_map<char, int> need; // 使用哈希表记录字符的出现次数int n = s.size(); // 获取字符串的长度if (0 == n) return 0; // 如果字符串为空,直接返回0int left{}, right{1}, result{1}; // 初始化左右指针和结果变量need[s[left]]++; // 将第一个字符加入哈希表,表示已经访问过// 遍历字符串,移动右指针for (; right < n; ++right) {if (need[s[right]] > 0) { // 如果当前字符已经出现过(即在哈希表中计数大于0)// 移动左指针,直到当前字符不再重复while (need[s[right]] > 0) {need[s[left++]]--; // 将左指针指向的字符从哈希表中移除}}need[s[right]]++; // 将当前字符加入哈希表result = max(result, right - left + 1); // 更新最长不重复子串的长度}return result; // 返回最终结果}
};

2. 76. 最小覆盖子串

算术评级: 6

提示

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。

注意:

  • 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。
  • 如果 s 中存在这样的子串,我们保证它是唯一的答案。

示例 1:

输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
解释:最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。

示例 2:

输入:s = "a", t = "a"
输出:"a"
解释:整个字符串 s 是最小覆盖子串。

示例 3:

输入: s = "a", t = "aa"
输出: ""
解释: t 中两个字符 'a' 均应包含在 s 的子串中,
因此没有符合条件的子字符串,返回空字符串。

提示:

  • m == s.length
  • n == t.length
  • 1 <= m, n <= 105
  • s 和 t 由英文字母组成
// 滑动窗口+哈希表
class Solution {
public:string minWindow(string s, string t) {vector<int> need(128); // 使用大小为128的数组作为哈希表,记录字符的需要量// 初始化need数组,记录字符串t中每个字符的出现次数for (char c : t) need[c]++;int left{}, right{}; // 初始化左右指针int start{}; // 用于记录最小子串的起始位置int count = t.size(); // 记录还需要匹配的字符数量int size = INT_MAX; // 用于记录最小子串的长度,初始值为最大整数// 开始滑动窗口过程for (; right < s.size(); ++right) {char c = s[right]; // 当前右指针指向的字符if (need[c] > 0) count--; // 如果当前字符是需要的字符,则count减1need[c]--; // 将当前字符加入窗口,更新需要量// 当所有字符都匹配成功后(count == 0),尝试缩小窗口if (count == 0) {// 缩小左边界,直到窗口中不再包含多余的字符while (left < right && need[s[left]] < 0) {need[s[left++]]++; // 将左边界字符移出窗口}// 更新最小子串的长度和起始位置if (right - left + 1 < size) {size = right - left + 1; // 更新最小子串长度start = left; // 更新最小子串的起始位置}// 左边界右移,准备寻找下一个可能的子串need[s[left++]]++; // 将左边界字符移出窗口count++; // 由于移出了一个字符,count加1}}// 如果size仍为初始值INT_MAX,说明没有找到符合条件的子串,返回空字符串// 否则返回最小子串return size == INT_MAX ? "" : s.substr(start, size);}
};

3. 239. 滑动窗口最大值

算术评级: 6

提示

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。

返回 滑动窗口中的最大值 

示例 1:

输入:nums = [1,3,-1,-3,5,3,6,7], k = 3
输出:[3,3,5,5,6,7]
解释:
滑动窗口的位置                最大值
---------------               -----
[1  3  -1] -3  5  3  6  7       31 [3  -1  -3] 5  3  6  7       31  3 [-1  -3  5] 3  6  7       51  3  -1 [-3  5  3] 6  7       51  3  -1  -3 [5  3  6] 7       61  3  -1  -3  5 [3  6  7]      7

示例 2:

输入:nums = [1], k = 1
输出:[1]

// 滑动窗口
class Solution {
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {int n = nums.size(); // 获取数组的长度priority_queue<pair<int, int>> pq; // 使用优先队列(最大堆)存储窗口中的元素及其索引// 初始化第一个窗口(前k个元素)for (int i = 0; i < k; ++i) {pq.push(pair(nums[i], i)); // 将元素及其索引加入优先队列}vector<int> result; // 用于存储每个窗口的最大值result.push_back(pq.top().first); // 第一个窗口的最大值// 遍历数组,从第k个元素开始,模拟滑动窗口for (int i = k; i < n; ++i) {pq.push(pair(nums[i], i)); // 将当前元素加入优先队列// 移除窗口外的元素while (pq.top().second <= i - k) {pq.pop(); // 如果堆顶元素的索引不在当前窗口范围内,则移除}result.push_back(pq.top().first); // 当前窗口的最大值}return result; // 返回结果}
};

4. 438. 找到字符串中所有字母异位词

算术评级: 4

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

示例 1:

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

 示例 2:

输入: s = "abab", p = "ab"
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。
起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。
起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。
// 滑动窗口
class Solution {
public:vector<int> findAnagrams(string s, string p) {int slen = s.size(); // 获取字符串 s 的长度int plen = p.size(); // 获取字符串 p 的长度// 如果 s 的长度小于 p 的长度,直接返回空结果if (slen < plen) return {};vector<int> sArr(26, 0); // 用于记录窗口内字符的频率(s 的子串)vector<int> pArr(26, 0); // 用于记录字符串 p 中字符的频率vector<int> ans; // 用于存储结果(异位词的起始索引)// 初始化 pArr,记录字符串 p 中每个字符的频率for (char c : p) {pArr[c - 'a']++; // 将字符 c 转换为索引(0-25),并增加频率}// 初始化 sArr,记录 s 中前 plen 个字符的频率for (int i = 0; i < plen; ++i) {sArr[s[i] - 'a']++; // 将字符 s[i] 转换为索引,并增加频率}// 检查初始窗口是否与 pArr 相等if (sArr == pArr) ans.emplace_back(0); // 如果相等,记录起始索引 0// 滑动窗口,从第 plen 个字符开始,到 s 的末尾for (int i = 0; i < slen - plen; ++i) {// 更新窗口:// 移除窗口左侧的字符(s[i]),并减少其频率sArr[s[i] - 'a']--;// 添加窗口右侧的字符(s[i + plen]),并增加其频率sArr[s[i + plen] - 'a']++;// 检查当前窗口是否与 pArr 相等if (sArr == pArr) ans.emplace_back(i + 1); // 如果相等,记录当前窗口的起始索引}return ans; // 返回所有异位词的起始索引}
};

 贪心

1. 55. 跳跃游戏

算术评级: 5

给你一个非负整数数组 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 , 所以永远不可能到达最后一个下标。
// 贪心
class Solution {
public:bool canJump(vector<int>& nums) {int n = nums.size(); // 获取数组的长度int maxJump = 0; // 用于记录当前能到达的最远位置for (int i = 0; i < n; ++i) {maxJump = max(maxJump, i + nums[i]); // 更新最远能到达的位置// 如果最远位置已经能到达或超过数组末尾,直接返回 trueif (maxJump >= n - 1) return true;// 如果当前位置 i 无法到达下一个位置(即 maxJump < i + 1),返回 falseif (maxJump < i + 1) {return false;}}return true; // 如果循环正常结束,说明可以到达末尾}
};

数学

1. 48. 旋转图像

算术评级: 5

给定一个 × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

class Solution {
public: // 重点是找到规律:对于矩阵中第 i 行的第 j 个元素,在旋转后,它出现在倒数第 i 列的第 j 个位置。// 即 matrix[r][c] 在旋转后,新的位置是 matrix[c][n-r-1]// 方法一:借助辅助数组// void rotate(vector<vector<int>>& matrix) {//     auto mNew = matrix; // 创建一个辅助矩阵//     int n = matrix.size();//     for (int i = 0; i < n; ++i) {//         for (int j = 0; j < n; ++j) {//             mNew[j][n - i - 1] = matrix[i][j]; // 根据规律更新位置//         }//     }//     matrix = mNew; // 将辅助矩阵赋值回原矩阵// }// 方法二:利用翻转代替旋转// 水平翻转:matrix[r][c] = matrix[n-row-1][c]// 主对角线翻转: matrix[r][c] = matrix[c][r]void rotate(vector<vector<int>>& matrix) {int n = matrix.size(); // 获取矩阵的大小// 第一步:水平翻转(上下翻转)for (int i = 0; i < n / 2; ++i) { // 只需翻转上半部分for (int j = 0; j < n; ++j) { // 遍历每一列swap(matrix[i][j], matrix[n - i - 1][j]); // 交换第 i 行和第 n-i-1 行的元素}}// 第二步:主对角线翻转(沿对角线翻转)for (int i = 0; i < n; ++i) { // 遍历每一行for (int j = 0; j < i; ++j) { // 只需翻转对角线左侧的元素swap(matrix[i][j], matrix[j][i]); // 交换 matrix[i][j] 和 matrix[j][i]}}}
};

其他

1. 253. 会议室 II

给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei),为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。

示例 1:

输入: [[0, 30],[5, 10],[15, 20]]
输出: 2
示例 2:

输入: [[7,10],[2,4]]
输出: 1

// 优先队列(最小堆)
class Solution {
public:int minMeetingRooms(vector<vector<int>>& intervals) {sort(intervals.begin(), intervals.end()); // 按会议开始时间排序// 使用最小堆(优先队列)来跟踪会议室的结束时间priority_queue<int, vector<int>, greater<int>> pq;for (auto &meet : intervals) {// 如果堆不为空且堆顶的结束时间小于等于当前会议的开始时间if (!pq.empty() && pq.top() <= meet[0]) {pq.pop(); // 释放会议室}pq.push(meet[1]); // 分配会议室给当前会议}return pq.size(); // 堆的大小即为需要的会议室数量}
};

2.621. 任务调度器

算术评级: 6

给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制:两个 相同种类 的任务之间必须有长度为 n 的冷却时间。

返回完成所有任务所需要的 最短时间间隔 。

示例 1:

输入:tasks = ["A","A","A","B","B","B"], n = 2

输出:8

解释:

在完成任务 A 之后,你必须等待两个间隔。对任务 B 来说也是一样。在第 3 个间隔,A 和 B 都不能完成,所以你需要待命。在第 4 个间隔,由于已经经过了 2 个间隔,你可以再次执行 A 任务。

示例 2:

输入:tasks = ["A","C","A","B","D","B"], n = 1

输出:6

解释:一种可能的序列是:A -> B -> C -> D -> A -> B。

由于冷却间隔为 1,你可以在完成另一个任务后重复执行这个任务。

示例 3:

输入:tasks = ["A","A","A","B","B","B"], n = 3

输出:10

解释:一种可能的序列为:A -> B -> idle -> idle -> A -> B -> idle -> idle -> A -> B。

只有两种任务类型,A 和 B,需要被 3 个间隔分割。这导致重复执行这些任务的间隔当中有两次待命状态。

class Solution {
public:// 总排队时间 = (桶个数 - 1) * (n + 1) + 最后一桶的任务数int leastInterval(vector<char>& tasks, int n) {// 总的任务数int len = tasks.size();vector<int> vec(26, 0); // 用于记录每个任务的出现次数(任务为大写字母,共26个)// 统计每个任务的出现次数for (char c : tasks) ++vec[c - 'A'];// 按出现次数降序排序sort(vec.rbegin(), vec.rend());// 计算最后一桶的任务数int cnt = 1; // 初始化为1,表示至少有一个任务(出现次数最多的任务)while (cnt < vec.size() && vec[cnt] == vec[0]) {cnt++; // 如果有多个任务的出现次数等于最大值,它们都会在最后一桶中}// 计算总时间// vec[0] - 1:桶的数量(出现次数最多的任务)// n + 1:每个桶的总时间(一个任务 + n个冷却时间)// cnt:最后一桶的任务数return max(len, cnt + (n + 1) * (vec[0] - 1));}
};

🎉🌈 陪伴至此,感谢有你 🌈🎉

感谢你能坚持看到这里!如果这篇文章对你有一点点帮助,希望能收获你的:
👍 一个赞,⭐ 一个收藏,💬 一条评论 或 🔗 一键分享!
你的支持是我持续输出的最大动力!✨

有问题?有灵感?
别犹豫,直接留言和我交流~让我们一起成长、一起突破 💡。

最后,祝你:

🍯 生活美满如蜜香
🌞 心情灿烂似朝阳
🌱 成长如树渐成章
🚀 未来闪耀梦飞翔!

再次感谢你的阅读!🌟 下次再见~ 🎉

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

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

相关文章

Linux_线程控制

线程控制的相关接口 进程创建相关 之前我们已经认识到了pthread_create函数用来创建线程&#xff0c;这里不再赘述。 pthread_self函数 void* routine(void* args) {std::cout << "我是新线程..." << pthread_self() << std::endl;return null…

[java] 面向对象进阶篇1--黑马程序员

目录 static 静态变量及其访问 实例变量及其访问 静态方法及其访问 实例方法及其访问 总结 继承 作用 定义格式 示例 总结 子类不能继承的内容 继承后的特点 成员变量 成员变量不重名 成员变量重名 super访问父类成员变量 成员方法 成员方法不重名 成员方法…

TCP 三次握手四次挥手

目录 TCP 三次握手 1. SYN (Synchronize&#xff1a;同步) 2. SYN-ACK (Synchronize Acknowledge&#xff1a;同步确认) 3. ACK (Acknowledge&#xff1a;确认) 为什么是三次而不是两次或四次&#xff1f; 三次握手的作用 TCP 四次挥手 第一次挥手&#xff1a;客户端发送 FIN …

Vue2下篇

插槽&#xff1a; 基本插槽&#xff1a; 普通插槽&#xff1a;父组件向子组件传递静态内容。基本插槽只能有一个slot标签&#xff0c;因为这个是默认的位置&#xff0c;所以只能有一个 <!-- ParentComponent.vue --> <template> <ChildComponent> <p>…

第38周:猫狗识别 (Tensorflow实战第八周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 再次检查数据 2.3 配置数据集 2.4 可视化数据 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 四、编译 五、训练模型 六、模型评估 七、预测 总结 前言…

具身智能与大模型融合创新技术实训研讨会成功举办

2025年1月16日-19日武汉&#xff0c;TsingtaoAI联合北京博创鑫鑫教育科技&#xff0c;举行“具身智能与大模型融合创新技术”实训研讨会&#xff0c;本次会议面向高校AI教师和企业AI工程师群体&#xff0c;通过3天的技术研修和实操教学&#xff0c;通过将 AI 大模型与具备3D视觉…

OpenAI的工具革命: 当Operator撕开中国AI「内卷式创新」的遮羞布

OpenAI最新发布的智能体Operator&#xff0c;并非简单的任务执行工具&#xff0c;而是一场针对「工具的工具」的底层革命。它用通用性智能体架构重构人机协作范式&#xff0c;而中国AI产业仍在「卷场景」「卷补贴」的泥潭中打转。这场降维打击背后&#xff0c;暴露的是中美AI竞…

MySQL(1)

数据库 基础篇 MYSQL概述 SQL 函数 约束 多表查询 事务 进阶篇 存储索引 索引 SQL优化 试图/存储过程/触发器 锁 InnoDB核心 MySQL管理 运维篇 日志 主从复制 分库本表 读写分离 基础篇 MySQL 数据库概念&#xff1a;存储数据的仓库&#xff0c;数据是有…

SpringBoot+Vue使用Echarts

前言 在vue项目中使用echarts&#xff0c;本次演示是使用vue2 1 前端准备 echarts官网&#xff1a; https://echarts.apache.org/zh/index.html 官网提供了基本的使用说明和大量的图表 1.1 下载echarts 执行命令 npm install echarts 直接这样执行很可能会失败&#xff0c;…

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(下.代码部分)

医疗 MLLM 框架编程实现 本医疗 MLLM 框架结合 Python 与 PyQt6 构建,旨在实现多模态医疗数据融合分析并提供可视化界面。下面从数据预处理、模型构建与训练、可视化界面开发、模型 - 界面通信与部署这几个关键部分详细介绍编程实现。 6.1 数据预处理 在医疗 MLLM 框架中,多…

Linux-day10

第21章 Linux高级篇-日志管理 日志介绍和实例 基本介绍 系统常用的日志 日志服务 日志服务原理图 在这个配置文件里面记录了日志服务程序 日志管理服务rsyslogd -v是反向匹配 invert 日志服务配置文件 时间、主机、是由哪个程序或者服务发生的、事件信息 自定义日志服务 日…

Linux第一讲--基本的命令操作

从今天开始&#xff0c;我将在csdn这个平台上和大家分享Linux的相关知识&#xff0c;欢迎大家一起讨论&#xff01; 零、基本操作 1.进入全屏&#xff1a; ALTENTER,退出也是这个 2.复制&#xff1a;ctrlinsert 3.粘贴&#xff1a;shiftinsert Linux中&#xff0c;cv是不好…

WinRAR.exe命令行的使用

工具 命令行打包命令 rem 默认压缩根目录&#xff0c;递归处理子文件夹使用 -r WinRAR.exe a -r test.rar C:/web/Views/

### 2.5.3 二叉树的基本操作

2.5.3 二叉树的基本操作 // 获取树中节点的个数 int size(Node root);// 获取叶子节点的个数 int getLeafNodeCount(Node root);// 子问题思路-求叶子结点个数// 获取第K层节点的个数 int getKLevelNodeCount(Node root,int k);// 获取二叉树的高度 int getHeight(Node root);…

设计新的 Kibana 仪表板布局以支持可折叠部分等

作者&#xff1a;来自 Elastic Teresa Alvarez Soler, Hannah Mudge 及 Nathaniel Reese 在 Kibana 中构建可折叠仪表板部分需要彻底改造嵌入式系统并创建自定义布局引擎。这些更新改进了状态管理、层次结构和性能&#xff0c;同时为新的高级仪表板功能奠定了基础。 我们正在开…

怎么样把pdf转成图片模式(不能复制文字)

贵但好用的wps&#xff0c; 转换——转为图片型pdf —————————————————————————————————————————— 转换前&#xff1a; 转换后&#xff1a; 肉眼可见&#xff0c;模糊了&#xff0c;且不能复制。 其他免费办法&#xff0c;参考&…

PAT甲级-1023 Have Fun with Numbers

题目 题目大意 一个数乘以2倍后&#xff0c;仍由原来的数字组成&#xff0c;只不过顺序发生变化&#xff0c;就输出Yes&#xff0c;否则输出No。并输出乘以2部后的数。 思路 题目说数字不超过20位&#xff0c;long long最多只能表示19位&#xff0c;93....&#xff0c;超过其…

系统架构设计师教材:信息系统及信息安全

信息系统 信息系统的5个基本功能&#xff1a;输入、存储、处理、输出和控制。信息系统的生命周期分为4个阶段&#xff0c;即产生阶段、开发阶段、运行阶段和消亡阶段。 信息系统建设原则 1. 高层管理人员介入原则&#xff1a;只有高层管理日恩怨才能知道企业究竟需要什么样的…

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

我谈区域偏心率

偏心率的数学定义 禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P312 区域的拟合椭圆看这里。 Rafael Gonzalez的二阶中心矩的表达不说人话。 我认为半长轴和半短轴不等于特征值&#xff0c;而是特征值的根号。…