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

优选算法——双指针专题

本章先分享关于优选算法的双指针的思路:

主要是以题目来展示常见使用双指针的思路。

ps:

双指针做法:不要被表面所迷惑,它其实是通过用一个数组的下标来充当指针

数组分两块:是⾮常常⻅的⼀种题型,主要就是根据⼀种划分⽅式,将数组的内容分成左右两部分。这种类型的题,⼀般就是使⽤「双指针」来解决
 

OJ(一)

283. 移动零 - 力扣(LeetCode)

1)题目展示

 2)解法思路:

数组分两块:一边非0,一边0,可以使用双指针法。

1.定义两个指针:

cur:从左到右扫描数据,来遍历数组

dest:已处理的区间内,非零元素的最后一个位置。

由下面我们可以看出:

分为三个区间:

[0,dest][]dest+1,cur-1][cur,n-1]

非0            0                 未处理

过程

具体做法:

1.cur遇到0,cur++

2.cur遇到非零元素:swap(dest+1,cur),cur++

代码:

class Solution {
public:void moveZeroes(vector<int>& nums) {int cur=0;int dest=-1;for(cur=0;cur<nums.size();cur++){if(nums[cur]){swap(nums[cur],nums[++dest]);}}}
};

OJ(二)

1089. 复写零 - 力扣(LeetCode)

1)题目展示:

2)解法思路:

1.双指针法:

如果「从前向后」进⾏原地复写操作的话,由于 0 的出现会复写两次,导致没有复写的数「被覆盖掉」。因此我们选择「从后往前」的复写策略。

但「从后向前」复写的时候,我们需要找到「最后⼀个复写的数」,因此我们的⼤体流程分两步:

i. 先找到最后⼀个复写的数;

ii. 然后从后向前进⾏复写操作

总结:

1.先根据“异地”操作,然后再进行双指针的“就地”操作

2.先找到最后一个复写的数:

双指针算法:

1)先判断cur的值

2)决定dest是走一步还是两步(0两步,非0一步)

3)判断dest是否已经到了结束位置

4)cur++

3.  然后从后向前进⾏复写操作。

1)i. 判断 cur 位置的值:

1. 如果是 0 : dest 以及 dest - 1 位置修改成 0 , dest -= 2 ;

2. 如果⾮零: dest 位置修改成 0 , dest -= 1 ;

2)cur-- ,复写下⼀个位置
 

4.越界处理:判断 dest 是否越界到 n 的位置

eg:1 0 2 3 0 0(会越界)

如果越界,执⾏下⾯三步:

1. n - 1 位置的值修改成 0 ;

2. cur 向移动⼀步(即cur--);

3. dest 向前移动两步(即dest-=2)
 

3)代码

class Solution {
public:void duplicateZeros(vector<int>& arr) {int cur=0,dest=-1;int n=arr.size();while(cur<n){if(arr[cur]) dest++;else dest+=2;if(dest>=n-1) break;cur++;}if(dest==n){arr[n-1]=0;cur--;dest-=2;}while(cur>=0){if(arr[cur]){arr[dest--]=arr[cur--];}else{arr[dest--]=0;arr[dest--]=0;cur--;}}}
};

OJ快乐数(三)

202. 快乐数 - 力扣(LeetCode)

1)题目展示

2)解法思路

分析题目意思:

 看到这里,就与我们之前在数据结构里面OJ题写过的判断链表是否有环那题非常相似的。

那里,我们使用的是快慢指针的方法,实质也是双指针。

十道OJ题帮你深入认识链表-CSDN博客

所以,思路:

双指针的快慢指针:

1)慢指针每次向后移动一位

2.快指针每次向后移动两位

3.判断相遇时的值是否为1即可。

ps:其实这里不可能不成环的。(证明:鸽巢原理:n个巢,n+1个鸽,必有一个巢会有2只鸽子及以上)

3)代码

class Solution {
public:int GetNum(int n){int num=0;while(n){int ret=n%10;num+=ret*ret;n/=10;      }return num;}bool isHappy(int n) {int slow=n,fast=GetNum(n);while(slow!=fast){slow=GetNum(slow);fast=GetNum(GetNum(fast));}return fast==1;    }
};

OJ(四)

11. 盛最多水的容器 - 力扣(LeetCode)

1)题目展示

2)解法思路

解法1:暴力枚举(超时)即一个一个遍历去找

解法二:利用单调性,来进行使用双指针法解决

设两指针 left , right ,分别指向⽔槽板的最左端以及最右端,此时容器的宽度为 right - left 。由于容器的⾼度由两板中的短板决定,因此可得容积公式 : v = (j - i) * min(height[left], height[right])

为了下面的写法更加简洁,我们取高为h,宽为w,即V=h*w

下面我们就以题目的实例举例:

我们仔细观察会发现:

V=h*w,h由两板的短板决定

如果此时我们固定⼀个边界,改变另⼀个边界,⽔的容积会有如下变化形式:

--->容器的宽度⼀定变⼩。

---> 由于左边界较⼩,决定了⽔的⾼度。如果改变左边界,新的⽔⾯⾼度不确定,但是⼀定不会超

过右边的柱⼦⾼度,因此容器的容积可能会增⼤。

--->如果改变右边界,⽆论右边界移动到哪⾥,新的⽔⾯的⾼度⼀定不会超过左边界,也就是不会

超过现在的⽔⾯⾼度,但是由于容器的宽度减⼩,因此容器的容积⼀定会变⼩的。

因此:左边界和其余边界的组合情况都可以舍去。所以我们可以 left++ 跳过这个边界,继续去判断下⼀个左右边界

总结思路:

1.定义了left和right指针后,算出体积就可以舍去小的那个值了(即left的话就++,right的话就--)

2.高取小那个。

2.接着继续算体积,每次比较那个大就保留哪个。

3)代码

class Solution {
public:int maxArea(vector<int>& height) {int left=0,right=height.size()-1;int ret=0;while(left<right){int v=min(height[left],height[right])*(right-left);ret=max(ret,v);//移动指针if(height[left]<height[right]){left++;}else{right--;}}return ret;}
};

OJ(五)

611. 有效三角形的个数 - 力扣(LeetCode)

1)题目展示

2)解法思路

数学知识:

怎么才能构成三角形?

设a<=b<=c,那么要想构成三角形,则a+b>c

解法1:暴力枚举(弄三层for循环,再检查是否构成三角形,此时的时间复杂度就为O(n^3))

解法二:

1.我们先进行数组优化(即对数组进行排序)

2.接着利用单调性,使用双指针来解决:

1) 先固定最大的数  ----->O(N)

2)在最大数的左区间内,使用双指针法,快速通过符号构成三角形的数O(N)

若如果 nums[left] + nums[right] > nums[i] :

▪ 说明 [left, right - 1] 区间上的所有元素均可以与 nums[right] 构成⽐nums[i] ⼤的⼆元组

▪ 满⾜条件的有 right - left 种

如果 nums[left] + nums[right] <= nums[i] :

▪ 说明 left 位置的元素是不可能与 [left + 1, right] 位置上的元素构成满⾜条件的⼆元组

▪ left 位置的元素可以舍去, left++ 进⼊下轮循环

最后,时间复杂度为O(n^2)效率提高了.

3)代码

class Solution {
public:int triangleNumber(vector<int>& nums) {sort(nums.begin(),nums.end());int n=nums.size();int ret=0;for(int i=n-1;i>=2;i--){int left=0,right=i-1;while(left<right){if(nums[left]+nums[right]>nums[i]){ret+=right-left;right--;}else{left++;}}}return ret;}
};

OJ(六)

LCR 179. 查找总价格为目标值的两个商品 - 力扣(LeetCode)

1)题目展示

2)解法思路

解法一:暴力枚举

解法二:利用单调性,使用双指针来找(跟上面的很像)

因为它已经排好序了,所以我们就省去了自己是排序那一步。

定义两个指针min(指向左边),max(右边)

若price[min]+price[max]>target,利用它的单调性,我们是不是就可以直接移动max--了?你想想你连最小的数都大于target了,其他是不是更加大于?

同样的道理:price[min]+price[max]<target ,直接min++。

当price[min]+price[max]==target时,就return  {price[left],price[right]};

3)代码

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

OJ(七)

15. 三数之和 - 力扣(LeetCode)

1)题目展示

2)解法思路

解法1:排序+暴力枚举+使用set(去重)

解法2:排序+双指针

1.排序

2.固定一个数a(我们从最左边第一个数先固定)

3.在固定的数的后面区间内,利用双指针,快速找到两个数的和等于-a

跟上面的题也是类似的,利用它的单调性,优化。

如果nums[left]+nums[right]>-a,即可直接right--;

nums[left]+nums[right]<-a,即可直接left++;(原因看上面的解析)

整体大概思路就完成了,

接下来我们来处理细节问题:

1.做到不漏:

解决:找到一种结果后,不要停,缩小区间,继续找

2.做到不重复

解决:

找到一种结果后,left和right都要跳过重复的数

当使用完一次双指针算法后,固定的数也要跳过重复的数。

此外,解决上面的问题的同时,还要注意避免越界的问题(代码中显示)

3)代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());int i=0;vector<vector<int>> ret;while(i<nums.size()){int left=i+1,right=nums.size()-1;while(left<right){if(nums[left]+nums[right]>(-nums[i])){right--;}else if(nums[left]+nums[right]<(-nums[i])){left++;}else{ret.push_back({nums[left],nums[right],nums[i]});left++;right--;1.防止越界while(left<right && nums[left-1]==nums[left]){left++;}2.防止越界while(left<right && nums[right+1]==nums[right])  {right--;}}}i++;3.防止越界        while(i<nums.size() && nums[i-1]==nums[i]){i++;}}return ret;}
};

OJ(八)

18. 四数之和 - 力扣(LeetCode)

1)题目展示

2)解法思路

解法1:排序+暴力枚举+set去重(4个循环)

解法2:排序+双指针

1.依次固定一个数a(我们从最左边第一个数开始)

2.在a的后面的区间内,使用“三数之和“找到数,使这三个数的和等于target-a即可

3.那么,根据上面的三数之和题目我们知道:

->固定一个数b

->在b的后面区间,利用双指针找到两个数,使这两个数的和等于target-a-b即可

整体大概思路就完成了,

接下来我们来处理细节问题:

1.做到不漏:

解决:找到一种结果后,不要停,缩小区间,继续找

2.做到不重复

解决:

找到一种结果后,left和right都要跳过重复的数

当使用完一次双指针算法后,固定的数也要跳过重复的数。

此外,解决上面的问题的同时,还要注意避免越界的问题(代码中显示)

3)代码

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {sort(nums.begin(),nums.end());int n=nums.size();vector<vector<int>> ret;for(int a=0;a<n;){for(int b=a+1;b<n;){int left=b+1,right=n-1;long long aim=(long long)target-nums[a]-nums[b];while(left<right){if(nums[left]+nums[right]>aim){right--;}else if(nums[left]+nums[right]<aim){left++;}else{ret.push_back({nums[left],nums[right],nums[b],nums[a]});left++;while(left<right && nums[left]==nums[left-1]){left++;}right--;while(left<right && nums[right+1]==nums[right]){right--;}}}++b;while(b<n && nums[b]==nums[b-1]){b++;}}++a;while(a<n && nums[a]==nums[a-1]){a++;}}return ret;}
};

好了,双指针法专题到这里就分析完了,希望对你有所进步!

最后,到了本次鸡汤部分:

切勿轻言放弃,最好的东西,总会压轴出场!

相关文章:

优选算法——双指针专题

本章先分享关于优选算法的双指针的思路&#xff1a; 主要是以题目来展示常见使用双指针的思路。 ps: 双指针做法&#xff1a;不要被表面所迷惑&#xff0c;它其实是通过用一个数组的下标来充当指针 数组分两块&#xff1a;是⾮常常⻅的⼀种题型&#xff0c;主要就是根据⼀种…...

深度解析:TOML、XML、YAML及其他配置/数据格式对比

深度解析&#xff1a;TOML、XML、YAML及其他配置/数据格式对比 在软件开发和系统配置中&#xff0c;选择合适的配置或数据格式至关重要。本文将对比 TOML、XML、YAML 等常见格式&#xff0c;梳理它们的核心特性、适用场景及区别&#xff0c;并扩展介绍其他类似格式&#xff0c…...

冗余技术:堆叠技术+链路聚合

目录 前言 一.堆叠技术概述 二.堆叠技术原理 三.堆叠系统登录 四.堆叠合并/分裂 4.1 堆叠双主检测机制&#xff08;MAD&#xff09; 五.链路聚合技术概述 六.链路聚合模式 前言 在硬件加速与数据爆炸时代&#xff0c;堆叠技术通过模块化分层设计&#xff0c;实现资源动…...

存储服务器是指什么

今天小编主要来为大家介绍存储服务器主要是指什么&#xff0c;存储服务器与传统的物理服务器和云服务器是不同的&#xff0c;其是为了特定的目标所设计的&#xff0c;在硬件配置方式上也有着一定的区别&#xff0c;存储空间会根据需求的不同而改变。 存储服务器中一般会配备大容…...

文件上传绕过的小点总结(8)

16.apache解析漏洞条件竞争 class MyUpload{.................. var $cls_arr_ext_accepted array(".doc", ".xls", ".txt", ".pdf", ".gif", ".jpg", ".zip", ".rar", ".7z",&q…...

设计模式-结构型模式-外观模式

概述 外观模式 : Facade Pattern : 是一种 结构型设计模式. 它为复杂子系统提供一个简化的统一接口&#xff0c;使得客户端无需直接与子系统的各个组件交互&#xff0c;从而降低系统的耦合性。 核心思想 统一接口&#xff1a;将多个子系统的复杂操作封装到一个“外观类”中&…...

DeepSeek 本地部署指南

文章目录 DeepSeek 本地部署指南一、前言二、部署前的准备工作2.1 硬件要求2.2 软件环境 三、模型下载四、本地部署步骤4.1 检查硬件加速支持4.2 部署模型4.3 优化部署 五、常见问题及解决方法5.1 内存不足5.2 模型下载失败5.3 GPU 无法使用 六、总结 DeepSeek 本地部署指南 一…...

Windows Server 2025 使用 IIS 搭建 ASP.NET 3.5 网站

开启远程桌面 参考文章Windows server开启远程桌面教程打开服务管理器。ECS 配置安全组&#xff0c;开启 3389Telnet 验证网络联通性 telnet x.x.x.x 338安装 Windows App&#xff0c;登录验证 安装 ASP.NET 3.5 1.参考文章Windows Server 2012安装 .NET Framework 3.5和 Wi…...

python每日十题(12)

根据字典的索引方式可知&#xff0c;d.get( egg ,no this food)索引的是字典第一层&#xff0c;但是第一层只有键food&#xff0c;没有键egg&#xff0c;故索引不出值&#xff0c;输出的是“no this food ”。 外层for循环是将a[0][1,2,3],a[1][4,5,6],a[2][7,8,9]依次赋给变量…...

Podman 学习总结

Podman 概述 什么是 Podman&#xff1f; Podman&#xff08;Pod Manager&#xff09;是一个开源的容器管理工具&#xff0c;类似于 Docker&#xff0c;可以用于拉取、运行、管理容器镜像。Podman 采用 无守护进程****&#xff08;Daemonless&#xff09; 的架构&#xff0c;使…...

作业14 (2023-05-22_const修饰指针)

第1题/共5题【单选题】 C程序常见的错误分类不包含:( ) A.编译错误 B.链接错误 C.栈溢出 D.运行时错误 回答正确 答案解析: 栈溢出是运行时错误的一种,因此C程序不会将栈溢出错误单独列出来,栈溢出包含在运行时错误中。 因此:选择C 第2题/共5题【单选题】 以下关于…...

Qt 线程和 QObjects

线程和 QObjects QThread 继承于 QObject。 它发出信号来指示线程开始或结束执行&#xff0c;并提供一些插槽。 更有趣的是&#xff0c;QObjects 可以在多个线程中使用&#xff0c;发出信号以调用其他线程中的插槽&#xff0c;并向 "生活 "在其他线程中的对象发布事件…...

cocos creator 笔记-路边花草

版本&#xff1a;3.8.5 实现目标&#xff1a;给3d道路生成路边景观花草 在场景下创建一个节点&#xff0c;我这里种植两种花草模型&#xff0c;兰花和菊花&#xff0c;所以分别在节点下另创建两个节点&#xff0c;为了静态合批。 1.将花草模型分别拖入场景中&#xff0c;制作…...

基于SpringBoot+Vue3实现的宠物领养管理平台功能十六

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会经济的发展和人们生活水平的提高&#xff0c;越来越多的人开始关注并参与到宠物领养中。宠物已经成为许多家庭的重要成员&#xff0c;人们对于宠物的关爱和照顾也日益增加。然而&#xff0c;传统的宠物领养流程存在诸多不便&a…...

MOSN(Modular Open Smart Network)-05-MOSN 平滑升级原理解析

前言 大家好&#xff0c;我是老马。 sofastack 其实出来很久了&#xff0c;第一次应该是在 2022 年左右开始关注&#xff0c;但是一直没有深入研究。 最近想学习一下 SOFA 对于生态的设计和思考。 sofaboot 系列 SOFAStack-00-sofa 技术栈概览 MOSN&#xff08;Modular O…...

数据仓库pinia中,getter和actions有什么区别

将计算逻辑放在 getters 还是 actions 里&#xff0c;取决于具体的使用场景和需求&#xff0c;下面详细分析放在 getters 中的优势以及和 actions 的区别&#xff0c;以说明是否有必要放在 getters 里&#xff1a; 1. getters 的优势 缓存特性 getters 具有类似 Vue 计算属性…...

RoMA: 基于Mamba的遥感基础模型, 已开源, 首次验证mamba的scaling能力

Time: 2025-03-27T15:27:00 github: 链接 HuggingFace: 链接 摘要 近年来&#xff0c;自监督学习在视觉 Transformer&#xff08;ViT&#xff09;方面的进展推动了遥感&#xff08;RS&#xff09;基础模型的突破。然而&#xff0c;自注意力机制的二次复杂度给可扩展性带来了…...

蓝桥杯(电子类)嵌入式第十一届设计与开发科目模拟试题

一、功能概览 二、分模块实现 1、按键 新建interrupt.h和interrupt.c写中断的代码&#xff08;写法学习来自定时器-按键单击_哔哩哔哩_bilibili&#xff09; #ifndef __INTERRUPT_H #define __INTERRUPT_H#include "main.h" #include "stdbool.h"struct…...

CMLINK APN 手动设置

以下是针对 CMLINK 的 APN设置 的详细指南&#xff0c;基于常见配置需求&#xff1a; CMLINK APN 手动设置参数 参数项值说明名称CMLINK (自定义)任意命名&#xff08;如 CMLINK、CM Internet 等&#xff09;&#xff0c;建议使用ASCII字符&#xff0c;无特殊符号。APNcm.com …...

排序--快排--非递归法

一&#xff0c;引言 快排不管是hoare法还是指针法以及挖坑法&#xff0c;最终都是利用函数递归进行实现的&#xff0c;但是只要是函数递归就会有栈溢出的风险&#xff0c;为此本篇文章讲解快排的非递归法。 二&#xff0c;代码逻辑 首先要了解为什么会使用递归进行调用&…...

02 相机标定相关坐标系

标定相关坐标系 一共四个坐标系 图像像素坐标系: u-v,图像左上角为原点图像物理坐标系: x-y,图像中心为原点...

数学建模:MATLAB卷积神经网络

一、简述 卷积神经网络是一种处理具有网格结构数据的深度学习模型&#xff0c;由输入层、卷积层、池化层、全连接层、输出层组成。 输出层&#xff1a;将图像转换为其对应的由像素值构成的二维矩阵&#xff0c;并存储二维矩阵 卷积层&#xff1a;提取图像的底层特征&#xf…...

Android读写权限分析

Android系统使用的是Linux内核&#xff0c;所以Android系统沿用了linux系统的那一套文件读写权限。 目录 1&#xff0c;权限解读1.1&#xff0c;权限分为三种类型&#xff1a;1.2&#xff0c;权限针对的三类对象&#xff1a;1.3&#xff0c;文件和目录的权限区别1.3.1&#xf…...

计算机网络基础:量子通信技术在网络中的应用前景

计算机网络基础:量子通信技术在网络中的应用前景 一、前言二、量子通信技术基础2.1 量子通信的基本概念2.2 量子通信的主要原理2.2.1 量子密钥分发(QKD)原理2.2.2 量子隐形传态原理三、量子通信技术的特点3.1 绝对安全性3.2 超高通信速率潜力3.3 抗干扰能力强四、量子通信技…...

【算法学习计划】贪心算法(上)

目录 前言&#xff08;什么是贪心&#xff09; leetcode 860.柠檬水找零 leetcode 2208.将数组和减半的最少操作次数 leetcode 179.最大数 leetcode 376.摆动序列 leetcode 300.最长递增子序列 leetcode 334.递增的三元子序列 leetcode 674.最长连续递增序列 leetcode …...

Linux 目录结构(文件系统结构)示例说明

在Linux操作系统中&#xff0c;文件系统的结构是理解系统性能及管理的重要基础。每个目录都有它的特定用途&#xff0c;这使得系统管理更加清晰和高效。本文将带您逐步了解每一个重要目录及其功能。 1. 根目录 / 根目录是Linux文件系统的起点&#xff0c;所有文件和目录均从此…...

Linux下的socket演示程序2

server.cpp #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>#define SER_PORT 8888 //服务器端口号 #define SER_IP "10.148.4.168" //服…...

TiDB与Doris实操对比:深度剖析数据库选型要点

TiDB与Doris实操对比&#xff1a;深度剖析数据库选型要点 宝子们&#xff0c;在大数据处理的广阔天地里&#xff0c;TiDB和Doris都是备受瞩目的数据库解决方案。它们各自有着独特的优势和适用场景&#xff0c;对于我们开发者来说&#xff0c;深入了解它们的实操特性&#xff0…...

How to install vmware workstation pro on Linux mint 22

概述 VMware 是一家专注于虚拟化技术和云计算解决方案的全球领先软件公司&#xff0c;成立于1998年&#xff0c;总部位于美国加州。它的核心技术是通过“虚拟化”将一台物理计算机的硬件资源&#xff08;如CPU、内存、存储等&#xff09;分割成多个独立的虚拟环境&#xff08;…...

redis常用部署架构之redis分片集群。

redis 3.x版本后开始支持 作用&#xff1a; 1.提升数据读写速度 2..提升可用性 分片集群就是将业务服务器产生的数据储存在不同的机器上。 redis分片集群的架构 如上图所示&#xff0c;会将数据分散存储到不同的服务器上&#xff0c;相比于之前来说&#xff0c;redis要处…...

vim的一般操作(分屏操作) 和 Makefile 和 gdb

目录 一. vim的基本概念 二. vim基础操作 2.1 插入模式 aio 2.2 [插入模式]切换至[正常模式] Esc 2.3[正常模式]切换至[末行模式] shift ; 2.4 替换模式 Shift R 2.5 视图&#xff08;可视&#xff09;模式 (可以快速 删除//注释 或者 增加//注释) ctrl v 三&…...

DeepSeek 为何能在短时间内超过 ChatGPT?—— 技术变革与成本重构的双重胜利

2025 年 1 月 27 日&#xff0c;全球科技圈见证了一个历史性时刻&#xff1a;中国 AI 公司深度求索&#xff08;DeepSeek&#xff09;开发的同名应用&#xff0c;首次登顶美国苹果 App Store 免费下载榜&#xff0c;超越了长期霸榜的 ChatGPT。这一突破不仅打破了美国科技公司在…...

Wireshark学习

Wireshark简介 抓包前 1.打开wireshark得到下面的界面 2.选择菜单栏上捕获-> 选项&#xff0c;勾选WLAN网卡&#xff08;这里需要根据各自电脑网卡使用情况选择&#xff0c;简单的办法可以看使用的IP对应的网卡&#xff09;。点击开始。启动抓包。 3.wireshark启动后&am…...

我的创作纪念日——三周年

大家好&#xff0c;心心念念的三年之气已到&#xff0c;但是我似乎对于博客专家的身份没有那么渴望了哈哈。虽然最近比较忙&#xff0c;但是看到三周年纪念日的通知&#xff0c;还是想写一点什么&#xff0c;并不是因为三周年有多么值得纪念&#xff0c;而是这段时间确实有一些…...

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…...

基于云服务器的数仓搭建-hive/spark安装

mysql本地安装 安装流程&#xff08;内存占用200M&#xff0c;升至2.1G&#xff09; # 将资料里mysql文件夹及里面所有内容上传到/opt/software/mysql目录下 mkdir /opt/software/mysql cd /opt/software/mysql/ # 待上传文件 install_mysql.sh mysql-community-client-8.0.3…...

YOLO历代发展 图像增强方式 架构

YOLO1 YOLOV5 数据增强 mosaic 仿射变换(Affine)、透视变换(Perspective) 网络搭建...

Spring AI Alibaba EmbeddingModel使用

一、嵌入模型 (Embedding Model)简介 1、核心概念 嵌入模型&#xff08;EmbeddingModel&#xff09;是嵌入过程中采用的模型。 当前 EmbeddingModel的接口主要用于将文本转换为数值向量&#xff0c;接口的设计主要围绕这两个目标展开&#xff1a; 可移植性&#xff1a; 该接口…...

C++入门五式——类和对象(下)

目录 再探构造函数——初始化列表 类型转换 static成员 友元函数 内部类 匿名对象 再探构造函数——初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&#xff0c;就是初始化列表。 //初始化列…...

Spring的SPEL(Spring Expression Language)的使用说明,包含语法、示例和常见场景

以下是Spring的SPEL&#xff08;Spring Expression Language&#xff09;的使用说明&#xff0c;包含语法、示例和常见场景&#xff1a; 1. 基本语法 变量引用 表达式&#xff1a;#{变量名}&#xff08;如#{systemProperties[os.name]}&#xff09;作用域&#xff1a;在Sprin…...

Linux应用:线程进阶

线程同步之信号量 信号量&#xff08;Semaphore&#xff09;是一个整型的计数器&#xff0c;用于控制对共享资源的访问。它通过 PV 操作来实现同步&#xff0c;P 操作将信号量的值减 1&#xff0c;如果值小于 0 则线程阻塞&#xff1b;V 操作将信号量的值加 1&#xff0c;如果…...

策略模式 (Strategy)

策略模式 (Strategy) 应用场景&#xff1a;用于处理不同的任务配置参数。在你的任务中&#xff0c;可能会有不同的任务类型&#xff0c;每个任务类型可能有不同的单位&#xff08;比如米、毫米&#xff09;或不同的处理方式。策略模式可以让你根据不同的任务类型选择不同的处理…...

【YOLOv8】YOLOv8改进系列(10)----替换主干网络之UniRepLKNet

主页&#xff1a;HABUO&#x1f341;主页&#xff1a;HABUO &#x1f341;YOLOv8入门改进专栏&#x1f341; &#x1f341;如果再也不能见到你&#xff0c;祝你早安&#xff0c;午安&#xff0c;晚安&#x1f341; 【YOLOv8改进系列】&#xff1a; YOLOv8改进系列&#xff0…...

mathtype一些用法总结

1.一个是公式旁边加入||&#xff0c;一般使用键盘直接打入的会比较小&#xff0c;mathtype中的会好看很多&#xff0c;打开这个栏目&#xff0c;会看到有很多。 2.另外是带^符号&#xff0c;在字符上面带没有办法直接带&#xff0c;所以可以在mathtype中先加帽子&#xff0c;然…...

1、SQL注入攻击的防范

原文地址: SQL注入攻击的防范 更多内容请关注&#xff1a;代码安全 PHP安全编码——书写安全的代码 1、SQL注入攻击的防范 提问 问题1&#xff1a;什么是SQL注入攻击&#xff1f; 问题2&#xff1a;有几种简单方法防范SQL注入攻击&#xff1f; 问题3&#xff1a;mys…...

核心知识——论文总结

引入 本文我们会针对论文中的核心内容进行总结&#xff0c;加深小伙伴对于Spark的理解。而通过Spark的论文&#xff0c;重点需要掌握理解如下内容&#xff1a; Spark 里核心的 RDD 是一个什么概念&#xff0c;它是通过什么方式来优化分布式数据处理的&#xff0c;它的设计思路…...

HTTP 核心知识点整理

1. HTTP 基础 ​定义&#xff1a;HTTP&#xff08;HyperText Transfer Protocol&#xff09;是应用层协议&#xff0c;基于 ​请求-响应模型&#xff0c;用于客户端&#xff08;浏览器&#xff09;与服务器之间的通信。​特点&#xff1a; ​无状态&#xff1a;每次请求独立&a…...

什么是矩阵账号

矩阵账号是指在同一平台或多个平台上&#xff0c;围绕同一品牌或个人&#xff0c;创建的多个相互关联、协同工作的账号组合。这些账号虽然独立&#xff0c;但在内容定位和运营策略上有所区分&#xff0c;同时又相互引流&#xff0c;共同形成一个网络结构&#xff0c;类似于矩阵…...

【6】VS Code 新建上位机项目---项目分层

【6】VS Code 新建上位机项目---项目分层 1 项目分层(layer)2 项目分层实现数据插入SQL3 项目分层实现 (实体类封装参数)4 项目分层的实现SQL查询数据1 项目分层(layer) 表示层(UI):与用户交互使用。比如按钮,输入信息等;业务层(BLL):传递数据,业务逻辑。根据用户需…...

EspressoSample深度解析:在CircleCI上高效运行Android UI测试

项目背景与简介 EspressoSample项目位于GitHub上的circleci/EspressoSample仓库&#xff0c;该项目旨在展示如何在CircleCI平台上配置和使用Espresso进行Android应用的UI测试。 项目结构与环境准备 项目结构 EspressoSample项目遵循典型的Android项目结构&#xff0c;包含a…...