自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++ 笔记

析构函数:释放对象内存时会自动调用析构函数,在构造函数前面加上“~”即成为析构函数,若不定义则系统会默认创建一个空实现的析构函数。构造函数:创建对象时会自动调用构造函数,构造函数(与函数名一致)若不定义则系统会默认创建一个空实现的构造函数。

2023-01-07 15:33:18 552

原创 Code Runner使用外部控制台,运行结束后等待用户输入

需要注意传递给cmd的参数要用引号包起来,否则cmd会认为它们是多个命令从而解析失败。我想找到一种方法类似调试程序一样程序结束后,用户输入任意键关闭窗口。第二章方法cmd窗口在程序运行结束后不会自动关闭,需要用户手动关闭。修改Code Runner的Setting.json。第一种方法每一个程序都需要在最后加上这条命令很烦;1.末尾加上system(“pause”)

2024-01-06 16:39:43 551

原创 docker容器使用初体验

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。(来源于菜鸟教程)

2023-10-05 18:35:25 219

原创 每日一题-动态规划(从不同类型的物品中各挑选一个,使得最后花费总和等于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 275

原创 Qt 类似vscode和matlab的分屏显示效果

实现了一个类似vscode和matlab的标签页显示分屏效果,支持鼠标拖拽分屏、全屏显示,可自适应调整大小,程序把要显示的Widget独立出来,可随时替换为其他的用户自定义Widget,例如3d模型、二维画图等。

2023-07-25 17:35:04 395

原创 Qt 桌面闹钟提示小程序

倒计时闹钟设置界面。

2023-07-25 17:18:20 164

原创 红黑树介绍

红黑树相较于AVL,其查找效率略低一点,而插入删除效率高出AVL很多,所以当插入删除操作很多时可以使用红黑树。红黑树就是满足以下特性的二叉树。

2023-04-16 22:46:35 60

转载 Socket编程常用函数

WindowsLinux

2023-04-16 22:26:02 60

原创 select、poll、epoll(IO多路复用)

三个模型都是用来判断是否有被监听的socket状态发生改变(读写和异常)

2023-04-16 21:47:10 294

原创 Git如何推送当前代码到远程仓库

(建立在已经配置好用户变量和ssh基础上)在本地创建git仓库git init绑定远程仓库,origin是给远程仓库起的别名,也可以起其他名字,但是如果用origin,git push时可以不指出名字,如果用其他名字需要指出名字,git push 名字提交到暂存区,提交所有文件git add .从暂存区提交到本地仓库从本地仓库推送到远程仓库git push。

2023-04-16 10:38:25 3738

原创 高并发浅析

高并发指通过设计保证系统能够同时并行处理很多请求,是分布式系统非常重要的概念。

2023-04-15 22:41:46 386

原创 快速排序-防止退化O(n2)(三路排序)

解决方案:随机化数组或者随机取基准值(而非第一个)时间复杂度会退化为O(n2)时间复杂度会退化为O(n2)所有数据都相等的数组。

2023-03-25 17:15:40 127

原创 环境配置-转载的文章

o

2023-03-18 22:15:45 61

原创 Leetcode-寻找两个正序数组的中位数

明显是二分,但是二分什么呢?一般都是二分两个数组,但这道题不同,需要二分的是k,对于两个数组而言,比较两个数组的第k/2个数字,小的一方前k/2个数字都不会是中位数,可以直接排除,从而快速缩小范围。此题目是寻找两个数组组合为一个数组后的中位数,我们知道两个数组的长度,中位数是组合后的数组第几个数字我们是知道的,问题就转化为了寻找组合后数组的第k个数字,要求时间复杂度在。

2023-03-17 10:50:02 61

原创 explicit关键字

以上代码不会报错,因为t = {1, 2}这里发生了隐式类型转换,将{1, 2}转化为了Complex(1, 2),产生了一个匿名对象,然后把匿名对象赋值给t(这种赋值只是简单的值拷贝操作,假如存在指针,这种操作有浅拷贝的隐患)但如果在构造函数前面加上explicit关键字,以上代码无法通过编译,因为explicit不允许隐式类型转换,等号右边的类型与左边的类型不符,则编译失败。作用: 防止隐式类型转换。

2023-03-12 10:48:22 48

转载 牛客小白月赛67-E 游戏的买

这道题要注意一定要保证游戏能够买到。此时f[i]=0.5a+0.5f[i+1]。以此类推可以得到第一天决策的最佳期望。

2023-02-27 21:18:38 59

原创 函数对象以及labbda表达式浅析

myPrint类声明的对象就是函数对象,func()本质上是调用成员函数func.operator()(2),但是由于经过运算符重载后也可以写成func(2),形式就像是调用函数一样,所以称为函数对象。函数对象就是仿函数,之所以叫仿函数,是因为使用起来书写形式和调用函数的代码形式很像,之所以叫函数对象,是因为本shi质还是个对象,只不过写这个类是为了使用类似函数的功能。仿函数就是重载了括号,例如以下代码。和普通的函数相比,有很多好处。

2023-02-24 18:07:54 80

原创 牛客练习赛-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 137

原创 C++转载的文章

C++对象的内存布局C++虚函数表解析C++函数指针C++动态绑定和静态绑定

2023-02-19 10:34:16 68

原创 指针笔记(指针数组和指向数组的指针,数组中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 579

原创 缓冲区浅析

程序运行输入数据时,从键盘的输入先存储到缓冲区,只有当缓冲区满或者输入回车时程序才会真正地从缓冲区读入数据。例如这里输入空格时程序没有输出,而是将空格也放入了缓冲区,只有输入回车时,程序才从缓冲区中拿出数据,而。这篇文章只是浅析缓冲区,缓冲区具体分为三种,全缓冲、行缓冲、不带缓冲,深入理解自行查阅资料。,读入2,遇到回车,停止读入,但回车依旧在缓冲区。,所以下次读入时,先碰到空格,cin会舍弃。,首先拿出1,遇到空格,停止读入,但。in_1:1空格回车。

2023-02-13 20:18:02 433

原创 operator的两种用法(重载和隐式类型转换)

当然了,构造函数的隐式类型转换有利有弊,类的设计者就起决定性作用了,如果你不想让构造函数发生隐式的类型转换,请在构造函数前加explicit关键字;Test1类型的对象传入string的构造函数,是用了c++构造函数的隐式类型转换特性,虽然string类并没有显式定义参数为Test1的构造函数,但因为其可以隐式转换为string,所以语法上都是合法的。构造函数的隐式类型转换,是使用一个其他的类型构造当前类的临时对象并用此临时对象来构造当前对象,这种转换必须有构造函数的支持;

2023-02-13 10:46:59 491

原创 Leetcode 48. 旋转图像

如何把当前元素放到下一个即将访问的位置?如果只是简单的覆盖,下一个元素将丢失,容易想到的是用temp存储即将丢失的元素,但这样实现起来有许多细节很难写,用交换实现则特别简单,找一个临时变量,每次都把当前位置和临时变量进行交换,则实现了旋转操作。对于一圈:对于第一行(除了最后一个元素)而言,只要把这些元素旋转四次就回到了原来位置,所以只要循环四次,把中间遍历到的元素都移到下一次即将遍历的位置即可。矩阵从外到内,是一圈一圈的,只要能把一圈旋转90度,内层圈找好数据关系,for循环就可以搞定每一圈。

2023-01-26 17:42:19 63

原创 706. 设计哈希映射

处理冲突方法采用链表法,利用list。

2023-01-25 21:22:57 67

原创 56. 合并区间

双指针,先按照左端点升序排序,对于一个区间,如果可以和后面的合并,则其右端点一定大于后面区间的左端点,且合并后的区间右端点要取两个区间大的右端点,取max,注意边界即可。vector默认按照第一列的元素从小到大排序,注意如果这里加cmp函数,必须是静态函数,因为sort是全局函数,全局函数不能调用类的成员函数。

2023-01-25 20:23:36 60

转载 KNN算法

K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。,说的是每个样本都可以用它最接近的K个邻近值来代表。K最近邻算法就是将数据集合中每一个记录进行分类的方法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。

2023-01-21 17:01:45 1947

转载 K-means算法

K-means算法,也称为K-平均或者K-均值,是一种无监督的聚类算法。对于给定的样本集,按照样本之间的距离大小,将样本划分为K个簇,让簇内的点尽量紧密的连接在一起,而让簇间的距离尽量的大。K-means是一种使用广泛的最基础的聚类算法,通常作为学习聚类算法时的第一个算法。其他的聚类算法还有:K-medoids、k-modes、Clara、Clarans等:物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。

2023-01-20 23:41:10 2745

转载 矩阵分解的推荐算法

推荐算法(recommendation algorithm)就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。目前应用推荐算法比较好的地方主要是网络,其中淘宝、拼多多和京东等做的都非常好。推荐算法主要分为6种:1.基于内容的推荐(Content-Based Recommendation)2.基于协同过滤的推荐(Collaborative Filtering Recommendation)

2023-01-20 21:47:04 267

转载 协同过滤算法CF

基于用户的 CF 就是从用户出发,基于用户对物品的偏好找到和目标用户兴趣相似的用户集合;然后找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。找到的用户集合中的用户可以是一个,也可以是多个,一般默认为一个用户,也就是默认只找到找到一个最相似用户。用户/物品物品a物品b物品c物品d用户A√√用户B√√√用户C√√√√。

2023-01-20 17:32:49 224

原创 Typora使用配置

偏好设置->图像->插入图像时->复制到指定路径->设置图片保存路径。偏好设置->markdown->markdown扩展语法。默认会检查拼写错误,并在下方给予红线提示。偏好设置->拼写检查->不使用拼写检查。偏好设置->markdown->代码块。偏好设置->自动保存。

2023-01-17 16:54:48 162

原创 572. 另一棵树的子树

解出两颗子树的所有前序序列,若t2是t1的子树,则t2的前序序列应为t1的前序序列的子串,利用kmp算法匹配即可,代码中lNull为左子树空的标志,rNull为右子树空的标志。解法一、暴力遍历每一个子树,比较子树是否相同。官方题解给出的哈希做法,感觉很秒。时复:O(s * t)时复:O(s + t)

2023-01-16 17:34:26 51

原创 117. 填充每个节点的下一个右侧节点指针 II

题目有点类似于层序线索化,就是在层序遍历的基础上魔改一下,使得可以获得当前遍历到第几层的信息。还有一种简单的写法,直接得出当前层节点个数。

2023-01-16 16:09:43 51

原创 11. 盛最多水的容器

题目所求即为最大面积,面积=(较短边*两线段距离),答案即为max{以每一条线段作为较短边的最大面积},当较短边确定时,两线段距离越长越好,因此考虑双指针从两端向内进行移动。两指针在两端时,对于较短边而言,以此线段为较短边的最大面积就是线段长度乘以两指针位置之差,因此较短边对应的指针就可以向前或向后移动了。移动后的状态又是以上状态。因此每次较短边指针移动。

2023-01-13 18:32:43 41

原创 15. 三数之和

因为排过序了,如果-(nums[i]+nums[j])

2023-01-12 17:04:31 580

原创 LeetCode162-寻找峰值

二分找索引,对于mid,如果处于上坡,则答案在右边,如果处于下坡,答案在左边,如果处于低谷,答案任意,如果处于峰顶,即为答案。注意特判0和nums.szie()-1两个位置。

2023-01-09 22:24:07 62

原创 Git命令

gitnore文件配置忽视规则。

2022-12-31 21:44:44 42

原创 Leetcode-82 含有重复元素集合的组合

class Solution {public: vector<vector<int>> res; void dfs(vector<int>& candidates,vector<int>& ans,int sum,int pos, int &target){ ans.push_back(candidates[pos]); if(sum+candidates[pos]==target) .

2022-02-25 18:11:35 239

原创 Leetcode-1027最长等差数列

和最长上升子序列类似,这里多加了公差的性质,第一种想法是开一个结构体dp一维数组,dp[i].val表示以i位置结尾的最长长度,dp[i].cha表示以i位置结尾的子序列公差,你会发现无法进行状态转移,假设i<j<k,dp[k]被dp[j]更新了,并且更新后值最大,但这不代表i这个位置就一定不是最长等差序列之一,因为可能dp[i]和dp[j]只相差1甚至相同,但两者公差不一样,如果后面再来几个公差和dp[i].cha一样的,而你由没有把dp[k]给添加到序列中,这个状态没有被考虑,导致错误。.

2022-02-23 16:17:15 636

原创 Leetcode-80

写麻烦了,总之就是双指针,一个快指针一个慢指针class Solution {public: int removeDuplicates(vector<int>& nums) { int len=nums.size(); int cnt=1,L=1; for(int i=1;i<len;i++){ if(nums[i]==nums[i-1]){ if(cnt==2) .

2022-02-22 21:41:02 88

原创 Leetcode-5 最长回文子串

动态规划class Solution {public: string longestPalindrome(string s) { int st = 0, L = 1; int len = s.size(); bool dp[1100][1100]; for(int i = 0; i < len; i ++) dp[i][i] = 1; //长度为1的子串都是回文串 for(int i = 2; i <.

2022-02-20 13:35:51 205

线性代数课件PPT-线性代数.zip

线性代数课件

2021-05-27

空空如也

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

TA关注的人

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