算法模板七月

数学类模板

求组合数模板

求组合数 蓝桥杯集合的分割;

static int mod = 1000000000 + 7;
static int N = 1010;
//求static  long [][] arr=new long[N][N]; //需要开一个longstatic  {for (int i = 0; i < N; i++) {for (int j = 0; j <= i; j++) {if (j== 0) {arr[i][j] = 1;} else {arr[i][j] = (arr[i-1][j]+arr[i-1][j-1])%mod;}}}}

质数模板

质数的一些性质
任何一个大于1的数都可以表示为一个质数的n倍;

埃筛法求质数

public class 线性筛 {public static void main(String[] args) {Scanner scanner =new Scanner(System.in);int n=scanner.nextInt();boolean [] isPrime=aishishai(n);for (int i = 0; i <=n; i++) {if (isPrime[i]){System.out.print(i+" ");}}}public static boolean[] aishishai(int n){boolean [] isPrime=new boolean[n+1];//创建一个n+1长度的数组Arrays.fill(isPrime,true);isPrime[0]=false;isPrime[1]=false;for (int i = 2; i*i<=n; i++) { //这边也是根号nif (isPrime[i]){for (int j = i*i; j <=n ; j+=i) { //2*i 3*i 4*i//当 i = 2 时,isPrime[2] 为 true,将从 2*2 = 4 开始的所有偶数标记为 false:// [false, false, true, true, false, true, false, true, false, true,// false, true, false, true, false, true, false, true, false, true,// false, true, false, true, false, true, false, true, false, true, false, true]isPrime[j]=false;}}}return isPrime;}
}
时间复杂度 O(n log(log n))

阶乘模板

21的阶乘就已经超过了long类型;

基础模板

二分查找

二分查找的基础模板

在一共有序的数组中寻找一个数字,用二分查找的方式
采用的是左闭右闭得模式,while里面是小于等于
int binarySearch(int[] nums, int target) {int left = 0; int right = nums.length - 1; //左闭右闭while(left <= right) {int mid = left + (right - left) / 2;//防止结果溢出if(nums[mid] == target)return mid; else if (nums[mid] < target)left = mid + 1; // 注意else if (nums[mid] > target)right = mid - 1; // 注意}return -1;
}
二分查找还具有其他得作用,可以查找左边界和右边界
寻找左边界得二分搜索左闭右闭的写法
int left_bound(int[] nums, int target) {if (nums.length == 0) return -1;int left = 0, right = nums.length;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {// 当找到 target 时,收缩右侧边界right = mid;} else if (nums[mid] < target) {left = mid + 1;} else if (nums[mid] > target) {right = mid;}}return left;
}
二分查找应用实际的题目,寻找左边界
Leetcode 1011在D天内送达包裹的能力;

哈希表

一般用来判断元素在集合中是否出现过,常用的哈希的方法有 数组 set集合 map集合

leetcode 1; 用map集合来存储出现的元素,如果target-nums[i]在map中出现了,那么就找出来了nums[i]+nums[j]=target;

数组做映射 lt,有效字母的异位词,判断一个字母是否在另一个字母里面全部都出现过,

首先遍历第一个字母,用的是records[s.charAt(i)-‘a’]++,索引是对应的字母,索引对应的值是对应出现的次数。然后再遍历另一个字符串将出现的–,最后遍历这个数组;

用set集合来做映射,求两个数组之间的交集,一共字母可能出现了多次,如何解决呢,应该用set,遍历第一个字符串,添加到set1中,遍历第二个,如果set1中有那么就添加到set2中去,再将set2转为数组即可;

双指针模板

例题删除数组中重复的元素,需要原地删除,不能创建一个新的数组
slow=0,fast=0;
fast<nums.length
快指针进行移动,如果slow指针和fast指针对应的值不相等,需要往前移动slow指针,并且fast的值需要赋值给slow;列题 移除数组中的元素,需要原地进行移除,想要时间复杂度变得很小如何去做呢?left=0,right=nums.length;
left<right; 如果左边的值等于了val,将右边的值赋值给左边,同时right--;左边的值不等于右边就是left不断地++;

处理字符串有一个叫做中心扩散法则

class Solution {public String longestPalindrome(String s) {//最长回文的字串  中心扩散法则int len = s.length();if (len < 2) return s;int[] res = new int[2];int maxLeb = 0;for (int i = 0; i < s.length(); i++) {int odd[] = centerSpread(s, i, i);int[] even = centerSpread(s, i, i + 1);int[] max = odd[1] > even[1] ? odd : even;if (max[1] > maxLeb) {res = max;//将最大的赋值给resmaxLeb = max[1];}}//res[0]是左边界 res[1]是对应的长度;return s.substring(res[0], res[0] + res[1]);}public int[] centerSpread(String s, int left, int right) {int len = s.length();while (left >= 0 && right < len) {if (s.charAt(left) == s.charAt(right)) {left--;right++} else {break;}}//索引1是对应的坐标,索引二是对应的长度;return new int[]{left + 1, right - left - 1}}
}

数据结构模板

优先队列

什么时候应该使用优先队列?
求前k个元素....  不断利用高位元素  求中位数
优先队列的模板题 leetcode 973
class Solution {public int[][] kClosest(int[][] points, int k) {PriorityQueue<long[]> queue =new PriorityQueue<>((a,b)->Long.compare(b[0],a[0]));//比较的就是距离远点的平方;  //比较规则的时候,需要使用long的包装类for (int i = 0; i < points.length; i++) {int []cur=points[i]; //当前数组queue.add(new long[]{1L*cur[0]*cur[0]+cur[1]*cur[1],1l*i});//把对应的距离 和索引都加到数组中去,数组在加到队列中去if (queue.size()>k){//寻找k个元素,如果大于了k,就需要讲小的进行返回,规则就是小的在·前queue.poll();}}int [][]ans=new int[k][];int p=0;while (!queue.isEmpty()) {ans[p++] = points[(int)queue.poll()[1]];}return ans;}
}//优先队列就是可以根据自己的需要对元素进行排序,如果排序的规则比较复杂可以定义一个类来实现规则
public class Seg implements Comparable<Seg>{int len,l,r;public Seg(int len, int l, int r) {this.len = len;this.l = l;this.r = r;}@Overridepublic int compareTo(Seg o) {if (len==o.len){return l-o.l; //返回一共数,升序排序}else {//长度不等,就看谁的长度大return o.len-len;//进行降序排序}}
}

图论模板

并查集模板,并查集有三个步骤 :1初始化,每一个节点的父节点都是自己

2找到根节点,需要进行路径压缩,将所有子节点都指向一个父节点

3联合,找到两个节点的父节点,将一个节点的父节点指向另一个节点

题目(244条消息) 【蓝桥杯】 历届试题 合根植物(并查集)_csdn_theSerein的博客-CSDN博客

public class BING {static int fa[];public static void main(String[] args) {int n ,m,x,y;Scanner scanner =new Scanner(System.in);n=scanner.nextInt();m=scanner.nextInt();fa=new int[n+1];init(n);for (int i = 1; i <=m; i++) {//自身指向自己的节点x=scanner.nextInt();y=scanner.nextInt();union(x,y);}int q=scanner.nextInt();for (int i = 0; i < q; i++) {if (find(scanner.nextInt())!=find(scanner.nextInt())){System.out.println("NO");}else {System.out.println("YES");}}}//路径压缩的代码static void init(int n){for (int i = 1; i <=n; i++) {fa[i]=i;}}static int find(int i){if (fa[i]==i){ //如果父节点是自身的话,直接返回就行了return i;}else{fa[i]=find(fa[i]);//将i的父节点加入进来,进行递归return fa[i];//是i的父节点}}//通过这一段代码,将所有的节点都指向了一个父节点static void union(int i,int j){int i_fa=find(i); //找到对应的节点int j_fa=find(j);//fa[i_fa]=j_fa;//将节点进行合并操作}
}

Dijkstra算法模板

bfs求无权图的单元最短路径。

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

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

相关文章

将商城项目放到docker-centos7中

1、docker pull centos:7 2、docker run -d -it --privileged 仓库名称/shopcentos:1.1 /usr/sbin/init 注意&#xff1a; /usr/sbin/init 必须加&#xff0c;否则没法使用systemctl启动mysql 3、安装mysql教程 安装msyql教程&#xff1a;https://blog.csdn.net/davice_li…

docker下载和案例

文章目录 Docker安装一,根据官方文档安装二,根据我以下方式 Docker配置错误导致漏洞一,CRLF注入漏洞介绍在nginx中该漏洞例子解决方法 目录穿越漏洞介绍解决方法 Docker安装 一,根据官方文档安装 官方文档 二,根据我以下方式 docker安装要求&#xff1a; Docker要求Ce…

扑克牌(二分)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 你有n种牌&#xff0c;第i种牌的数目为ci。另外有一种特殊的牌&#xff1a;joker&#xff0c;它的数目是m。你可以用每种牌各一张来组成一套牌&#xff0c;也可以用一张joker和除了某…

用户数据报协议UDP

UDP的格式 载荷存放的是:应用层完整的UDP数据报 报头结构: 源端口号:发出的信息的来源端口目的端口号:信息要到达的目的端口UDP长度:2个字节(16位),即UDP总长度为:2^16bit 2^10bit * 2^6bit 1KB * 64 64KB.所以一个UDP的最大长度为64KBUDP校验和:网络的传输并非稳定传输,…

BIO、NIO、AIO 有什么区别

在Java中&#xff0c;BIO&#xff08;Blocking I/O&#xff09;、NIO&#xff08;Non-blocking I/O&#xff09;和AIO&#xff08;Asynchronous I/O&#xff09;都是用于处理I/O&#xff08;输入/输出&#xff09;操作的不同方式。它们在处理I/O时具有不同的特点和适用场景。 B…

【leetcode】前缀和

内容摘抄自&#xff1a; 小而美的算法技巧&#xff1a;前缀和数组 | labuladong 的算法小抄 一维数组的前缀和 看这个 preSum 数组&#xff0c;若想求索引区间 [1, 4] 内的所有元素之和&#xff0c; 就可以通过 preSum[5] - preSum[1] 得出。 class NumArray {private:// 前缀…

wordpress数据表中标签和分类如何区分?

wordpress中标签和分类是什么关系怎么区分&#xff1f;最后有一个群的网友告诉了我文章ID和标签ID的关系是放在了wp_term_relationships表中&#xff0c;然后我百度了下这个表的结构和相关介绍&#xff0c;发现果然如此&#xff0c;先把文章保存起来&#xff1a; wp_term_rela…

消息中间件 Asio (C++)

折腾了一上午&#xff0c;看到这个结果的时候泪目了兄弟闷&#xff0c;讲真。我的asio客户端成功收到服务端发来的消息了。虽然这确实是极其智障又简单的入门哈哈 下载独立版本 asio网络通信库新建cmake工程&#xff0c;CMakeLists.txt加载asioasio最简单的服务端和客户端代码…

SpringBoot集成websocket(3)|(websocket调用websocket采用回调方式实现数据互传)

SpringBoot集成websocket&#xff08;3&#xff09;|&#xff08;websocket调用websocket采用回调方式实现数据互传&#xff09; 文章目录 SpringBoot集成websocket&#xff08;3&#xff09;|&#xff08;websocket调用websocket采用回调方式实现数据互传&#xff09;[TOC] 前…

Vue引入外部js文件中的变量,方法

写法一&#xff1a; vue文件 <template><div class"index"><div>{{zuopin}}</div><h2>{{content.name}}</h2><h2>{{content.title}}</h2><div class"box" v-for"item in info" :key"…

Java技术整理(6)—— 微服务篇

1、服务注册发现 服务注册就是维护一个服务列表&#xff0c;它在管理系统内所有的服务地址&#xff0c;当新的服务启动后&#xff0c;它会向服务列表提交自己的服务地址&#xff0c;服务的调用法可以直接向服务列表发送服务列表获取请求&#xff0c;就能获得所有的服务地址&am…

【LangChain】Prompts之示例选择器

LangChain学习文档 【LangChain】向量存储(Vector stores)【LangChain】向量存储之FAISS【LangChain】Prompts之Prompt templates【LangChain】Prompts之自定义提示模板【LangChain】Prompts之示例选择器 概要 如果您有大量示例&#xff0c;您可能需要选择要包含在提示中的哪…

pytest功能特性介绍

前言 学pytest就不得不说fixture&#xff0c;fixture是pytest的精髓所在&#xff0c;就像unittest中的setup和teardown一样&#xff0c;如果不学fixture那么使用pytest和使用unittest是没什么区别的(个人理解)。 fixture用途 1.做测试前后的初始化设置&#xff0c;如测试数据…

【AI】《动手学-深度学习-PyTorch版》笔记(十七):卷积神经网络入门

AI学习目录汇总 1、从全链接层到卷积 1.1 卷积 我们在前面学习的多层感知机中,已经认识了全链接层,缺点很明显,在稍微大点的网络模型中,参数成指数级别增长。参数量很快就达到数十亿,这样的量级几乎无法计算。为此科学家们想出一个减少参数的方法:卷积。 从全链接层到…

Android Monkey测试

1.直接使用 当配置好一切环境的前提下&#xff0c;仅需套用以下基础语法&#xff0c;即可简单使用(更多的命令可以去Android的官网查询) adb shell monkey -p [包名] -v [需要点击的次数] 举例&#xff0c;如我这里的包名是 com.test.chj233 &#xff0c;需要随机生成 1万次…

linux 关机和重启

关机和重启 关机和重启之前最好先数据数据同步一下 # 将数据由内存同步到硬盘sync 关机 #shutdown [选项] 时间#立即进入维护模式shutdown now#立即重启shutdown -r now#20:00 重新启动计算机shutdown -r 20:00& #立即关机shutdown -h now# 20:00 关闭计算机shutdown -h 20…

K8S系列文章之 Shell批处理脚本应用

一、简要说明 1、批处理脚本介绍 命令批处理脚本&#xff1a;/usr/shell/all.sh文件批量分发脚本&#xff1a;/usr/shell/scp.sh 2、批处理命令脚本原理 读取/usr/shell/hosts文件中的ip列表使用$*接收脚本所有参数for循环遍历hosts文件中的ip地址通过ssh host cmd 实现目的…

【elasticSearch系】3.完整搭建详尽版elk

话不多说,我们先看下经典的elk 是由哪些组件搭建组合起来的 elasticSearch和kibana搭建 可以查看之前我搭建elasticsearch和kibana 的这篇文章 logstash搭建 为了和之前我搭建elasticsearch和kibana版本保持一致,这里我们还是选择7.17.3 下载地址 点击下载,这里为了方…

wangEditor5实现@评论功能

需求描述&#xff1a;在输入框输入后显示用户列表&#xff0c;实现人功能 当前环境&#xff1a;vue3viteelementPluswangEditor5 需要插件&#xff1a;wangeditor/plugin-mention 安装插件&#xff1a;npm i wangeditor/plugin-mention 输入框组件分两部分&#xff1a;1. wa…

谈谈对Spring MVC的理解

问题分析&#xff1a; SpringMVC 是一种基于 Java 语言开发&#xff0c;实现了 Web MVC 设计模式&#xff0c;请求驱动类型 的轻量级 Web 框架。 SpringMVC采用了 MVC 架构模式的思想&#xff0c;通过把 Model&#xff0c;View&#xff0c;Controller 分离&#xff0c;将 Web 层…