自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 问答 (2)
  • 收藏
  • 关注

转载 清理本地Maven仓库

当maven项目的pom文件爆红时,可能是下载依赖jar包中途失败,导致jar包下载不完整,此时可以使用以下命令来对仓库中的依赖删除后重新下载。

2024-01-17 12:15:17 606

原创 MySQL数据库upsert使用

并附带自己的一些理解和使用经验.

2023-09-16 17:54:57 3374

转载 有效用户id、实际用户id

用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限。在正常的情况下,一个用户登录之后(假设是A用户),A用户的有效用户ID和实际用户ID是相同的,但是如果A用户在某些场景中想要执行一些特权操作,能顺利的执行吗?这里的A用户想要执行的是特权操作,A用户没有这个权限,所以A用户就只能通过一定的手段来修改当前的有效用户ID使其具有执行特权操作的权限。用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid。

2023-04-23 15:13:22 405

原创 C++模板特化与部分特化(偏特化)

上述特化即表示当类型为int时,有一套和其他类型不同的处理方案,而除int以外的其他类型则由上面的泛化模板生成定义。模板即是对类型的一种泛化,当我们的模板对某种特定类型有特定的实现时,模板特化即是一个很好的解决方案。除了全部特化,模板还可以部分特化,而部分特化又可分为个数部分特化和范围部分特化。1.个数部分特化(模板参数的个数)

2023-03-22 22:59:06 242

原创 格雷码的生成与解码

证明:已有n-1位格雷码序列,则可知n-1位格雷码序列逆序也满足相邻代码只有一位不同,且首尾相连,对逆序的所有代码左端补1不改变上述性质,将两段代码相接后连接处的两个代码只有最高位不同,首尾代码也只有最高位不同,所以得到的是n位格雷码。对n位二进制的码字,从右到左,以0到n-1编号,如果二进制码字的第i位和i+1位相同,则对应的格雷码的第i位为0,否则为1(当i+1=n时,二进制码字的第n位被认为是0,即第n-1位不变)通过观察或者推理都可以得出,格雷码的最高位和自然二进制码的最高位是相同的。

2023-02-25 15:58:58 4434

原创 素数筛(埃氏筛、欧拉筛)

那么对于任意的i>2,当我们遍历到i时,则我们一定先遍历了[2,i-1]之间的所有数,若isprime[i]为false,则证明i不是[2,i-1]中任意素数的倍数,即i只能被1和它自身整除,所以i为素数。若x∈[2,i-1],则x*i一定已经被标记为合数了,因为在遍历到i之前,我们一定已经遍历过x了,若x的最小质因数为k,k*y==x,则x的i倍即k的i*y倍若小于n则一定已经被标记过了。那么问题来了,如果我给你一个数字n,让你判断有多少个小于n的素数,...

2022-08-02 08:33:14 4179 3

原创 欧拉路径与DeBruijn序列

最近在力扣上刷题时看到了这道题:力扣 ,这是一道欧拉路径与DeBruijn序列结合的题目,非常有趣,欧拉路径以前在离散数学中学过,但DeBruijn序列确实是第一次见,所以我特地去查了一些资料,写这篇博客主要是为了巩固欧拉路径的知识,并加深对DeBruijn序列的理解(DeBruijn序列是一个非常神奇的东西,在很多领域都有广泛的应用)。如有错误,欢迎指正。一些定义:欧拉通路:通过图中每条边且行遍所有顶点的迹(每条边恰一次的途径),称为欧拉通路。半欧拉图:具有欧拉通路但不具有欧拉回路的图称为半欧拉图,有且仅

2022-06-14 13:17:27 708

原创 凸包算法详解

一些废话:写这篇博客是因为在听算法网课老师讲分治的时候提到过分治法求凸包的问题,当时没怎么听懂也没太在意这个(因为老师只是提了一嘴,没有细讲),结果好巧不巧,第二天力扣的每日一题就是凸包问题,题目在这:力扣然后就想着好好学一下凸包算法,但因为我比较懒。。。立了计划后给这篇博客起了个头就没管了,直到几乎20天后,力扣的每日一题又又又有一题可以用凸包做,题目:力扣所以我特意抽出一个下午好好看了一下各种凸包算法,写下了这篇博客。注:一下算法均围绕力扣题目 587.安装栅栏 来讨论前置知识:设平

2022-06-04 10:14:15 4348 3

原创 一般性选择问题(在N个数中选第K大或第K小)

问题:选第k小.输入:数组S,S的长度n,正整数k(1 <= k <= n).输出:第k小的数.算法1:调用k次选最小算法,时间复杂度O(kn)算法2:先排序,然后输出第k小的数,时间复杂度O(nlogn)算法3:分治算法下面我们来讨论算法3.设计思想(假设数组中数据无重复):用数组S中的某个元素m做标准将S划分成S1与S2,其中S1中的元素小于m,S2中的元素大于等于m 如果k <= |S1|,则在S1中找第k小。如果k == |S1| + 1,则m

2022-04-24 17:24:39 1228

原创 分治法的应用--平面点对最小距离问题

问题描述:一个二维平面内有一些随机分布的点,求这些点之间距离最短的两个点。(问题和图片均出自于清华大学网课)看到这个问题首先想到的应该是暴力解法,即对于每个点,遍历其他所有点求距离。把平面中任意两点的距离都求出来后,取其中的最小值。但是这个算法的时间复杂度为O(n^2),当数据量较大时是无法接受的。于是我们想到了分治法,可不可以将问题化简为求几个规模减小的子问题呢,答案是可以的,我们可以根据平面中的点的x坐标或y坐标将它们分为数目大致相等的两部分。这里我们以x坐标举例,如图:我们可以在分治之

2022-04-16 19:04:32 3459

原创 算法--树状数组

引入问题:力扣题目给出一个长度为n的数组,完成以下两种操作多次:1、将下标为index的元素的值加上k(k可以是正数也可以是负数)2、输出区间[left, right]内所有元素的和(包含边界)朴素算法:对区间的元素累加求和,复杂度O(n^2),单点修改复杂度O(1),区间查询复杂度O(n)前缀和:复杂度O(n^2),单点修改复杂度O(n),因为修改完数组值后还要修改前缀树组的值,区间查询复杂度O(1)可以看出以上两种方法时间复杂度都比较高,而用树状数组可以有效的降低时间复杂度。树状数.

2022-04-04 16:56:50 303

原创 mysql--游标

游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH和CLOSE,其语法分别如下:注意:游标的声明应在普通局部变量之后(即先将要用的局部变量声明完后在声明游标)对应课程...

2022-04-03 21:41:30 893

原创 MYSQL--变量

MYSQL中的变量分为三类,系统变量、用户自定义变量、局部变量。一、系统变量系统变量是mysql服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。(全局变量在全局范围内可用,即所有会话下都可用,会话变量在当前会话可用,一个会话即为mysql中打开的一个窗口)若未指定变量是全局变量还是会话变量,则默认为会话变量。不管你对系统变量做了什么修改,在mysql服务器重新启动后,所有的系统变量都会恢复默认值,要想永久修改,需要更改配置文件。二

2022-04-03 16:55:03 3205

原创 mysql--存储过程和函数

一、什么是存储过程和函数存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程和函数的区别在于函数必须要有返回值,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型(其中OUT和INOUT类型的参数可充当返回值),而函数的参数只能是IN类型的。如果有函数从其他类型的数据库迁移到MYSQL,那么就可能因此需要将函数改造成存储过程。二、创建

2022-04-03 14:57:17 280

原创 SQL--DDL语法

一、DDL数据库操作DDL-数据库操作查询:查询所有数据库(返回该连接下所有数据库的名称):SHOW DATABASES;查询当前数据库(返回当前数据库名称):SELECT DATABASE();--本质是一个函数调用创建:CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];删除:DROP DATABASE [IF EXISTS] 数据库名;使用 :...

2022-04-01 15:03:56 723

原创 关于聚集索引

此文为观看黑马程序员课程的一些理解和笔记一、索引的分类在InnoDB中根据索引的存储形式,又可分为以下几种:聚集索引:将数据存储与索引放到一块,索引结构的叶子结点保存了行数据,聚集索引有且仅有一个(即使你在建表时不显式指定创建聚集索引,系统也会在底层帮你创建) 二级索引:将数据与索引分开存储,索引结构的叶子结点关联的是用于聚集索引的列值(大部分情况下,该关联值为主键,因为聚集索引默认为使用主键创建二、聚集索引选取规则如果存在主键,主键索引就是聚集索引。 如果不存在主键,将使用第一个

2022-03-30 17:04:22 2011

原创 双线程线程互斥--Peterson算法

(本文是笔者在看jyy操作系统P4后做的笔记)Peterson算法是一个实现互斥锁的并发程序设计算法,可以控制两个线程访问一个共享的单用户资源而不发生访问冲突。Peterson算法的本质是一种谦让模式,当两个线程的其中一个想进入临界区时,先观察一下另一个是否也想进入临界区,如果是,则让另一线程先进。实现方式:每个线程都拥有一个旗帜,表示他们是否想进入临界区(在即将进入临界区前,则会举起旗帜,在临界区结束后应放下旗帜) 临界区上有一个代表允许进入的线程的标识,当两个线程都想进入临界区时,标识

2022-02-13 16:40:14 1018

原创 Linux下文件的压缩和解压缩

声明:本文是我在B站看苏丙温老师的课程时做的一些总结参考资源1:Linux压缩打包命令——tar、zip、unzip_绮梦寒宵的博客-CSDN博客_linux 压缩命令参考资源2:压缩命令 | 爱编程的大丙压缩文件的格式包含:.tar.gz | .tgz | .tar.bz2 | .zip | .rar | .tar.xz上面压缩文件的后缀其实没有什么特殊的意义,仅仅代表了文件是用什么方式(即什么工具)压缩的,方便日后你需要解压或者别人需要解压时来用对应的方法解压。一、使用tar工具压缩

2022-01-19 20:52:49 1006

转载 C语言调用汇编

程序的入口是main,在main里调用汇编的函数。首先要解决怎么定义函数的问题在C语言中,要extern 一个函数声明即可,然后这个函数在汇编里面实现。在汇编里面,用EXPORT 把C语言定义的函数名引进来,再开始编写函数名开始的段例子是一个六个数相加的函数。C语言:#include<stdio.h>extern int sum(int a,int b,int c,int d,int e,int f);int main(){ ..

2022-01-10 15:53:27 3522

转载 将inline函数写在头文件里

inline是加在实现上,就算加在声明上,编译器也会忽略掉。内联展开是在编译时进行的,只有链接的时候源文件之间才有关系。所以内联要想跨源文件必须把实现写在头文件里。如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。注意:将函数的定义({…}之间的部分)放在头文件中是强制的,除非该函数仅仅被单个.cpp文件使用。尤其是,如果你将内联函数的定义放在.cpp文件中并且在其他.cpp文件中调用它,连接器将给出 “unresolved external” 错误。最佳实践是:...

2022-01-10 10:21:31 459

转载 汇编指令对标志寄存器影响

加法指令:ADD、ADC、INC、XADD除了INC不影响CF标志位外,都影响条件标志位。CF、ZF、SF、OFCF最高位是否有进位DF若两个操作数符号相同而结果符号与之相反OF=1,否则OF=0.减法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B前六种除了DEC不影响CF标志外都影响标志位。CMPXHG8B只影响ZF。CF说明无符号数相减的溢出,同时又确实是被减数最高有效位向高位的借位。OF位则说明带符号数的溢出无符号运算时,若减数>被减数,有借位C

2021-10-20 21:07:34 1943

原创 关于规定步数的最短路径问题

力扣:787.k站中转内最便宜的航班对于这类问题,我们可以用动态规划或SPFA算法的变形(即BFS)代码:class Solution {public: struct arc{ int index,distence; }; int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) { int* d

2021-08-25 10:48:08 234

转载 关于位运算的一些基础操作

链接:https://leetcode-cn.com/problems/power-of-two/solution/5chong-jie-fa-ni-ying-gai-bei-xia-de-wei-6x9m/在解题之前理解一下为什么需要位运算?它的本质是什么?力扣上不少位运算相关的题,并且很多题也会用到位运算的技巧。这又是为什么?位运算的由来在计算机里面,任何数据最终都是用数字来表示的(不管是我们平时用的软件,看的图片,视频,还是文字)。并且计算机运算单元只认识高低电位,转化成我们认识的逻辑

2021-08-20 20:38:28 114

原创 C++ string类

string类是由头文件string支持的(注意,头文件string.h和cstring支持对C-风格字符串进行操纵的C库字符串函数,但不支持string类)。string类位于名称空间std中,因此必须提供using编译指令或使用std::string来引用它。//string 实际上是模板具体化 basic_string<char> 的一个 typedef//即由于含有 typedef basic_string<char> string; 这条语句,string 类成为了

2021-08-15 18:56:50 184 1

原创 文件的读写

一、文件的读写指针:对于输入文件,有一个读指针 对于输出文件,有一个写指针 对于输入输出文件,有一个读写指针 标识文件操作的当前位置,该指针在哪里,读写操作在哪里进行具体操作://读写指针在哪个位置,下一次的读写操作就在哪个位置进行//写指针:ofstream fout("a1.out", ios::app);//以添加方式打开long location = fout.tellp();//取得写指针的位置location = 10;fout.seekp(location);.

2021-08-09 19:20:53 780

原创 文件名的绝对路径和相对路径

带盘符的为绝对路径,不带盘符的为相对路径。路径中的\也可用/来代替。… 表示上一级文件夹

2021-08-09 17:03:53 405

原创 关于多态

摘自 清华大学C++程序设计mooc ——多态实例:几何形体程序原因:因为若构造函数允许多态,则在调用派生类构造函数时,会先调用基类构造函数,若基类构造函数中调用了派生类的多态方法(多态是由基类指针或引用调用基类或派生类的虚函数),而此时派生类对象还没有初始化完成,在没有初始化完成的情况下调用类方法显然是不符合常理的若析构函数允许多态,则在派生类析构函数调用后,会调用基类析构函数,若基类析构函数调用了派生类多态方法,而此时派生类对象已经析构,在对象已析构的情况下调用析构函数会出错。...

2021-08-04 22:38:22 94 1

原创 字符串匹配算法 Rabin-Karp

算法步骤:将主串按模式串长度转化为一系列整数(hashcode),并存储在hash表中,将模式串转化为整数 对比模式串与主串的hashcode,若两者的hashcode不同,则一定不匹配,若两者hashcode相同,则两串可能匹配(因为不同的字符串转化为hashcode的值可能相同),所以我们需要将这两个串的字符逐个对比,若每个字符都匹配,则两字符串匹配下面说一下将字符串转化为数字(hashcode)的细节:对于不同的字符形式,我们可以以不同的基数d来将字符串转化为十进制的数。eg:若字符串

2021-08-02 16:57:06 156

原创 Boyer-Moore 投票算法

在LeetCode上写面试题 17.10. 主要元素的时候碰到的比较有趣的算法。要解该题有很多方法:一、将数组排序,取数组中间元素,然后向两边遍历,验证该元素是否为主要元素(若存在主要元素,则由于其数量超过数组的一半,其必定经过数组中间),该方法的时间复杂度取决于排序算法,空间复杂度为O(1)。二、哈希表,统计每种元素的数量。时间复杂度为O(n),空间复杂度为O(n)。三、Boyer-Moore 投票算法,每次消去一组不同的数,若最后所有数被消除完,则不存在主要元素,否则验证最后剩余的那个数

2021-07-09 11:09:49 81

原创 PTA题 Sort with swap(0,i)

要完成这题且不超时,必须得知道下面这个结论(之前我自己找到了一种方法但测试点一和二过不了,超时了):N个数字(这N个数的值为0到N-1且没有重复的数字)的排列一定由若干个环组成,且这些环互不相交。那么什么叫环呢?假设这N个数存在大小为N的数组a[N]中,随便选一个数a[i],若i=a[i]则这个数自成一个环,否则temp=i;while ( a[i] != temp ) i=a[i] ;当循环退出时则找到了一个环。如下表,8个数的排列中有三个环(颜色相同表示属于同一个环):A 【0】...

2021-05-30 16:33:25 104

原创 快速排序

快速排序的效率主要取决于你是怎么来实现这个算法的,如果中间有一步的实现没有做好,快速排序可能会变得非常慢。快速排序的步骤:选主元(pivot):在待排序数组中选取一个数作为主元。 子集划分:围绕所选取的主元划分数组,主元左边的数均小于主元,主元右边的数均大于主元。(这样划分后主元的位置已经确定) 递归:将主元左边的元素和主元右边的子集元素分别递归的执行上面两步,直到数组完全有序。这里主要的步骤之一就是选主元,主元怎么选关乎整个算法的效率。经分析可知当每次所选的主元都是数组元素的中间值,即比它大

2021-05-23 15:28:26 102

原创 Kosaraju算法求强连通分量

Kosaraju算法该算法旨在得到深度优先后续排列后的递归探索中,每次调用DFS的所有顶点都属于同一强联通分量。所以可以这么理解:当递归进入一个强联通分量时,把他锁死在这个强联通分量中(即不能从该强联通分量中的任意顶点达到外部顶点)...

2021-05-21 17:07:37 334

原创 拓扑排序和关键路径

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define MAX_SIZE 50//拓扑排序基本步骤://一、在有向图中选出一个入度为0的点(即没有前驱的点)输出//二、在图中删除该顶点和所有以它为尾的弧//为了增加程序的运行效率,我们可以设置一个存放入度为0的顶点的队列,删除顶点//以及以它的尾为弧的操作,则可换以弧头顶点的入度减一来实现(并把减一后入度为0的顶点//加入存放.

2021-05-15 21:13:27 517

原创 最小生成树prim算法与kruskal算法的原理分析与代码实现

一、最小生成树 是一颗树,无回路,n个顶点的最小生成树有n-1条边 是生成树,包含图中的全部顶点,且树的n-1条边都是图中的边 该树满足所有顶点都连通且边的权重和最小如上图,加粗的边即为一颗最小生成树。图中所示的生成树的总权重为37。不过,该最小生成树并不是唯一的,删除边(b, c),然后加入边(a,h),将形成另一棵权重也是37的最小生成树。二、最小生成树的MST性质 求最小生成树的多数算法都利用了该性质(包括prim算法与kruskal算法)MST性质...

2021-05-14 18:56:44 640 1

原创 tarjan算法(C语言)

tarjan算法(C语言)可能是由于算法基础不够,学tarjan花了我好长时间,tarjan也是我目前学过的感觉最难的算法;话不多说,直接上代码(分析都在代码里了)#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#define MAX_SIZE 50 //最大结点数typedef struct arc{ int index;//存储结点在节点表中的位置 struct arc

2021-05-10 23:45:48 460 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除