【基础算法模板梳理】再也不想学算法了!(待更新)

目录

1、【二分】

(1)r=mid —— 大于等于某数的最小值 

(2)l=mid —— 小于等于某数的最大值

2、【前缀和】

(1)一维前缀和

(2)二维前缀和

3、【差分】

(1)一维差分

(2)二维差分

4、【单调栈】

(1)单调递增栈

(2)单调递减栈

5、【并查集】

6、【BFS 求最短路】

为什么BFS可以求最短路?

7、【Dijkstra】

8、【spfa】

9、【floyd】

10、【kruskal】

11、【质数】

12、【约数】


1、【二分】

【蓝桥杯集训3】二分专题(3 / 5)-CSDN博客

  • l + r >> 1 —— 先 r = mid 后 l = mid+1 —— 寻找左边界 —— 找大于等于某数的最小值
  • l+r+1>>1 —— 先 l = mid 后 r = mid-1 —— 寻找右边界 —— 找小于等于某数的最大值

(1)r=mid —— 大于等于某数的最小值 

1 2 3 3 3 3 4 5

int l=0,r=n-1;while(l<r)
{int mid=l+r>>1;if(a[mid]>=x) r=mid;else l=mid+1;
}

(2)l=mid —— 小于等于某数的最大值

1 2 3 3 3 3 4 5

int l=0,r=n-1;{int mid=l+r+1>>1;if(a[mid]<=x) l=mid;else r=mid-1;
}

2、【前缀和】

【蓝桥杯集训1】前缀和专题(4 / 5)-CSDN博客

(1)一维前缀和

a数组下标从1开始,Si = Si-1 + ai

则 [ Al,Ar ]段的和 = s[r] - s[l-1]

for(int i=1;i<=n;i++)
{a[i]=sc.nextInt();s[i]=s[i-1]+a[i];
}[Al,Ar]的和 = s[r]-s[l-1]

(2)二维前缀和

 

static int N=1010;
static int[][] a=new int[N][N],s=new int[N][N];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){a[i][j]=sc.nextInt();s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + a[i][j];}

while(q-->0)
{int x1=sc.nextInt(),y1=sc.nextInt(),x2=sc.nextInt(),y2=sc.nextInt();int res=s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];System.out.println(res);
}

3、【差分】

【蓝桥杯集训2】差分专题(3 / 4)-CSDN博客

(1)一维差分

给a数组 [l,r] 区间的每个数+c,只需要给其差分数组b做如下操作即可

b[l]+=c;
b[r+1]-=c;

构造差分数组   \large b\left [ i \right ]=a\left [ i \right ]-a\left [ i-1 \right ]

int[] a=new int[N];
int[] b=new int[N];for(int i=1;i<=n;i++)
{a[i]=sc.nextInt();b[i]=a[i]-a[i-1]; //构造差分数组
}

差分数组进行  \large b\left [ l \right ]+=c    \large b\left [ r+1 \right ]-=c 操作

int l,r,c;
while(k-->0)
{b[l]+=c;b[r+1]-=c;
}

最后求差分数组b的前缀和即为原数组在【l,r】段+c的数组

for(int i=1;i<=n;i++)
{a[i]=a[i-1]+b[i]; //b的前缀和是aSystem.out.print(a[i]+" ");
}

(2)二维差分

 初始化

static int N=1010;
static int[][] a=new int[N][N],b=new int[N][N];public static void work(int x1,int y1,int x2,int y2,int c)
{b[x1][y1]+=c;b[x2+1][y1]-=c;b[x1][y2+1]-=c;b[x2+1][y2+1]+=c;
}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){a[i][j]=sc.nextInt();work(i,j,i,j,a[i][j]);}

求前缀和

work(x1,y1,x2,y2,c);for(int i=1;i<=n;i++)
{for(int j=1;j<=m;j++){b[i][j]+=b[i-1][j]+b[i][j-1]-b[i-1][j-1];System.out.print(b[i][j]+" ");}System.out.println();
}

4、【单调栈】

【蓝桥杯集训9】单调栈、单调队列(模拟栈、模拟队列)专题(3 / 3)_Roye_ack的博客-CSDN博客

(1)单调递增栈

  • 在保持栈内元素单调递增前提下(如果栈顶元素大于待入栈元素,弹出栈顶),新元素入栈
  • 对于要入栈的元素,在对栈进行更新后,栈顶元素就是数组中左侧第一个比自己小的元素

(2)单调递减栈

  • 在保持栈内元素单调递减前提下(如果栈顶元素小于要待入栈元素,弹出栈顶),新元素入栈
  •  对于要入栈的元素,在对栈进行更新后,栈顶元素就是数组中左侧第一个比自己大的元素

题目:输出每个数左边第一个比自己小的数,如果不存在则输出-1 

class Main
{public static void main(String[] args){Scanner sc=new Scanner(System.in);int n=sc.nextInt();Deque<Integer> stk=new LinkedList<>();while(n-->0){int x=sc.nextInt();while(!stk.isEmpty()&&stk.peek()>=x) stk.pop();if(stk.isEmpty()) System.out.print("-1 ");else System.out.print(stk.peek()+" ");stk.push(x);}}
}

 

5、【并查集】

【蓝桥杯集训7】并查集专题(3 / 5)-CSDN博客

int find(int x) //返回x的祖宗结点+状态压缩
{if(p[x]!=x) p[x]=find(p[x]);return p[x];
}p[find(a)]=find(b); //合并操作 给a认个祖宗bif(find(a)==find(b)) //a和b元素在同一个集合for(int i=1;i<=n;i++) p[i]=i;
import java.util.*;class Main
{static int N=100010;static int[] p=new int[N];public static int find(int x){if(p[x]!=x) p[x]=find(p[x]); //如果不是祖宗,则向上查找return p[x];}public static void unite(int a,int b){p[find(a)]=find(b); //给a认个祖宗b}public static void main(String[] args){Scanner sc=new Scanner(System.in);int n=sc.nextInt(),m=sc.nextInt();for(int i=1;i<=n;i++) p[i]=i;while(m-->0){String s=sc.next();int a=sc.nextInt(),b=sc.nextInt();if(s.equals("M")){if(find(a)!=find(b)) unite(a,b);}else {if(find(a)==find(b)) System.out.println("Yes");else System.out.println("No");}}}
}

 

6、【BFS 求最短路】

【蓝桥杯集训11】BFS(4 / 4)_Roye_ack的博客-CSDN博客

为什么BFS可以求最短路?

为什么就算有多条通路,它总能输出最小距离?
因为当第一个点到达终点时,它一定是最短距离,并且会将终点标记,那么其他点再也无法到达终点,也更新不了初始点到终点的距离

将起点(0,0)入队,上下左右走,只要在合法的范围内且不碰到墙且没有走过,则入队

BFS就是将所有能走的路都走,第一条能走通的路一定是最短路

    static int[][] g=new int[110][110];static int[][] d=new int[110][110];  //记录该点到起点的最短距离static int[][] st=new int[110][110];  //标记走过的点static int[] dx={-1,1,0,0};static int[] dy={0,0,-1,1};    //方向数组
    public static int bfs(){d[0][0]=0;Queue<PII> q=new LinkedList<>();q.offer(new PII(0,0));while(!q.isEmpty()){PII t=q.poll();for(int i=0;i<4;i++){int nx=t.x+dx[i];int ny=t.y+dy[i];if(nx>=0&&nx<n&&ny>=0&&ny<m&&g[nx][ny]==0&&st[nx][ny]==0){q.offer(new PII(nx,ny));d[nx][ny]=d[t.x][t.y]+1;st[nx][ny]=1;}}}return d[n-1][m-1];}

 

7、【Dijkstra】

8、【spfa】

9、【floyd】

10、【kruskal】

11、【质数】

12、【约数】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/138349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LCD1602设计(1)

本文为博主 日月同辉&#xff0c;与我共生&#xff0c;csdn原创首发。希望看完后能对你有所帮助&#xff0c;不足之处请指正&#xff01;一起交流学习&#xff0c;共同进步&#xff01; > 发布人&#xff1a;日月同辉,与我共生_单片机-CSDN博客 > 欢迎你为独创博主日月同…

SQL必知会(二)-SQL查询篇(5)-用通配符进行过滤

第6课、用通配符进行过滤 LIKE&#xff1a;匹配文本 LIKE&#xff1a;针对未知值进行过滤。通配符搜索只能用于文本字段。 1&#xff09;百分号%通配符 %表示任何字符出现任意次数。 需求&#xff1a;找出所有以词 Fish 起头的产品 SELECT prod_id, prod_name FROM Product…

34 mysql limit 的实现

前言 这里来看一下 我们常见的 mysql 分页的 limit 的相的处理 这个问题的主要是来自于 之前有一个需要处理 大数据量的数据表的信息, 将数据转移到 es 中 然后就是用了最简单的 “select * from tz_test limit $pageOffset, $pageSize ” 来分页处理 但是由于 数据表的数…

1-前端基本知识-HTML

1-前端基本知识-HTML 文章目录 1-前端基本知识-HTML总体概述什么是HTML&#xff1f;超文本标记语言 HTML基础结构文档声明根标签头部元素主体元素注释 HTML概念词汇&#xff1a;标签、属性、文本、元素HTML基本语法规则HTML常见标签标题标签段落标签换行标签列表标签超链接标签…

【Windows Docker:安装nginx】

拉镜像 docker pull nginx运行初始镜像 docker run -d -p 80:80 --name nginx nginx拷贝文件 docker cp nginx:/etc/nginx/nginx.conf D:/dockerFile/nginx/nginx.conf docker cp nginx:/etc/nginx/conf.d D:/dockerFile/nginx/conf.d docker cp nginx:/usr/share/nginx/htm…

华为李鹏:到 2025 年智能算力需求将达到目前水平的 100 倍

在第十四届全球移动宽带论坛上&#xff0c;华为高级副总裁、运营商 BG 总裁李鹏表示&#xff0c;大模型为代表的 AI 应用发展带来对智能算力的爆发式需求。 李鹏在题为《加速 5G 商业正循环&#xff0c;拥抱更繁荣的 5.5G》的讲话中表示&#xff0c;「5G 已经走在商业成功的正确…

学之思开源考试系统部署至Centos7

学之思开源考试系统部署至Centos7 1、下载源码 源码下载&#xff1a; https://gitee.com/mindskip/xzs-mysql 数据库脚本下载&#xff1a; https://www.mindskip.net:999/ 2、项目打包 分别在\source\vue\xzs-student目录和source\vue\xzs-admin目录&#xff0c;执行前端打…

人工智能基础_机器学习023_理解套索回归_认识L1正则---人工智能工作笔记0063

然后上一节我们说了L1,L2正则是为了提高,模型的泛化能力, 提高泛化能力,实际上就是把模型的公式的w,权重值,变小对吧. 然后我们这里首先看第一个L1正则,是怎么做到把w权重变小的 可以看到最上面是线性回归的损失函数,然后 L1可以看到,这个正则,就是在损失函数的基础上给损失…

uniapp+vue3+ts+vite+echarts开发图表类小程序,将echarts导入项目使用的详细步骤,耗时一天终于弄好了

想在uniapp和vue3环境中使用echarts是一件相当前卫的事情&#xff0c;官方适配的还不是很好&#xff0c;echarts的使用插件写的是有些不太清晰的&#xff0c;这里我花费了一天的时间&#xff0c;终于将这个使用步骤搞清楚了&#xff0c;并且建了一个仓库&#xff0c;大家可以直…

C#动态拦截并覆盖第三方进程的函数,实现函数篡改(外挂)

今天在看之前收藏的一个pdf文档(介绍C#外挂的相关知识的)&#xff0c;结合网上的东西及个人的理解才有了这篇文章。 参考文章&#xff1a; 【精选】一文带解读C# 动态拦截覆盖第三方进程中的函数&#xff08;外挂必备&#xff09;_zls365365的博客-CSDN博客 DotNetDetour - …

解决内存泄漏问题,Profiler工具的使用介绍

什么是内存泄漏 内存泄漏&#xff08;Memory Leak&#xff09;是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放&#xff0c;造成系统内存的浪费&#xff0c;导致程序运行速度减慢甚至系统崩溃等严重后果。 以上是官方针对内存泄漏的说法。说的通俗一点&#x…

在IDEA中使用maven项目总结

一 什么是maven Maven本身也是Java写的&#xff0c;他是一款服务于Java平台的自动化构建工具 Maven是一个项目管理工具&#xff0c;旨在简化软件项目的构建、依赖管理和项目信息管理。它使用基于项目对象模型&#xff08;Project Object Model&#xff0c;POM&#xff09;的…

「我在淘天做技术」音视频技术及其在淘宝内容业务中的应用

作者&#xff1a;李凯 一、前言 近年来&#xff0c;内容电商似乎已经充分融入到人们的生活中&#xff1a;在闲暇时间&#xff0c;我们已经习惯于拿出手机&#xff0c;从电商平台的直播间、或者短视频链接下单自己心仪的商品。 尽管优质的货品、实惠的价格、精致的布景、有趣的…

基于SSM的科技公司门户网站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Vatee万腾的科技决策力奇迹:Vatee科技决策力的独特之选

在金融投资的复杂领域中&#xff0c;Vatee万腾以其独特的科技决策力创造了一场真正的奇迹。这不仅是一种引领投资者走向成功的选择&#xff0c;更是一种开启新时代的科技决策奇迹。 Vatee的科技决策力背后蕴藏着强大的智慧和创新。通过大数据分析、智能算法的运用&#xff0c;V…

LoRAShear:微软在LLM修剪和知识恢复方面的最新研究

LoRAShear是微软为优化语言模型模型(llm)和保存知识而开发的一种新方法。它可以进行结构性修剪&#xff0c;减少计算需求并提高效率。 LHSPG技术&#xff08; Lora Half-Space Projected Gradient&#xff09;支持渐进式结构化剪枝和动态知识恢复。可以通过依赖图分析和稀疏度…

jupyter notebook中markdown改变图像大小

文章目录 &#x1f56e;原始图像&#x1f56e;改变图像大小&#x1f56e;使图像靠左 在 jupyter notebook中&#xff0c;导入的图片过大&#xff0c;想要改变图像的大小 &#x1f56e;原始图像 &#x1f56e;改变图像大小 复制小括号里面的内容到src后面&#xff0c;满足<…

【操作系统内核】线程

【操作系统内核】线程 为什么需要线程 比如我要做一个视频播放器&#xff0c;就需要实现三个功能&#xff1a; ① 从磁盘读取视频数据 ② 对读取到的视频数据进行解码 ③ 对解码的数据进行播放 如果串行执行&#xff08;通过一个进程来执行&#xff09;&#xff1a; 那么…

JavaScript从入门到精通系列第三十三篇:详解正则表达式语法(二)

文章目录 一&#xff1a;正则表达式 1&#xff1a; 检查一个字符串中是否有. 2&#xff1a;第二种关键表达 3&#xff1a;第三种关键表达 ​编辑4&#xff1a;第四种关键表达 5&#xff1a;第五种关键表达 6&#xff1a;第六种关键表达 二&#xff1a;核心表达二 1&am…