自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

博主qq1077644249

有问题的老铁随时可以与博主私信进行交流提问哦

  • 博客(99)
  • 收藏
  • 关注

原创 C++——哈希

1. unordered系列关联式容器1.1 unordered_map1.1.1 unordered_map的文档介绍1.1.2 unordered_map的接口说明1.2 unordered_set2. 底层结构2.2 哈希冲突2.3 哈希函数常见哈希函数2.4 哈希冲突解决2.4.2 开散列开散列增容开散列的思考3. 模拟实现3.1 哈希表的改造3.2 unordered_map3.3 unordered_set

2023-05-05 16:13:52 1056 2

原创 C++——一种特殊的二叉搜索树之AVL树

序言1 AVL树的概念2 AVL树节点的定义3 AVL树的插入是否继续更新依据:子树的高度是否变化4 AVL树的旋转旋转的原则:1. 新节点插入较高左子树的左侧---左左:右单旋2. 新节点插入较高右子树的右侧---右右:左单旋3. 新节点插入较高左子树的右侧---左右:先左单旋再右单旋4. 新节点插入较高右子树的左侧---右左:先右单旋再左单旋5.如何验证一颗树是AVL树的验证?6 AVL树的删除(了解)7 AVL树的性能

2023-04-14 21:53:34 758

原创 C++——一种特殊的二叉搜索树之红黑树

1 红黑树的概念2 红黑树的性质3 红黑树节点的定义4 红黑树的插入操作情况一: cur为红,p为红,g为黑,u存在且为红。情况二: cur为红,p为红,g为黑(不存在连续的红结点),u不存在/u存在且为黑(仅仅单旋)情况三: cur为红,p为红,g为黑,u不存在/u存在且为黑(旋转方法与情况二不同——双旋)插入的三种情况代码演示及详解注释:5 如何验证一棵树是否是红黑树6 红黑树的删除7 红黑树与AVL树的比较8 红黑树的应用

2023-04-14 21:52:34 639

原创 每日一练30&&31——最难的问题&&因子个数&&分解因数

我们很清楚的知道,要想求出它的每一个质因数,我们需要用质数去试除。90能被2整除,那就拿商继续除以2,除不尽就换3除,如果3还能被整除,那么就一直循环除3,除不尽就换4,一直到除到质数为止。基础代码框架类似判断质数,只是被判断的数字在过程中不断被除,最终循环结束的时候,那个被处理过的数字,就是最后一个质因数。本题题意明确,对于A到E之间的密文(包括A和E),加上21就是对应的明文。小学的知识,分解因数。对于F到Z之间的密文(包括F和Z),减去5就是对应的明文。本题应该是求的质因子的个数。

2023-04-05 11:21:58 301

原创 每日一练28&&29——反转部分单向链表&&猴子分桃&&求正数数组的最小不可组成和(难)&&有假币

可以放入5,3-4放入3,2只能放入2 当数组中放入2,3,5重量时,背包承重10放入10,8-9放入8,7放入7,5-6放入5…后对最轻的那份再次进行称重,直到称重的个数不足2个时则结束,获得假币;方法一的弊端:假设需要反转的链表部分,占比比较大,则需要两次遍历链表来实现.当数组中只有2重量的时候,背包承重从2-10都可以放入2的数值。平均分三份是最快的方法,两份进行称重(对比出三个的重量 ),根据承重和已有的重量种类阶段性计算当前承重时能够放入的重量。当数组中放入2和3重量的时候,背包承重从5-10。

2023-04-04 20:39:56 545

原创 每日一练26&&27——变态跳台阶&&快到碗里来&&不用加减乘除做加法&&三角形

这个题目很容易理解,只要输入的猫的身长小于碗的周长即可,通过输入碗半径计算得到周长,与输入的猫的身长相比较。有三阶台阶的时候可以有 f(3) = f(2)+f(1)+f(0)=4;假定第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);假定第一次跳的是3阶,那么剩下的是n-3个台阶,跳法是f(n-3)假定第一次跳的是n-1阶,那么剩下的是1个台阶,跳法是f(1);有两阶台阶的时候可以有 f(2) = f(1)+f(0)=2;假定第一次跳的是n阶,那么剩下的是0个台阶,跳法是1种(

2023-04-02 17:20:15 575

原创 每日一练24&&25——年终奖&&迷宫问题(难)&&星际密码(易错)&&数根(接收数据的方法)

搜索所有从左上角走到右下角的路径,找到最优路径。通俗的来讲对于f(2,1),要算最大,那么就要选择从上面来的奖励更大还是从左面来的奖励更大。

2023-04-01 21:45:32 536

原创 每日一练22&&23——小易的升级之路&&找出字符串中第一个只出现一次的字符&&微信红包&&计算字符串的编辑距离(难)

F(i-1,j-1): w1[1,…,j-1]的编辑距离,如果w1[i]与w2[j]相同, 不做任何操作,编辑距离不变,如果w1[i]与w2[j]不同,替换w1[i]的字符为w2[j]—>F(i,j)初始化: 初始化一定要是确定的值,如果这里不加入空串,初始值无法确定 F(i,0) = i :word与空串的编辑距离,删除操作。,j]的编辑距离,删除w1[i]的字符—>F(i,j),j-1]的编辑距离,增加一个字符—>F(i,j)F(i,j):word1的前i个字符于word2的前j个字符的编辑距离。

2023-03-30 18:24:17 275

原创 每日一练20&&21——字符串反转&&公共子串计算&&洗牌&&MP3光标位置

本题题目的意思是模拟洗牌过程,牌被分成两组,且每组数量相等,然后每组牌从最后一个牌交叉排列,最后再把排列逆序就是一次洗牌的过程,K次需要重复K次这样的过程。字符串反转,需要交换首尾字符,设置首尾两个位置start,end,每次交换首尾字符,然后start++, end–,直到start,end相遇,反转完成。每次读取一个数之后,算出他经过k次洗牌后的位置,只用一个长度为2n数组用来输出根据当前数的位置,可以算出经过一次洗牌后的位置,

2023-03-27 21:24:53 286

原创 每日一练18&&19——统计每个月兔子的总数&&字符串通配符(难)&&汽水瓶&&查找两个字符串a,b中的最长公共子串(难)

第n个月的兔子数量由两部分组成,一部分是上个月的兔子f(n-1),另一部是满足3个月大的兔子,会生一只兔子f(n-2)。所以第n个月兔子总数: f(n) = f(n - 1) + f(n - 2)。本题是在变相考察斐波那契数列。从前向后一次匹配,遇到相同字符,都向后移动一个字符;,则不需匹配,自动跳过一个字符;本题可以通过递归求解。

2023-03-25 18:57:18 643 1

原创 每日一练16&17——C++完全数计算&&扑克牌大小&&杨辉三角的变形&&计算某字符出现次数

本题的题目意思是输入的只是这些类型中的一种,个子,对子,顺子(连续5张),三个,炸弹(四个)和对王。其实就是最多5张牌(顺子),最少1一张牌之间的比较。本题可以通过遍历每一个约数,求和,判断完全数。约数计算可以遍历sqrt(n)的范围。

2023-03-24 20:40:40 393

原创 每日一练15——C/C++查找输入整数二进制中1的个数&&手套问题(难)

本题是计算一个数二进制表示中1的个数,通过(n >> i) & 1可以获取第i位的二进制值,每次n右移一位,可以获取一位的二进制值,右移32次,n变成0,循环终止。而对于某一边某种颜色数量是0,则需要直接将另一边对应颜色的手套数加到SUM中,才能保证覆盖每一种颜色(从最坏的情况来考虑),这个仔细想一下其实就可以明白。代表左右手颜色不为0的小的那一边的手套数,取数量小的那一边,我们达到所有颜色都覆盖的目的即可,要整体考虑。) ,所以对于左右手手套颜色都有数量的序列,想要覆盖每一种颜色,则最小数量。

2023-03-24 19:00:35 395

原创 每日一练14——C/C++计算日期到天数转换&&幸运的袋子(难)

可用数论证明:设a=1+x,b=1+y,则1+x+1+y>(1+x)(1+y),—> 1>xy,则x,y必有一个为0,即a,b有一个为1。ak,如果不满足给定条件,即和sum小于等于积pi。如果此时再选择一个数b,能使其满足sum+b > pib,则,b必然为1,且为必要非充分条件。反之,如果选择的b>1,则sum+b

2023-03-22 21:28:53 269

原创 每日一练13——C/C++参数解析问题&&跳石板问题(难)

参数解析思路:代码:跳石板思路:代码及注释:

2023-03-20 21:39:15 288

原创 C++——map和set的应用总结

1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set的介绍3.1.2 set的使用3.2 multiset3.2.1 multiset的介绍3.2.2 multiset的使用3.3 map3.3.1 map的介绍3.3.2 map的使用operator[]3.4 multimap3.4.1 multimap的介绍3.4.2 multimap的使用

2023-02-21 12:47:03 933 6

原创 C++——二叉树排序树

1 二叉搜索树概念2 二叉搜索树操作与模拟实现2.1 二叉搜索树的查找非递归版本递归版本2.2 二叉搜索树的插入非递归版本递归版本2.3 二叉搜索树的删除非递归版本递归版本3 二叉搜索树的应用(K模型、KV模型)4 二叉搜索树的性能分析

2023-02-18 21:22:10 1321 4

原创 C++——二叉树进阶oj题

二叉树创建字符串二叉树的分层遍历1二叉树的分层遍历2给定一个二叉树, 找到该树中两个指定节点的最近公共祖先二叉树搜索树转换成排序双向链表。根据一棵树的中序遍历与后序遍历构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树

2023-02-18 19:35:20 515

原创 C++——二叉树的前序遍历||中序遍历||后序遍历 非递归算法

二叉树的前序遍历,非递归迭代实现二叉树的中序遍历 ,非递归迭代实现二叉树的后序遍历 ,非递归迭代实现思路及其代码

2023-02-18 19:29:32 613

原创 C++——继承和多态常见的面试问题

1.什么是多态?2.什么是重载、重写(覆盖)、重定义(隐藏)?3.多态的实现原理?4.inline函数可以是虚函数吗?5.静态成员可以是虚函数吗?6.构造函数可以是虚函数吗?7.析构函数可以是虚函数吗?什么场景下析构函数是虚函数?8.对象访问普通函数快还是虚函数更快?9.虚函数表是在什么阶段生成的,存在哪的?10.C++菱形继承的问题?虚继承的原理?11.什么是抽象类?抽象类的作用?

2023-02-13 22:07:18 605 1

原创 C++——多态|虚函数|重写|虚表

1. 多态的概念1.1 概念2. 多态的定义及实现2.1多态的构成条件2.2 虚函数2.3虚函数的重写虚函数重写的三个例外:2.4 普通调用和多态调用:2.5 C++11 override 和 final2.6 重载、虚函数的覆盖(重写)、隐藏(重定义)的对比3. 抽象类(有关纯虚函数)3.1 概念3.2 接口继承和实现继承4.多态的原理4.1虚函数表派生类的虚表生成流程:虚函数存在哪的?**虚表**存在哪的?4.2多态的原理4.3 动态绑定与静态绑定5.单继承

2023-02-13 21:55:50 3198

原创 C++——继承|继承关系|什么是隐藏|菱形继承

1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化2.父类和子类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6. 继承与静态成员7.复杂的菱形继承及菱形虚拟继承如何解决数据冗余和二义性的?虚拟继承解决数据冗余和二义性的原理8.继承的总结和反思

2023-02-09 21:37:51 409 2

原创 C++——模板特化&&模板为什么不能分离编译

1. 非类型模板参数2. 模板的特化2.1 概念2.2 函数模板特化2.3 类模板特化2.3.1 全特化2.3.2 偏特化2.3.3 类模板特化应用示例3 模板分离编译3.1 什么是分离编译3.2 模板为什么不能分离编译?3.3 解决方法4. 模板总结

2023-02-05 16:51:17 696 1

原创 C++——优先级队列

1.priority_queue的介绍和使用1.1 priority_queue的介绍1.2 priority_queue的使用1.3 在OJ中的使用1.4 priority_queue的模拟实现仿函数/函数对象向上调整向下调整

2023-02-04 22:22:02 4015

原创 C++——stack和queue的介绍和使用

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

2023-02-03 19:22:31 561

原创 每日一练12——二进制插入&&查找组成一个偶数最接近的两个素数

判断一个数是否为素数一般来讲是从2到它本身-1,看这个区间的数是否能整除这个数,但其实正常来讲,开平方之前的数如果能整除这个数,后面的数就不用判断了。为了提高效率,使用sqrt函数对被判断的数进行开平方,为什么进行开平方呢?要把n的二进制值插入m的第j位到第i位,只需要把n先左移j位,然后再进行或运算(|)即可。本题首先需要判断素数,素数表示除过1和本身,不能被其它数整除。约等于3.31,就判断2和3是否能把11整除就可以了。假如2不能把12整除,那么6也是不能整除12的。因为如果2能把12整除,那么。

2023-02-02 20:49:07 201

原创 每日一练11——最近公共祖先&&求最大连续bit数

b,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先。让1每次左移一位,然后和输入的值做与运算,获取其每一位的二进制值。如果是byte类型的数据,利用for循环,把1从0开始,左移7位之后结束统计。如果是int类型的数据,利用for循环,把1从0开始,左移32位之后结束统计。如果1连续,则计数累加,如果不连续,则count从0开始计数。上述树中子节点与父节点之间的关系为root = child / 2。好处:适用于正数、0和负数。

2023-02-02 18:04:17 206

原创 每日一练10——井字棋&&密码强度等级

这里对于不同种类的字符得分不同,对于长度,字母,数字,符号单独判断,最后把所有的单项值根据题目要求相加,输出对应的安全级别。这样就可以选出来 符合最多的那一种奖励 同时if else语句也显得更加逻辑清晰。井字棋,是一种在3*3格子上进行的连珠游戏,三个相同就代表获胜。如果扩展为N*N的话,判断和是否等于N,下面代码适用任何情况。然后不满足五分的再看看是否满足3分的条件,其次是2分的,可以先从条件最多的五分的下手,先看看是否满足5分的条件。最好是先从条件较多的 先判断。

2023-02-01 18:53:13 450

原创 每日一练9——另类加法&&走方格的方案数

求和后当前的数据位: 0000 0010;求和后进位的数据:0000 0010。求和后的数据位:0000 0000;求和后的进位:0000 0100。求和后的数据位:0000 0100;求和后的进位:0000 0000。两个数求和,其实就是 求和后当前位的数据+两个数求和的进位。当进位为0,那么就返回当前的数值位就是1+3的答案。因为当前数据位和进位都不为0,所以数据位要加上进位。因为当前数据位和进位都不为0,所以数据位要加上进位。根据上面的规则,我们来简单操作一下。

2023-02-01 11:36:45 444

原创 【Linux】简介磁盘|inode|动静态库

一.简介磁盘1.磁盘的物理结构:2.磁盘存储方式:3.磁盘的逻辑抽象:二.inode&&文件系统1.inode文件=属性(inode)+内容(data block)为什么删除一个文件相比于写一个文件要快得多?2.硬链接&&软链接3.特殊的隐藏目录`.`和`..`4.acm时间三.动态库和静态库1.生成静态库静态链接:静态链接的优缺点2.生成动态库如何运行动态库?动态链接:动态库的加载过程:

2023-01-30 23:53:14 697

原创 每日一练8——C/C++(牛客)两种排序方法&&求最小公倍数问题

思路很简单,将接受的字符串都放到vector容器中,利用string的operator>=运算符重载来按ascii比较字符串,string>=运算符重载和compare默认就是按字典序进行比较,利用string的size来比较字符串的长度即可。辗转相除法,是指用于计算两个非负整数a,b的最大公约数。

2023-01-13 22:29:54 103

原创 【C++】list介绍及使用&&模拟实现&&对比vector

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是带头双向循环链表结构。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好,但排序效率list相比于vector会更低。与其他序列式容器相比,list最大的缺陷是不支持任意位置的随机访问,比如:要访问list的第6个元素,必须从已知的位置(比如头部或者尾部)迭代到该位置,在这段位置上迭代需要线性的时间开销;

2023-01-10 21:48:18 472

原创 【Linux】缓冲区的理解

我们口中说的缓冲区,一般指的是用户级语言层面给我们提供的缓冲区。本质就是一段内存。具体在C语言文件操作的中FILE结构体中。它内部不仅有文件描述符fd还有缓冲区。

2023-01-04 21:42:05 357 1

原创 【Linux】文件操作|文件描述符|重定向

1.文件操作系统调用的几个基本接口openwritereadlseekwrite read close lseek ,对比C文件相关接口2.如何理解文件操作?3.文件描述符fd文件描述符的分配规则重定向使用 dup2 系统调用进行重定向

2023-01-03 18:59:39 827 1

原创 【Linux】进程创建|进程终止|进程等待|进程程序替换

两个返回值那么就意味着同一个id要被父子进程的返回值赋值(写入)两次,所以先对id进行赋值(写入)的进程就正常赋值(写入),后对id进行赋值(写入)的进程因为进程具有独立性,那么就会发生写时拷贝,典型的同一个id,虚拟地址一样,但是内容却不一样。在子进程改变全局变量global_value之后,可以看到父子进程的值有了区别,子进程的值是300,父进程是100,因为我们知道进程具有独立性,再往后看奇怪的事情发生了,为什么父子进程的这个全局变量global_value的地址是一样的呢?运行结果对还是不对?

2022-12-30 15:25:15 903 2

原创 【Linux】虚拟地址空间

虚拟地址空间是操作系统为了实现进程管理所设定的一种虚拟化解决方案,通过虚拟地址空间可以让每个进程都认为自己可以独占系统资源。学过C语言的肯定听说C/C++地址空间、里面有代码区、已初始化区、未初始化区、堆区、栈区等空间。堆向下生长、栈向上生长等等。但是其实我们对于他们的了解其实还并不全面。

2022-12-15 17:58:23 592 1

原创 【Linux】环境变量|查看环境变量的方法|C命令行参数

C语言中命令行参数是使用 main() 函数参数来处理的,其中:第一个参数 argc 是一个整型变量表示命令行参数的个数。第二个参数 argv 是一个指针数组,里面的元素是指向命令行参数的字符指针。第三个参数 env 是一个指针数组,里面的元素是指向环境变量(字符串)的字符指针。}下面的程序就是运用第二个参数的例子。i < argc;i ++) {}解释:每个进程都会收到一张命令行参数表,命令行参数表是一个字符指针数组,最后用NULL结尾,每个指针指向一个以’\0’结尾的字符串。

2022-12-12 22:53:16 1596

原创 【Linux】进程优先级&&进程切换

优先级和权限有些区别,权限决定能还是不能,优先级的前提是能,接下来是先做还是后做的问题。在计算机中来看也就是先还是后获得一些资源的问题。cpu资源分配的先后顺序,就是指进程的优先级(priority)。 优先级高的进程有优先执行权利。配置进程优先级对多任务环境的linux很有用,可以改善系统性能。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。原因就是因为计算机中的资源相对于要访问它们的进程来说太少了,大家都想争这些个资源,所以才会有进程优先级来确定谁先

2022-12-08 12:22:14 1007 2

原创 每日一练7——C/C++合法括号序列判断问题&&Fibonacci数列问题

题目链接用栈结构实现,栈中存放左括号,当遇到右括号之后,检查栈中是否有对应的左括号,如果有则出栈,如果没有或者当前栈为空,则说明不匹配。用栈的思想解决本题,原本题目里指的括号只有小括号,但是这里的代码是把大括号和中括号考虑进去了。代码二:利用C++栈结构来解决问题。Fibonacci数列题目链接本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1,后面的项形成递归:F(n) = F(n - 1) + F(n - 2)。【解题思路】:本题可以通过先找到距

2022-12-07 13:11:39 547 2

原创 【Linux】进程状态|僵尸进程 |孤儿进程

本文主要讲了运行状态:阻塞状态挂起状态Linux下的运行状态R睡眠状态S停止状态T两个特殊的进程:僵尸进程孤儿进程

2022-12-04 09:20:40 1151

原创 【Linux】进程的概念|查看进程的方法|子进程

就可以看到7139是一个bash,我们把这个bash用kill命令杀掉的话,那我们的各种ls、cd等等一些个命令都运行不了了,我们退出shell下次再进行这样的操作,发现他们的父进程还是bash,所以其实在Linux命令行上启动的进程, 一般它的父进程没有特殊情况的话,都是bash!通过前面的介绍已经知道fork是有两个返回值的,可以看到其实它一个返回值返回给了父进程,这个返回值从上面可以看出它是子进程的id,另一个返回值是0,被返回给了子进程。对于计算机而言,程序就是系统可以识别的一组有序的指令。基本概念

2022-12-02 20:33:15 1724

空空如也

空空如也

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

TA关注的人

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