自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 606. 二叉树创建字符串

这道题目要求将二叉树转换为特定格式的字符串表示。解题思路是递归遍历二叉树,根据子节点的情况添加括号:当左节点或右节点存在时,必须为左节点添加括号;仅当右节点存在时,才需要为右节点添加括号。具体实现中,先处理当前节点的值,然后根据左右子节点的情况递归处理并添加括号。这种方法确保了空子节点不会产生多余的括号,同时满足题目要求的字符串格式。时间复杂度为O(n),空间复杂度为O(n)(递归栈空间)。

2025-07-15 22:41:14 325

原创 137. 只出现一次的数字 II

本文介绍了LeetCode 137题"只出现一次的数字 II"的解法。题目要求在线性时间内找出仅出现一次的数字,其余数字均出现三次。主要思路是通过位运算统计每个比特位1的总数,对3取模后确定唯一数字的比特位。具体实现是遍历32个比特位,计算每个位上1的总数,若不被3整除则设置结果对应位为1。该方法时间复杂度O(N),空间复杂度O(1)。文章还提到存在更简洁但不直观的解法,并提供了参考链接。

2025-07-15 22:39:55 255

原创 算法:投票法

摘要:改进的投票法(Boyer-Moore算法)通过两轮操作高效寻找数组中出现次数超半的数字。第一轮投票通过数字抵消找出候选值,第二轮验证该候选值是否满足条件。算法时间复杂度O(n),空间复杂度O(1),是解决多数票问题的最优方案。核心思想是利用多数票的抵消特性,先筛选后验证,确保结果正确性。代码实现简洁,适用于大规模数据处理。

2025-07-14 21:37:07 365

原创 进阶03 二叉树进阶

本文介绍了二叉搜索树(BST)的实现与应用。主要内容包括BST的概念与性质(左子树值小于根节点,右子树值大于根节点,中序遍历有序),基础数据结构实现(节点结构、构造函数、拷贝控制等),以及核心操作的实现:查找(循环与递归两种方式)、插入(根据值大小定位插入位置)和删除(处理四种不同节点情况的删除逻辑)。重点解析了删除操作的复杂情况处理,包括直接删除和替换法删除两种策略。文章还提供了完整的C++代码实现,可作为BST数据结构的学习参考。

2025-07-14 21:27:43 535

原创 C语言初阶8-实用调试技巧

本文主要介绍了程序调试的基本概念、方法和技巧。调试是发现和解决程序错误的过程,相当于程序员扮演侦探角色。文章详细讲解了调试步骤、Debug与Release版本的区别,以及Windows环境下的常用调试快捷键(F5、F9、F10、F11等)。通过两个实例演示了如何利用调试工具发现代码问题,包括阶乘计算错误和数组越界导致的死循环问题。最后,文章提出了编写优质代码的建议,包括使用assert断言、const修饰符等技巧,并以strcpy和strlen函数为例展示了规范的代码实现方式。

2025-07-13 11:21:40 234

原创 C语言初阶7-结构体

int x;int y;}p1;//声明类型的同时定义变量p1//先创建结构体类型,再定义结构体变量// 初始化例如:Stu s = { " 潘 ",20,"11011912011","男" };

2025-07-13 11:20:52 310

原创 C语言初阶6-指针

本文摘要: 指针是编程中存储内存地址的变量,其大小在32位系统为4字节,64位系统为8字节。指针类型决定了操作内存时的字节数(如int操作4字节)和指针运算的步长(如int每次移动4字节)。野指针(指向未知内存的指针)可能由未初始化、越界访问或释放空间导致,可通过初始化、检查边界和置空来避免。指针运算包括加减整数、指针相减(计算距离)和关系比较。合理使用指针类型和避免野指针是安全编程的关键。

2025-07-12 15:29:07 287

原创 C语言初阶5-操作符

本文主要介绍了C语言中的各类操作符及其使用: 算数操作符(+,-,*,/,%)及其注意事项 移位操作符(>>,<<)及其二进制运算规则 位操作符(&,|,^)及其应用场景 赋值和复合赋值操作符 单目操作符(!,~,++,--等)的具体用法 关系操作符和逻辑操作符(&&,||)的运算特点 条件(三目)操作符的语法和使用 逗号表达式的运算规则 文章通过代码示例详细说明了各类操作符的使用方法和注意事项,包括二进制运算技巧、变量交换方案、位操作应用等实际编程场景。

2025-07-12 15:27:15 604

原创 C语言初阶4-数组

本文主要介绍了C语言中一维和二维数组的基本概念与使用方法。内容包括:数组的创建与初始化规则,数组元素的访问方式,数组在内存中的连续存储特性,以及数组越界问题。重点讲解了冒泡排序算法的实现细节,指出了数组作为函数参数时常见的设计错误,并提供了正确的解决方案。通过代码示例展示了如何正确计算数组长度、进行数组遍历和排序操作,同时强调了数组下标从0开始和数组边界检查的重要性。

2025-07-11 18:13:23 348

原创 C语言初阶3-函数

C语言函数基础总结 函数是C语言程序的基本模块单位,分为库函数和自定义函数两类。库函数是C语言提供的标准函数,包括IO、字符串、数学等常用功能;自定义函数则由程序员根据需要编写。 函数的基本结构包括:返回类型、函数名、参数列表和函数体。函数参数分为形式参数和实际参数,形参是实参的临时拷贝。 函数调用有传值调用和传址调用两种方式:传值调用不影响实参,传址调用则通过指针修改实参。 练习示例展示了素数判断、闰年判断和二分查找的实现,其中二分查找需注意数组传参时指针的特性。

2025-07-11 18:11:21 253

原创 进阶02 多态

摘要: 本章讲解了C++多态的概念、实现条件及关键语法。多态指不同对象调用同一函数产生不同行为,需满足两个条件:基类指针/引用调用虚函数,且派生类重写虚函数。虚函数重写要求函数名、参数、返回值相同,析构函数重写例外。C++11引入override检查重写、final禁止重写。抽象类含纯虚函数(=0),无法实例化,派生类必须重写才能使用。多态通过虚函数表实现,涉及重载、重写、隐藏的区别。

2025-07-10 20:21:54 1644

原创 进阶01 继承

摘要 本章介绍了面向对象编程中的继承机制,包括继承的概念、定义方式、基类与派生类对象的赋值转换、继承中的作用域规则等核心内容。继承允许派生类复用基类的成员,同时进行功能扩展,形成类层次结构。主要内容包括: 继承概念:派生类复用基类成员,实现类层次的代码复用。 访问权限:不同继承方式(public/protected/private)影响基类成员在派生类中的可见性。 对象赋值转换:派生类对象可赋值给基类对象/指针/引用,反之需强制类型转换。 作用域规则:派生类与基类同名成员会隐藏基类成员,需通过作用域运算符访

2025-07-10 19:45:32 582

原创 初阶10 模版进阶

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生增强了代码的灵活性【缺陷】模板会导致代码膨胀问题,也会导致编译时间变长出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2025-07-09 20:07:51 643

原创 初阶9 stack和queue

stackstack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操作。

2025-03-27 23:50:55 1020

原创 初阶8 list

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。与其他序列式容器相比,

2025-03-26 22:05:07 602

原创 初阶7 vector

vector就类似数据结构中的顺序表vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。意味着可以采用下标对vector的元素 进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2025-03-26 22:03:35 780

原创 初阶6 string

C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。但是 size_t 是用无符号来修饰的,也就是说无符号的 -1,它的补码全是1,也就是整形的最大值,所以他的意思就是:从 pos 位置开始,往后取 42 亿多个字符。迭代器的作用是用来访问容器(用来保存元素的数据结构)中的元素,所以使用迭代器,我们就可以访问容器中里面的元素。

2025-03-25 18:46:38 807

原创 初阶5 STL简介

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2025-03-25 18:42:16 626

原创 初阶4 模板初阶

本章重点如何实现一个通用的交换函数呢?以下面的交换函数为例:可以看到两种不同类型的交换函数的实现,我们用重载函数去实现的使用函数重载虽然可以实现,但是有一下几个不好的地方:泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础概念函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。格式注意:typename 是用来定义模板参数关键字,也可以使用 class(切记:不能使用 struct 代替 class)这里推荐使用class,

2025-03-24 15:49:56 652

原创 初阶3 C/C++内存管理

对于内置类型来说,malloc和new用法几乎一样,但是对于自定义类型来说,new和delete相比于malloc,会调用构造函数和析构函数这里以链表为列,看看malloc和new的区别malloc:单纯开空间//链表int val;//申请节点int main()// 定义n1节点free(n1);return 0;new:开空间+调用构造函数初始化//链表public://构造函数:_next(nullptr), _val(val) // 初始化列表。

2025-03-24 15:39:39 1387

原创 初阶2 类与对象

与结构体相似:class + 类名 + {} +;;——分号不可省在类里面定义函数需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。class Data//类里的内容由成员函数和成员变量组成public:_day = day;private:在类外定义函数——类域int _age;在类外定义函数,需要在类里面声明一下这个函数,并且要在定义的时候函数名前加上类名+作用域限定符,表明这是该类的函数。且我们常常将声明放在.h。

2025-01-27 22:45:26 1160

原创 初阶1 入门

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。一个命名空间定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中//局部域->全局域->展开(编译时是否去命名空间)了的命名空间域 or 指定访问命名空间域// 命名空间中可以定义变量/函数/类型int val;命名空间可以嵌套定义int a;int b;int c;int d;

2025-01-27 22:40:02 1141 1

原创 C++前言

PC平台几乎所有的游戏都是C++写的,比如:魔兽世界、传奇、CSgo、等,市面上相当多的游戏引擎都是基于C++开发的,比如:Cocos2d、虚幻4、DirectX等。关于全局问题可读《深入探索C++对象模型》、《Imperfect C++》、《C++沉思录》、《STL源码剖析》,要挑战智商,可看关于模版及模版元编程的书籍如《C++ Templates》、《C++设计新思维》、《C++模版元编程》;用java,但内卷化比较严重,大厂可能会有C++后台开发,主要做一些基础组件,中间件、缓存、分布式存储等。

2025-01-25 11:15:29 929

原创 各类数据结构代码

【代码】各类数据结构代码。

2025-01-24 12:05:09 377

原创 初阶5 排序

任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。它是通过堆来进行选择数据。这个数组,最大是9005,但最小的数是9001,如果用长度为9005的数组,那么按照上面的方法排序,肯定会太过浪费。之前学习的排序,无论是希尔排序,还是堆排序,都用的是比较两个数大小的方式进行的排序。现假设有一组0~4的数据需要排序:{ 2,3,3,4,0,3,2,4,3 }

2025-01-22 23:16:11 954

原创 初阶4 二叉树

本章重点树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树的结构:树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法。表示:左孩子右兄弟表示法1.4树在实际中的运用(表示文件系统的目录树结构)一棵二叉树是结点的一

2025-01-19 16:50:36 1077

原创 句子读单词

每组数据首先输入1个正整数n(1≤n≤50),然后输入1行长度不超过80的英文文本(只含英文字母和空格)。注意:不要忘记在输入一行文本前吸收换行符。在一行中输入一个英文句子(不超过100个字符),输出这个句子中单词的个数,单词之间以空格分隔,除空格外都认为是单词(包括符号)。输入长度不超过80的英文文本,统计该文本中长度为n的单词总数(单词之间只有一个空格)。首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。对于每组测试数据,输出长度为n的单词总数。

2025-01-17 21:27:29 237

原创 我的创作纪念日

在C语言领域更进一步。

2024-12-23 15:16:56 193 2

原创 专题07-7-8 六大门派身份识别

若验证失败,说明对方为假冒的,立即开战(当然,如果打不过就溜……例如,验证码000100015可以通过验证,因为10-15之间的素数有11、13,其各位数字之和为(1+1+1+3) = 6,6除以6的余数为0,与门派编号0相同。武林中六大门派“少林派、武当派、昆仑派、峨嵋派、华山派、崆峒派”的弟子众多,他们行走江湖,需要能够互相识别身份,以免被邪门歪道的恶人冒充。(提示: a、b均可以是0-9999的任何数);首位数字表示所在的门派编号,少林派、武当派、昆仑派、峨嵋派、华山派、崆峒派依次使用0-5表示。

2024-12-23 15:05:09 299

原创 专题07-7-7 检查密码

输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。如果密码长度合法,但存在不合法字符,则输出Your password is tai luan le.;如果密码长度合法,但只有字母没有数字,则输出Your password needs shu zi.;如果密码长度合法,但只有数字没有字母,则输出Your password needs zi mu.。如果密码合法,输出Your password is wan mei.;

2024-12-23 15:04:26 305

原创 实验11-7-8 找鞍点

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。

2024-12-21 12:21:16 184 1

原创 实验11-7-7 数组元素循环右移问题

一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A。每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

2024-12-21 12:18:54 239

原创 实验11-7-5 指针实现选择法排序(选择法排序)

读入整数N,再读入N个整数存入数组,排序后输出。对数组排序请使用函数实现(选择法)。

2024-12-20 02:09:17 182

原创 初阶3 栈与队列

本章主要讲解了栈和队列两种数据结构的概念、特性及实现方式。栈遵循后进先出(LIFO)原则,支持压栈和出栈操作,可用数组或链表实现;队列遵循先进先出(FIFO)原则,支持入队和出队操作,更适合用链表实现。文中通过选择题展示了栈的出栈顺序特点,并详细给出了动态栈和链式队列的代码实现,包括初始化、销毁、入栈/入队、出栈/出队等核心操作。两种数据结构在计算机科学中应用广泛,理解其实现原理对解决算法问题具有重要意义。

2024-12-20 01:44:55 1506 5

原创 专题07-7-4 字符串排序

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

2024-12-14 12:05:38 258 2

原创 专题07-7-3 找最大字符串

从键盘上输入4个字符串(每个字符串最多包含100个字符),求出其中的最大字符串并输出。从键盘上输入4个字符串(每个字符串最多包含100个字符)。输出最大字符串,最后换行。

2024-12-14 12:04:33 217

原创 专题06-7-4 6174问题

也就是说,对于任意一个各位数字不全相同的4位正整数n经过若干步骤计算,最终会是到6174,并陷入6174的轮回!这就是数学上著名的6174黑洞问题。所有的数字从小到大排列后得到整数b,然后把a-b做为新的4位整数n,然后重复以上变换操作,直到得到6174,对于任意一个各位数字不全相同的4位正整数n,对n进行以下变换:把n所有的数字从大到小排序后得到整数a,(以后进入黑洞,出不来)6174-6174=6174。(以后进入黑洞,出不来)6174-6174=6174。(第3次变换)8532-2358=6174、

2024-12-13 01:23:58 427 1

原创 专题06-7-2 哥德巴赫猜想

可以有很多这样的数字。对应于每个数字,程序应输出上述对的数量。请注意,我们只统计不同的数对,因此不应将(p1,p2)和(p2,p1)分别计为两对不同的对。然而,对于给定的偶数,可以找到这样的一对素数(如果有的话)。这里的问题是编写一个程序,打印出满足给定偶数的猜想条件的所有素数对数。在每个输入行中给出一个整数。你可以假定每个整数是偶数,并且大于或等于4且小于2的15次方。输入的结尾用数字0表示。对于任何大于或等于4的偶数n,存在至少一对素数p1和p2,使得n = p1 + p2。在这里给出相应的输出。

2024-12-13 01:22:49 305

原创 专题06-7-1 二分法求方程的近似根

请编程用二分法求出方程在区间[0,2]内的一个近似根。算法中的ε取值由输入得到。(3)如果|f(x)|< ε,则认为该点x就是方程的近似根(ε是一个极小值);(4)如果f(x)与f(a)同号,则把x赋值给a;−3在区间[0,2]内与x轴肯定有交点,即方程f(x)=0有根,(2)找到区间的中点x=(a+b)/2;(5)转向步骤(2)开始下一次迭代。(1)设定初始有根区间[a,b];一个近似根,保留8位小数。一个很小的实数,代表ε。已知函数 f(x)=x。

2024-12-12 01:07:39 648 1

原创 初阶2 顺序表与链表

线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1)。静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用。最容易想到的,时间复杂度为O(N^2),空间复杂度:O(1)目标:在数组上完成数据的增删查改。

2024-12-12 00:12:40 1382

空空如也

空空如也

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

TA关注的人

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