自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 珠宝的最高价值

注意:珠宝的价值都是大于 0 的。除非这个架子上没有任何珠宝,比如。解题思路还是多开一行一列,初始化为0,表示没有价值的珠宝。为该位置珠宝的价值。现有一个记作二维矩阵。

2025-04-04 11:44:55 175

原创 不同路径II

如图,☆处的不同路径数量根据dp方程等于障碍物所在位置的路径总数加上☆上面一个格子的路径总数。由于障碍物处无法到达☆,故障碍物处的路径总数可以设置为0,因此初始化时,我们需要将障碍物处的路径总数设置为0即可。机器人移动的规则相同,则不同路径总数的dp方程仍然为dp[i][j]=dp[i-1][j]+dp[i][j-1]。不过由于网格中增加了障碍物,因此在初始化中需要增加对障碍物所在方格进行初始化。这道题相当于在不同路径I上加入了障碍物,但是解题思路还是类似。返回机器人能够到达右下角的不同路径数量。

2025-04-04 11:09:05 223

原创 不同路径I

如果直接使用dp[i][j]=dp[i-1][j]+dp[i][j-1]的话会导致越界问题,例如如上图当i=0,j=0时,方程就变成了dp[0][0]=dp[-1][0]+dp[0][-1],导致了越界。如果终点不在第一行第一列的话直接从dp[1][1]开始遍历计算求解。故只需要将机器人头上的格子设为1(或者将机器人左边的格子设为1),空白处为0。若将整个网格看做一个二维数组dp[n][m],则☆处的位置为dp[i][j],故可得方程:dp[i][j]=dp[i-1][j]+dp[i][j-1]。

2025-04-04 10:43:24 511

原创 平衡二叉树(AVL树)

创建AVL树的基本架构与二叉搜索树的创建基本一样,不同是为了方便后续的旋转与平衡因子的改变,多引入bf与parent记录结点的平衡因子与该结点的父节点,形成三叉链。以上过程可以简单的看作是30的右子树变成60的左子树,60变成30的右子树。情况一:如上图在b处插入后60结点的bf=-1,最终平衡树的平衡因子为60:0,30:0,90:1。在c处插入后60结点的bf=1,最终平衡因子为30:-1,60:0,90:0。插入60结点,60结点bf=1,最终平衡因子为30:0,60:0,90:0。

2025-03-10 22:27:45 324

原创 前K个高频单词

利用map和multimap的特性。先用map以字符串排序统计字符串出现的次数。再利用multimap排序不会改变相同value值的前后顺序,按次数升序统计。对比前后两个图,相同value值的i和love,multimap排序后 ,i依然在love上面,coding依然在leetcode上面。遍历multimap的变量M取出M.second的字符串存入vector容器中即可。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,所以这时候只需要将前k个输出出来。个出现次数最多的单词。

2025-03-08 19:27:15 320

原创 【Linux】常用命令(Ubuntu系统)

功能:更改文档或目录的日期时间,包括存储时间和更改时间,若文件不存在,则创建此文件。-r 把指定文档或目录的日期时间,统统设成和参考文档或者目录的日期时间相同。mv 目录名 目录名:目标目录存在,则移动目录到目标目录,不存在则重命名。操作:install 安装;>>:追加重定向,将左侧命令的结果,追加写入到符号右侧指定的文件中。>:输出重定向,将左侧命令的结果,覆盖写入到符号右侧指定的文件中。功能:查看文件内容,内容前num行显示到屏幕上,默认显示前10行。规范:mv 选项 源文件或目录 目标文件或目录。

2025-02-23 15:41:18 809

原创 Map容器

因为map的存储是由key和value组合而成的元素,所以在插入和访问的时候与之前单元素操作有所区别,在map内部,key和value通过成员类型value_type绑定在一起,别名为pair<const key,T>。const key为key值,T为模板类型。

2025-01-19 21:07:17 212

原创 二叉搜索树

【代码】二叉搜索树。

2025-01-12 21:53:17 220

原创 哈希表简单介绍

在中,元素关键字与他们存储的位置并没有直接的映射关系,从而会影响查找关键字的效率,顺序结构中查找关键字的时间复杂度为O(N),平衡树查找关键字的时间复杂度为O(log2^N)。如果有一种数据结构,能够使得关键字根据某种映射规则,将关键字和它的存储位置一一映射起来,那么在查找时通过映射规则就能够很快将关键字查找出来。在这个数据结构中根据某种特定的映射规则,找到关键字在存储结构中的位置,然后插入。根据某种特定映射规则,将求得的函数值作为元素的存储位置,然后与结构中此位置的元素比较,若关键字相等,则搜索成功。

2024-09-14 16:58:07 640

原创 vector常见接口的实现

vector定义变量格式:vector<类型> 变量名。比如:vector<int> v1,vector<char> v2,vector<string> v3,vector<float> v4等等。由以上特性,所以我们底层模拟实现vector的时候就需要用模板的思想去实现。由于vector支持迭代器的操作方法,所以我们需要把成员变量都设为迭代器类型。public://T*private:首个元素位置//末尾元素的下一个位置//容量大小的下一个位置。

2024-09-13 15:55:49 1284

原创 只出现一次的数II

假如nums=[2,2,2,3,3,3,7,5,5,5];请你找出并返回那个只出现了一次的元素。外,其余每个元素都恰出现。通过二进制与或运算实现。

2024-09-12 21:26:32 624

原创 C++---string类常见接口

1. string是表示字符串的字符串类(感觉就像一个动态的字符数组)2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。3. string在底层实际是:basic_string模板类的别名,typedef basic_stringstring;4. 不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std;

2024-09-10 12:45:26 1147

原创 C++--模板

class 类模板名// 类内成员定义。

2024-09-10 10:54:36 655

原创 C++---内存管理

栈区:由编译器自动分配和释放,存放运行时候的局部变量,函数参数,返回数据,返回地址。堆区:一般由程序员自己分配,然后自己释放,例如栈的实现malloc开辟的数组空间。数据段(静态区):存放全局变量,静态数据,常量,程序结束后自动释放。代码段(常量区):存放常量字符串和可执行代码,程序结束自动释放。

2024-09-09 13:25:26 2610

原创 C++--static成员和友元

静态定义的成员变量在类外定义,变量类型 类名::变量名=value的形式。此外,static还可以在类里面定义函数,这种static修饰的函数在外调用必须加域名才能使用,因为static修饰的函数不会隐含this指针。

2024-09-08 14:48:49 856

原创 C++---初始化列表

此时就需要初始化列表去初始化A实例化的对象a。总结:尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。

2024-09-07 19:43:18 574

原创 C++---构造函数,拷贝函数,析构函数

构造函数一般有三种第一种是C++编译器自己生成的无参默认构造函数,是一种隐式构造函数。第二种自己定义的显性构造函数,函数重载实现第三种通过全缺省可以将第二种和第三种合并在一起比较建议用合并这一种。3 拷贝构造函数3.1 概念3.2 特征

2024-09-06 22:07:41 1062

原创 C++---基础概念

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// ADD是命名空间的名字,一般开发中是用项目名字做命名空间名。// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;类型& 引用变量名(对象名) = 引用实体;int a = 10;//

2024-09-04 16:02:08 2248

原创 7种常见排序

2 希尔排序 这里gap最好为N/3+1,这样对于普遍数据排序效率相对更高,更优。3 选择排序 4 堆排序 5 冒泡排序6 快排1.左右指针确定一个基准值,一般选取数组最后一个元素小标为key,然后L先从前往后遍历找到大于key的数,再R从后往前遍历找到小于key的数,然后交换L与R的数组元素,直到L与R指向同一个空间,此时再把key 与L或者R指向的元素交换,这只是其中一趟排序。 2.挖坑法3.前后指

2024-09-03 14:08:28 789

原创 二叉树和堆知识点

大根堆最大的数在堆顶,小根堆最小数在堆顶。堆排序,排升序建小根堆。排降序建大根堆。3.3 堆的声明 3.4 创建堆3.5 堆排序 3.6 堆的插入先插入一个数,在进行向上调整。3.7 堆的删除删除堆是删除堆顶的数据,将堆顶的数据根最后一个数据一换,然后删除数组最后一个数据,再进行向下调整算法。3.8 Top-k问题对于Top-K问题,能想到的最简单直接的方式就是排序,但是:如果数据量非常大,排序就不太可取了(可能数据都不能一下子

2024-09-01 20:34:49 1471

原创 最小k个数

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。

2024-08-31 23:32:52 479

原创 设计循环队列

循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。// 返回 false,队列已满。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。// 返回 true。

2024-08-30 16:27:51 1244

原创 栈和队列的实现

栈和队列的知识点及实现

2024-08-29 21:14:24 839

原创 顺序表和链表知识点

顺序表和链表总结

2024-08-29 15:41:33 2515

原创 环形链表问题

此时fast和slow距离为1,所以我们可以理解到,当slow和fast在环中,如果slow和fast的位置不同,当slow每走一步,fast走两步,那么fast和slow之间的距离每次就会少一步,以此往复,fast和slow终将相遇。对于一个存在环的链表,在遍历链表时,指针进入到环状链表后一定是一个死循环,根据这个特性,我们可以设置一个。假设头节点到环入口节点的距离为L,入口节点到相遇结点距离为X,假设环周长为C。定义慢指针和快指针,如果存在环链表,则分割快指针和慢指针的相交位置。

2024-08-28 17:04:51 701

原创 链表分割(C语言)

如上链表,x等于4,则需要将小于4的结点放到左边,且不改变其本身的相对顺序,即变成3>>2>>1。将大于4的放到右边,不改变相对顺序,即5>>6>>7。通过给出的分割点,将链表分割为左右两个链表,即大于4的放一边,小于4的放一边,等于4的结点随便放哪一边都行。,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。cur为遍历原链表指针,用两个新的头结点去尾插合法满足条件的结点。所以最后得到的新链表为3>>2>>1>>5>>6>>7。

2024-08-28 13:53:55 730

原创 合并两个有序链表

此时比较list1和list2绿色指针处的值的大小,取小的,相等就随便取一个,这里1 = 1,我们取list2的1尾插入head链表中。蓝色圆形为头节点,每条单链表定义了一个绿色的指针,头节点head处定义了一个tail的指针,记录尾插末尾。此时list2为空,剩下只需要将tai->next=list1将list1剩余元素连在一起即可。新链表是通过拼接给定的两个链表的所有节点组成的。list1的绿色指针为1小于list2绿色指针的3,则取1。3<4,取list2中的3。2<3,取list1的2。

2024-08-27 20:49:18 496

原创 数组形式的整数加法(大数运算)

大数运算,顾名思义,就是很大的数值的数进行一系列的运算。我们知道,在数学中,数值的大小是没有上限的,但是在计算机中,由于字长的限制,计算机所能表示的范围是有限的,当我们对比较小的数进行运算时,如:1234+5678,这样的数值并没有超出计算机的表示范围,所以可以运算。但是当我们在实际的应用中进行大量的数据处理时,会发现参与运算的数往往超过计算机的基本数据类型的表示范围,比如说,在天文学上,如果一个星球距离我们为100万光年,那么我们将其化简为公里,或者是米的时候,我们会发现这是一个很大的数。

2024-08-27 15:11:05 1134

原创 单链表反转(C语言)

给你单链表的头节点head,请你反转链表,并返回反转后的链表。[2,1]

2024-08-27 12:51:30 947

原创 leetCode--轮转数组(C语言)

向右轮转 2 步: [3,99,-1,-100]向右轮转 1 步:[7,1,2,3,4,5,6]向右轮转 2 步:[6,7,1,2,3,4,5]向右轮转 3 步:[5,6,7,1,2,3,4]向右轮转 1 步: [99,-1,-100,3]如果k>数组元素个数,则令k=k%n。,将数组中的元素向右轮转。

2024-08-26 14:16:44 496 1

原创 只出现一次的数字(两个单生狗问题)

想要将nums中只出现一次的数字拧出来我们需要观察到数组内的数字有一个特性就是除开只出现一次的数字之外,其余的数字都是成双成对出现的,如果我们把成双成对的数字给去掉只留下出现一次的数字之后是不是就能离答案更近一些了呢?我们就能得到一个110的二进制序列,这时候我们相当于把其他成双成对的元素都去掉了,只剩下由3和5异或而成的二进制序列。所以我们可以把nums= [1,2,1,3,2,5]的内容统统异或起来得到1 ^ 2 ^ 1 ^ 3 ^ 2 ^ 5 = 3 ^ 5。这样我们就得到了两个只出现过一次的数字。

2024-08-26 14:02:07 577

原创 字符操作函数和内存操作函数

strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。strtok函数会改 变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

2024-08-24 22:10:10 671

原创 通讯录优化(动态内存管理+文件操作详解)

在动态内存空间的开辟和文件操作中存在诸多细节,比如我在写文件基于动态内存的文件操作通讯录的时候在每次开辟新空间开辟到4个的时候,第五个就会出现卡死现象,导致输入文件内的内容全部乱码,最后发现是初始化的时候需要先判断预置的空间是否能存储文件中读入的内存,如果不够则需要先开辟新的内存供给存储。

2024-08-23 19:40:14 1192

原创 通讯录(C语言实现)

1.添加联系人信息;2.删除联系人信息;3.查找联系人信息;4.修改联系人信息;5.显示联系人信息;6.排序联系人信息;0.退出程序。

2024-08-21 22:44:17 942

原创 C语言扫雷游戏实现

扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。

2024-08-09 22:17:29 849

原创 三子棋详解

本次代码虽然功能实现没什么问题,但是代码比较冗余,更待优化。在撰写本文的过程中,可能未能传达我所有的初衷与见解,这主要归咎于我个人在表达上的局限性。为此,希望每一位读者能够理解和包容。若您在阅读过程中发现任何表述不清或词不达意之处,非常欢迎您在评论区留下宝贵的问题、意见或建议。同时,对于文中涉及的代码部分,我也持开放态度接受大家的审视。如果您发现任何潜在的错误、改进空间或优化建议,请不吝赐教。我们共同的学习与讨论,将推动知识的进步与共享😆😆。

2024-08-08 20:39:51 1770 2

原创 汉诺塔问题(C语言)---图文结合超好理解

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

2024-08-07 20:15:08 1130

原创 Leetcode---415.字符串相加(C语言)

转化为字符存入内存中,进位则参与后续运算,然后i,j同时向左移动一位,将所指向的字符串的其中一位相加并加上刚才算出来的进位。去得到传入字符串的每一个字符,这是我们首先需要知道的一个点,其次,这是一个函数指针呀,所以我们最后要返回的就是一个分配了具体空间的一个元素的。由上述流程可知,最后得到的结果是反转的,如示例二得到结果为。i索引到NUM1所指向字符串最高位,j指向字符串。可以看到是给了我们一个函数指针的一个框架,其中。,此时需要写一个反转字符串的代码反转一下。,计算它们的和并同样以字符串形式返回。

2024-08-04 20:15:16 515 1

原创 小王入门C语言

编程是一种逻辑性十分强的技能,所以应该具有一个良好的逻辑思维能力,这是需要持续训练的,比如数学能力,逻辑推理能力,还有抽象事物的理解能力,所以在这些方面需要看一些相关书籍或者在有基础的前提之下去刷题!其次就是前车之鉴也是很有必要的,不懂就问,多去看看别人的文章或者多去询问别人的意见对自己的学习道路也是会很有帮助的。大家好,我是一位热爱编程的科班生,虽然已经学习了两年的C/C++编程知识,但个人感觉知识框架几乎是零零散散的,所以我想通过这样的方式从基础开始梳理我所学习的知识框架,让自己的能力有所提升。

2024-08-04 15:43:31 219

空空如也

空空如也

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

TA关注的人

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