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

算法篇-------------双指针法

温馨提示:由于c++语言在编程上更有优势,更加简洁,本文代码均为c++代码,其他语言也可以                    做,思想是不变的!

1.应用场景

涉及到对数组的操作的题目,可以考虑双指针方法解决

2.基本框架

根据其名字不难想出,我们是设置两个“指针”,但由于我们是对数组进行操作,为此,我们可以模拟指针的应用,用下标来访问数组,设置;两个变量cur和dest,其中,一个由于遍历数组,判断情况,另一个用于我们的一些根据题目而进行的特殊操作

值得注意的是,双指针不一定非要从前向后移动,可能会从数组末尾或者其他位置开始移动,具体的要看题目要求!

3.题目示例

3.1 移动0

283. 移动零 - 力扣(LeetCode)

这个题要求我们对数组中的零进行移动,属于对数组的操作,可以用双指针来解决,那么应该如何解决呢?

解决思路:

不难想到,我们可以用cur遍历数组,开始的时候可以将cur放置在数组首元素的位置,dest置于-1的位置,之后让cur遍历数组,由于题目想让我们将0都移到后面去,因此,我们就要找到非零元素,让cur指向他,同时dest要指向0,之后将二者swap一下,在同时++,之后再循环进行上述操作,cur遇到零继续++,遇到非零就停下来和dest交换,直到cur走完了整个数组

参考代码:

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

3.2 复写0

1089. 复写零 - 力扣(LeetCode)

这个题要求我们对0进行复写,并且最终数组元素的个数还要保证不变,这就意味着只要原数组里面出现了0,那么就要有元素被“移出”数组,那么我们应该怎么解决这道题呢?

解决思路:

一开始我想的是从前往后,就是类比3.1题那样,但会惊奇的发现有些元素还没被cur遍历到就被改成0了,此种想法失败,所以我们便考虑逆其道而行之,从后面往前遍历,但是现在问题就是,我怎么找到我最后一个复写的元素

直接盲目凭空猜是肯定不靠谱的,我们不妨这样,可以进行两轮的双指针操作,第一轮就是用来寻找最后一个复写的元素,第二轮在去进行复写。

我们寻找过程如下:我们第一轮可以模拟复写操作,只遍历,不复写,先将cur==0,dest==-1,之后遇到非零元素,就同时++,遇到0元素,就cur++,dest++两次,当dest到最末尾时,cur便指向了最后一个复写的元素

但是还有一种特殊情况,比如数组为【1,0,2,3,0,4】,按照上述操作会使dest超出边界,为此我们要处理一下:直接让arr[n-1]=0,cur--,dest-=2

当我们找到最后的复写元素后,从后往前复写,cur指向的为0,就进行两次将dest位置元素赋值为0并--,同时cur--,当cur指向的为非0,就arr[dest--]=arr[cur--]就行了

参考代码:

class Solution {
public:void duplicateZeros(vector<int>& arr) {int cur=0,dest=-1,n=arr.size();//寻找最后一个复写元素for(cur=0;cur<n;cur++){if(arr[cur])dest++;elsedest+=2;if(dest>=n-1)break;}//处理特殊情况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--;}}}
};

3.3 快乐数

202. 快乐数 - 力扣(LeetCode)

这个题要求我们寻找快乐数,很明显这是一个定义题,需要我们了解明白定义后在去将其解决

解决思路:

我们不妨就按照题目里面说的做,画出图来可以更好的帮我们解决问题,当测试用例为19时,

19---->82---->68----->100

当测试用例为2时

我们会发现这是一个环!但是我们仔细想一下,上面那个符合的不也是个环吗?只不过环的值都为1! 而由鸽巢原理(抽屉原理)我们知道,这个数是一定带环的(了解就好,不是重点)。所以我们得出了解决思路,只要判断相遇点(入环点)是否为1就行了。有一定基础的朋友或许会想到快慢指针的方法,没错,本题正是快慢指针的解法!只不过我们还是模拟指针的方法,在链表那里我们是使用真的指针,而在这里我们直接让指针变为数就好,比如当测试用例为2时,让slow=2,之后直接让slow=2^2=4,之后在slow=4^2=16,以此类推!

为了方便起见,我们可以写一个函数,用于计算下一个数是什么,以便于“指针”的移动。

参考代码:

class Solution {
public:int sum(int n)                    //计算下一个数{int total=0;                  //局部变量要初始化,否则就是随机数,会影响后面+=操作while(n){   int t=n % 10;total+= t * t ;n/=10;}return total;}bool isHappy(int n) {int slow=n;int fast=sum(n);      //让fast指针指向下一个数while(slow!=fast){slow=sum(slow);fast=sum(sum(fast));}return slow==1;}
};

3.4 装水最多的容器

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

这个题要求我们寻找体积最大的一个区间,那么我们应该怎么找呢?

解决思路:

方法一)暴力求解:把每个体积都算出来,求最大,两层for循环,但是会超出时间复杂度

方法二)找规律:我们先任意取出一段区间,不妨以【6,2,5,4】这段区间为例,先求出最边界的体积V1,之后将指针移动到高度为4的位置处,因为决定装水多少的是最低的高度,之后移动这个指针,无非会出现两种情况,首先宽度肯定是减小的了,这一点应该不需要解释,那么在移动的过程中,出现的数字可能比4大也可能比4小,如果比4小,也可以直接pass了,因为此时宽度和高度都减小了,肯定不是最大了,如果比4大,就算一下体积,用max()函数取一个最大值,之后重复上述操作,如果等于4的也可以直接Pass,那现在我们可以把范围放大了,用在整个数组上了。

参考代码:

class Solution {
public:int maxArea(vector<int>& height) {int front=0,back=height.size()-1;int ret=0;while(front<back){int v=(back-front)*min(height[front],height[back]);ret=max(ret,v);if(height[front]<height[back]){front++;}else{back--;}}return ret;}
};

3.5  有效三角形个数

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

这道题给定我们一个数组,要求我们统计可以组成三角形的个数

解决思路

方法一)暴力破解:利用三层for循环,时间复杂度为O(N^3),可能会超出时间复杂度

方法二)双指针法:我们知道,三角形两边之和大于第三边,我们可以利用这个性质,先将数组排成升序,在固定住最大的数(最后一个数),并设立两个指针,一个指向下标0的位置,一个指向倒数第二个位置,之后将这两个位置上的数相加,会出现两种结果(为方便起见,左边的数我称之为a,右边的数我称之为b):a+b>c以及a+b<=c,对于第一种情况,由于数组是有序的,从a到b是升序的,由于a+b已经大于c了,而a在这里面是最小的数,所以[a,b]内所有的数一定符合要求,由于我们是a+b>c,所以我们要减小相加的值,为此我们让right--,而对于第二种情况,由于b已经是这里面最大的数了,但是a+b还是小于等于c,说明区间[a,b]的所有数都无法构成三角形,因此我们要让left++,扩大一下相加的和,当left<right条件走完时,重新确定最大的数,重复上述步骤

参考代码:

class Solution {
public:int triangleNumber(vector<int>& nums) {sort(nums.begin(),nums.end());int ret=0,n=nums.size();for(int i=n-1;i>=2;i--)     //最大的数只能到下标为2的位置{int left=0,right=i-1;while(left<right){if(nums[left]+nums[right]>nums[i]){ret+=right-left;right--;}else{left++;}}}return ret;}
};

3.6 查找目标值 

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

这个题要求我们在数组内找一对和为目标值的数,解题思路如下

解题思路

方法一)暴力破解:两层for循环,时间复杂度O(N^2),会超时

方法二)双指针法:我们还是一个指针放在下标为0的地方,另一个放在末尾,之后看这两个数的和并于目标值比较,会出现三种情况:

1)等于目标值:这种情况是我们想要的,直接返回这两个数就ok了

2)小于目标值:由于我们的数组是递增的,所以我们要增大我们这个数组的和,因此要left++

3)大于目标值:由于我们的数组是递增的,所以我们要减小我们这个数组的和,因此要right--·

参考代码:

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

提交时会发现报错:

 报错信息是:并不是所有的路径都有返回值,因此我们为了照顾编译器,给加上一些返回值

所以正确的代码应该是:

class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int left=0;int right=price.size()-1;while(left<right){int sum=price[left]+price[right];if(sum>target){right--;}else if(sum<target){left++;}else{return {price[left],price[right]};}}return {-1,-1};    //这个-1是我规定的,读者可以换成喜欢的数字,只要别影响程序即可}
};

3.7 三数之和

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

这道题要求我们在数组里面找三个数,而且不能重复,并且他们的和要等于0,这道题的解决思路可以依赖于上一步做延申。

解题思路:

这道题我们还是采取双指针的方法来做题,但是我们却要找三个变量,因此我们需要先固定住一个,再去寻找另外两个,类似于化学的同分异构体的固一动二法,由于题目不要求我们对顺序有要求,所以我们可以先将数组进行排序,这样方便我们查找,而且也符合题目的要求,我们不妨将它排为升序之后,从左到右依次固定,再设置两个指针,一个指针指向这个数组的最末尾,而另一个指针则指向固定数的下一个数。而由指针指向的这两个数相加之后,我们想要的结果是等于固定的数的相反数,这样才能使他们的相加结果等于零,之后的方法就可以仿照第六题,这里不再赘述。另外可以提出一个优化的点,我们的固定的数只需要小于等于零的部分即可,因为我们的数组是已经排为升序的,如果固定的数在为正数,那它和另外两个数肯定不会相加为零 。还有一点值得注意的是由于答案不想出现重复的结果,所以我们对指针也可以优化,即遇到相同的数则继续++或者--。

参考代码:

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> ret;//1.排序sort(nums.begin(),nums.end());int n=nums.size();//2.利用双指针解决问题for(int i=0;i<n;)   //固定数a{if(nums[i]>0) break;int left=i+1,right=n-1,target=-nums[i];while(left<right){int sum=nums[left]+nums[right];if(sum>target)  right--;else if(sum<target) left++;else{ret.push_back({nums[i],nums[left],nums[right]});left++;right--;//去重操作left和rightwhile(left<right&&nums[left]==nums[left-1]) left++;while(left<right&&nums[right]==nums[right+1]) right--;}}//去重ii++;while(i<n&&nums[i]==nums[i-1]) i++;}return ret;};
};

3.8 四数之和

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

这道题要求我们找四个数,并且之和为目标值,而且四个数还不要重复,其实这个题和上一个题一个思路,只不过更麻烦了一些而已

解题思路:

我们还是先将数组排序,之后先固定一个数a,这样题目就转变为了找三个数,目标值为target-a,再用上一道题的思想,再固定一个数b,题目转变为转变为了找两个数,目标值为target-a-b,之后再利用双指针解决即可。值得注意的是,我们可以优化一下,相同数据可以连续++或--


参考代码:

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> ret;sort(nums.begin(),nums.end());for(int i=0;i<nums.size();)    //固定a{//三数和for(int j=i+1;j<nums.size();)//固定b{int left=j+1,right=nums.size()-1;int aim = target-nums[i]-nums[j];while(left<right){int sum=nums[left]+nums[right];if(sum<aim) left++;else if(sum>aim) right--;else{//打包,放到ret中ret.push_back({nums[i],nums[j],nums[left++],nums[right--]});//去重一while(left<right&&nums[left]==nums[left-1]) left++;while(left<right&&nums[right]==nums[right+1]) right--;}}//去重二j++;while(j<nums.size()&&nums[j]==nums[j-1])   j++;}//去重三i++;while(i<nums.size()&&nums[i]==nums[i-1])  i++;}return ret;}
};

但是,这样会发生报错:

 原因就是我们测试的数太大时,红线那里会溢出,所以我们把int改为long long就行,后面记得强转一下哈!

好了!至此,我们语法篇的第一讲------双指针到此结束,希望对读者有所帮助!我们下一篇文章再见!bye~

相关文章:

算法篇-------------双指针法

温馨提示&#xff1a;由于c语言在编程上更有优势&#xff0c;更加简洁&#xff0c;本文代码均为c代码&#xff0c;其他语言也可以 做&#xff0c;思想是不变的&#xff01; 1.应用场景 涉及到对数组的操作的题目&#xff0c;可以考虑双指针方法解决 2.基…...

Java关于包和final

什么是包&#xff1f; 包就是文件夹。用来管理等各种不同功能的java类&#xff0c;方便后期代码维护 包名的规则&#xff1a;公司域名反写包的作用&#xff0c;需要全部英文小写&#xff0c;见名知意。例如&#xff1a;com.pdsu.domain package com.pdsu.demain;public class…...

2025年华为HCIP题库分享

1101、 【拖拽题】OPSF邻接关系建立的过程中需要使用不同的报文&#xff0c;那么请分别将以下各个状态和该状态使用的报文联系起来。 答题格式为&#xff1a;11 22 33 43 正确答案&#xff1a;【12】【21】【24】【33】 解析&#xff1a; 建立邻居关系 RouterA的一个连接到广…...

49. 字母异位词分组

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 先把每一个词都排序&#xff0c;拍完之后相同的就是字母异位词使用map&#xff0c;排序完的作为key&#xff0c;一个string数组作为value对于每一个词&#xff0c;排完序之后将…...

python 语法篇(一)

目录 1 正则匹配注意点11.1 正则匹配字符串写法1.2 创建re函数&#xff08;1&#xff09;re.search()--搜索第一个匹配项&#xff08;2&#xff09;re.match() - 从字符串开头匹配&#xff08;3&#xff09;re.findall() - 返回所有匹配项的列表&#xff08;4&#xff09;re.fi…...

机器学习ML极简指南

机器学习是现代AI的核心&#xff0c;从推荐系统到自动驾驶&#xff0c;无处不在。但每个智能应用背后&#xff0c;都离不开那些奠基性的模型。本文用最简练的方式拆解核心机器学习模型&#xff0c;助你面试时对答如流&#xff0c;稳如老G。 线性回归 线性回归试图通过"最…...

爬虫:网络请求(通信)步骤,http和https协议

电脑(浏览器)&#xff1a;www.baidu.com——url DNS服务器&#xff1a;IP地址标注服务器——1.1.38 DNS服务器返回IP地址给浏览器 浏览器拿到IP地址去访问服务器&#xff0c;返回响应 服务器返回给响应数据&#xff1a;html/css/js/jpg... html&#xff1a;文本 cs…...

【杂谈】-大型语言模型对具身人工智能发展的推动与挑战

大型语言模型对具身人工智能发展的推动与挑战 文章目录 大型语言模型对具身人工智能发展的推动与挑战1. 具身人工智能&#xff08;Embodied AI&#xff09;的内涵解析2. 大型语言模型的功能与作用3. 最新发展趋势4. 面临的挑战与考量因素5. 总结与展望 多年来&#xff0c;研发能…...

解决Beats Solo Buds 无法自动切换音频到耳机的问题

一、核心问题定位 现象矛盾点&#xff1a; Beats 耳机能连接但需手动切换音频 AirPods 可自动切换 → 排除 iOS 系统级故障 问题可能源于 Beats 固件兼容性 或 音频路由逻辑冲突 关键差异&#xff1a; 设备 芯片类型 自动切换协议支持 固件更新方式 AirPods 二代 H1芯片 原…...

MySQL基本查询

一.create 1.1 单行数据 全列插入 1.2 多行数据 指定列插入 1.3插入否则更新 1.4替换 二.Retrieve 2.1.SELECT列 2.1.1全列查询 2.1.2指定列查询 2.1.3查询字段为表达式 2.1.4 为查询结果指定别名 2.1.5结果去重 2.2WHERE 条件 2.2.1比较运算符 2.2.3逻辑运算符…...

面基:为什么不推荐用UUID作为主键

推荐回答结构&#xff1a; 技术理论层面分析 实际项目中的教训 优化改进过程 总结提炼认知 阐述回答 在阐述回答时&#xff0c;你可以从 UUID 本身特性带来的问题&#xff0c;以及在实际工作中遇到的具体场景和优化过程等方面展开&#xff0c;下面从这一思路&#xff0c;给…...

oracle 常用函数的应用

在使用开发中会经常遇到数据类型转换、显示系统时间等情况&#xff0c;需要使用函数来实现。通过函数来实现业务需求会非常的省事便捷&#xff0c;函数可以用在适当的dml语句和查询语句中。 Oracle 数据库中主要使用两种类型的函数&#xff1a; (1)单行函数&#xff1a;对每一个…...

ubuntu的ubuntu--vg-ubuntu--lv磁盘扩容

在我们安装ubuntu时&#xff0c;如果选择的是自动分区&#xff0c;就会按照逻辑卷的形式来分区&#xff0c;并且只分配100G其余的并不会被分配&#xff0c;这对我们大多数情况来说都是不合理的&#xff0c;所以&#xff0c;如何扩充呢 下面以一个小的案例来说明如何扩充 问题…...

鬼泣:升龙系统

文章目录 0.升龙系统&#xff1a;升龙斩使敌人浮空升龙斩使敌人浮空&#xff1a;设置flying状态&#xff0c;不会落下 1.升龙斩&#xff1a;S 攻击S按下calculate directionin range warp&#xff1a;前提是根运动打开蒙太奇拔刀收刀canCombo&#xff1a;接轻攻击连击 2. A.向…...

UI产品经理基础(四):用价值链视角来分析项目需求

用价值链视角来分析项目需求 作为产品经理&#xff0c;从价值链视角分析项目需求&#xff0c;能够更精准地定位价值创造的关键环节&#xff0c;确保资源投入与用户需求、商业目标深度匹配。以下是系统化的方法论与落地步骤&#xff0c;结合案例说明如何实现需求分析与用户认可…...

ThinkPHP的“get\post\put\delete“请求

首先了解一下这四个请求的区别 1.GET 请求 用途&#xff1a;获取资源&#xff08;只读操作&#xff0c;不修改服务器数据&#xff09;。 特点&#xff1a; 参数通过 URL 的 查询字符串&#xff08;Query String&#xff09; 传递&#xff08;例如 /book?id1&#xff09;。 数…...

目标检测的训练策略

在目标检测竞赛中&#xff0c;训练策略的优化是提高模型性能的关键。常用的训练策略包括数据预处理、数据增强、超参数调节、损失函数设计、正负样本采样、模型初始化和训练技巧等。以下是一些常见的训练策略&#xff1a; 1. 数据预处理与数据增强 数据归一化&#xff1a;对输…...

【JavaSE】小练习 —— 图书管理系统

【JavaSE】JavaSE小练习 —— 图书管理系统 一、系统功能二、涉及的知识点三、业务逻辑四、代码实现4.1 book 包4.2 user 包4.3 Main 类4.4 完善管理员菜单和普通用户菜单4.5 接着4.4的管理员菜单和普通用户菜单&#xff0c;进行操作选择&#xff08;1查找图书、2借阅图书.....…...

代码随想录Day29

Day29 动态规划part02 LeetCode 62.不同路径 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &…...

Python入门(3):语句

目录 1 基本语句 1.1 表达式语句 1.2 赋值语句 2 控制流语句 2.1 条件语句 2.2 循环语句 while循环&#xff1a; for循环&#xff1a; 2.3 流程控制语句 1. break语句&#xff1a;退出整个循环体 2. continue语句&#xff1a;只跳过本次循环&#xff0c;还会进…...

04_SQL概述及DDL

文章目录 一、关于SQL1.1、SQL概述1.2、SQL分类 二、数据库操作2.1、查看数据库2.2、切换数据库2.3、查询当前使用的数据库2.4、创建数据库2.5、查看数据库创建信息2.6、修改数据库2.7、删除数据库 三、表的操作3.1、数据类型3.1.1、数值类型3.1.2、字符串类型3.1.3、日期时间类…...

如何调整yarn.nodemanager.vmem-pmem-ratio参数?

调整 yarn.nodemanager.vmem - pmem - ratio 参数&#xff0c;可参考以下步骤&#xff1a; 打开YARN配置文件 找到 yarn - site.xml 文件&#xff0c;该文件通常位于Hadoop配置目录中&#xff0c;例如 /etc/hadoop/conf 或 /opt/module/hadoop - 3.1.3/etc/hadoop 。 找到并修改…...

【质量管理】质量的系统是预防,那以预防为主的质量管理系统包括什么?

“质量的系统是预防”这是克劳士比零缺陷管理四项基本原则的第二项基本原则。什么样的系统才是一个以预防为主的质量管理系统呢&#xff1f; 一个以预防为主的质量系统&#xff0c;必须包括三大方面&#xff1a;质量检验系统、质量保证系统、质量管理系统。 举个例子&#xff1…...

JavaScript 事件流与事件委托

目录 一、事件流、事件捕获与事件冒泡 1. 事件流&#xff08;Event Flow&#xff09; 2. 事件捕获&#xff08;Event Capturing&#xff09; 3. 事件冒泡&#xff08;Event Bubbling&#xff09; 4. 阻止事件冒泡 5. 事件解绑 6. 实际应用场景 二、事件委托 1. 什么是…...

RAG 优化 Embedding 模型或调整检索策略

在 RAG(Retrieval-Augmented Generation)系统中,优化 Embedding 模型和调整检索策略是提升检索质量的核心手段。以下是系统化的优化方法和实践指南: 一、优化 Embedding 模型 Embedding 模型的质量直接决定检索的召回率(Recall)和准确率(Precision)。优化方向包括: …...

Sentinel[超详细讲解]-3

主要讲解&#x1f680; - 基于QPS/并发数的流量控制 1、流控规则 流量控制&#xff08;Flow Control&#xff09;用于限制某个资源的访问频率&#xff0c;防止系统被瞬时的流量高峰冲垮。流量控制规则可以针对不同的资源进行配置&#xff0c;例如接口、方法、类等。 流量规则的…...

vue3使用i18n$t()无法获取数组和对象

今天在使用i18n进行国际化时&#xff0c;定义了数组和对象节点&#xff0c;但是用$t()无法获取&#xff0c;只能返回字符串值&#xff0c;查询相关材料&#xff0c;解决方案如下&#xff1a; 使用新的api替换即可&#xff0c;$t > $tm 参考文章(深表谢意)&#xff1a;vue -…...

机器学习的一百个概念(5)数据增强

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…...

(Kotlin)Android 高效底部导航方案:基于预定义 Menu 和 ViewPager2 的 Fragment 动态绑定实现

支持预定义 Menu 并绑定 Fragment&#xff0c;同时保留动态添加 Tab 的能力 BottomTabHelper.kt package smartconnection.com.smartconnect.home.utilimport android.content.Context import android.util.SparseArray import androidx.annotation.IdRes import androidx.fra…...

零基础入门多媒体音频(4)-GENIVIProjectAudioManager总览

GENIVI Project的AudioManager是一个专门设计用于汽车信息娱乐系统的音频管理解决方案。它负责管理和控制车辆内的音频源和音频路径&#xff0c;确保各种音频信号能够正确、高效地在车辆的音响系统中传输和播放。 AudioManager的核心功能包括音频源的管理、音频路径的控制以及音…...

DeepSeek协助优化-GTX750Ti文物显卡0.65秒卷完400MB float 音频512阶时域FIR

文章目录 1. 学习目的2. 阶段成果2.1 NVVP 性能探查2.2 测试编译环境2.3 测试样例 3 学习过程3.1 提问DeepSeek3.2 最终代码 4. 体会 1. 学习目的 最近在学习cuda&#xff0c;准备给我的taskBus SDR添加CUDA的模块支持&#xff0c;以便可以用PC机压榨山寨 B210那56M的带宽。 因…...

Embedding原理

Embedding&#xff08;嵌入&#xff09;是将离散符号&#xff08;如单词&#xff09;映射到连续向量空间的核心技术&#xff0c;其本质是语义的数学化表示。以下是其核心原理详解&#xff1a; 一、基础概念图解 graph LRA[单词猫] --> B[索引5] --> C[向量[0.2, -1.3,…...

Spark,配置hadoop集群1

配置运行任务的历史服务器 1.配置mapred-site.xml 在hadoop的安装目录下&#xff0c;打开mapred-site.xml&#xff0c;并在该文件里面增加如下两条配置。 eg我的是在hadoop199上 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address…...

人工智能大模型-数据预处理-文本数据预处理-图像数据预处理

文本数据预处理 大模型常用的文本数据类型 通用文本数据&#xff1a;网页、对话和图书资料等专用文本数据&#xff1a;多语言文本、科学文本、代码和指令等 构造方法 指令数据&#xff1a;指令(instruction)、输入(input)、输出(output)3部分组成 如果在instruction部分已…...

怎么使用嵌套虚拟环境实现项目部署之virtualenv嵌套conda绕开安装环境检测实现.venv部署facefusion

#工作记录 一、前言 嵌套虚拟环境本来是不建议的一种方法&#xff0c;这种嵌套虚拟环境的使用有一定特殊性&#xff0c;但在一些特别的使用场景下&#xff0c;嵌套虚拟环境的使用非常有用。 二、嵌套虚拟环境&#xff1a; &#xff08;一&#xff09;conda嵌套virtualenv 该…...

ansible介绍以及安装

一.ansible介绍 实现对IT基础设施的批量管控&#xff0c;加快效率&#xff0c;节省工作时间。 1.ansible特性 1.基于python开发&#xff0c;开源&#xff0c; 2.基于ssh协议工作。只需要确保ansible机器&#xff0c;与被控制机器能连通就好了&#xff0c; 3.no server 无…...

GPT-4o图像生成功能:技术突破与隐忧并存

2025年3月25日&#xff0c;OpenAI正式推出GPT-4o原生图像生成功能&#xff0c;宣称其实现了“文本到图像的终极跨越”。然而&#xff0c;这一被市场追捧的技术在短短72小时内便因用户需求过载触发限流&#xff0c;暴露出算力瓶颈与商业化矛盾的尖锐性。这场技术狂欢的背后&…...

Java 时间处理:轻松掌握 java.time 包

前言 在 Java 开发中&#xff0c;日期和时间处理一直是令人头疼的问题。传统的 Date​ 和 Calendar​ 类不仅复杂&#xff0c;还充满了线程安全和时区处理的坑。Java 8 引入的 java.time​ 包彻底改变了这一局面&#xff0c;带来了现代化、直观且功能强大的日期时间 API。 本…...

Vue项目中Vuex在util引入,断点存在default

示例代码 // src/store/index.js import Vue from vue; import Vuex from vuex; ……Vue.use(Vuex); export default new Vuex.Store({…… })// src/utils/index.js import store from /store // 导入默认导出的 store export async function getDict() {store.state.userInf…...

2025宁德时代测评Verify考什么?网申测评如何通过SHL笔试|附真题线上笔试考点、高分攻略、CATL新能源科技SHL测评宁德社招题目、面试攻略、求职建议

——职小豚 带你拆解新能源巨头招聘密码 一、宁德时代&#xff1a;新能源赛道「超级独角兽」 作为全球动力电池龙头&#xff0c;宁德时代&#xff08;CATL&#xff09;的江湖地位无需多言&#xff1a; 技术硬实力&#xff1a;麒麟电池、钠离子电池、无钴电池等黑科技加持&…...

谈谈常见的数据结构(如数组、链表、栈、队列、哈希表、树、图)及其应用场景

一、数组&#xff08;Array&#xff09; 定义&#xff1a;连续存储相同类型数据的线性结构&#xff0c;支持随机访问。 应用场景&#xff1a;列表渲染、数据缓存、算法处理 代码示例&#xff1a; // 数组基本操作 const arr [1, 2, 3, 4]; arr.push(5); // O(1) 平均时间复杂…...

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的 AOP:实现日志记录与性能监控

答应我&#xff0c;这篇一定要看到最后~&#xff01; <前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&a…...

【算法】快速幂

一、概念 快速幂是一种高效的指数运算&#xff0c;当指数范围过大时&#xff0c;通过位运算能够减少大量的计算次数 对于&#xff0c;我们通过将指数b转化为二进制数&#xff0c;就可以将分解为许多的&#xff08;其中i是指数b中对应位为1的位数&#xff09; 例如&#xff0…...

使用卷积神经网络识别MNIST数据集

卷积神经网络 卷积神经网络本质是共享权重稀疏链接的全连接网络 编写步骤 构建一个神经网络&#xff0c;步骤是几乎不变的&#xff0c;大概有以下几步 准备数据集 #更高级的CNN网络 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…...

JavaScript 中数组增删改查

在 JavaScript 中,数组是一种用来存储不同类型的值的数据结构。 增加数组元素: let arr = [1, 2, 3];// 在数组末尾添加元素 arr.push(4); console.log(arr); // [1, 2, 3, 4]// 在数组开头添加元素 arr.unshift(0); console.log(arr); // [0, 1, 2, 3, 4]// 在指定位置插…...

【Kettle安装】Kettle安装过程, 电脑已安装java23,安装Kettle 出现报错:尝试启动 Java 虚拟机(JVM)时失败解决方法

Kettle安装 Kettle 通常指的是 Pentaho Data Integration (PDI)&#xff0c;这是一款开源的 ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;用于数据集成、数据清洗和数据分析。它的核心工具名为 Spoon&#xff0c;但整个项目常被直接称为 Kettle 数据…...

Spring笔记04-注解注入

1.导入包 <dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId>…...

[动规19] 最大子数组和

目录 1. 题意 2. 思路 2.1. 状态表示 2.2. 状态转移方程 2.3. 初始化 2.4. 填表顺序 2.5. 返回值 3. 编码 1. 题意 链接: 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&…...

2024年零知识证明(ZK)研究进展

Sumcheck 整个领域正在转向更多地依赖于 Sumcheck Protocol Sumcheck是用于验证多项式承诺的协议&#xff0c;常用于零知识证明&#xff08;ZKP&#xff09;中&#xff0c;尤其是在可验证计算和扩展性上。它的主要目的是通过对多项式进行分段检查&#xff0c;从而保证某个多项…...

1. 两数之和

leetcode Hot 100系列 文章目录 一、核心操作二、外层配合操作三、核心模式代码总结 一、核心操作 使用map&#xff0c;key作为数值&#xff0c;value作为下标先寻找对应的目标值&#xff0c;如果找到了则直接返回&#xff0c;否则在往map中插入 提示&#xff1a;小白个人理…...