- 博客(81)
- 收藏
- 关注
原创 【Rust学习】Rust数据类型,函数,条件语句,循环
println!("x 的值为 : {}", x);println!("y 的值为 : {}", y);
2025-04-05 14:01:04
584
1
原创 【Rust学习】Rust环境搭建和Rust基础语法
rustup-init.exe 是 Rust 的安装和管理工具,默认情况下,它会同时安装这些工具:rustc,rust-std,cargo,rust-docs,rustfmt,clippy。其中,rustc 是 Rust 的编译工具,cargo 是 Rust 的包管理工具。使用这两个函数打印信息的时候,第一个参数是格式字符串,后面一串是可变参数,在C语言printf中"%+字母"表示占位符,而在Rust中,使用'{ }'可以使用相同名字声明新的变量,新的变量就会隐藏(shadow)之前的同名变量。
2025-04-05 11:06:28
383
13
原创 【Linux系统编程】进程概念,进程状态
以scanf为例,当执行scanf从键盘读取数据时,未输入数据时,操作系统会将当前进程的task_struct从调度队列中移除,放入设备的阻塞队列中,此时,该进程就处于阻塞状态。每个进程可能会存在不同的状态,有的进程正在运行,有的进程正在被调度,有的进程处于挂起等等。CPU要执行这些进程,这些进程的task_struct中会保存指向代码和数据的指针。系统调用在使用上,功能比较基础,对用户的要求相对较高,所以,有心的开发者会对部分系统调用做封装,从而形成库,有了库,就很方便上层用户和开发者进行二次开发。
2025-04-04 17:21:56
896
13
原创 动态规划学习——回文子串系列问题【C++】
题目链接:LCR 020. 回文子串 - 力扣(LeetCode) 【问题描述】求一个字符串中有多少个回文子串,其中一个字符也算是一个回文子串。【解法】动态规划求一个字符串中回文子串的个数,我么可以找到每个回文子串,然后统计个数即可。初始化dp表时,根据状态表示的定义,我们只会用到dp表主对角线的右上部分,左下部分不会用到,对于状态转移dp[i][j]=dp[i+1][j-1],我们不需要考虑越界的问题,因为前两种情况已经做了判断。 最后,只需统计dp表中dp[i][j]==true的数量即可。【代码】
2025-04-02 21:12:37
904
22
原创 动态规划学习——背包问题
题目链接:P1060 [NOIP 2006 普及组] 开心的金明 - 洛谷 本题是一道经典的01背包问题,状态表示和状态定义可以仿照01背包的来。dp[i][j]表示从前i个物品中选,总价值不超过n,并且使得每件物品的价格与重要度的乘积的总和最大。【代码】二,金明的预算方案题目链接:P1064 [NOIP 2006 提高组] 金明的预算方案 - 洛谷本题在上题的基础上,增加了一个限制,选择一个物品,这个物品可能是某个物品的附属品,在选该物品时,必须先买主件。且每个主件最多包含两个附件。然后继续按照
2025-03-31 22:04:31
1408
7
原创 【MySQL篇】事务管理,事务的特性及深入理解隔离级别
先思考一个场景,在一个火车票购票系统中,西安到郑州的火车票只剩下一张,两个用户进行买票,可以想象成这两个用户对表中数据进行CURD,而如果这些CURD不加控制,会不会出现问题?当客户端A检查到还有一张票时,将票卖掉,还没有 执行更新数据库的语句时,客户端B检查了票数,发现大于0,于是又买了一次票。然后 A将票数更新回数据库。这就出现了同一张票被买了2次的问题。为了解决上述的问题,就需要CURD操作满足 如下的属性:1,买票的过程需要是原子的2,买票之间不能互相影响。
2025-03-29 17:05:42
836
21
原创 买卖股票的最佳时机问题 C++
【题目描述】有一个价格数组prices,表示第i天的股票价格为prices[i],整个过程只能买入股票和卖出股票一次。并且买入股票必须再卖出股票之前。 【思路】贪心我们可以遍历一次数组,遍历到prices[i],表示在第i天卖出股票,为了使利益最大,我们需要在前i-1天中选择股票价格最低的一天买入。可以使用一个变量leftMin来记录前i-1天中,股票最低的价格。那么此时的最大利益就是prices[i]-leftMin。动态规划dp[n][2]:dp[i][0]表示第i天未持有股票的最大利益,dp[i
2025-03-28 21:26:27
849
5
原创 矩阵中对角线的遍历问题【C++】
对角线的遍历(主对角线):对于一个m*n的矩阵。在同一条对角线上的元素,行号i减去列号j是一个定值。k=i-j+n;k的值从1开始到m+n-1。就是主对角线从右上角对角线开始,一直到左下角对角线。遍历对角线时,我们只需求出j的范围即可,i=k+j-n。但需要注意j不能小于0,也不能超出数组的范围。然后就可以对这条对角线进行操作了。
2025-03-26 21:26:16
1101
12
原创 【MySQL篇】索引特性,索引的工作原理以及索引的创建与管理
对于一个page目录,它的大小是16KB,假设忽略掉前后指针,该page只存储一个数据和对应的指针,在64位环境下,16*1024/(4+8)=1365。通过“先描述,再组织”。在单表数据不断被插入 的情况下,MySQL会在容量不足的时候,自动开辟新的page来保存新的数据,然偶通过指针的方式马,将所有page组织起来。但是查询速度的提高,同时是以插入,更新,和删除的速度为代价的,这些写操作,增加了大量的IO。MySQL的CURD操作,都是需要计算的,找到对应的插入位置,找到对应要修改或者查询的数据。
2025-03-22 19:19:36
1007
22
原创 LeetCode.2612最少翻转次数C++
假设下标i经过一次翻转后的下标为j,这个下标j肯定不是一个特定的下标,它代表翻转后的所有可能的下标。i>n-k的情况,当子数组在整个数组的最右边时,L=n-k,R=n-1。翻转后的下标为j=L+R-i=2*n-k-i-1。例如 对于k=4,长度为4的子数组,右端点最小是k-1=3,当i=0,1,2,i不可能是数组的右端点;i<k-1的情况,当子数组在整个数组的最左边时,L=0,R=k-1。i位置经过一次翻转后的下标为j,将i和j看成是用一条边连接,这条边的边权为1,代表翻转次数。也可以右移L-1,R-1。
2025-03-21 13:45:38
949
2
原创 【算法学习】最小公倍数问题
公式推导。处理零的情况如果任一数为零,直接返回 0(因为零和任何数的 LCM 是零)。防止整数溢出将a * b转换为long long类型,避免乘法溢出(例如a = 1e9b = 1e9处理负数使用std::abs保证计算的数值为正,避免符号干扰。2,辗转相减法若a>b,则a=a-b(大的数减去小的数)若a=b,则a或b就是最大公约数如求35和14的两个最小公倍数:35-14=21;21-14=7;此时7小于14,要做一次交换14-7=7;7-7=0;
2025-03-20 12:42:14
839
3
原创 【MySQL篇】复合查询
基于上篇MySQL基本查询,基本上都是对一张表进行查询。【MySQL篇】MySQL基本查询详解-优快云博客复合查询是处理复杂业务逻辑的核心技能 ,本篇涵盖多表查询,子查询和合并查询等复杂场景。
2025-03-19 16:19:07
824
15
原创 元音辅音字符串计数leetcode3305,3306
暴力解法的思路,我们每次在用两个变量来枚举[i,j]这个子串时,统计完后,i++,j还要再返回i的位置,重新遍历,所以时间复杂度太高, 为O(N^2)。其中可以使用set集合判断子串中是否每个元音字母都出现,用一个变量count来统计辅音字母的出现次数。该思路,只能通过第一题, 第二题的数据范围大,会超时。暴力枚举出所有子字符串 ,统计所有满足。
2025-03-15 16:02:30
514
5
原创 【MySQL篇】基本查询实战OJ
distinct去重+order by 排序。group by子句及聚合函数。group by子句+聚合函数。
2025-03-12 15:43:37
309
1
原创 leetcode2070. 每一个查询的最大美丽值
看完本题,可以想到的思路是对于每一个查询queries[j],去遍历items数组,找到所有满足items[i][0]小于queries[j]的部分,再比较求出最大的items[i][1]即可。对于每一次的查询,最坏情况下每次需要遍历items数组一遍,时间复杂度太高,需要优化查询。
2025-03-10 23:58:35
303
1
原创 可被3整除的最大和 || 贪心,动态规划
初始化时f[0][0]=0,表示没选任何数字,初始化为0,f[0][1]=f[0][2]=INT_MIN,无意义,为了不影响计算。初始化为无穷小。
2025-03-08 10:36:40
482
1
原创 【MySQL篇】表的约束
在MySQL中,表的约束用于强制保证数据的完整性和一致性。在数据库表中,真正约束字段的是数据类型优快云但是数据类型的约束很单一,所以需要一些额外的约束,来保证数据的完整性和正确性。
2025-03-06 13:32:51
902
15
原创 【动态规划学习】区间dp
区间dp,就是在一段区间上进行动态规划,求解一段区间的最优解。最后合并小区间上的最优解从而得到全局最优解的算法。【问题引入】
2025-03-03 10:51:30
1238
12
原创 【MySQL篇】MySQL操作库
在我们创建一个数据库后,在linux下,就是在var/lib/mysql路径下创建一个目录,在该目录下,有一个文件db.opt,该文件有该数据库采用的字符集和校验规则。时,系统使用默认字符集utf8,校验规则是utf8_general_ci。创建一个数据库,使用utf8_general_ci校验规则不区分大小写。创建一个数据库,使用utf8_bin校验规则不区分大小写。对数据库的修改主要 指的是修改数据库的。创建数据库,在lunix层面就是在。说明:当我们创建数据库没有指明。路径下创建一个目录。
2025-02-25 11:48:51
968
10
原创 【算法与数据结构】Dijkstra算法求单源最短路径问题
Dijkstra算法,是用来算出图中一个顶点到其余各顶点的最短路径。适合于解决带权的有向图中的单源最短路径问题。
2025-02-24 23:06:15
886
6
原创 【MySQL篇】数据库基础
数据库(Database,简称DB)是按照数据结构来组织、存储和管理数据的仓库。它是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。数据库管理系统(DBMS)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。常见的数据库管理系统有MySQL、SQL Server、Oracle等。存储数据用文件就可以了,为什么还要弄个数据库?一般的文件确实提供了数据的存储功能,但是没有提供非常好的数据管理能力。
2025-02-23 19:23:14
2635
2
原创 【算法与数据结构】单调队列
是一种特殊的队列,队列中的元素按严格递增或者递减排列。这样就可以保证队头元素始终是最大值或者最小值。【问题引入】有一个数组,长度为n,给你一个区间[left,right],求出该区间内的最小值或者最大值。我们如果进行普通的遍历,最坏的情况下时间复杂度是O(N),遍历整个数组。而我们如果用单调队列来维护这段区间,始终保持队列的单调性,就可以在O(1)的时间内找到该区间的最大值或者最小值,就是。【结论】
2025-02-22 16:45:11
1051
16
原创 【算法与数据结构】并查集详解+题目
核心概念:并查集是一种 用于管理元素分组的数据结构。在一些应用问题中,需将n个不同的元素划分成一些不相交的集合,开始时,n个元素各自成一个集合,然后按照一定规律将部分集合合成一个集合,也就是集合合并。并查集(union-find)适合来描述这类问题。对于并查集,我们可以将它看成是一个森林,森林是由多棵树组成的,并查集中的一个个集合就可以看作是树。
2025-02-15 23:08:20
1134
6
原创 【算法学习】DFS与BFS
从A开始遍历,再到B,有两种情况,意味着这条路还没有走完,接着走到D,之后就没路了。然后我就回溯到B,因为B还有情况没走完,接着再走到E,之后没路了,就回溯到B,发现B的两种情况以及那个走完了,就再回溯到A,然后走到C......最初,有一个人位于左上角(1,1)处,已知改人每次可以向上,下,做,右任意一个方向移动一个位置。给的那个一个n*m的二维整数数组,用来表示迷宫,数组中只包含1和0,0表示可以走的路,1表示不可以通过的墙壁。简单理解就是:一条路走动黑,直到没路可走了,再回溯回去,尝试其他路径。
2025-02-12 14:51:29
1553
13
原创 【算法学习】拓扑排序(Topological Sorting)
两种算法均能高效实现拓扑排序,时间复杂度均为O(V+E),V为顶点数,E为边数。若节点类型为int,可将unordered_map替换为vector提升性能。
2025-02-11 14:17:49
728
9
原创 【C++篇】智能指针
以管理Date类为例:class Datepublic:{}~Date()private:int _year;int _month;int _day;public://构造函数:_ptr(ptr){}//......//......private:T* ptr;
2025-02-09 17:33:07
792
10
原创 【C++篇】 异常处理
异常处理是C++用于管理 程序运行时错误的核心机制,通过等关键字实现。它允许将错误检测与处理逻辑分离,提升代码的可读性和健壮性。
2025-02-09 11:05:14
1144
2
原创 【C++篇】C++11新特性总结1
public:// 移动构造函数// 移动赋值运算符if (this!// 调用移动构造函数// 调用移动赋值运算符return 0;
2025-02-07 16:24:32
1044
6
原创 【算法篇】贪心算法
对于nums数组中的两个元素a和b, 我们无法直接确定他们的先后关系,但我们可以从结果角度来看,如果拼接结果ab要比ba好,那么a就应该放在b的前面。cout << signle_money[i] << "元:" << total[i] << "张" << endl;给你一个矩阵,求解:从矩阵的左上角出发,只能向下和向右两个方向走,求到达矩阵的右下角过程中,路径上所有元素和的最小值。贪心策略:想要使尽量多的活动不冲突,那我们在选择活动时,就尽量选择结束早的活动,为后续留出更多的时间。
2025-02-05 16:53:48
3171
3
原创 【C++篇】位图与布隆过滤器
有一些场景,由大量数据需要判断是否存在,而这些数据不是整形,比如string,就不能使用位图了,这些场景就需要布隆过滤器来解决。利用多个哈希函数和位图实现,哈希函数内容见上篇文章【哈希表】。核心原理位数组(Bit Array):长度为 m 的二进制数组,初始全为0。哈希函数集合:k个独立的哈希函数,每个函数将元素映射到位数组的某个位置。以string类型为例:而这种冲突是无法避免的,因为位图中只存储了状态,即0或1,无法改变。所以我们只能做到降低冲突概率,对于一个字符串,让它映射到多个位置上。
2025-02-03 19:14:41
933
9
原创 【背包问题】二维费用的背包问题
常规的0-1背包问题可以用动态规划来解决,状态通常是dp[i][j]表示前i个物品,在容量j下的最大价值。对于二维费用的情况,可能需要扩展状态到两个维度。比如,状态可能是dp[i][j][k],表示前i个物品,在重量限制j和体积限制k下的最大价值。但这样的话,状态空间会变得很大,尤其是当j和k都较大的时候,时间和空间复杂度可能很高。不过,可能可以通过优化来减少空间的使用,比如使用滚动数组。
2025-02-02 11:50:31
736
3
原创 【C++篇】哈希表
如下图,我们删除30,会导致查找20失败,当我们给每个位置加⼀个状态标识{EXIST,EMPTY,DELETE},删除30就可以不用删除值,而是把状态改为DELETE,那么查找20时遇到EMPTY才停,就可以找到20。,如果key可以转换为整形并且不容易冲突,那么这个仿函数就用默认参数即可,如果这个Key不能转换为整形我们就需要自己实现⼀个仿函数传给这个参数,实 现这个仿函数的要求就是尽量key的每个值都参与到计算中,让不同的key转换出的整形值不同。负载因子越小,代表哈希冲突的概率越低,空间利用率越低。
2025-02-01 22:05:29
2069
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人