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

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

🎬 个人主页:谁在夜里看海.

📖 个人专栏:《C++系列》《Linux系列》《算法系列》

⛰️ 一念既出,万山无阻


目录

📖一、算法思想

细节问题

📚左右临界

📚中点选择 

📚循环条件

📖二、具体运用 

1.⼆分查找

算法思路

算法流程

代码

2.查找元素的第⼀个和最后⼀个位置

算法思路

算法流程

代码

3.x的平⽅根

算法思路

代码

4.⼭峰数组的峰顶

算法思路

算法流程

代码

5.点名

算法思路

代码

📖三、总结


📖一、算法思想

二分算法是一种经典的高效查询方法,它的核心思想是通过不断将查找范围缩小为一半,从而大大减少查找的时间复杂度。

例如,在一个有序数组中,我们要查找指定元素,最简单的方法是遍历数组,时间复杂度为O(n);

然而使用二分算法,cur每次从待遍历数组的中心位置开始,判断元素大小:

① <目标元素,说明目标元素在右区间,更新cur,指向右区间的中心位置;

② >目标元素,说明目标元素在左区间,更新cur,指向左区间的中心位置。

此时最坏情况是遍历log(n)次,因此时间复杂度为log(n),这意味着,在100万个数中查找目标元素最多只需要遍历20次,极大提高了效率。

二分算法的本质思想理解起来并不难,但是在具体运用之前,我们还需要对二分算法有一个更深入的了解:二分算法的细节问题

细节问题

📚左右临界

在二分算法的具体运用中,我们不仅需要一个cur指针,指向区间的中点,还需要left和right指针,标记区间的左右临界位置,每次遍历之后都需要对临界位置进行更新,更新需要分为三种情况:

①:目标元素(不重复)

这种情况是最好处理的,每次更新时直接将左指针(或右指针)指向cur后一个位置(或前一个位置)即可:

②:连续序列的左端点

如果我们要查询的不是一个元素,而是一个连续序列的左端点,例如在 “1, 3, 5, 6, 6, 7, 9, 10” 中查找元素6的开始位置:

这个时候cur等于目标值,但是并不是需要的结果,此时cur应该继续向左区间移动,但是right指针该怎么调整呢?

我们可以把数组看成a、b两个区间,而我们最终要找的是b区间的左端点:

① cur < 目标值,cur需要指向右区间的中点,而左区间(1,2,3)被排除了,所以left指向cur的后一个位置;

② cur >= 目标值,由于我们要找的数连续序列的左端点,所以此时cur需要更新到左区间的中点,而right需指向原cur位置处(当cur=目标值时,cur可能是最终结果也可能不是,所以需要保存当前位置

③:连续序列的右端点

例如在 “1, 3, 5, 6, 6, 7, 9, 10” 中查找元素6的结束位置:

同样可以看成a、b两个区间,而我们要找的是区间a的右端点:

① cur > 目标值,cur需要指向左区间的中点,而右区间(7,9,10)被排除了,所以right指向cur的前一个位置;

② cur <= 目标值,由于我们要找的数连续序列的右端点,所以此时cur需要更新到右区间的中点,而left需指向原cur位置处(当cur=目标值时,cur可能是最终结果也可能不是,所以需要保存当前位置

📚中点选择 

在实际运用中,我们会发现,如果序列是偶数,中心点位置会有两个,此时我们需要考虑选择左中点还是右中点,同样分为三种情况:

①:目标元素(不重复)

在这种情况下中点的选择不会影响最终结果,因为目标元素不重复,所以选择左中点或右中点皆可

②:连续序列的左端点

在这种情况下,左右中点的选择会影响判断,看下面这种极端情况:

遍历到区间只剩两个元素时,cur应该更新成left(左中点)还是right(右中点)呢?

假如更新成right,由于cur>=目标值,right会指向cur(还是原位置),如此一来就会进入死循环,cur和right会一直在原地踏步,所以cur需要更新成左中点

③:连续序列的左端点

相反地, 当查询的是连续序列的右端点时,cur需更新成右中点:

在实际中时间复杂度为log(n)的算法并不多见,因为高效率的同时,门槛也越高,我们常了解到的二分算法只能在有序数组中使用,如果数组无序,我们就不能保证目标元素在左或右区间,就不能一次排除一般的元素

📚循环条件

循环条件是 left<right 还是 left<=right ? 其实就是考虑left、right相遇之后要不要进入循环

①:目标元素(不重复)

mid指针每次更新前都会进行一次判断,如果不是目标元素,则更新继续进入循环;当left、right相遇时,同样需要进行判断,如果还不是目标元素,则没有结果,这个判断和前面的判断一致,不需要特殊处理,所以循环条件是left<=right。

②:目标区间的端点

当left与right相遇后, 如果当前值不为目标值,那么更新left或right指针,会正常退出循环;如果当前值是目标值,那么left与right指针都会停留在当前位置,此时就进入了死循环。为了避免死循环,我们需要将循环条件设成left<right,并且在循环外部额外判断一次。

❓只能是有序数组吗

✅其实并不是,二分算法的巧妙就巧妙在,同样适用于一些无序的场景,后面会碰到具体例题。

📖二、具体运用 

1.⼆分查找

难度等级:⭐⭐⭐

题目链接:704. 二分查找 - 力扣(LeetCode)

题目描述:

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1


示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
算法思路

这种情况就是二分查找的基础玩法,查找一个不重复的目标元素, 从待遍历数组的中心位置开始,判断元素大小,如果>目标值,则更新到左区间中点;<目标值,更新到右区间中点。

算法流程

①:定义left、right、mid指针,mid指向left、right的中点位置(左右皆可)

②:判断mid指向元素

       a.>目标值,right指向mid前一个位置,更新mid

       b.<目标值,left指向mid后一个位置,更新mid

       c.=目标值,返回当前位置

③:执行到此处说明数组不存在目标值,返回空

代码
class Solution {
public:int search(vector<int>& nums, int target) {int left = 0,right = nums.size()-1,mid = (left+right)/2;while(left<=right){if(nums[mid]>target) right = mid-1;else if(nums[mid]<target) left = mid+1;mid = (left+right)/2;if(nums[mid]==target) return mid;}return -1;}
};

2.查找元素的第⼀个和最后⼀个位置

难度等级:⭐⭐⭐⭐

题目链接:34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣(LeetCode)

题目描述:

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]
算法思路

这道题目就是查找连续区间的端点的情况,查找左右端点需要分别进行。在查找时需要注意细节的处理:左右临界的选择、中点的选择 、循环条件(left<right)

算法流程

找区间左端点:

①:定义left、right、mid,mid指向left、right的左中点

②:判断mid元素

       a.<目标值,right指向mid后一个位置,更新mid

       b.>=目标值,left指向mid,更新mid

③:此时left、right相遇,进行判断,如果=目标值,记录下标;否则返回空

找区间右端点:

①:定义left、right、mid,mid指向left、right的右中点

②:判断mid元素

       a.>目标值,left指向mid前一个位置,更新mid

       b.<=目标值,right指向mid,更新mid

③:此时left、right相遇,进行判断,如果=目标值,记录下标;否则返回空

代码
class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.size() == 0) return {-1,-1};int left = 0,right = nums.size()-1,mid;vector<int> ret = {-1,-1};while(left<right){mid = (left+right)/2;if(nums[mid]>=target) right = mid;else left = mid+1;}if(nums[left]==target) ret[0] = left;left = 0,right = nums.size()-1;while(left<right){mid = (left+right)/2 + 1;if(nums[mid]>target) right = mid-1;else left = mid;}if(nums[right]==target) ret[1] = right;return ret;}
};

3.x的平⽅根

难度等级:⭐⭐⭐

题目链接:69. x 的平方根 - 力扣(LeetCode)

题目描述:

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。
算法思路

找一个数的平方根,暴力枚举的思路是:在小于该数的数组中从第一个元素开始,判断当前元素的平方是否为目标元素。

用二分算法进行优化: 在小于该数的数组中,从中间元素开始判断,之后更新成左右区间的中点继续判断。

在这道题中并不需要真的建立一个数组,将left、right、mid就直接是对应的值

代码
class Solution {
public:int mySqrt(int x) {if(x==0) return 0;if(x==1) return 1;long long left = 1,right = x-1,mid;while(left<right){mid = (left+right)/2 + 1;if(mid*mid > (long long)x) right = mid-1;else left = mid;}return right;}
};

4.⼭峰数组的峰顶

难度等级:⭐⭐⭐⭐

题目链接:852. 山脉数组的峰顶索引 - 力扣(LeetCode)

题目描述:

给定一个长度为 n 的整数 山脉 数组 arr ,其中的值递增到一个 峰值元素 然后递减。

返回峰值元素的下标。

你必须设计并实现时间复杂度为 O(log(n)) 的解决方案。

示例 1:

输入:arr = [0,1,0]
输出:1

示例 2:

输入:arr = [0,2,1,0]
输出:1

示例 3:

输入:arr = [0,10,5,2]
输出:1
算法思路

这道题的暴力枚举思路很好想,从头遍历数组,与后一个元素进行判断,如果大于后一个元素,说明当前位置就是峰顶。

但是题目要求时间复杂度为O(logn) ,说明指引我们用二分算法思想解决:

但是这道题并不是一个有序数组,我们也不能将其变成有序数组(改变了峰顶的下标),那么还能用二分进行解决吗?

✅当然可以,实际上,二分算法并不局限于有序数组,在无序数组中,只要该数组具有二段性,就依然可以使用二分进行解决:

我们可以把数组看成两个区间,其中6是我们的峰顶,而寻找峰顶的问题就转化成了寻找连续区间a的右端点,如此以来就可以用二分进行解决了。

算法流程

①:定义left、right、mid,由于寻找的是区间右端点,根据极端情况判断,mid应该等于left、right的右中点;

②:判断mid元素

       a.<左元素,说明一定在b区间,则right指向mid前一个位置,更新mid

       b.>右元素,说明在a区间,此时可能是峰顶,left指向mid保存当前位置,更新mid

③:此时left、right相遇处即为峰顶

代码
class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int left=0,right=arr.size()-1,mid;while(left<right){mid = (left+right)/2 + 1;if(arr[mid]>arr[mid-1]) left = mid;else right = mid-1;}return left;}
};

5.点名

 难度等级:⭐⭐⭐

题目链接:LCR 173. 点名 - 力扣(LeetCode)

题目描述:

某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席,请返回他的学号。

示例 1:

输入: records = [0,1,2,3,5]
输出: 4

示例 2:

输入: records = [0, 1, 2, 3, 4, 5, 6, 8]
输出: 7
算法思路

这道题目是让我们寻找连续数组中缺失的元素,解决方法其实有很多,可以遍历数组,也可以用哈希表解决,但是这道题最快的方法还是二分查找:

同样可以将数组看成a,b两个区间,而题目最终是让我们寻找区间a的右端点,与上一道题目类似,最终我们需要返回的是 区间a的右端点 的下一个下标。

代码
class Solution {
public:int takeAttendance(vector<int>& r) {if(r[0]!=0) return 0;int left = 0,right = r.size()-1,mid;while(left<right){mid = (left+right)/2 + 1;if(r[mid]>mid) right=mid-1;else left=mid;}return left+1;}
};

📖三、总结

二分算法是一种经典且高效的查询方法,核心在于通过不断将查找范围缩小为一半,从而大幅降低查找的时间复杂度,从 O(n)优化为 O(log⁡n)。要注意的是,算法在实际应用中有几个关键细节,如左右临界的处理、中点的选择,以及避免死循环的循环条件设计。

我通过多个具体例题,我们可以体会到二分算法的灵活性和强大之处:其不仅适用于有序数组,还可在满足一定性质的无序场景中巧妙运用


以上就是【优选算法篇·第三章:二分算法】的全部内容,欢迎指正~ 

码文不易,还请多多关注支持,这是我持续创作的最大动力! 

相关文章:

【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道

&#x1f3ac; 个人主页&#xff1a;谁在夜里看海. &#x1f4d6; 个人专栏&#xff1a;《C系列》《Linux系列》《算法系列》 ⛰️ 一念既出&#xff0c;万山无阻 目录 &#x1f4d6;一、算法思想 细节问题 &#x1f4da;左右临界 &#x1f4da;中点选择 &#x1f4da;…...

基于yolov8、yolov5的铝材缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;铝材缺陷检测在现代工业生产和质量管理中具有重要意义&#xff0c;不仅能帮助企业实时监控铝材质量&#xff0c;还为智能化生产系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的铝材缺陷检测模型&#xff0c;该模型使用了大量包含…...

计算机光电成像理论基础

一、透过散射介质成像 1.1 光在散射介质中传输 光子携带物体信息并进行成像的过程是一个涉及光与物质相互作用的物理现象。这个过程可以分为几个步骤来理解&#xff1a; 1. **光的发射或反射**&#xff1a; - 自然界中的物体可以发射光&#xff08;如太阳&#xff09;&am…...

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像

【QNX+Android虚拟化方案】125 - 如何创建android-spare镜像 1. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法一2. Android侧创建 (ext4 / sparse) test_img.img 镜像 方法二3. qnx 侧 分区透传Android 配置3.1 配置分区透传3.2 Android 侧分区 rename3.3 创建挂载目…...

深度学习基础小结_项目实战:手机价格预测

目录 库函数导入 一、构建数据集 二、构建分类网络模型 三、编写训练函数 四、编写评估函数 五、网络性能调优 鲍勃开了自己的手机公司。他想与苹果、三星等大公司展开硬仗。 他不知道如何估算自己公司生产的手机的价格。在这个竞争激烈的手机市场&#xff0c;你不能简单地…...

EMall实践DDD模拟电商系统总结

目录 一、事件风暴 二、系统用例 三、领域上下文 四、架构设计 &#xff08;一&#xff09;六边形架构 &#xff08;二&#xff09;系统分层 五、系统实现 &#xff08;一&#xff09;项目结构 &#xff08;二&#xff09;提交订单功能实现 &#xff08;三&#xff0…...

【随笔】AI技术在电商中的应用

这几年&#xff0c;伴随着ChatGPT开始的AI浪潮席卷全球&#xff0c;从聊天场景逐步向多场景扩散&#xff0c;形成了广泛开花的现象。至今&#xff0c;虽然在部分场景的进展已经略显疲态&#xff0c;但当前的这种趋势仍然还在不断的扩展。不少公司&#xff0c;甚至有不少大型电商…...

序列式容器详细攻略(vector、list)C++

vector std::vector 是 STL 提供的 内存连续的、可变长度 的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。 为什么要使用 vector 作为 OIer,对程序效率的追求远比对工程级别的稳定性要高得多,而 vector 由于其对内存的动态处理,…...

快速启动项目

1 后端项目 https://gitee.com/liuyunkai666/gungun-boot.git 分支&#xff1a; mini 是 springboot3 jdk17 的基础版本&#xff0c;后续其他功能模块陆续在其基础上追加即可​。 1.1 必备环境 1.1.1 mysql 创建一个 自定义名称 数据库&#xff0c;【只要】 执行对应数据库…...

springboot347基于web的铁路订票管理系统(论文+源码)_kaic

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统铁路订票管理采取了人工的管理方法&#xff0c;但这种管理方法存在着许多弊端&#xff0c;比如效率低…...

使用API管理Dynadot域名,在账户中添加域名服务器(Name Server)

前言 Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮箱&…...

【Linux | 计网】TCP协议深度解析:从连接管理到流量控制与滑动窗口

目录 前言&#xff1a; 1、三次握手和四次挥手的联系&#xff1a; 为什么挥手必须要将ACK和FIN分开呢&#xff1f; 2.理解 CLOSE_WAIT 状态 CLOSE_WAIT状态的特点 3.FIN_WAIT状态讲解 3.1、FIN_WAIT_1状态 3.2、FIN_WAIT_2状态 3.3、FIN_WAIT状态的作用与意义 4.理解…...

go语言的成神之路-筑基篇-对文件的操作

目录 一、对文件的读写 Reader 接口 Writer接口 copy接口 bufio的使用 ioutil库 二、cat命令 三、包 1. 包的声明 2. 导入包 3. 包的可见性 4. 包的初始化 5. 标准库包 6. 第三方包 7. 包的组织 8. 包的别名 9. 包的路径 10. 包的版本管理 四、go mod 1. 初始…...

两道数据结构编程题

1.写出在顺序存储结构下将线性表逆转的算法&#xff0c;要求使用最少的附加空间。 解&#xff1a;输入&#xff1a;长度为n的线性表数组A(1:n) 输出&#xff1a;逆转后的长度为n的线性表数组A(1:n)。 C语言描述如下&#xff08;其中ET为数据元素的类型&#xff09;&#xff1a;…...

【Qt】QDateTimeEdit控件实现清空(不保留默认时间/最小时间)

一、QDateTimeEdit控件 QDateTimeEdit 提供了一个用于编辑日期和时间的控件。用户可以通过键盘或使用上下箭头键来增加或减少日期和时间值。日期和时间的显示格式根据设置的格式显示&#xff0c;可以通过 setDisplayFormat() 方法来设置。 二、如何清空 我在使用的时候&#…...

12、字符串

1、字符串概念 字符串用来存储一组字符&#xff0c;因此需要字符数组来存。 C语言中字符串的表示 C语言里面字符串只能用字符数组来存 字符串要求这个数组的末尾必须至少有一个\0 char ch1[] {a,b,c}; // 不是字符串 char ch2[5] {h,e,l,l,o}; // 不是字符串 char…...

DPDK用户态协议栈-Tcp Posix API 1

和udp一样&#xff0c;我们需要实现和系统调用一样的接口来实现我们的tcp server。先来看看我们之前写的unix_tcp使用了哪些接口&#xff0c;这边我加上两个系统调用&#xff0c;分别是接收数据和发送数据。 #include <stdio.h> #include <arpa/inet.h> #include …...

【人工智能-科普】图神经网络(GNN):与传统神经网络的区别与优势

文章目录 图神经网络(GNN):与传统神经网络的区别与优势什么是图神经网络?图的基本概念GNN的工作原理GNN与传统神经网络的不同1. 数据结构的不同2. 信息传递方式的不同3. 模型的可扩展性4. 局部与全局信息的结合GNN的应用领域总结图神经网络(GNN):与传统神经网络的区别与…...

LabVIEW实现UDP通信

目录 1、UDP通信原理 2、硬件环境部署 3、云端环境部署 4、UDP通信函数 5、程序架构 6、前面板设计 7、程序框图设计 8、测试验证 本专栏以LabVIEW为开发平台,讲解物联网通信组网原理与开发方法,覆盖RS232、TCP、MQTT、蓝牙、Wi-Fi、NB-IoT等协议。 结合实际案例,展示如何利…...

[pdf,epub]228页《分析模式》漫谈合集01-45提供下载

《分析模式》漫谈合集01-45的pdf、epub文件提供下载。已上传至本号的CSDN资源。 如果CSDN资源下载有问题&#xff0c;可到umlchina.com/url/ap.html。 已排版成适合手机阅读&#xff0c;pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》&#xff1f; ★[缝合故事]…...

Kafka的消费消息是如何传递的?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka的消费消息是如何传递的&#xff1f;】面试题。希望对大家有帮助&#xff1b; Kafka的消费消息是如何传递的&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;消息的消费是通过消费…...

二分查找(Java实现)(1)

二分查找&#xff08;Java实现&#xff09;&#xff08;1&#xff09; leetcode 34.排序数组中查找元素第一个和最后一个位置 题目描述: 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如…...

力扣103.二叉树的锯齿形层序遍历

题目描述 题目链接103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff…...

Search with Orama

1.前言 在不久之前&#xff0c;我把 DevNow 的搜索组件通过 Lunr 进行了重构&#xff0c;从前端角度实现了对文章内容的搜索&#xff0c;但是在使用体验上&#xff0c;感觉不是特别好&#xff0c;大概有如下几个原因&#xff1a; 社区的文章数量比较少&#xff0c;项目的 Com…...

一万台服务器用saltstack还是ansible?

一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器&#xff0c;取决于几个关键因素&#xff0c;如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析&#xff0c;帮助你做出决策&#xff1a; SaltStack&…...

计算机类大厂实习春招秋招开发算法面试问答练习题

计算机类大厂实习春招秋招开发算法面试问答练习题 下面有十个非常重要且常问,面试者却注意不到的问题,我们一个个来看,一个个来学。 线程创建到删除过程中,底层是怎么实现的 1.线程创建 线程创建是线程生命周期的起点。在操作系统中,线程可以通过多种方式创建,但无论哪…...

【热门主题】000068 筑牢网络安全防线:守护数字世界的坚实堡垒

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

RPC与HTTP调用模式的架构差异

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用是两种常见的通信模式&#xff0c;它们在架构上有以下一些主要差异&#xff1a; 协议层面 RPC&#xff1a;通常使用自定义的二进制协议&#xff0c;对数据进行高效的序列化和反序列化&am…...

计算机网络之传输层协议UDP

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络之传输层协议UDP 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…...

Uniapp 微信小程序内打开web网页

技术栈&#xff1a;Uniapp Vue3 简介 实际业务中有时候会需要在本微信小程序内打开web页面&#xff0c;这时候可以封装一个路由页面专门用于此场景。 在路由跳转的时候携带路由参数&#xff0c;拼接上web url&#xff0c;接收页面进行参数接收即可。 实现 webview页面 新…...

wordpress 新浪/seo软文推广工具

本文测试通过条件&#xff1a; VMware-Workstation-Pro-14.0.0.6661328 Ubuntu 16.04 先来一种物理卷和逻辑卷的关系图&#xff1a; 本图拍自书籍&#xff1a;Linux命令行与Shell脚本编程大全(第三版155页) 方法步骤&#xff1a; 一 在虚拟机中添加一块4G的硬盘&#xff0c;…...

怎样选择高性价比的建站公司/sem搜索

import export 这两个家伙对应的就是es6自己的module功能。 我们之前写的Javascript一直都没有模块化的体系&#xff0c;无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小工程&#xff0c;再用一种简单的方法把这些小工程连接在一起。 这有可能导致两个问题&…...

自助个人网站注册/磐石网站seo

在研究如何更好效的管理公司电脑&#xff0c;限制客户端安装和运行各种公司列入黑名单的软件时&#xff0c;了解了一下XP以上系统的组策略里新加入的软件限制策略&#xff0c;发现运用此策略也能实现一些其它功能哦~~~~~ 上网的朋友都知道&#xff0c;有时候不小心打开了带病毒…...

做音响的是哪个网站/网络安全培训机构哪家好

描述 外星人逐渐逼近&#xff0c;为了保护地球&#xff0c;现在决定直接在外空进行战斗。 现在我们有N个导弹。需要在最短的时间内&#xff0c;用这N个导弹摧毁敌方n个目标(1个导弹只能摧毁1个目标)。N个导弹和目标的位置不一定相同&#xff0c;但是给每个导弹确定目标是一件很…...

如何购买网站/百度搜索资源管理平台

题目地址(559. N 叉树的最大深度) https://leetcode-cn.com/problems/maximum-depth-of-n-ary-tree/ 题目描述 给定一个 N 叉树&#xff0c;找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示&#xff0c;每组子节…...

男女做暧昧小视频网站/公司网站开发费用

英文名称&#xff1a;TCO-PEG3-FITC 中文名称&#xff1a;反式环辛烯-三聚乙二醇-荧光素 分子式&#xff1a;C38H43N3O10S 分子量&#xff1a;733.83 纯度 gt;95% 外观&#xff1a;黄色固体 储存条件&#xff1a;-20C&#xff0c;避光避湿 用途&#xff1a;仅供科研使用…...