算法及数据结构系列 - 树
系列文章目录
算法及数据结构系列 - 二分查找
算法及数据结构系列 - BFS算法
算法及数据结构系列 - 动态规划
算法及数据结构系列 - 双指针
算法及数据结构系列 - 回溯算法
文章目录
- 树
- 框架
- 树遍历框架
- N叉树遍历框架
- 经典题型
- 124.二叉树的最大路径和
- 105.从前序与中序遍历序列构造二叉树
- 恢复二叉搜索树
- 刷题
- 112.路径总和
- 113.路径总和 II
- 437.路径总和 III
- 思路一: `DFS`
- 思路二: `前缀和`
- 687. 最长同值路径
- 543. 二叉树的直径
- 95. 不同的二叉搜索树
- 98. 验证二叉搜索树
- 94. 二叉树的中序遍历
- 144. 二叉树的前序遍历
树
框架
树遍历框架
/* 基本的二叉树节点 */
class TreeNode {int val;TreeNode left, right;
}void traverse(TreeNode root) {// 前序遍历traverse(root.left)// 中序遍历traverse(root.right)// 后序遍历
}
N叉树遍历框架
/* 基本的 N 叉树节点 */
class TreeNode {int val;TreeNode[] children;
}void traverse(TreeNode root) {for (TreeNode child : root.children)traverse(child)
}
经典题型
124.二叉树的最大路径和
相似问题:
687. 最长同值路径
543. 二叉树直径
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
思路:后序遍历
;递归;在递归中计算
递归函数helper(root)
定义: 以root为起点,向下延伸的路径和的最大值
class Solution {int res = Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {helper(root);return res;}public int helper(TreeNode root){if(root == null){return 0;}int maxLeft = helper(root.left);maxLeft = maxLeft < 0 ? root.val : root.val + maxLeft;int maxRight = helper(root.right);maxRight = maxRight < 0 ? root.val : root.val + maxRight;res = Math.max(res, maxLeft + maxRight - root.val);return Math.max(maxLeft, maxRight);}
}
105.从前序与中序遍历序列构造二叉树
提示:使用map记录中序数组位置
TreeNode buildTree(int[] preorder, int preStart, int preEnd, int[] inorder, int inStart, int inEnd, Map<Integer, Integer> inMap) {if(preStart > preEnd || inStart > inEnd) return null;TreeNode root = new TreeNode(preorder[preStart]);int inRoot = inMap.get(root.val);int numsLeft = inRoot - inStart;root.left = buildTree(preorder, preStart + 1, preStart + numsLeft, inorder, inStart, inRoot - 1, inMap);root.right = buildTree(preorder, preStart + numsLeft + 1, preEnd, inorder, inRoot + 1, inEnd, inMap);return root;
}
恢复二叉搜索树
二叉搜索树中的两个节点被错误地交换。
请在不改变其结构的情况下,恢复这棵树。
提示:中序遍历, 逆序对, 双指针
class Solution {TreeNode first = null;TreeNode second = null;public void recoverTree(TreeNode root) {inorderTraversal(root);int temp = first.val;first.val = second.val;second.val = temp;}TreeNode pre = null;private void inorderTraversal(TreeNode root) {if (root == null) {return;}inorderTraversal(root.left); /*******************************************************/if(pre != null && root.val < pre.val) {//第一次遇到逆序对if(first==null){first = pre;second = root;//第二次遇到逆序对}else{second = root;}}pre = root; /*******************************************************/inorderTraversal(root.right);}
}
刷题
112.路径总和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
说明: 叶子节点是指没有子节点的节点; 注意有可能有负数
public class Solution {public boolean hasPathSum(TreeNode root, int sum) {if(root == null) return false;if(root.left == null && root.right == null && sum - root.val == 0) return true; // 到叶子节点return hasPathSum(root.left, sum - root.val) || hasPathSum(root.right, sum - root.val);}
}
113.路径总和 II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
思路:回溯算法,路径/当前可选择/选择及撤销选择
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
class Solution {List<List<Integer>> res = new ArrayList<List<Integer>>();public List<List<Integer>> pathSum(TreeNode root, int sum) {List<Integer> path = new ArrayList<Integer>();if(root != null){path.add(root.val);}recurve(root, sum, path);return res;}public void recurve(TreeNode root, int sum, List<Integer> path){if(root == null){return;}if(root.left == null && root.right == null && sum == root.val){// 到叶子节点res.add(new ArrayList<Integer>(path));return;}if(root.left != null){path.add(root.left.val);recurve(root.left, sum - root.val, path);path.remove(path.size() - 1);}if(root.right != null){path.add(root.right.val);recurve(root.right, sum - root.val, path);path.remove(path.size() - 1);}}
}
437.路径总和 III
给定一个二叉树,它的每个结点都存放着一个整数值。
找出路径和等于给定数值的路径总数。
路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。
二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。
思路一: DFS
每个节点为根节点,都算一遍路径和为sum的有几条,然后加起来
helper(root,sum)
: 以root为起点的路径和为sum的路径数
class Solution {public int pathSum(TreeNode root, int sum) {if(root == null) return 0;return helper(root, sum) + pathSum(root.left, sum) + pathSum(root.right, sum);}int helper(TreeNode root, int sum){if(root == null) return 0;sum -= root.val;return (sum == 0 ? 1 : 0) + helper(root.left, sum) + helper(root.right, sum);}
}
思路二: 前缀和
思路一很明显效率不够高,存在大量重复计算。
所以第二种做法,采取了类似于数组的前n项和的思路。对于树的话,采取DFS加回溯
,每次访问到一个节点,把该节点加入到当前的pathSum中,然后判断是否存在一个之前
的前n项和,其值等于pathSum与sum之差。如果有,就说明现在的前n项和,减去之前的前n项和,等于sum,那么也就是说,这两个点之间的路径和,就是sum。最后要注意的是,记得回溯,把路径和弹出去。
class Solution {public int pathSum(TreeNode root, int sum) {HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); // 记录路径和->次数map.put(0, 1);return helper(root, map, sum, 0);}int helper(TreeNode root, HashMap<Integer, Integer> map, int sum, int pathSum){int res = 0;if(root == null) return 0;pathSum += root.val;res += map.getOrDefault(pathSum - sum, 0);map.put(pathSum, map.getOrDefault(pathSum, 0) + 1);res = helper(root.left, map, sum, pathSum) + helper(root.right, map, sum, pathSum) + res;map.put(pathSum, map.get(pathSum) - 1); // 弹出return res;}
}
687. 最长同值路径
给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
思路:后序遍历
、递归
关键是递归函数helper(node)
定义:从节点node能够延伸出的最长同值路径;在递归进行中计算
class Solution {int res = 0;public int longestUnivaluePath(TreeNode root) {helper(root);return res;}int helper(TreeNode root){if(root == null) return 0;int left = helper(root.left);int right = helper(root.right);left = (root.left != null && root.left.val == root.val) ? left + 1 : 0;right = (root.right != null && root.right.val == root.val) ? right + 1 : 0;res = Math.max(res, left + right);// 在递归中计算return Math.max(left, right);}
}
543. 二叉树的直径
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
思路:后序遍历
、递归
关键是递归函数depth(node)
定义:从节点node能够延伸出的最长路径;在递归进行中计算
class Solution {int maxd=0;public int diameterOfBinaryTree(TreeNode root) {depth(root);return maxd;}public int depth(TreeNode node){if(node==null){return 0;}int Left = depth(node.left);int Right = depth(node.right);//将每个节点最大直径(左子树深度+右子树深度)当前最大值比较并取大者maxd=Math.max(Left+Right,maxd);return Math.max(Left,Right)+1;//返回节点深度}
}
95. 不同的二叉搜索树
给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。
public class Solution {public List<TreeNode> generateTrees(int n){int from = 1;int to = n;return genTree(from,to);}public List<TreeNode> genTree(int from,int to){List<TreeNode> treeNodeList = new ArrayList<TreeNode>();if(from == to){TreeNode treeNode = new TreeNode(from);treeNodeList.add(treeNode);return treeNodeList;}for(int i=from;i<=to;i++){int leftFrom = from;int leftTo = i-1;List<TreeNode> leftNodes = new ArrayList<TreeNode>();if(leftFrom <= leftTo){leftNodes = genTree(leftFrom,leftTo);}int rightFrom = i+1;int rightTo = to;List<TreeNode> rightNodes = new ArrayList<TreeNode>();if(rightFrom <= rightTo){rightNodes = genTree(rightFrom,rightTo);}if(leftNodes.size() == 0 && rightNodes.size() == 0){TreeNode treeNode = new TreeNode(i);treeNodeList.add(treeNode);}else if(leftNodes.size() == 0){for (TreeNode rightNode:rightNodes) {TreeNode treeNode = new TreeNode(i);treeNode.right = rightNode;treeNodeList.add(treeNode);}}else if(rightNodes.size() == 0){for (TreeNode left:leftNodes) {TreeNode treeNode = new TreeNode(i);treeNode.left = left;treeNodeList.add(treeNode);}}else{for (TreeNode leftNode:leftNodes) {for (TreeNode rightNode:rightNodes) {TreeNode treeNode = new TreeNode(i);treeNode.left = leftNode;treeNode.right = rightNode;treeNodeList.add(treeNode);}}}}return treeNodeList;}
}
98. 验证二叉搜索树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
提示: 中序遍历
class Solution {boolean res = true;TreeNode pre = null;public boolean isValidBST(TreeNode root) {helper(root);return res;}public void helper(TreeNode root){if(root == null){return;}helper(root.left);if(pre != null && pre.val >= root.val){res = false;return;}pre = root;helper(root.right);}
}
94. 二叉树的中序遍历
递归算法
class Solution {List<Integer> res = new ArrayList<Integer>();public List<Integer> inorderTraversal(TreeNode root) {helper(root);return res;}public void helper(TreeNode root){if(root == null){return;}helper(root.left);res.add(root.val);helper(root.right);}
}
迭代算法
提示:栈, 举个栗子尝试一下就知道了
class Solution {Stack<TreeNode> s = new Stack<TreeNode>();List<Integer> res = new ArrayList<Integer>();public List<Integer> inorderTraversal(TreeNode root) {if(root == null){return res;}s.push(root);TreeNode l = root.left;while(l != null){s.push(l);l = l.left;}while(!s.isEmpty()){TreeNode tmp = s.pop();res.add(tmp.val);TreeNode r = tmp.right;while(r != null){s.push(r);r = r.left;}}return res;}
}
144. 二叉树的前序遍历
迭代算法
提示:栈, 举个栗子尝试一下就知道了
class Solution {Stack<TreeNode> s = new Stack<TreeNode>();List<Integer> res = new ArrayList<Integer>();public List<Integer> preorderTraversal(TreeNode root) {if(root == null){return res;}while(root != null){res.add(root.val);s.push(root);root = root.left;}while(!s.isEmpty()){TreeNode tmp = s.pop();TreeNode r = tmp.right;while(r != null){res.add(r.val);s.push(r);r = r.left;}}return res;}
}
相关文章:
算法及数据结构系列 - 树
系列文章目录 算法及数据结构系列 - 二分查找 算法及数据结构系列 - BFS算法 算法及数据结构系列 - 动态规划 算法及数据结构系列 - 双指针 算法及数据结构系列 - 回溯算法 文章目录 树框架树遍历框架N叉树遍历框架 经典题型124.二叉树的最大路径和105.从前序与中序遍历序列构造…...
go安装lazydocker
安装 先安装go环境 https://blog.csdn.net/Yqha1/article/details/146430281?fromshareblogdetail&sharetypeblogdetail&sharerId146430281&sharereferPC&sharesourceYqha1&sharefromfrom_link 安装lazydocker go install github.com/jesseduffield/laz…...
《深度学习》——YOLOv3详解
文章目录 YOLOv3简介YOLOv3核心原理YOLOv3改进YOLOv3网络结构 YOLOv3简介 YOLOv3(You Only Look Once, version 3)是一种先进的实时目标检测算法,由 Joseph Redmon 和 Ali Farhadi 开发。它在目标检测领域表现出色,具有速度快、精…...
使用spring-ai-ollama访问本地化部署DeepSeek
创建SpringBoot工程,引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"htt…...
Kafka消息自定义序列化
文章目录 1. 默认序列化2.自定义序列化3.示例4.自定义解序列化器 1. 默认序列化 在网络中发送数据都是以字节的方式,Kafka也不例外。Apache Kafka支持用户给broker发送各种类型的消息。它可以是一个字符串、一个整数、一个数组或是其他任意的对象类型。序列化器(se…...
使用Systemd管理ES服务进程
Centos中的Systemd介绍 CentOS 中的 Systemd 详细介绍 Systemd 是 Linux 系统的初始化系统和服务管理器,自 CentOS 7 起取代了传统的 SysVinit,成为默认的初始化工具。它负责系统启动、服务管理、日志记录等核心功能,显著提升了系统的启动速…...
编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化
编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化 在讨论编程语言的选择时,特别是针对微软的 C# 和 Rust,以及谷歌的 Go 语言,以及微软试图通过 Go 来拯救 TypeScript 编译器的问题,我们可以从多个角度来分析和…...
使用粘贴控件
HarmonyOS 5.0.3(15) 版本的配套文档,该版本API能力级别为API 15 Release 文章目录 约束与限制开发步骤 粘贴控件是一种特殊的系统安全控件,它允许应用在用户的授权下无提示地读取剪贴板数据。 在应用集成粘贴控件后,用户点击该控件…...
MySQL 客户端连不上(1045 错误)原因全解析
MySQL 客户端连不上(1045 错误)原因全解析 在我们学习 MySQL 或从事 MySQL DBA 工作期间,时常会遇到:“我尝试连接到 MySQL 并且收到1045 错误,但我确定我的用户和密码都没问题”。 不管你现在是否是高手还是高高手,都不可避免曾经在初学的时候犯过一些很初级的错误,例…...
麒麟系列Linux发行版探秘
以下内容摘自《银河麒麟操作系统进阶应用》一书。 银河麒麟操作系统(Kylin) 银河麒麟(Kylin)操作系统是中国自主研发的一款基于Linux内核的操作系统。它的发展历程可以追溯到2002年,最初由国防科技大学主导研发&…...
刘强东突然发声:不该用算法压榨最底层兄弟!东哥,真正的人民企业家
今天忙了一天,很累,准备睡觉的时候,看到网上盛传的刘强东的朋友圈,东哥又在朋友圈发文了。 说实话,看完之后,感动,真的感动。 尤其是当我看到这两句话的时候。 1、我们所学的知识、商业模式、技…...
信息收集与问答系统流程分析与改进建议
现有系统的问题与局限 1. 资源管理问题 二元决策机制过于简化:当前系统仅在令牌预算耗尽时才进入Beast Mode,缺乏渐进式资源分配策略缺少早期预算规划:没有基于问题复杂度的初始资源分配机制缺乏优先级资源分配:所有问题和策略消…...
【人工智能】如何理解transformer中的token?
如何理解transformer中的token? **一、Token在Transformer中的作用****二、文本分词的常见方法****1. 基于词典的分词(Dictionary-based Tokenization)****2. 子词分词(Subword Tokenization)****(1) WordPiece算法****(2) BPE&a…...
Spring Boot 集成 Kafka 消息发送方案
一、引言 在 Spring Boot 项目中,Kafka 是常用的消息队列,可实现高效的消息传递。本文介绍三种在 Spring Boot 中使用 Kafka 发送消息的方式,分析各自优缺点,并给出对应的 pom.xml 依赖。 二、依赖引入 在 pom.xml 中添加以下依赖: <dependencies><!-- Sprin…...
Hadoop•HDFS的Java API操作
听说这是目录哦 上传文件到HDFS🌈一、下载Windows版本的JDK和Hadoop二、配置物理机环境变量三、创建项目四 、添加依赖五、新建java类六、创建文件七、打开集群八、选中、运行 从HDFS下载文件🪐一、写代码二、HDFS要个文件三、物理机要个文件夹ÿ…...
电脑如何设置几分钟后自动关机
摘要:本文提供Windows、macOS和Linux系统设置定时自动关机的详细方法。 目录 一、Windows系统设置方法 设置定时关机 取消关机计划 二、macOS系统设置方法 设置定时关机取消关机计划 三、Linux系统设置方法 设置定时关机 取消关机计划 四、注意事项五、扩展&#x…...
固定公网 IP
固定公网 IP 是指为用户分配一个长期不变且可从互联网直接访问的 IP 地址,具有以下重要作用: 1. 搭建服务器 网站托管:可用于托管网站、博客或电子商务平台。 应用服务器:支持运行邮件服务器、游戏服务器、数据库等。 远程访问&…...
Linux安装go环境
安装一个lazydocker,根据文档需要先安装go环境 https://github.com/jesseduffield/lazydocker 官方文档解析 https://go.dev/doc/install 文档内容如下,一共三步 1.删除先前安装的go,解压下载的go压缩包到/usr/local目录 2.添加环境变量&…...
Git的基本使用
Git的基本使用 前言 :为什么使用GitGit基本操作1. 初始化2. Git分区3. 认识.git目录4. git基本操作 Git分支管理1. 基本操作2. Git分支设计规范 Git 标签管理1. Git标签的使用2. 标签使用规范3. Git标签与分支的区别 分离头指针问题1. 分离头指针问题的风险2. 分离头…...
鸿蒙Flutter开发故事:不,你不需要鸿蒙化
在华为牵头下,Flutter 鸿蒙化如火如荼进行,当第一次看到一份上百个插件的Excel 列表时,我也感到震惊,排名前 100 的插件赫然在列,这无疑是一次大规模的军团作战。 然后,参战团队鱼龙混杂,难免有…...
Mysql:关于命名
1. 命名的对象:库名、表名、列名、索引名 2. 用反引号包裹的情况下,命名时不允许使用空白字符、反引号,其它字符均可 3. 无反引号包裹的情况下,命名时仅允许使用:$、_、数字、大小写字母、中文字符(已知win系统支持)…...
JAVA————十五万字汇总
JAVA语言概述 JAVA语句结构 JAVA面向对象程序设计(一) JAVA面向对象程序设计(二) JAVA面向对象程序设计(三)工具类的实现 JAVA面向对象程序设计(四)录入异常处理 JAVA图形用户界面设…...
Chrome-Edge-IDEA-Win 常用插件-工具包
Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper书签侧边栏篡改猴Print Edit WEEdge浏览器插件IDEA插件CodeGlance Pro 代码迷你缩放图插件Alibaba Cloud ToolkitAlibaba Java Co…...
DeepSeek-R1论文深度解析:纯强化学习如何引爆LLM推理革命?
技术突破:从“无监督”到“自主进化”的跨越 paper :https://arxiv.org/pdf/2501.12948目录 技术突破:从“无监督”到“自主进化”的跨越1 DeepSeek-R1-Zero: RLnoSFT1.1 R1-Zero: GRPO(Group Relative Po…...
最新!Ubuntu Docker 安装教程
源自: AINLPer(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2025-3-1 更多:>>>>大模型/AIGC、学术前沿的知识分享! 看到很多部署大模型的时候,都是基于docker安装部署的。…...
【Javascrip】Javascript练习01 REST API using Express.js.
针对该问题的项目路径 要求部分 what you need to doReview the tasks provided in the section below.Obtain the boilerplate code.Use your local development environment to implement a solution.Upload your solution for marking via Gradescope. There is no attempt…...
visual studion 2022如何使用PlaySound()
书籍:《windows程序设计(第五版)》的开始 环境:visual studio 2022 内容:HELLOWIN程序 说明:以下内容大部分来自腾讯元宝。 在Visual Studio 2022中使用PlaySound()函数播放音频,需完成以下步骤: 1. 配…...
C++相关基础概念之入门讲解(下)
1. 引用 int main() {const int a10;int& aaa;aa;cout<<aa<<endl; } 引用 不是新定义一个变量,而 是给已存在变量取了一个别名 ,编译器不会为引用变量开辟内存空 间,它和它引用的变量 共用同一块内存空间(初…...
从零开始学可靠消息投递:分布式事务的“最终一致性”方案
一、什么是可靠消息投递?—— 消息队列的“防丢宝典” 可靠消息投递 是指通过消息队列(如 RocketMQ)确保消息在生产、传输、消费过程中不丢失、不重复、有序到达。其核心目标是在分布式系统中保障数据最终一致性,常用于订单处理、…...
生物化学笔记:医学免疫学原理 免疫系统的组成与功能+克隆选择学说
免疫系统的组成与功能 克隆选择学说 克隆选择学说(Clonal Selection Theory)是免疫学的核心理论之一,由 麦克法兰伯内特(Frank Macfarlane Burnet) 在 1957 年提出,用于解释特异性免疫反应的机制。 基本概…...
SpringBoot最佳实践之 - 使用AOP记录操作日志
1. 前言 本篇博客是个人在工作中遇到的需求。针对此需求,开发了具体的实现代码。并不是普适的记录操作日志的方式。以阅读本篇博客的朋友,可以参考此篇博客中记录日志的方式,可能会对你有些许帮助和启发。 2. 需求描述 有一个后台管理系统…...
MySql中 一条select语句的执行流程
一条 SELECT 语句的执行流程涉及到数据库管理系统(DBMS)的多个组件和阶段。以下是一个更为详细的执行流程,以关系型数据库(如 MySQL、PostgreSQL 等)为例: 1. 客户端发送查询 用户输入:用户在客…...
图论——kruskal算法
53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…...
【dify】 dify环境变量配置说明
这是一份Dify平台的环境变量配置文件,对平台的各项功能、服务和组件进行参数设置。以下是对其主要部分的详细解读: 1. 通用变量(Common Variables) CONSOLE_API_URL:控制台API的后端URL,用于拼接授权回调…...
如何在 Vue 项目中实现动态组件加载,有什么应用场景?
大白话如何在 Vue 项目中实现动态组件加载,有什么应用场景? 什么是动态组件加载 在 Vue 项目里,动态组件加载就是能够在程序运行时动态地决定要渲染哪个组件。打个比方,就像你去餐馆点菜,不同的时间你可能想吃不同的…...
FRP在物联网设备中的穿透方案
物联网设备常位于NAT后,FRP为其提供稳定穿透链路。 配置要点 轻量化部署:使用ARM版本FRP客户端,适配树莓派等设备9。 自启动脚本:通过systemd或crontab实现设备重启后自动连接26。 低功耗优化:调整心跳间隔…...
Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南
一、架构设计与技术解析 1. SystemUI状态栏核心布局机制 层级结构 mermaid 复制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…...
Python实战(3)-数据库操作
前面说过,可用的SQL数据库引擎有很多,它们都有相应的Python模块。这些数据库引擎大都作为服务器程序运行,连安装都需要有管理员权限。为降低Python DB API的使用门槛,我选择了一个名为SQLite的小型数据库引擎。它不需要作为独立的…...
【redis】在 Spring中操作 Redis
文章目录 基础设置依赖StringRedisTemplate库的封装 运行StringList删库 SetHashZset 基础设置 依赖 需要选择这个依赖 StringRedisTemplate // 后续 redis 测试的各种方法,都通过这个 Controller 提供的 http 接口来触发 RestController public class MyC…...
企业数据孤岛的纠结与恩怨
以下是关于控制中数据孤岛的纠结于恩怨: 一、工业控制中数据孤岛的定义 工业控制中的数据孤岛是指在工业生产过程中,各个生产环节、不同的系统或设备之间的数据相互独立、隔离,无法进行有效的共享和交互,形成了一个个相对封闭的数…...
在 Elasticsearch 中扩展后期交互模型 - 第 2 部分 - 8.18
作者:来自 Elastic Peter Straer 及 Benjamin Trent 本文探讨了如何优化后期交互向量,以适应大规模生产工作负载,例如减少磁盘空间占用和提高计算效率。 在之前关于 ColPali 的博客中,我们探讨了如何使用 Elasticsearch 创建视觉搜…...
开发SAPUI5 Fiori应用并部署到SAP系统
首先新建一个项目文件夹 在VScode中打开 打开SAP Fiori(需要先下载安装,参考上上一篇文章) ,选择已添加的SAP S4 ERP系统 ,点击创建Firoi应用。 如果没有添加系统的,点击添加按钮,添加即可,注意ÿ…...
<C#> 详细介绍.net 三种依赖注入:AddTransient、AddScoped、AddSingleton 的区别
在 .NET 8 里,AddTransient、AddScoped 和 AddSingleton 均为依赖注入容器用于注册服务的方法,不过它们的生命周期管理方式存在差异。下面为你详细介绍这三种方法的区别。 1. AddTransient AddTransient 方法所注册的服务,每次被请求时都会…...
游戏引擎学习第168天
回顾并计划今天的内容 今天我们将进行一些思考工作,回顾一下之前的工作。我们已经在资产处理工具中提取了字体,并展示了如何使用该库。我们有两个版本,一个不使用任何库,适合想要完全不依赖库的用户; 我们今天的任务…...
html5炫酷3D立体文字效果实现详解
炫酷3D立体文字效果实现详解 这里写目录标题 炫酷3D立体文字效果实现详解项目概述技术实现要点1. 基础布局设置2. 动态背景效果3. 文字渐变效果4. 立体阴影效果5. 悬浮动画效果 技术难点及解决方案1. 文字渐变动画2. 立体阴影效果3. 性能优化 浏览器兼容性总结 项目概述 在这个…...
VSCode中搜索插件显示“提取扩展时出错。Failed to fetch”问题解决!
大致的问题如下,在VSCode的插件商店搜索插件时提示如下: 导致的情况有以下几点: 1、代理问题,如果是代理引起的,可以继续使用代理后也能搜索和安装插件。 2、还有可能是你的所连接的网络设置了防火墙,比较…...
回溯-单词搜索
79.单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平…...
高级java每日一道面试题-2025年3月07日-微服务篇[Eureka篇]-Eureka Server和Eureka Client关系?
如果有遗漏,评论区告诉我进行补充 面试官: Eureka Server和Eureka Client关系? 我回答: 在微服务架构中,Eureka作为Netflix开源的服务发现组件,由Eureka Server(服务端)和Eureka Client(客户端)两大部分…...
SpringBoot有几种获取Request对象的方法
HttpServletRequest 简称 Request,它是一个 Servlet API 提供的对象,用于获取客户端发起的 HTTP 请求信息。例如:获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。 那么问题来了,在 Spring Boot 中…...
【Agent】Dify Docker 安装问题 INTERNAL SERVER ERROR
总结:建议大家选择稳定版本的分支,直接拉取 master 分支,可能出现一下后面更新代码导致缺失一些环境内容。 我是通过 Docker 进行安装的,由于项目开发者不严谨导致,遇到一个奇怪的问题: INTERNAL SERVER E…...