《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_4

《剑指Offer》笔记&题解&思路&技巧&优化_Part_4

  • 😍😍😍 相知
  • 🙌🙌🙌 相识
  • 😢😢😢 开始刷题
    • 1. LCR 148. 验证图书取出顺序——栈的压入、弹出序列
    • 2. LCR 149. 彩灯装饰记录 I——从上到下打印二叉树
    • 3. LCR 150. 彩灯装饰记录 II——I.打印二叉树
    • 4. LCR 151. 彩灯装饰记录 III——II.打印二叉树
    • 5. LCR 152. 验证二叉搜索树的后序遍历序列——二叉搜索树的后序遍历序列
    • 6. LCR 153. 二叉树中和为目标值的路径——二叉树中和为某一值的路径
    • 7. LCR 154. 复杂链表的复制——复杂链表的复制
    • 8. LCR 155. 将二叉搜索树转化为排序的双向链表——二叉搜索树与双向链表
    • 9. LCR 156. 序列化与反序列化二叉树——序列化二叉树
    • 10. LCR 157. 套餐内商品的排列顺序——字符串的排列

在这里插入图片描述

😍😍😍 相知

当你踏入计算机科学的大门,或许会感到一片新奇而陌生的领域,尤其是对于那些非科班出身的学子而言。作为一位非科班研二学生,我深知学习的道路可能会充满挑战,让我们愿意迎接这段充满可能性的旅程。

最近,我开始了学习《剑指Offer》和Java编程的探索之旅。这不仅是一次对计算机科学的深入了解,更是对自己学术生涯的一次扩展。或许,这一切刚刚开始,但我深信,通过努力与坚持,我能够逐渐驾驭这门技艺。

在这个博客中,我将深入剖析《剑指Offer》中的问题,并结合Java编程语言进行解析。

让我们一起踏上这段学习之旅,共同奋斗,共同成长。无论你是已经驾轻就熟的Java高手,还是像我一样初出茅庐的学子,我们都能在这里找到彼此的支持与激励。让我们携手前行,共同迎接知识的挑战,为自己的未来打下坚实的基石。

这是我上一篇博客的,也希望大家多多关注!

  1. 《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_1
  2. 《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_2
  3. 《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode_Part_3

🙌🙌🙌 相识

根据题型可将其分为这样几种类型:

  1. 结构概念类(数组,链表,栈,堆,队列,树)
  2. 搜索遍历类(深度优先搜索,广度优先搜索,二分遍历)
  3. 双指针定位类(快慢指针,指针碰撞,滑动窗口)
  4. 排序类(快速排序,归并排序)
  5. 数学推理类(动态规划,数学)

😢😢😢 开始刷题

1. LCR 148. 验证图书取出顺序——栈的压入、弹出序列

题目跳转:https://leetcode.cn/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof/description/

想放上自己写的笨思路:

在这里插入图片描述

class Solution {public boolean validateBookSequences(int[] putIn, int[] takeOut) {if(putIn.length<=1)return true;boolean[] flag = new boolean[putIn.length];int slow = 0;for(int i = 0;i < putIn.length;i++){if(putIn[i]==takeOut[slow]){slow++;if(slow==putIn.length) return true;flag[i] = true;int temp = i;while(temp>=0&&flag[temp]){temp--;}while(temp>=0&&putIn[temp]==takeOut[slow]){slow++;flag[temp] = true;while(temp>=0&&flag[temp]){temp--;}}}}for(int i = putIn.length-1;i>=0;i--){if(flag[i])continue;else{if(putIn[i]==takeOut[slow]){slow++;flag[i] = true;continue;}else{return false;}}}return true;}
}

虽然代码狗屎,但是我快啊!
在这里插入图片描述

下面是大牛的思路!!

解题思路
如下图所示,给定一个放入序列 putIn 和拿取序列 takeOut ,则放入(压栈)和拿取(弹出)操作的顺序是 唯一确定 的。

下图中 pushedpopped 分别对应本题的 putIntakeOut
在这里插入图片描述
如下图所示,栈的数据操作具有 先入后出 的特性,因此某些拿取序列是无法实现的。
在这里插入图片描述
考虑借用一个辅助栈 stack模拟 放入 / 拿取操作的排列。根据是否模拟成功,即可得到结果。

  • 入栈操作: 按照压栈序列的顺序执行。
  • 出栈操作: 每次入栈后,循环判断 “ 栈顶元素 = 拿取序列的当前元素 栈顶元素 = 拿取序列的当前元素 栈顶元素=拿取序列的当前元素” 是否成立,将符合拿取序列顺序的栈顶元素全部拿取。

由于题目规定 “栈的所有数字均不相等” ,因此在循环入栈中,每个元素出栈的位置的可能性是唯一的(若有重复数字,则具有多个可出栈的位置)。因而,在遇到 “栈顶元素 = 拿取序列的当前元素” 就应立即执行出栈。

代码

class Solution {public boolean validateBookSequences(int[] putIn, int[] takeOut) {Stack<Integer> stack = new Stack<>();int i = 0;for(int num : putIn) {stack.push(num); // num 入栈while(!stack.isEmpty() && stack.peek() == takeOut[i]) { // 循环判断与出栈stack.pop();i++;}}return stack.isEmpty();}
}

2. LCR 149. 彩灯装饰记录 I——从上到下打印二叉树

题目跳转:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/description/

class Solution {public int[] decorateRecord(TreeNode root) {if(root==null)return new int[0];//层序遍历List<Integer> arrayList = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();queue.add(root);queue.add(null);while(!queue.isEmpty()){TreeNode temp = queue.poll();if(temp!=null){arrayList.add(temp.val);if(temp.left!=null)queue.add(temp.left);if(temp.right!=null)queue.add(temp.right);}else{if(!queue.isEmpty())queue.add(null);}}int[] result = new int[arrayList.size()];for(int i = 0;i < result.length;i++){result[i] = arrayList.get(i);}return result;}
}

return list.stream().mapToInt(Integer::intValue).toArray();


3. LCR 150. 彩灯装饰记录 II——I.打印二叉树

题目跳转:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/description/

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> decorateRecord(TreeNode root) {if(root==null)return new ArrayList<>();//层序遍历List<List<Integer>> result = new ArrayList<>();Queue<TreeNode> queue = new LinkedList<>();queue.add(root);while(!queue.isEmpty()){int k = queue.size();List<Integer> arrayList = new ArrayList<>();for(int i = 0;i < k;i++){TreeNode temp = queue.poll();arrayList.add(temp.val);if(temp.left!=null)queue.add(temp.left);if(temp.right!=null)queue.add(temp.right);}result.add(arrayList);}return result;}
}

4. LCR 151. 彩灯装饰记录 III——II.打印二叉树

题目跳转:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/description/

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<List<Integer>> decorateRecord(TreeNode root) {if(root==null)return new ArrayList<>();//层序遍历List<List<Integer>> result = new ArrayList<>();boolean flag =true;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);while(!queue.isEmpty()){int k = queue.size();List<Integer> arrayList = new ArrayList<>();for(int i = 0;i < k;i++){TreeNode temp = queue.poll();arrayList.add(temp.val);if(temp.left!=null)queue.add(temp.left);if(temp.right!=null)queue.add(temp.right);}if(flag){result.add(arrayList);flag = false;}else{Collections.reverse(arrayList);result.add(arrayList);flag = true;}}return result;}
}

5. LCR 152. 验证二叉搜索树的后序遍历序列——二叉搜索树的后序遍历序列

题目跳转:https://leetcode.cn/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/description/

class Solution {// 要点:二叉搜索树中根节点的值大于左子树中的任何一个节点的值,小于右子树中任何一个节点的值,子树也是public boolean verifyTreeOrder(int[] postorder) {if (postorder.length < 2) return true;return verify(postorder, 0, postorder.length - 1); }// 递归实现private boolean verify(int[] postorder, int left, int right){if (left >= right) return true; // 当前区域不合法的时候直接返回true就好int rootValue = postorder[right]; // 当前树的根节点的值int k = left;while (k < right && postorder[k] < rootValue){ // 从当前区域找到第一个大于根节点的,说明后续区域数值都在右子树中k++;}for (int i = k; i < right; i++){ // 进行判断后续的区域是否所有的值都是大于当前的根节点,如果出现小于的值就直接返回falseif (postorder[i] < rootValue) return false;}// 当前树没问题就检查左右子树if (!verify(postorder, left, k - 1)) return false; // 检查左子树if (!verify(postorder, k, right - 1)) return false; // 检查右子树return true; // 最终都没问题就返回true}
}

6. LCR 153. 二叉树中和为目标值的路径——二叉树中和为某一值的路径

题目跳转:https://leetcode.cn/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/description/

学一下dfs的模板吧~~

function dfsTemplate(root) {//存储最终结果let res;//初始化当前结果let start;//构造递归函数dfs,通常参数为当前节点和当前结果let dfs = function (node, currentResult) {//终止条件返回判断if (node == null) {return;}//更新当前结果currentResult//若到达末尾叶子结点,进行最优结果更新if (node.left == null && node.right == null) {//update res}//左右子树递归dfs(node.left, currentResult);dfs(node.right, currentResult);}dfs(root, start);return res;
}
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {List<List<Integer>> result = new ArrayList<>();public List<List<Integer>> pathTarget(TreeNode root, int target) {dfs(root,target,new ArrayList<>());return result;}public void dfs(TreeNode root,int target,List<Integer> list){if(root == null) return;list.add(root.val);if (root.left == null&& root.right == null&& target == root.val){result.add(new ArrayList<>(list));}dfs(root.left, target - root.val,list);dfs(root.right, target - root.val, list);list.remove(list.size()-1);}
}

7. LCR 154. 复杂链表的复制——复杂链表的复制

题目跳转:https://leetcode.cn/problems/fu-za-lian-biao-de-fu-zhi-lcof/description/

让我看看谁return head了

如果直接返回啦,你知道不行,面试官问你为什么不行?你要答出关键词!!!浅拷贝与深拷贝

在这里插入图片描述
哈希表!

/*
// Definition for a Node.
class Node {int val;Node next;Node random;public Node(int val) {this.val = val;this.next = null;this.random = null;}
}
*/
class Solution {public Node copyRandomList(Node head) {if(head==null) return head;HashMap<Node,Node> hashMap = new  HashMap<>();Node cur = head;while(cur!=null){hashMap.put(cur,new Node(cur.val));cur = cur.next;}Node temp = head;while(temp!=null){hashMap.get(temp).next = hashMap.get(temp.next);hashMap.get(temp).random = hashMap.get(temp.random);temp = temp.next;}return hashMap.get(head);}
}

8. LCR 155. 将二叉搜索树转化为排序的双向链表——二叉搜索树与双向链表

题目跳转:https://leetcode.cn/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/description/

class Solution {public Node treeToDoublyList(Node root) {if(root == null)return null;Stack<Node> stack = new Stack<>();Node preNode = null;Node newHead = null;stack.push(root);while(!stack.isEmpty()){Node temp = stack.pop();if(temp!=null){if(temp.right!=null) stack.push(temp.right);stack.push(temp);stack.push(null);if(temp.left!=null) stack.push(temp.left);}else{Node tnode= stack.pop();if(preNode==null){preNode = tnode;preNode.left = tnode;preNode.right = tnode;}else{tnode.left = preNode;preNode.right = tnode;preNode = tnode;}if(newHead==null){newHead = tnode;newHead.left = tnode;newHead.right = tnode;}else{newHead.left = preNode;preNode.right = newHead;}}}return newHead;}
}
class Solution {// 1. 中序,递归,来自解题大佬Node pre, head;public Node treeToDoublyList(Node root) {// 边界值if(root == null) return null;dfs(root);// 题目要求头尾连接head.left = pre;pre.right = head;// 返回头节点return head;}void dfs(Node cur) {// 递归结束条件if(cur == null) return;dfs(cur.left);// 如果pre为空,就说明是第一个节点,头结点,然后用head保存头结点,用于之后的返回if (pre == null) head = cur;// 如果不为空,那就说明是中间的节点。并且pre保存的是上一个节点,// 让上一个节点的右指针指向当前节点else if (pre != null) pre.right = cur;// 再让当前节点的左指针指向父节点,也就连成了双向链表cur.left = pre;// 保存当前节点,用于下层递归创建pre = cur;dfs(cur.right);}
}

9. LCR 156. 序列化与反序列化二叉树——序列化二叉树

题目跳转:https://leetcode.cn/problems/xu-lie-hua-er-cha-shu-lcof/description/

public String serialize(TreeNode root) {if(root == null){return "null,";}String res = root.val + ",";res += serialize(root.left);res += serialize(root.right);return res;
}// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {String[] arr = data.split(",");Queue<String> queue = new LinkedList<String>();for(int i = 0; i < arr.length; i++){queue.offer(arr[i]);}return help(queue);
}
public TreeNode help(Queue<String> queue){String val = queue.poll();if(val.equals("null")){return null;}TreeNode root = new TreeNode(Integer.valueOf(val));root.left = help(queue);root.right = help(queue);return root;
}

10. LCR 157. 套餐内商品的排列顺序——字符串的排列

题目跳转:https://leetcode.cn/problems/zi-fu-chuan-de-pai-lie-lcof/description/

class Solution {public List<String> result = new ArrayList<>();public String[] goodsOrder(String goods) {char[] chars = goods.toCharArray();Arrays.sort(chars);StringBuilder stringBuilder = new StringBuilder();boolean [] visited = new boolean[goods.length()];backTrack(stringBuilder,chars,visited);return result.toArray(new String[0]);}public void backTrack(StringBuilder stringBuilder,char [] words,boolean [] visited){if(stringBuilder.length()==words.length){result.add(stringBuilder.toString());return;}for (int i = 0; i < words.length; i++) {if(i!=0&&words[i]==words[i-1]&&!visited[i-1]){continue;}if(!visited[i]){stringBuilder.append(words[i]);visited[i] = true;backTrack(stringBuilder,words,visited);stringBuilder.deleteCharAt(stringBuilder.length()-1);visited[i] = false;}}}
}

在Java中,result.toArray(new String[0]) 是将ArrayList result 转换为字符串数组的一种常见方式。这是在Java集合框架中使用的惯用方法。

具体来说,result.toArray() 返回一个包含ArrayList中所有元素的Object数组。但是,由于泛型擦除的存在,你可能无法直接得到一个泛型数组,比如 String[]。因此,通常会传递一个具有相同类型的空数组作为参数,以确保返回的是正确类型的数组。

在这里,new String[0] 是创建了一个空的String数组,然后传递给 toArray() 方法,告诉它要返回一个String类型的数组。实际上,这个空数组只是用于获取数组的类型信息,它不会被修改或使用。

在Java中,StringBuilder 类提供了 deleteCharAt(int index) 方法,用于删除指定索引位置的字符。该方法的语法是:

public StringBuilder deleteCharAt(int index)

其中,index 参数是要删除的字符的索引位置。索引从0开始,表示字符串中的第一个字符。删除后,StringBuilder的长度将减少一个字符。

例如,假设有一个StringBuilder对象:

StringBuilder sb = new StringBuilder("Hello");

如果你想删除字符串中的第二个字符(索引为1),可以使用 deleteCharAt() 方法:

sb.deleteCharAt(1);

这将使StringBuilder对象的内容变为 “Helo”,即删除了索引为1的字符。请注意,这个方法是在原始StringBuilder对象上直接操作的,而不是创建一个新的StringBuilder对象。


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

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

相关文章

简单贪吃蛇模拟(C语言版本·)

简单贪吃蛇模拟&#xff08;C语言版本&#xff09; 一、所需win32 API知识二、游戏逻辑实现 一、所需win32 API知识 1.在这儿&#xff0c;直接弱化概念&#xff0c;把在贪吃蛇中用到的API知识说一下&#xff01;  1.1用cmd命令来设置控制台窗口的长宽   1.2.用title 指令…

如何使用Pycharm中的image模块以及导入打开图片(属性)

在学习pytorch深度学习的过程中&#xff0c;通常会使用到大量的数据集&#xff0c;包括训练集和测试集。 以下是pytorch加载数据集的流程&#xff1a; 在notebook中使用help方法查看Dataset类的功能以及操作&#xff1a; 使用dataset需要继承Dataset父类 重写__getitem__方法和…

更换笔记本电脑内存条

写在前头 本人笔记本电脑早年购买&#xff0c;随着学习工作量的增大&#xff0c;我在使用电脑时往往需要同时打开多个软件&#xff0c;这时电脑的表现就难以言论了。虽然这个电脑在我的手中表现出其“志在千里”的鸿志&#xff08;毕竟它主人是谁里&#xff09;&#xff0c;但…

前端秘法基础式(CSS)(第二卷)

目录 一.字体 1.字体的设置 2.字体的颜色 2.1预定义的颜色值 2.2十六进制 2.3rgb表示法 3.字体粗细及样式 4.文本 4.1text-align 4.2text-indent 4.3text-decoration 二.背景属性 三.圆角矩形 四.元素显示模式 五.盒模型 六.弹性布局 七.Chrome调试工具 一.字…

普通人steam搬砖到底能不能做,一定谨记这4点

steam/csgo搬砖项目拥有小投资收益稳定的特点&#xff0c;多搬多赚&#xff0c;这个项目已存在很多年&#xff0c;是非常老牌的阳光项目&#xff0c;很多人比较关心普通人steam搬砖到底能不能做&#xff0c;这里想提醒你谨记这4点。 1&#xff1a;steam/csgo搬砖项目不需要玩游…

java.sql.SQLException: No operations allowed after statement closed.

背景 某天下午&#xff0c;客服反馈线上服务出现问题&#xff0c;不能分配了。于是我登录到系统上&#xff0c;进行同样的操作发现也不行。当然同时我已经登录到服务器打开了日志&#xff0c;发现报错了&#xff0c;下面就是日志的错误信息&#xff1a; java.sql.SQLExceptio…

AI嵌入式K210项目(29)-模型加载

文章目录 前言一、下载部署包二、C部署三、搭建文件传输环境四、文件传输五、调试六、MicroPython部署总结 前言 上一章节介绍了如何进行在线模型训练&#xff0c;生成部署包后&#xff0c;本章介绍加载模型&#xff1b; 一、下载部署包 训练结束后&#xff0c;在训练任务条…

基于ESP32+Platformio的物联网RTOS_SDK-CC_Device

本项目基于ESP32以及Platformio平台开发&#xff0c;请自行查阅如何配置这个环境 开源gitee地址&#xff1a;cc_smart_device 如果愿意贡献项目or提出疑问和修改的&#xff0c;请在gitee上提issue 项目里的mqtt服务器是公共的 请大家最好换成私有的 否则容易收到其他用户的错误…

mybatis 基础入门使用

1、mybatis 简介 1.1、mybatis 特性 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架&#xff1b; MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集&#xff1b; MyBatis可以使用简单的XML或注解用于配置和原始映射&#xff0c;将接口和…

【Java面试】MongoDB

目录 1、mongodb是什么&#xff1f;2、mongodb特点什么是NoSQL数据库&#xff1f;NoSQL和RDBMS有什么区别&#xff1f;在哪些情况下使用和不使用NoSQL数据库&#xff1f;NoSQL数据库有哪些类型?启用备份故障恢复需要多久什么是master或primary什么是secondary或slave系列文章版…

【shell】2、Makefile

文章目录 一、变量1.1 定义简单变量1.2 定义数组1.3 引用变量1.4 规则中定义变量 一、变量 1.1 定义简单变量 用变量名 值的语法来定义变量。这些变量可以用于存储命令、文件名、目录路径等信息&#xff0c;以便在Makefile规则中重复使用 # 定义一个变量 VAR_NAME value# …

【医学大模型】MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用

MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化&#xff0c;便于LLM理解和应用 提出背景对比传统医学大模型流程步骤临床指导树流程图识别临床决策支持系统 总结解决方案设计数据收集与处理系统实施临床决策支持 提出背景 论文&#xff1a;https://arxiv.org/p…

什么是DoS和DDoS攻击?

DoS和DDoS攻击是两种常见的网络攻击方式&#xff0c;它们通过向目标服务器发送大量的无效或高流量的网络请求&#xff0c;从而耗尽服务器的资源&#xff0c;使其无法正常处理有效的请求。 DoS攻击是一种单点攻击方式&#xff0c;通常是通过向目标服务器发送大量的请求&#x…

C语言---指针进阶

1.字符指针 int main() {char str1[] "hello world";char str2[] "hello world";const char* str3 "hello world.";const char* str4 "hello world.";if (str3 str4){//常量字符串在内存里面是无法修改的&#xff0c;所以没必要…

WordPress管理员修改自己用户名的插件Username

有一些站长在刚开搭建WordPress网站时&#xff0c;对于管理员的用户名是随意输入&#xff0c;后来想要修改时发现不懂得如何下手。其实&#xff0c;修改WordPress管理员用户名最快速的方法就是进入数据库直接修改&#xff0c;详见『通过phpMyAdmin直接修改WordPress用户名的图文…

裸辞5个月,面试了37家公司,终于找到理想工作了

上半年裁员&#xff0c;下半年裸辞&#xff0c;有不少人高呼裸辞后躺平真的好快乐&#xff01;但也有很多人&#xff0c;裸辞后的生活五味杂陈。 面试37次终于找到心仪工作 因为工作压力大、领导PUA等各种原因&#xff0c;今年2月下旬我从一家互联网小厂裸辞&#xff0c;没想…

物联网水域信息化:水质监测智慧云平台

行业背景 由于传统水务企业水质监测和管理技术不足&#xff0c;以及水源污染等问题&#xff0c;确保供水水质达标困难重重。 且传统水务行业信息化手段单一&#xff0c;缺乏对大数据等新技术的应用&#xff0c;一定程度上影响了水务工作的精细化和智能化程度。 系统特点 为…

【plt.pie绘制饼图】:从入门到精通,只需一篇文章!【Matplotlib可视化】

【&#x1f4ca;plt.pie绘制饼图】&#xff1a;从入门到精通&#xff0c;只需一篇文章&#xff01;【Matplotlib可视化】&#xff01; 利用Matplotlib进行数据可视化示例 &#x1f335;文章目录&#x1f335; &#x1f3a8; 一、饼图初探&#xff1a;基本概念与用途&#x1f4a…

Python实现KDJ指标计算:股票技术分析的利器系列(3)

Python实现KDJ指标计算&#xff1a;股票技术分析的利器系列&#xff08;3&#xff09; 介绍算法解释 代码rolling函数介绍计算LLV&#xff08;最低价最小值&#xff09;和HHV&#xff08;最高价最大值&#xff09;计算RSV计算SMA&#xff08;简单移动平均&#xff09; 完整代码…

Linux——信号(1)

在我们使用Linux系统的时候我们经常会使用ctrl c的方式来终止进程&#xff0c;也 会使用kill命令来杀掉进程&#xff0c;评判进程退出的健康程度中也有信号的身影。那 么Linux中的信号到底是什么&#xff1f;今天就由我来介绍Linux中的信号。1. 信号的概念 要了解计算机中的信…