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

【ARTS】【LeetCode-704】二分查找算法

目录

前言

什么是ARTS?

算法

力扣704题

二分查找

基本思想:

二分查找算法(递归的方式):

经典写法(找单值):

代码分析:

经典写法(找数组即多个返回值)

代码分析

经典题目

题目描述:

官方题解

深入思考

模版一 (相错终止/左闭右闭)

相等返回情形

情形1 (大于等于)

情形2 (大于)

情形3 (小于等于)

情形4 (小于)

模版二 (相等终止/左闭右开)

相等返回情形

情形1 (大于等于)

情形2 (大于)

情形3 (小于等于)

情形4 (小于)

从「y总模版」到「模版二」之「左开右闭」

相等返回情形

情形1 (大于等于)

情形2 (大于)

情形3 (小于等于)

情形4 (小于)

模版三 (相邻终止/左开右开)

相等返回情形

情形1 (大于等于)

情形2 (大于)

情形3 (小于等于)

情形4 (小于)

参考资料:


前言

仅做学习使用,侵删

什么是ARTS?

算法(Algorithm): 每周至少一道LeetCode算法题,加强编程训练和算法学习

阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平

技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点

分享(Share):分析一篇有关点和思考的技术文章,建立影响力,输出价值观

算法

力扣704题

一道经典的二分查找题目

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

二分查找

基本思想:

二分查找算法(递归的方式):
  1. 创建一个查找算法,参数列表有left,right,findValue,array
  2. 创建一个变量mid,通过left和right获取mid
  3. 通过对mid的比较,决定递归方向
  4. 最后判断是否能找到
📌

请注意,所有的二分查找算法都是建立在数组有序的基础上的,如果带查找序列是无序序列,不能用二分查找算法,只能使用其他查找算法,谨记!

经典写法(找单值):

public static int binarySearchSingle(int[] array,int left,int right,int findValue) {if(left > right || findValue > array[length-1]) {return -1;}var mid = left + 1/2*(right - left);var midValue = array[mid];if(findValue > midValue) {return binarySearchSingle(array,mid+1,right,findValue);}else if(findValue < midValue) {return binarySearchSingle(array,left,mid-1,findValue);}else {return mid;}}
代码分析:
  1. left是左索引,right是右索引,应该一开始就被赋值为0与array.length-1(因为带查找的值在他们两个索引之间,即[left,right]区间内有带查找元素)
  2. findValue是待查找的值,array是带查找的数组
  3. 二分查找法顾名思义是折半,所以mid = 1/2(left + right) = left + 1/2*(right - left)

注意:后面的表达式非常的重要,是折半查找发的关键

  1. 将mid下标对应的值放入midValue

情况:

  1. 如果midValue大于findValue,由于有序,说明待查找的元素在mid右边且不为mid,所以得出了[mid+1,right]的范围内有带查找元素,故left = mid+1
  2. 如果midVvalue小于findValue,由于有序,说明带查找的元素在mid左边且不为mid,所以得出了[left,mid-1]的范围内有带查找元素,故right = mid-1
  3. 如果midValue = findValue,说明找到了该元素,直接返回mid即可,mid是下标
  4. 如果left > right,由于没有这样的区间(即区间左边必须小于右边的值),说明找不到,直接返回-1
  5. 如果findValue大于列表的最后一个值,由于有序,最后一个值为最大值,说明列表里面不可能有与findValue相同的值,直接返回-1

经典写法(找数组即多个返回值)

 public static List<Integer> binarySearchMore(int[] array,int left,int right,int findValue) {if(left > right || findValue > array[length-1]) {return new ArrayList<Integer>();}var mid = (left + right)/2;var midValue = array[mid];if(findValue > midValue) {return binarySearchMore(array,mid+1,right,findValue);}else if(findValue < midValue) {return binarySearchMore(array,left,mid-1,findValue);}else {var list = new ArrayList<Integer>();list.add(mid);var temp = mid - 1;while(temp > 0 && array[temp] == findValue) {list.add(temp--);}temp = mid + 1;while (temp < array.length && array[temp] == findValue) {list.add(temp++);}return list;}
代码分析
  1. 注意:由于其他代码都一样,我们重点分析一下else里面的代码
  2. 当程序进入else时,说明找到了该元素,由于我们要实现多元素返回,我们可以借助集合,故我们要new一个ArrayLsit<Integer>
  3. 先将该元素add进去集合中
  4. 创建一个辅助索引temp,赋值为mid-1(目的:向左遍历)
  5. 通过while循环,如果temp>0(防止数组下标越界异常),且array[temp] = findValue,说明此元素也是我们要找的元素,添加入集合中
  6. 如果while布尔表达式为false,说明temp遍历到了最左边或是不相等,由于列表的有序性,如果不相等,则前面的元素一定比midValue小,不可能再有带查找的元素,直接结束向左遍历
  7. temp赋值为mid+1(目的:向右遍历)
  8. 同理5~6
  9. 最后返回list即可
  10. 特别注意的是,如果找不到,我们返回一个空的集合,所以在最前面new了一个空集合

经典题目

题目描述:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。示例 1:输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1提示:你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
官方题解
class Solution {public int search(int[] nums, int target) {int left = 0,right = nums.length - 1;while (left <= right){int mid = (right - left) / 2 +left;int num = nums[mid];if (num == target) {return mid;} else if (num > target) {right = mid - 1;} else {left = mid + 1;}}return -1;}
}

深入思考

二分查找本身思想比较简单,但是实际上二分查找在编写的过程中会出现各种各样的问题,如无限循环等,针对这道题可能会不会有这种问题。特别是根据上下边界指针的循环确定问题。下面给出四种情形下的模版参考,每一种模版下又分为四种情况

以下资料参考 二分查找从入门到入睡 - 力扣(LeetCode)推荐去阅读原文,这里只是做摘录,给出对应情况的模版,具体分析参考原文,也可点击对应的模版链接直接跳转。
作者:yukiyama
链接: https://leetcode.cn/circle/discuss/ooxfo8/
来源:力扣(LeetCode)
模版一 (相错终止/左闭右闭)
相等返回情形
// 模版一「相等返回」写法
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l <= r){ // 循环条件int c = l + (r - l) / 2; // 中间值坐标if(nums[c] == target) return c; // 相等返回else if(nums[c] < target) l = c + 1; // #1 更新后l左侧元素「必」小于targetelse r = c - 1; // #2 更新后r右侧元素「必」大于target }return -1; }
}
情形1 (大于等于)
// 模版一「一般」情形1: 大于等于
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l <= r){int c = l + (r - l) / 2;if(nums[c] < target) l = c + 1; // #1 更新后l左侧元素「必」小于targetelse r = c - 1; // #2 更新后r右侧「必」大于等于target}// return (l == nums.length || nums[l] != target) ? -1 : l; // 704题的返回,处理:相等/不等return l == nums.length ? -1 : l; // 处理: 相等/刚好大于/不存在}
}
情形2 (大于)
// 模版一「一般」情形2: 大于
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l <= r){int c = l + (r - l) / 2;if(nums[c] <= target) l = c + 1; // #1 更新后l左侧元素「必」小于等于targetelse r = c - 1; // #2 更新后r右侧「必」大于target}return l == nums.length ? -1 : l; // 处理: 刚好大于/不存在}
}
情形3 (小于等于)
// 模版一「一般」情形3: 小于等于
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l <= r){int c = l + (r - l) / 2;if(nums[c] <= target) l = c + 1; // #1 更新后l左侧「必」小于等于targetelse r = c - 1; // #2 更新后r右侧「必」大于target}// return (r == -1 || nums[r] != target) ? -1 : r; // 704题的返回,处理:相等/不等return r; // 处理: 相等/刚好小于/不存在}
}
情形4 (小于)
// 模版一「一般」情形4: 小于
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while(l <= r){int c = l + (r - l) / 2;if(nums[c] < target) l = c + 1; // #1 更新后l左侧元素「必」小于targetelse r = c - 1; // #2 更新后r右侧「必」大于等于target}return r; // 处理: 相等/刚好小于/不存在}
}
模版二 (相等终止/左闭右开)
相等返回情形
// 模版二「相等返回」写法
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length;while(l < r){int c = l + (r - l) / 2;if(nums[c] == target) return c; // 找到目标值直接返回else if(nums[c] < target) l = c + 1; // #1 更新后l左侧元素「必」小于target else r = c; // nums[c] > target #2 更新后r及其右侧「必」大于target}return -1;}
}
情形1 (大于等于)
// 模版二「一般」情形1: 大于等于
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length;while(l < r){int c = l + (r - l) / 2;if(nums[c] < target) l = c + 1; // #1 更新后l左侧元素「必」小于target else r = c; // #2 更新后r及r右侧「必」大于等于target}// return (r != nums.length && nums[r] == target) ? r : -1; // 704题的返回,处理:相等/不等return r != nums.length ? r : -1; // 处理:等于/刚好大于/不存在}
}
情形2 (大于)
// 模版二「一般」情形2: 大于
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length;while(l < r){int c = l + (r - l) / 2;if(nums[c] <= target) l = c + 1; // #1 更新后l左侧「必」小于等于target else r = c; // #2 更新后r及其右侧「必」大于target}return r == nums.length ? -1 : r; // 处理:刚好大于/不存在}
}
情形3 (小于等于)
// 模版二「一般」写法之情形3(正确版2)
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length;while(l < r){int c = l + (r - l) / 2;if(nums[c] <= target) l = c + 1; // #1 更新后l左侧元素「必」小于等于target else r = c; // #2 更新后r及其右侧「必」大于target}// 原先针对 704 的返回有漏洞,该修改(下面一行)来自 Hankai Xia @masterx89 同学,感谢// return (r > 0 && nums[r - 1] == target) ? r - 1 : -1; // 704题的返回,处理:相等/不等// return r - 1; // 通过分析target的三种情形得到的统一返回值return r > 0 ? r - 1 : -1; // 但写成此种形式,逻辑更佳 (来自Hankai Xia @masterx89 的建议)}
}
情形4 (小于)
// 模版二「一般」情形4: 小于
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length;while(l < r){int c = l + (r - l) / 2;if(nums[c] < target) l = c + 1; // #1 更新后l左侧元素「必」小于target else r = c; // #2 更新后r及其右侧「必」大于等于target}return r - 1; // 处理:刚好小于/不存在}
}作者:yukiyama
链接:https://leetcode.cn/circle/discuss/ooxfo8/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
从「y总模版」到「模版二」之「左开右闭」
相等返回情形
// 模版二(左开右闭)相等返回情形
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length - 1;while(l < r){int c = l + (r - l + 1) / 2;if(nums[c] == target) return c;if(nums[c] < target) l = c; // #1 更新后l及l左侧元素「必」小于target else r = c - 1; // #2 更新后r右侧「必」大于target}return -1; // 704题的返回}
}
情形1 (大于等于)
// 模版二(左开右闭)「一般」情形1(大于等于)
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length - 1;while(l < r){int c = l + (r - l + 1) / 2;if(nums[c] < target) l = c; // #1 更新后l及l左侧元素「必」小于target else r = c - 1; // #2 更新后r右侧「必」大于等于target}// return (r == nums.length - 1 || nums[r + 1] != target) ? -1 : r + 1; // 704题的返回,处理:相等/不等return r == nums.length - 1 ? -1 : r + 1;}
}
情形2 (大于)
// 模版二(左开右闭)「一般」情形2(大于)
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length - 1;while(l < r){int c = l + (r - l + 1) / 2;if(nums[c] <= target) l = c; // #1 更新后l及l左侧元素「必」小于等于target else r = c - 1; // #2 更新后r右侧「必」大于target}return r == nums.length ? -1 : r + 1;}
}
情形3 (小于等于)
// 模版二(左开右闭)「一般」情形3(小于等于)
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length - 1;while(l < r){int c = l + (r - l + 1) / 2;if(nums[c] <= target) l = c; // #1 更新后l及l左侧元素「必」小于等于target else r = c - 1; // #2 更新后r右侧「必」大于target}// return (l == -1 || nums[l] != target) ? -1 : l; // 704题的返回,处理:相等/不等return l;}
}
情形4 (小于)
// 模版二(左开右闭)「一般」情形4(小于)
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length - 1;while(l < r){int c = l + (r - l + 1) / 2;if(nums[c] < target) l = c; // #1 更新后l及l左侧元素「必」小于target else r = c - 1; // #2 更新后r右侧「必」大于等于target}return l;}
}
模版三 (相邻终止/左开右开)
相等返回情形
// 模版三「相等返回」写法
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length;while(l + 1 < r){int c = l + (r - l) / 2;if(nums[c] == target) return c; // 找到目标值直接返回else if(nums[c] < target) l = c; // #1 更新后l及其左侧元素「必」小于target else r = c; // nums[c] > target #2 更新后r及其右侧「必」大于target}return -1;}
}
情形1 (大于等于)
// 模版三「一般」情形1: 大于等于
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length;while(l + 1 < r){int c = l + (r - l) / 2;if(nums[c] < target) l = c; // #1 更新后l及其左侧元素「必」小于targetelse r = c; // #2 更新后r及其右侧「必」大于等于target}// return (r == nums.length || nums[r] != target) ? -1 : r; // 704题的返回,处理:相等/不等return r == nums.length ? -1 : r; // 处理: 相等/刚好大于/不存在}
}
情形2 (大于)
// 模版三「一般」情形2: 大于
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length;while(l + 1 < r){int c = l + (r - l) / 2;if(nums[c] <= target) l = c; // #1 更新后l及其左侧元素「必」小于等于targetelse r = c; // #2 更新后r及其右侧「必」大于target}return r == nums.length ? -1 : r; // 处理: 相等/刚好大于/不存在}
}
情形3 (小于等于)
// 模版三「一般」情形1: 大于等于
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length;while(l + 1 < r){int c = l + (r - l) / 2;if(nums[c] < target) l = c; // #1 更新后l及其左侧元素「必」小于targetelse r = c; // #2 更新后r及其右侧「必」大于等于target}// return (r == nums.length || nums[r] != target) ? -1 : r; // 704题的返回,处理:相等/不等return r == nums.length ? -1 : r; // 处理: 相等/刚好大于/不存在}
}
情形4 (小于)
// 模版三「一般」情形4: 小于
class Solution {public int search(int[] nums, int target) {int l = -1, r = nums.length;while(l + 1 < r){int c = l + (r - l) / 2;if(nums[c] < target) l = c; // #1 更新后l及其左侧元素「必」小于targetelse r = c; // #2 更新后r及其右侧「必」大于等于target}return l;}
}

拿到题目可以直接对题目进行分析,按照情形套用对应的模板

下面是一些题目

本节给出如下二分查找题目,在理解本文内容后,应当不难做出。「题解」一列中给出了相应的题解以供读者自查。

704. 二分查找简单题解

69. x 的平方根简单题解

374. 猜数字大小简单题解

剑指 Offer 53 - II. 0~n-1中缺失的数字简单题解

33. 搜索旋转排序数组中等题解

153. 寻找旋转排序数组中的最小值中等题解

154. 寻找旋转排序数组中的最小值 II困难题解

81. 搜索旋转排序数组 II中等题解

278. 第一个错误的版本简单题解

162. 寻找峰值中等题解

34. 在排序数组中查找元素的第一个和最后一个位置中等题解

35. 搜索插入位置简单题解

74. 搜索二维矩阵中等题解

658. 找到 K 个最接近的元素中等题解

29. 两数相除中等题解

875. 爱吃香蕉的珂珂中等题解

668. 乘法表中第k小的数困难题解

462. 最少移动次数使数组元素相等 II中等题解

436. 寻找右区间中等题解

528. 按权重随机选择中等题解

497. 非重叠矩形中的随机点中等题解

240. 搜索二维矩阵 II中等题解

4. 寻找两个正序数组的中位数困难题解

参考资料:

  1. 二分查找从入门到入睡 - 力扣(LeetCode)
  2. 代码随想录
  3. 704. 二分查找 - 力扣(LeetCode)

相关文章:

【ARTS】【LeetCode-704】二分查找算法

目录 前言 什么是ARTS&#xff1f; 算法 力扣704题 二分查找 基本思想&#xff1a; 二分查找算法(递归的方式): 经典写法(找单值): 代码分析: 经典写法(找数组即多个返回值) 代码分析 经典题目 题目描述&#xff1a; 官方题解 深入思考 模版一 (相错终止/左闭右闭) 相等返回情形…...

Vue.js 配置路由:基本的路由匹配

Vue.js 配置路由&#xff1a;基本的路由匹配 在 Vue.js 应用中&#xff0c;Vue Router 是官方提供的路由管理器&#xff0c;用于在单页应用&#xff08;SPA&#xff09;中管理不同的视图。通过配置路由&#xff0c;应用可以根据 URL 的变化展示相应的组件。 基本的路由匹配是…...

鸿蒙(HarmonyOS)Json格式转实体对象(2)

下面是一个复杂的json体。 怎么把json转实体类&#xff0c;首先要定义类 import List from ohos.util.List export class InfoModel{msg: stringcars: List<Cars>code: numberpermissions: List<string>roles: List<string>user: User}class Cars{createBy:…...

代码随想录 栈与队列 test 6

239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 每次只取窗口中最大值&#xff0c;这个最大值可能在后面的滑动中保持不变&#xff0c;而比最大值小的值且在最大值之前出现的值没必要保留&#xff0c;因此可以通过单调队列利用这个特性。 这个单调队列具有如下…...

动手学深度学习2025.1.23

一、预备知识 1.数据操作 &#xff08;1&#xff09;数据访问&#xff1a; 一个元素&#xff1a;[1,2] //行下标为1&#xff0c;列下标为2的元素 一行元素&#xff1a;[1,:] //行下标为1的所有元素 一列元素&#xff1a;[:,1] //列下标为1的所有元素 子区域&#xff1a;[…...

生存网络与mlr3proba

在R语言中,mlr3包是一个用于机器学习的强大工具包。它提供了一种简单且灵活的方式来执行超参数调整。 生存网络是一种用于生存分析的模型,常用在医学和生物学领域。生存分析是一种统计方法,用于研究事件发生的时间和相关因素对事件发生的影响。生存网络可以用来预测个体在给…...

C#与AI的共同发展

C#与人工智能(AI)的共同发展反映了编程语言随着技术进步而演变&#xff0c;以适应新的挑战和需要。自2000年微软推出C#以来&#xff0c;这门语言经历了多次迭代&#xff0c;不仅成为了.NET平台的主要编程语言之一&#xff0c;还逐渐成为构建各种类型应用程序的强大工具。随着时…...

2000-2020年各省第二产业增加值数据

2000-2020年各省第二产业增加值数据 1、时间&#xff1a;2000-2020年 2、来源&#xff1a;国家统计局、统计年鉴、各省年鉴 3、指标&#xff1a;行政区划代码、地区、年份、第二产业增加值 4、范围&#xff1a;31省 5、指标解释&#xff1a;第二产业增加值是指在一个国家或…...

【MySQL】 库的操作

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;【MySQL】 库的操作 发布时间&#xff1a;2025.1.23 隶属专栏&#xff1a;MySQL 目录 库的创建语法使用 编码规则认识编码集查看数据库默认的编码集和校验集查看数据库支持的编码集和校验集指定编码创建数据库验证不…...

docker 启动镜像命令集合

安装rabbitmq 参考地址&#xff1a; https://blog.csdn.net/xxpxxpoo8/article/details/122935994 docker run -it -d --namerabbit-3.8 -v /d/docker/rabbitmq-stomp/conf:/etc/rabbitmq -p 5617:5617 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 -p 25672:2…...

微信小程序获取位置服务

wx.getLocation({type: gcj02,success(res) {wx.log(定位成功);},fail(err) {wx.log(定位失败, err);wx.showModal({content: 请打开手机和小程序中的定位服务,success: (modRes) > {if (modRes.confirm) {wx.openSetting({success(setRes) {if (setRes.authSetting[scope.u…...

Docker Load后存储的镜像及更改镜像存储目录的方法

Docker Load后存储的镜像及更改镜像存储目录的方法 Docker Load后存储的镜像更改镜像存储目录的方法脚本说明注意事项Docker作为一种开源的应用容器引擎,已经广泛应用于软件开发、测试和生产环境中。通过Docker,开发者可以将应用打包成镜像,轻松地进行分发和运行。而在某些场…...

Langchain本地知识库部署

本地部署(Docker + LangChain + FAISS) 1. 概述 本地部署 LangChain-Chatchat 可以为企业提供高效、安全、可控的 AI 知识库方案。本方案基于 Docker、LangChain 和 FAISS 进行本地化部署,适用于企业内部知识库问答、私有化 AI 应用等场景。 2. 技术选型 2.1 LangChain …...

java基础学习——jdbc基础知识详细介绍

引言 数据的存储 我们在开发 java 程序时&#xff0c;数据都是存储在内存中的&#xff0c;属于临时存储&#xff0c;当程序停止或重启时&#xff0c;内存中的数据就会丢失&#xff0c;我们为了解决数据的长期存储问题&#xff0c;有以下解决方案&#xff1a; 通过 IO流书记&…...

联想电脑怎么设置u盘启动_联想电脑设置u盘启动方法(支持新旧机型)

有很多网友问联想电脑怎么设置u盘启动&#xff0c;联想电脑设置u盘启动的方法有两种&#xff0c;一是通过bios进行设置。二是通过快捷方式启动进入u盘启动。但需要注意有两种引导模式是&#xff0c;一种是uefi引导&#xff0c;一种是传统的leacy引导&#xff0c;所以需要注意制…...

C# 解析 HTML 实战指南

在网页开发和数据处理的场景中&#xff0c;经常需要从 HTML 文档里提取有用的信息。C# 作为一门强大的编程语言&#xff0c;提供了丰富的工具和库来实现 HTML 的解析。这篇博客就带你深入了解如何使用 C# 高效地解析 HTML。 一、为什么要在 C# 中解析 HTML 在实际项目中&…...

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告&#xff1a;高光谱成像技术检测食物新鲜度 检测原理&#xff1a;不同新鲜程度的食品&#xff0c;其化学成分和结构会有所不同&#xff0c;在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…...

编写0号中断的处理程序

实验内容、程序清单及运行结果 编写0号中断的处理程序&#xff08;课本实验12&#xff09; 解&#xff1a; assume cs:code code segment start: mov ax,cs mov ds,ax mov si,offset do mov ax,0 mov es,ax mov di,200h mov cx,offset doend-offset do ;安装中断例…...

“““【运用 R 语言里的“predict”函数针对 Cox 模型展开新数据的预测以及推理。】“““

主题与背景 本文主要介绍了如何在R语言中使用predict函数对已拟合的Cox比例风险模型进行新数据的预测和推理。Cox模型是一种常用的生存分析方法&#xff0c;用于评估多个因素对事件发生时间的影响。文章通过具体的代码示例展示了如何使用predict函数的不同参数来获取生存概率和…...

群晖docker获取私有化镜像http: server gave HTTP response to HTTPS client].

群晖docker获取私有化镜像提示http: server gave HTTP response to HTTPS clien 问题描述 层级时间用户事件Information2023/07/08 12:47:45cxlogeAdd image from xx.xx.31.240:1923/go-gitea/gitea:1.19.3Error2023/07/08 12:47:48cxlogeFailed to pull image [Get "http…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...