算法
世界第一打怪物
木有感情的程序员
展开
-
数位dp(参照力扣灵神)
数位dp讲解 & 模板转载 2023-06-05 16:04:12 · 529 阅读 · 0 评论 -
Dijkstra函数模板(c++)
Dijkstra函数模板(c++)原创 2022-05-06 20:11:34 · 616 阅读 · 0 评论 -
字符串哈希(模板)
字符串匹配可以用KMP算法来做,但是KMP实在是太恶心了,对子字符串进行哈希找出子字符串,可以用哈希+滑动窗口的方法但每次求一个子字符串的哈希的复杂度都是O(N),比较慢。我们可以利用JDK对字符串的哈希原理,也就是KR算法,模板和介绍如下。187. 重复的DNA序列#define ull unsigned long longclass Solution {public: string get(string &str, int len){ int n = str.si原创 2021-12-24 10:48:02 · 650 阅读 · 0 评论 -
在最大中求最小系列问题(二分)
力扣:5920. 分配给商店的最多商品的最小值875. 爱吃香蕉的珂珂dalao的解析我的代码:class Solution {public: int minimizedMaximum(int n, vector<int>& quantities) { int l = 0, r = *max_element(quantities.begin(), quantities.end()); while(l<r){原创 2021-11-07 16:21:17 · 72 阅读 · 0 评论 -
力扣5866. 数组的最大公因数排序
原题:5866. 数组的最大公因数排序**1.题意为任意两个数的公因数大于1,那么这两个数可以交换。由此可知如果a和b可交换,b和c可交换,那么a,b,c三者可以任意改变顺序,不难想到用并查集把所有公因数大于1的两个数合并。2.如果用两层循环来判断来合并任意两个数,此时必然会超时。因此考虑将每个数和自己的所有质因子进行合并,如15和质因子3,5进行合并,21和质因子3,7合并,这样保证了21和15在同一个集合中。这样对于每个数仅仅需要分解质因子的时间复杂度,远远低于两层循环所需的时间复杂度。注:为了降低转载 2021-09-06 12:07:13 · 211 阅读 · 0 评论 -
力扣5865. 访问完所有房间的第一天
这是2021-9-5的一道周赛题,当时以为是要用差分数组,但是发现这么做复杂度太高了,并且容易写错,看了题解的dalao才恍然大悟,就是一道普通但很难想到的dp(自己tcl /(ㄒoㄒ)/~~) 原题:[5865. 访问完所有房间的第一天](https://leetcode-cn.com/problems/first-day-where-you-have-been-in-all-the-rooms/)解释在注释// dp[i]代表可以离开i的总天数的和, 下文dp的下标从1开始// 主要分两种情况原创 2021-09-06 10:35:31 · 102 阅读 · 0 评论 -
力扣31题与5749变式(下一个最大的排列)
力扣31法1:从倒数第二个数开始查找,一直找到比下一个数要小的数的下标,假设为i,然后翻转i+1到n-1(n=arr.size())的所有数,接着有两种情况:1、i==1:直接结束函数2、利用二分法(C++有upper_bound)找到第一个大于arr[i]的数,然后互相交换。代码:class Solution {public: void re(vector<int> &nums, int l, int r){ if(l>=r) retur原创 2021-05-02 21:00:37 · 134 阅读 · 0 评论 -
图论--SPFA算法(单源最短路)
已经有比较好的博文来解释了,我就不重复造车轮了(懒~)链接:SPFA 算法详解(最短路径)例题:最优贸易 注意:这题不能用迪杰斯特拉,有的OJ数据比较垃圾而已!我的个人总结是,这个算法主要用在计算权值最大的路径,跟传统的迪杰斯特拉算法的最大不同点是,在每一步选择下一个开始遍历的点是用优先队列,而不是从头开始遍历查找,并且不是每个点遍历过就完事了,还要继续往下找。...原创 2021-03-05 13:52:12 · 79 阅读 · 0 评论 -
倍增求LCA
参考:倍增求LCA#include <iostream>#include <cstdlib>#include <vector>#include <queue>using namespace std;#define SIZE 500005struct edge{ int to; int next;}edges[SIZE<<1];int head[SIZE];int depth[SIZE];int fathe原创 2021-03-01 13:58:15 · 113 阅读 · 0 评论 -
关于prim算法和Kruskal算法
例题:力扣1584. 连接所有点的最小费用两个都是最小生成树的算法,但需要根据具体的情况来进行调用Prim算法根据边来构建,比如有n个点,就会有n*(n-1)/2条边,将所有边排序,然后利用并查集将所有边加入到树,复杂度为O(n2+n2log(n2))=O(n2log(n2)),复杂度太大了,仅仅适用于边比较少的情况Kruskal利用点来构建,如果所有点都可以相连的情况下,复杂度为O(n2)因此在建立最小生成树时,如果所有点都可以相连用Kruskal,否则用Prim比较好!!!...原创 2021-01-19 21:43:24 · 213 阅读 · 0 评论 -
线段树&树状数组代码模板
参考:线段树介绍静态线段树假设大小为n,则至少需要申请大小为4*n的数组,对应力扣:通过指令创建有序数组,代码模板:class SegTree{ int n; int[] arr; SegTree(int n){ this.n = n; this.arr = new int[4*n]; } public void update(int x){ update(1,1,n,x); } public in原创 2020-11-12 13:10:48 · 222 阅读 · 1 评论 -
KMP模板
class Solution { public int strStr(String haystack, String needle) { if(needle.length()==0) return 0; int []next = getNext(needle); return KMP(haystack, needle, next); } public int KMP(String s, String p, int[] next){原创 2020-10-13 12:54:41 · 55 阅读 · 0 评论 -
并查集模板(C++)
下面的并查集模板以下标从1开始(下标为0可对应做出修改)例题:力扣:1579class UFD{public: int count = 0; vector<int> father; UFD(int count):count(count){ father = vector<int>(count+1, 0); for(int i=0; i<father.size(); i++) father[i]=i; }原创 2020-09-22 19:09:47 · 149 阅读 · 0 评论 -
力扣69:二分求 x 的平方根
力扣69:二分求 x 的平方根链接: https://leetcode-cn.com/problems/sqrtx/.原题:实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。主要问题:1、二分普遍头疼之处,超出时间限制2、这里是寻找1-x里面,小于等于x的最大数3、因此,利用二分,并且为了减少查找范围,将刚开始的右边界设为x的一半;代码:class Solution { pub原创 2020-07-27 12:24:11 · 205 阅读 · 0 评论 -
二分查找(普通+左边界+有边界)
二分查找(普通+左边界+有边界)具体详解来自力扣:https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-zhao-xiang-jie-by-labuladong/特别鸣谢labuladong dalao的详解!!!下面是自己修改的二分模板,觉得需要记住普通二分,也就是怎么找都可以,对应力扣第704题,链接:https://leetcode-cn.com/problems/binary-search/public in转载 2020-07-08 21:00:17 · 1161 阅读 · 1 评论 -
图论——tarjan算法
参考:有向图强连通分量对应力扣查找集群内的「关键连接」参考中的tarjan算法的C++程序void tarjan(int i){ int j; DFN[i]=LOW[i]=++Dindex; instack[i]=true; Stap[++Stop]=i; for (edge *e=V[i];e;e=e->next) { j=e->t; if (!DFN[j]) { tarjan(j); if (LOW[j]<LOW[i]) LOW[i]转载 2020-11-12 13:25:12 · 123 阅读 · 0 评论 -
单点与区间的更新与查询(模板)
单点与区间的更新与查询原创 2021-01-16 15:07:38 · 495 阅读 · 0 评论