- 博客(96)
- 资源 (1)
- 收藏
- 关注

原创 C++ 笔记
析构函数:释放对象内存时会自动调用析构函数,在构造函数前面加上“~”即成为析构函数,若不定义则系统会默认创建一个空实现的析构函数。构造函数:创建对象时会自动调用构造函数,构造函数(与函数名一致)若不定义则系统会默认创建一个空实现的构造函数。
2023-01-07 15:33:18
645
原创 重载的原理java
这是因为对重载方法的选择,是根据变量的静态类型来确定的,而不是实际类型。我们都知道,在多态的情况下调用方法,会根据实际类型调用实际对象的方法,但是在重载中,是根据静态类型来确定调用哪一个方法的。和调用重写方法不同,由于一个对象的静态类型在编译期间就可以确定,所以调用哪个重载方法是在编译期就确定好了,这叫静态分派,而调用重写的方法却要在运行时才能确定具体类型,这叫动态分派。重载是在编译期间就决定的,每个类的方法都有唯一的方法签名,不能存在两个方法签名一样的,方法签名由方法名称和参数列表决定。
2025-03-04 19:37:39
137
原创 隐式转换为什么导致索引失效
这条语句失效的原因就是id是int类型的主键,比较的时候把id从int转化为字符串来比较了,而字符串的比较规则和int的比较规则明显不同,字符串是字典序比较的,还涉及到数据的长度,那为什么是id从int 转为字符串,而不是字符串转化为int呢,这是因为int转为字符串是1对1的转换,比如10只能转化为’10’,而’10‘、'10b’等都会转换为10,而且从字符串转换为int有风险,超出数据范围怎么办,所以只能int转string。解决方案就是避免不同类型的比较,避免使用隐式转换,用显示转换。
2025-03-02 23:36:40
241
原创 理解文件排序
先来看上面这条sql,为了最优化性能,最好的办法是建立联合索引(status, create_time),这样在status相同的情况下,create_time默认就是升序的,如果只建立了status索引,就需要把所有status=1的数据读取到sort buffer排好序再返回给执行器,如果缓冲区能容纳下还好说,容纳不下还需要外部排序,把文件分成很多小块,使用归并排序,很浪费时间。双路就是只要主键ID和排序字段,优点与单路排序相反。
2025-02-28 18:14:03
192
转载 Chocolatey安装【超详细 下载 安装 卸载 更改默认软件安装位置】
Chocolatey 是 windows 下一款命令行包管理软件 ,简单说这就是 Windows 的 apt-get。习惯 Linux 操作方式并非常想用它操纵 Windows 的敬请折腾。Chocolatey 这套包管理系统目前已经包含了近 500 多款常用软件。
2024-12-20 10:54:32
1568
原创 Leetcode42接雨水(单调栈)
维护一个栈,满足从栈底到栈顶元素大小递减。如果当前元素高于栈顶,且栈内有至少2个元素,则形成了一个凹槽,及一个图中横着的红色矩形,将它的面积累加即可,第一次写难在维护单调栈中计算面积和。求出前缀最大和后缀最大,用两者较小值减去当前高度,累加即可,这个思路容易想到,这里不赘述。
2024-08-28 22:04:30
531
原创 字符串解析-KMP魔改
已知存在一种字符串解析语法,其中的语法元素如下N:用于匹配单个数字(0-9)A:用于匹配单个字母(a-z,A-Z)n():用于表示一个分组,分组中至少有一个N语法元素或者A语法元素,n为一个数值,表示匹配n次,1
2024-05-15 20:35:20
254
原创 Code Runner使用外部控制台,运行结束后等待用户输入
需要注意传递给cmd的参数要用引号包起来,否则cmd会认为它们是多个命令从而解析失败。我想找到一种方法类似调试程序一样程序结束后,用户输入任意键关闭窗口。第二章方法cmd窗口在程序运行结束后不会自动关闭,需要用户手动关闭。修改Code Runner的Setting.json。第一种方法每一个程序都需要在最后加上这条命令很烦;1.末尾加上system(“pause”)
2024-01-06 16:39:43
795
1
原创 docker容器使用初体验
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。(来源于菜鸟教程)
2023-10-05 18:35:25
309
原创 每日一题-动态规划(从不同类型的物品中各挑选一个,使得最后花费总和等于1000)
dp[i][j] = dp[i-1][j-A] * js[i][A],js[i][A]表示i类型的物件花销为A的方案数量,如此只需要枚举j和A,它们的范围就是1000以内。四种类型的物品,每一种类型物品数量都是n,先要从每种类型的物品中挑选一件,使得最后花费总和等于1000。暴力做法10000^4。
2023-09-02 18:09:27
339
原创 Qt 类似vscode和matlab的分屏显示效果
实现了一个类似vscode和matlab的标签页显示分屏效果,支持鼠标拖拽分屏、全屏显示,可自适应调整大小,程序把要显示的Widget独立出来,可随时替换为其他的用户自定义Widget,例如3d模型、二维画图等。
2023-07-25 17:35:04
502
原创 红黑树介绍
红黑树相较于AVL,其查找效率略低一点,而插入删除效率高出AVL很多,所以当插入删除操作很多时可以使用红黑树。红黑树就是满足以下特性的二叉树。
2023-04-16 22:46:35
108
原创 Git如何推送当前代码到远程仓库
(建立在已经配置好用户变量和ssh基础上)在本地创建git仓库git init绑定远程仓库,origin是给远程仓库起的别名,也可以起其他名字,但是如果用origin,git push时可以不指出名字,如果用其他名字需要指出名字,git push 名字提交到暂存区,提交所有文件git add .从暂存区提交到本地仓库从本地仓库推送到远程仓库git push。
2023-04-16 10:38:25
4063
原创 快速排序-防止退化O(n2)(三路排序)
解决方案:随机化数组或者随机取基准值(而非第一个)时间复杂度会退化为O(n2)时间复杂度会退化为O(n2)所有数据都相等的数组。
2023-03-25 17:15:40
249
原创 Leetcode-寻找两个正序数组的中位数
明显是二分,但是二分什么呢?一般都是二分两个数组,但这道题不同,需要二分的是k,对于两个数组而言,比较两个数组的第k/2个数字,小的一方前k/2个数字都不会是中位数,可以直接排除,从而快速缩小范围。此题目是寻找两个数组组合为一个数组后的中位数,我们知道两个数组的长度,中位数是组合后的数组第几个数字我们是知道的,问题就转化为了寻找组合后数组的第k个数字,要求时间复杂度在。
2023-03-17 10:50:02
109
原创 explicit关键字
以上代码不会报错,因为t = {1, 2}这里发生了隐式类型转换,将{1, 2}转化为了Complex(1, 2),产生了一个匿名对象,然后把匿名对象赋值给t(这种赋值只是简单的值拷贝操作,假如存在指针,这种操作有浅拷贝的隐患)但如果在构造函数前面加上explicit关键字,以上代码无法通过编译,因为explicit不允许隐式类型转换,等号右边的类型与左边的类型不符,则编译失败。作用: 防止隐式类型转换。
2023-03-12 10:48:22
88
转载 牛客小白月赛67-E 游戏的买
这道题要注意一定要保证游戏能够买到。此时f[i]=0.5a+0.5f[i+1]。以此类推可以得到第一天决策的最佳期望。
2023-02-27 21:18:38
137
原创 函数对象以及labbda表达式浅析
myPrint类声明的对象就是函数对象,func()本质上是调用成员函数func.operator()(2),但是由于经过运算符重载后也可以写成func(2),形式就像是调用函数一样,所以称为函数对象。函数对象就是仿函数,之所以叫仿函数,是因为使用起来书写形式和调用函数的代码形式很像,之所以叫函数对象,是因为本shi质还是个对象,只不过写这个类是为了使用类似函数的功能。仿函数就是重载了括号,例如以下代码。和普通的函数相比,有很多好处。
2023-02-24 18:07:54
133
原创 牛客练习赛-C-梦迹
考虑答案是否爆int,最差情况是n*(n-1)/2,到1e10,开longlong,其次注意树状数组下标从1开始,而题目a[i]从0开始,因此加上值为1的偏移量。因此修改数字时就可以先减去修改前的贡献,加上修改后的贡献,树状数组的维护上,如果数字从a变为b,就把a位置加上-1,b位置加上1即可。这道题和用树状数组求逆序对那道题目类似,都是把数组值作为树状数组下标,效果等价于权值线段树,本质上是一道树状数组的简单题。每一个数字为答案的贡献等于getsum(W-num)
2023-02-19 21:07:13
190
原创 指针笔记(指针数组和指向数组的指针,数组中a和&a的区别等)
int *p[4]和int (*p)[4]有何区别?前者是一个指针数组,数组大小为4,每一个元素都是一个指向int的指针后者是指向int[4]类型数组的指针以上代码若运行会报如下错误main函数中定义的a数组本质是一个指向int[2]的指针,而函数形参则是一个指针数组,即形参的a是一个二维指针,所以会报错类型不匹配若将形参改为int (*a)[2]则编译通过。
2023-02-18 18:12:17
630
原创 缓冲区浅析
程序运行输入数据时,从键盘的输入先存储到缓冲区,只有当缓冲区满或者输入回车时程序才会真正地从缓冲区读入数据。例如这里输入空格时程序没有输出,而是将空格也放入了缓冲区,只有输入回车时,程序才从缓冲区中拿出数据,而。这篇文章只是浅析缓冲区,缓冲区具体分为三种,全缓冲、行缓冲、不带缓冲,深入理解自行查阅资料。,读入2,遇到回车,停止读入,但回车依旧在缓冲区。,所以下次读入时,先碰到空格,cin会舍弃。,首先拿出1,遇到空格,停止读入,但。in_1:1空格回车。
2023-02-13 20:18:02
494
原创 operator的两种用法(重载和隐式类型转换)
当然了,构造函数的隐式类型转换有利有弊,类的设计者就起决定性作用了,如果你不想让构造函数发生隐式的类型转换,请在构造函数前加explicit关键字;Test1类型的对象传入string的构造函数,是用了c++构造函数的隐式类型转换特性,虽然string类并没有显式定义参数为Test1的构造函数,但因为其可以隐式转换为string,所以语法上都是合法的。构造函数的隐式类型转换,是使用一个其他的类型构造当前类的临时对象并用此临时对象来构造当前对象,这种转换必须有构造函数的支持;
2023-02-13 10:46:59
571
原创 Leetcode 48. 旋转图像
如何把当前元素放到下一个即将访问的位置?如果只是简单的覆盖,下一个元素将丢失,容易想到的是用temp存储即将丢失的元素,但这样实现起来有许多细节很难写,用交换实现则特别简单,找一个临时变量,每次都把当前位置和临时变量进行交换,则实现了旋转操作。对于一圈:对于第一行(除了最后一个元素)而言,只要把这些元素旋转四次就回到了原来位置,所以只要循环四次,把中间遍历到的元素都移到下一次即将遍历的位置即可。矩阵从外到内,是一圈一圈的,只要能把一圈旋转90度,内层圈找好数据关系,for循环就可以搞定每一圈。
2023-01-26 17:42:19
123
原创 56. 合并区间
双指针,先按照左端点升序排序,对于一个区间,如果可以和后面的合并,则其右端点一定大于后面区间的左端点,且合并后的区间右端点要取两个区间大的右端点,取max,注意边界即可。vector默认按照第一列的元素从小到大排序,注意如果这里加cmp函数,必须是静态函数,因为sort是全局函数,全局函数不能调用类的成员函数。
2023-01-25 20:23:36
99
转载 KNN算法
K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。,说的是每个样本都可以用它最接近的K个邻近值来代表。K最近邻算法就是将数据集合中每一个记录进行分类的方法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。
2023-01-21 17:01:45
2128
转载 K-means算法
K-means算法,也称为K-平均或者K-均值,是一种无监督的聚类算法。对于给定的样本集,按照样本之间的距离大小,将样本划分为K个簇,让簇内的点尽量紧密的连接在一起,而让簇间的距离尽量的大。K-means是一种使用广泛的最基础的聚类算法,通常作为学习聚类算法时的第一个算法。其他的聚类算法还有:K-medoids、k-modes、Clara、Clarans等:物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。
2023-01-20 23:41:10
3832
转载 矩阵分解的推荐算法
推荐算法(recommendation algorithm)就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。目前应用推荐算法比较好的地方主要是网络,其中淘宝、拼多多和京东等做的都非常好。推荐算法主要分为6种:1.基于内容的推荐(Content-Based Recommendation)2.基于协同过滤的推荐(Collaborative Filtering Recommendation)
2023-01-20 21:47:04
457
转载 协同过滤算法CF
基于用户的 CF 就是从用户出发,基于用户对物品的偏好找到和目标用户兴趣相似的用户集合;然后找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。找到的用户集合中的用户可以是一个,也可以是多个,一般默认为一个用户,也就是默认只找到找到一个最相似用户。用户/物品物品a物品b物品c物品d用户A√√用户B√√√用户C√√√√。
2023-01-20 17:32:49
330
原创 Typora使用配置
偏好设置->图像->插入图像时->复制到指定路径->设置图片保存路径。偏好设置->markdown->markdown扩展语法。默认会检查拼写错误,并在下方给予红线提示。偏好设置->拼写检查->不使用拼写检查。偏好设置->markdown->代码块。偏好设置->自动保存。
2023-01-17 16:54:48
226
原创 572. 另一棵树的子树
解出两颗子树的所有前序序列,若t2是t1的子树,则t2的前序序列应为t1的前序序列的子串,利用kmp算法匹配即可,代码中lNull为左子树空的标志,rNull为右子树空的标志。解法一、暴力遍历每一个子树,比较子树是否相同。官方题解给出的哈希做法,感觉很秒。时复:O(s * t)时复:O(s + t)
2023-01-16 17:34:26
95
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人