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

力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值

前言

简单、中等 √ 二分法思路很简单,但是判断边界太麻烦了!难道真的要去背模板吗

搜索插入位置

我的题解

循环条件左不超过右,目标大于中间值(向下取整)时,左=中+1,小于,右=中-1,否则直接返回mid,出循环后返回left。

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

官方题解

官解的条件:目标大于中间值时left也++,最后返回left

心得

标准的就是简洁优雅!不对称的原因在于求mid也是不对称的:向下取整。

搜索二维矩阵

此题之前做过一模一样的,不赘述。

在排序数组中查找元素的第一个和最后一个位置

我的题解

用二分法查找到这个元素之后,向两边扩展直到不等于目标值为止。

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

官方题解

直观的思路肯定是从前往后遍历一遍。用两个变量记录第一次和最后一次遇见 target 的下标,但这个方法的时间复杂度为 O(n),没有利用到数组升序排列的条件。

由于数组已经排序,因此整个数组是单调递增的,我们可以利用二分法来加速查找的过程。

考虑 target 开始和结束位置,其实我们要找的就是数组中「第一个等于 target 的位置」(记为 leftIdx)和「第一个大于 target 的位置减一」(记为 rightIdx)。

二分查找中,寻找 leftIdx 即为在数组中寻找第一个大于等于 target 的下标,寻找 rightIdx 即为在数组中寻找第一个大于 target 的下标,然后将下标减一。两者的判断条件不同,为了代码的复用,我们定义 binarySearch(nums, target, lower) 表示在 nums 数组中二分查找 target 的位置,如果 lower 为 true,则查找第一个大于等于 target 的下标,否则查找第一个大于 target 的下标。

最后,因为 target 可能不存在数组中,因此我们需要重新校验我们得到的两个下标 leftIdx 和 rightIdx,看是否符合条件,如果符合条件就返回 [leftIdx,rightIdx],不符合就返回 [−1,−1]

class Solution { 
public:int binarySearch(vector<int>& nums, int target, bool lower) {int left = 0, right = (int)nums.size() - 1, ans = (int)nums.size();while (left <= right) {int mid = (left + right) / 2;if (nums[mid] > target || (lower && nums[mid] >= target)) {right = mid - 1;ans = mid;} else {left = mid + 1;}}return ans;}vector<int> searchRange(vector<int>& nums, int target) {int leftIdx = binarySearch(nums, target, true);int rightIdx = binarySearch(nums, target, false) - 1;if (leftIdx <= rightIdx && rightIdx < nums.size() && nums[leftIdx] == target && nums[rightIdx] == target) {return vector<int>{leftIdx, rightIdx};} return vector<int>{-1, -1};}
};

心得

原来我的题解在极端情况下不是log(n),例如整个数组都是target的情况下。所以还是官解好一点(其实也不一定,n不一定比2log(n)大)。anyway其实官解先定义一个函数找目标值,不同的是多定义了一个bool变量控制right指针的移动/等号条件,当bool为true时,找的是第一个大于等于target的位置,false时找的时第一个大于target的位置。仔细想还挺有意思!

搜索旋转排序数组

我的题解

事实上我是先写了寻找最小值再写这题。找到了最小值坐标后相当于找到了两段有序数组,分别对两段有序数组进行二分查找即可。

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

官方题解

对于有序数组,可以使用二分查找的方法查找元素。

但是这道题中,数组本身不是有序的,进行旋转后只保证了数组的局部是有序的,这还能进行二分查找吗?答案是可以的。

可以发现的是,我们将数组从中间分开成左右两部分的时候,一定有一部分的数组是有序的。拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。

这启示我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid + 1, r] 哪个部分是有序的,并根据有序的那个部分确定我们该如何改变二分查找的上下界,因为我们能够根据有序的那部分判断出 target 在不在这个部分:

如果 [l, mid - 1] 是有序数组,且 target 的大小满足 [nums[l],nums[mid]),则我们应该将搜索范围缩小至 [l, mid - 1],否则在 [mid + 1, r] 中寻找。
如果 [mid, r] 是有序数组,且 target 的大小满足 (nums[mid+1],nums[r]],则我们应该将搜索范围缩小至 [mid + 1, r],否则在 [l, mid - 1] 中寻找。

class Solution {
public:int search(vector<int>& nums, int target) {int n = (int)nums.size();if (!n) {return -1;}if (n == 1) {return nums[0] == target ? 0 : -1;}int l = 0, r = n - 1;while (l <= r) {int mid = (l + r) / 2;if (nums[mid] == target) return mid;if (nums[0] <= nums[mid]) {if (nums[0] <= target && target < nums[mid]) {r = mid - 1;} else {l = mid + 1;}} else {if (nums[mid] < target && target <= nums[n - 1]) {l = mid + 1;} else {r = mid - 1;}}}return -1;}
};

心得

官解的逻辑是,中点哪边是有序的,在有序的一边判断target是否在这个区间内,如果在则把一边的边界移到这个区间中,否则把两个边界都移出区间并重复上述步骤。此题重点在于通过判断target是否在有序区间内从而缩小范围。感觉有点低估二分法了,能变形好多解法啊!!

寻找旋转排序数组中的最小值

我的题解

如果左区间有序,移动右指针,如果右区间有序移动左指针,直到两个指针相遇。写得好乱...

class Solution {
public:int findMin(vector<int>& nums) {int n = nums.size();int left = 0;int right = n - 1;int mid = ((right - left)>>1) + left;int ans = nums[left];while (left < right){ans = min(ans, nums[mid]);ans = min(ans, nums[left]);if (nums[mid] < nums[left] && nums[mid] < nums[right]){right = mid - 1;mid = (mid + left - 1)/2;}else if (nums[mid] > nums[left] && nums[mid] > nums[right]){left = mid + 1;mid = (mid + right + 1)/2;}else{break;}}return min(ans, nums[right]);}
};

官方题解

一个不包含重复元素的升序数组在经过旋转之后,可以得到下面可视化的折线图:

其中横轴表示数组元素的下标,纵轴表示数组元素的值。图中标出了最小值的位置,是我们需要查找的目标。

我们考虑数组中的最后一个元素 x:在最小值右侧的元素(不包括最后一个元素本身),它们的值一定都严格小于 x;而在最小值左侧的元素,它们的值一定都严格大于 x。因此,我们可以根据这一条性质,通过二分查找的方法找出最小值。

在二分查找的每一步中,左边界为 low,右边界为 high,区间的中点为 pivot,最小值就在该区间内。我们将中轴元素 nums[pivot] 与右边界元素 nums[high] 进行比较,可能会有以下的三种情况:

第一种情况是 nums[pivot]<nums[high]。如下图所示,这说明 nums[pivot] 是最小值右侧的元素,因此我们可以忽略二分查找区间的右半部分。

第二种情况是 nums[pivot]>nums[high]。如下图所示,这说明 nums[pivot] 是最小值左侧的元素,因此我们可以忽略二分查找区间的左半部分。

由于数组不包含重复元素,并且只要当前的区间长度不为 1,pivot 就不会与 high 重合;而如果当前的区间长度为 1,这说明我们已经可以结束二分查找了。因此不会存在 nums[pivot]=nums[high] 的情况。

当二分查找结束时,我们就得到了最小值所在的位置。

class Solution {
public:int findMin(vector<int>& nums) {int low = 0;int high = nums.size() - 1;while (low < high) {int pivot = low + (high - low) / 2;if (nums[pivot] < nums[high]) {high = pivot;}else {low = pivot + 1;}}return nums[low];}
};

心得

自己写得真是乱七八糟,官解就优雅很多。当右边比较大的时候说明右区间有序,最小值在左区间,收窄右区间(中间值有可能最小,故不越界),否则说明右区间无序,最小值在右区间,收窄左区间(中间值不可能为最小,故越界)。另外由于中间值是向下取整且循环条件是小于,故不可能等于右指针,所以无需考虑中间值=右边的情况。

二分的思想在于每次淘汰一半!!

相关文章:

力扣DAY63-67 | 热100 | 二分:搜索插入位置、搜索二维矩阵、排序数组查找元素、搜索旋转排序数组、搜索最小值

前言 简单、中等 √ 二分法思路很简单&#xff0c;但是判断边界太麻烦了&#xff01;难道真的要去背模板吗 搜索插入位置 我的题解 循环条件左不超过右&#xff0c;目标大于中间值&#xff08;向下取整&#xff09;时&#xff0c;左中1&#xff0c;小于&#xff0c;右中-1&…...

leetcode-哈希表

哈希表 127. 单词接龙 题目 字典 wordList 中从单词 beginWord 到 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s(1) -> s(2) -> ... -> s(k)&#xff1a; 每一对相邻的单词只差一个字母。 对于 1 < i < k 时&#xff0c;每个 s(i) 都在…...

信息技术有限公司项目管理手册

这篇文档是信息技术有限公司的项目管理指导手册&#xff0c;对软件公司项目管理者具有重要价值&#xff0c;主要体现在以下几个方面&#xff1a; 管理全面规范 涵盖内容广&#xff1a;从项目的整体管理到各个具体领域&#xff0c;如范围管理、进度管理、成本管理等&…...

TFTP服务调试

在tftpboot目录下进行sudo minicom 启动内核时 问题&#xff1a;程序启动卡在Loading阶段 原因&#xff1a;tftp协议的问题 、或者网卡配置的问题 解决&#xff1a;1.检查网线是否插好 多试几次 2.检查tftp服务是否正常 在minicom中调试ping pc机的ip地址 2.进入boot调…...

date-picker组件的shortcuts为什么不能配置在vue的data的return中

在 Vue 中&#xff0c;shortcuts 是一个选项&#xff0c;通常用于配置像 date-picker 这样的组件的日期快捷方式。这里有一些原因解释为什么 shortcuts 不应该配置在 data 的 return 中&#xff0c;而是应该配置在 data 的外部&#xff08;例如&#xff0c;直接作为组件的一个属…...

迭代器模式:统一数据遍历方式的设计模式

迭代器模式&#xff1a;统一数据遍历方式的设计模式 一、模式核心&#xff1a;将数据遍历逻辑与数据结构解耦 在软件开发中&#xff0c;不同的数据结构&#xff08;如数组、链表、集合&#xff09;有不同的遍历方式。如果客户端直接依赖这些数据结构的内部实现来遍历元素&…...

RocketMQ 核心架构速览

欢迎光临小站&#xff1a;致橡树 文章现有讲述比较简单&#xff0c;后续逐渐丰富各部分内容。 Apache RocketMQ 作为阿里巴巴开源的一款分布式消息中间件&#xff0c;凭借其高吞吐、低延迟、高可用等特性&#xff0c;成为金融级稳定性场景的首选解决方案。本文将深入剖析 Roc…...

kafka安装、spark安装

kafka简介 Kafka就是一个分布式的用于消息存储的消息队列。 kafka角色 Kafka中存储的消息&#xff0c;被消费后不会被删除&#xff0c;可以被重复消费&#xff0c;消息会保留多长&#xff0c;由kafka自己去配置。默认7天删除。背后的管理工作由zookeeper来管理。 kafka安装 …...

迅为RK3562开发板ARM四核A53核心板多种系统适配全开源

迅为RK3562开发板ARM四核A53核心板多种系统适配全开源 RK3562开发板(2GB内存16GB存储)...

用交换机连接两台电脑,电脑A读取/写电脑B的数据

1、第一步&#xff0c;打开控制面板中的网络和共享中心&#xff0c;如下图配置&#xff0c;电脑A和电脑B均要配置&#xff1b; 注意&#xff1a;要保证电脑A和电脑B在同一子网掩码下&#xff0c;不同的IP地址&#xff1b; 2、在电脑上同时按‘CommandR’&#xff0c;在弹出的输…...

线程入门3

synchronized修饰方法 synchronized可以修饰代码块(在线程入门2中有例子)&#xff0c;也可以修饰普通方法和静态方法。 修饰普通方法 修饰普通方法简化写法&#xff1a; 修饰静态方法 修饰静态方法简化写法&#xff1a; 注意&#xff1a;利用synchronized上锁&#xff0c;锁的…...

【C++】AVL树

目录 一、AVL树的引入 二、AVL树 &#x1f354;AVL树的概念 &#x1f35f;AVL树节点的定义 &#x1f32e;AVL树的插入 &#x1f96a;AVL树的旋转 三、AVL树的验证 四、结语 一、AVL树的引入 &#x1f31f;我们知道 map/multimap/set/multiset 这几个容器的共同点是&#…...

Java大师成长计划之第1天:Java编程基础入门

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 欢迎来到“Java大师成长计划”系列文…...

Java线程中断机制详解

中断机制是Java中一种协作式的线程停止方式&#xff0c;它提供了一种优雅的线程间通信机制&#xff0c;用于请求另一个线程停止当前工作。 中断机制的核心概念 中断标志位(Interrupt Status) 每个线程都有一个boolean类型的中断状态标志&#xff08;native方法控制&#xff09…...

gem5-gpu教程06 回归测试

gem5-gpu包括gem5风格的回归测试,以避免常见错误,并在变更集之间保持模拟系统性能的一致性。如果你想为gem5-gpu做出贡献,你必须确保你的更改通过了包含的回归测试。 回归测试是一种软件测试类型,其主要目的是确保新代码的更改没有对现有功能造成影响。在软件开发过程中,当…...

查询Hologres或postgresql中的数据

因Hologres使用postgresql的语法.所以两者查询一样. 方案1: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;/*** 一个使用简单连接池管理PostgreSQL连接的工具类。*/ publi…...

C# 文件读取

文件读取是指使用 C# 程序从计算机文件系统中获取文件内容的过程。将存储在磁盘上的文件内容加载到内存中&#xff0c;供程序处理。主要类型有&#xff1a;文本文件读取&#xff08;如 .txt, .csv, .json, .xml&#xff09;&#xff1b;二进制文件读取&#xff08;如 .jpg, .pn…...

On the Biology of a Large Language Model——Claude团队的模型理解文章【论文阅读笔记】其一CLT与LLM知识推理

这个学习笔记&#xff0c;是在精读Anthropic的博客 On the Biology of a Large Language Model 的过程中留下的笔记。 由于原文非常长&#xff0c;我会分2-3 个博客来写。 作者的思路 作者对常用的LLM特征解读工具 SAE/Transcoder 进行了优化&#xff0c;增加了跨层连接的能力…...

Postman忘记密码访问官网总是无响应

1.Header Editor插件下载 百度网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1EV6cY7TYQVgPjip3v-vhfQ 提取码&#xff1a;yyds 2.插件配置 下载规则url&#xff1a;https://azurezeng.github.io/static/HE-GoogleRedirect.json ![在这里插入图片描述](htt…...

NEUOJ网格路径

​ 在一个 77 的网格中&#xff0c;从左上方的方格走到左下方的方格&#xff0c;共有 88418 条路径。每条路径对应一个由字符 D&#xff08;向下&#xff09;、U&#xff08;向上&#xff09;、L&#xff08;向左&#xff09;和 R&#xff08;向右&#xff09;组成的 48 字符描…...

深度学习中的黑暗角落:梯度消失与梯度爆炸问题解析

&#x1f4cc; 友情提示&#xff1a; 本文内容由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;创作平台的gpt-4o-mini模型生成&#xff0c;旨在提供技术参考与灵感启发。文中观点或代码示例需结合实际情况验证&#xff0c;建议读者通过官方文档或实践进一步确认其准…...

【数字图像处理】机器视觉(1)

判别相对应的点 1. 图像灰度化 2. 局部特征 3. 仿射不变性特征 图像变化的类型 【1】几何变化&#xff1a;旋转、相似&#xff08;旋转 各向相同的尺度缩放&#xff09;、仿射&#xff08;非各向相同的尺度缩放&#xff09; 【2】灰度变化&#xff1a;仿射灰度变化 角点 角…...

# 构建和训练一个简单的CBOW词嵌入模型

构建和训练一个简单的CBOW词嵌入模型 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;词嵌入是一种将词汇映射到连续向量空间的技术&#xff0c;这些向量能够捕捉词汇之间的语义关系。在这篇文章中&#xff0c;我们将构建和训练一个简单的Continuous Bag of Words…...

Ubuntu20.04下GraspNet复现流程中的问题

pytorchcudacudnn的版本问题相对于GraspNet来说至关重要&#xff01;&#xff01;&#xff01;至关重要&#xff01;&#xff01;&#xff01;至关重要&#xff01;&#xff01;&#xff01;&#xff08;重要的事情说三边&#xff09; 我的显卡是3070 那么首先说结论 使用30系…...

【ROS2】机器人操作系统安装到Ubuntu简介

主要参考&#xff1a; https://book.guyuehome.com/ROS2/1.系统架构/1.3_ROS2安装方法/ 官方文档&#xff1a;https://docs.ros.org/en/humble/Installation.html 虚拟机与ubuntu系统安装 略&#xff0c;见参考文档 ubutun换国内源&#xff0c;略 1. 设置本地语言 确保您有…...

从0到1掌握机器学习核心概念:用Python亲手构建你的第一个AI模型(超多代码+可视化)

&#x1f9e0; 一、开始 真正动手实现一个完整的AI项目&#xff01;从数据预处理、特征工程、模型训练&#xff0c;到评估与调优&#xff0c;一步步还原你在动画视频中看到的所有核心知识点。 &#x1f4e6; 二、环境准备 建议使用 Python 3.8&#xff0c;推荐工具&#xff1…...

Java面试题汇总

1王二哥 https://javabetter.cn/sidebar/sanfene/redis.html#_10-redis-%E6%8C%81%E4%B9%85%E5%8C%96%E6%96%B9%E5%BC%8F%E6%9C%89%E5%93%AA%E4%BA%9B-%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB 2.小林 https://www.xiaolincoding.com/redis/data_struct/command.html#…...

Ollama API 应用指南

1. 基础信息 默认地址: http://localhost:11434/api数据格式: application/json支持方法: POST&#xff08;主要&#xff09;、GET&#xff08;部分接口&#xff09; 2. 模型管理 API (1) 列出本地模型 端点: GET /api/tags功能: 获取已下载的模型列表。示例:curl http://lo…...

React SSR + Redux 导致的 Hydration 报错踩坑记录与修复方案

一条“Hydration failed”的错误&#xff0c;让我损失了半天时间 背景 我在用 Next.js App Router Redux 开发一个任务管理应用&#xff0c;一切顺利&#xff0c;直到打开了 SSR&#xff08;服务端渲染&#xff09;&#xff0c;突然看到这个令人头皮发麻的报错&#xff1a; …...

【论文精读】Reformer:高效Transformer如何突破长序列处理瓶颈?

目录 一、引言&#xff1a;当Transformer遇到长序列瓶颈二、核心技术解析&#xff1a;从暴力计算到智能优化1. 局部敏感哈希注意力&#xff08;LSH Attention&#xff09;&#xff1a;用“聚类筛选”替代“全量计算”关键步骤&#xff1a;数学优化&#xff1a; 2. 可逆残差网络…...

iOS18 MSSBrowse闪退

iOS18 MSSBrowse闪退 问题方案结果 问题 最近升级了电脑系统(15.4.1)&#xff0c;并且也升级了xcode(16.3)开发工具。之后打包公司很早之前开发的项目。 上线之后发现在苹果手机系统18以上&#xff0c;出现了闪退问题。 涉及到的是第三方MSSBrowse&#xff0c;在选择图片放大的…...

create_function()漏洞利用

什么是 create_function() create_function() 是 PHP 早期提供的一个用来创建匿名函数的函数&#xff1a; $func create_function($a,$b, return $a $b;); echo $func(1, 2); // 输出 3 第一个参数是函数的参数列表&#xff08;字符串形式&#xff09;&#xff0c;第二个参…...

leetcode-数组

数组 31. 下一个排列 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。 整数数组的 下一个排列 是指其整数的下一个字典序更大…...

Tailwind CSS 实战:基于 Kooboo 构建个人博客页面

在现代 web 开发中&#xff0c;Tailwind CSS 作为一款实用优先的 CSS 框架&#xff0c;能让开发者迅速搭建出具有良好视觉效果的页面&#xff1b;Kooboo 则是一个强大的快速开发平台&#xff0c;提供了便捷的页面管理和数据处理功能。本文将详细介绍如何结合 Tailwind CSS 和 K…...

C#学习1_认识项目/程序结构

一、C#项目文件的构成 1.新建一个项目 2.运行项目 3.认识文件 1&#xff09;解决方案&#xff08;Solution&#xff09;&#xff1a;组织多个项目的容器 抽象理解&#xff1a;餐厅 解决方案.sln文件&#xff0c;点击即可进入VS编辑 2&#xff09;项目&#xff08;…...

边缘计算在工业自动化中的应用:开启智能制造新时代

在工业4.0的浪潮中&#xff0c;智能制造成为推动工业发展的核心驱动力。随着物联网&#xff08;IoT&#xff09;技术的广泛应用&#xff0c;工业设备之间的互联互通变得越来越紧密&#xff0c;但这也带来了数据处理和传输的挑战。边缘计算作为一种新兴技术&#xff0c;通过将计…...

《MySQL:MySQL表的内外连接》

表的连接分为内连接和外连接。 内连接 内连接实际上就是利用where子句对两种表形成的笛卡尔积进行筛选&#xff0c;之前的文章中所用的查询都是内连接&#xff0c;也是开发中使用的最多的连接查询。 select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件&#xff1…...

人工智能催化民航业变革:五大应用案例

航空业正在经历一场前所未有的技术革命&#xff0c;人工智能正成为变革的主要催化剂。从停机坪到航站楼&#xff0c;从维修机库到客户服务中心&#xff0c;人工智能正在从根本上重塑航空公司的运营和服务方式。这种转变并非仅仅停留在理论上——全球主要航空公司已从人工智能投…...

机器视觉中有哪些常见的光学辅助元件及其作用?

在机器视觉领域&#xff0c;光学元件如透镜、反射镜和棱镜扮演着至关重要的角色。它们不仅是高精度图像捕获的基础&#xff0c;也是提升机器视觉系统性能的关键。深入了解这些光学元件的功能和应用&#xff0c;可以帮助我们更好地掌握机器视觉技术的精髓。 透镜&#xff1a;精…...

Stream API 对两个 List 进行去重操作

在 Java 8 及以上版本中&#xff0c;可以使用 Lambda 表达式和 Stream API 对两个 List 进行去重操作。以下是几种常见的去重场景及对应的 Lambda 表达式实现方式&#xff1a; 1. 合并两个 List 并去重 List<String> list1 Arrays.asList("A", "B"…...

lerna 8.x 详细教程

全局安装 lerna npm install lerna -g初始化项目 mkdir lerna-cli-do cd lerna-cli-do npm init -y初始化项目 lerna init --packages="packages/*"lerna create 创建子项目 lerna create core lerna create util...

ROS第十二梯:ros-noetic和Anaconda联合使用

1) 概述 ros-noetic默认Python版本是Python2.7,但在使用过程中,通常需要明确调用python3进行编译。 Anaconda: 支持创建独立的python2/3环境,避免系统库冲突; 方便安装ROS依赖的科学计算库(如Numpy,Pandas)和机器学习框架; 核心目标:在anaconda环…...

网络原理 - 5(TCP - 2 - 三次握手与四次挥手)

目录 3. 连接管理 建立连接 - 三次挥手 三次握手的意义 断开连接 - 四次挥手 握手和挥手的相似和不同之处 连接管理过程中涉及到的 TCP 状态转换 完&#xff01; 3. 连接管理 连接管理分为建立连接 和 断开连接~&#xff08;important 重点&#xff01;&#xff09; 建…...

【开源】STM32HAL库移植Arduino OneWire库驱动DS18B20和MAX31850

项目开源链接 github主页https://github.com/snqx-lqh本项目github地址https://github.com/snqx-lqh/STM32F103C8T6HalDemo作者 VXQinghua-Li7 &#x1f4d6; 欢迎交流 如果开源的代码对你有帮助&#xff0c;希望可以帮我点个赞&#x1f44d;和收藏 项目说明 最近在做一个项目…...

【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性

在Maven项目中&#xff0c;POM (Project Object Model) 文件是核心配置文件&#xff0c;而属性管理则是POM中一个强大但常被低估的特性。良好的属性管理可以显著提升项目的可维护性、减少重复配置&#xff0c;并使构建过程更加灵活。本文将深入探讨Maven中的属性管理机制。 1.…...

DC-2寻找Flag1、2、3、4、5,wpscan爆破、git提权

一、信息收集 1、主机探测 arp-scan -l 探测同网段2、端口扫描 nmap -sS -sV 192.168.66.136 80/tcp open http Apache httpd 2.4.10 ((Debian)) 7744/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u7 (protocol 2.0)这里是扫描出来两个端口&#xff0c;80和ssh&…...

数据结构手撕--【栈和队列】

目录 1、栈 2、队列 1、栈 先进后出&#xff08;都在栈顶进行操作&#xff09; 使用数组结构比使用链式结构更优&#xff0c;因为数组在尾上插入数据的代价更小。并且采用动态长度的数组来表示。 定义结构体 #include <stdio.h> #include <stdlib.h> #include &l…...

八大排序——选择排序/堆排序

八大排序——选择排序/堆排序 目录 一、选择排序 二、堆排序 2.1 大顶堆&#xff08;升序&#xff09; 2.1.1 步骤 2.1.2 代码实现 2.2 小顶堆&#xff08;降序&#xff09; 一、选择排序 每一趟从待排序序列中找到其最小值&#xff0c;然后和待排序序列的第一个值进行交换&am…...

【KWDB 创作者计划】_深度学习篇---归一化反归一化

文章目录 前言一、归一化(Normalization)1. 定义2. 常用方法Min-Max归一化Z-Score标准化(虽常称“标准化”,但广义属归一化)小数缩放(Decimal Scaling)3. 作用4. 注意事项二、反归一化(Denormalization)1. 定义2.方法3. 应用场景三、Python示例演示四、归一化 vs. 标准…...

windows端远程控制ubuntu运行脚本程序并转发ubuntu端脚本输出的网页

背景 对于一些只能在ubuntu上运行的脚本&#xff0c;并且这个脚本会在ubuntu上通过网页展示运行结果。我们希望可以使用windows远程操控ubuntu&#xff0c;在windows上查看网页内容。 方法 start cmd.exe /k "sshpass -p passwd ssh namexxx.xxx.xxx.xxx "cd /hom…...