![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 78
HHYX.
这个作者很懒,什么都没留下…
展开
-
位图的基本原理以及应用
实现代码如下:这里需要注意的是数组里面存放的是char占一个字节,也就是8位,用来表示状态的话相当于可以存放8个数据,因此在开空间的时候,将需要的数据大小除以8,这样一来原本需要16G左右的数据现在仅需要0.5M即可(原来数据是用int保存int占4个字节)。如果直接使用数组来存放这些数,那么一个整型的数占4个字节,40亿个数需要16G的内存大小,从空间上来说一般很难实现,更不用说如果要进行排序产生的损耗等问题了。这里的关键点在于需要确定某个数应当存放的vector数组的下标,用该数与8取模即可得到。...原创 2022-08-07 17:06:04 · 1539 阅读 · 1 评论 -
用哈希简单封装unordered_map和unordered_set
stl中的unordered_map和unordered_set内部实现了迭代器,可以使用迭代器访问其中的内容,这里我们也在哈希中实现一个迭代器操作,然后通过封装实现unordered_map和unordered_set的迭代器,实现代码如下,迭代器里面主要需要注意的是operator++操作。因此他们的基本结构可以分别这样设计:其中在原来哈希的基础上又多了一个KeyOfT的仿函数,他的作用主要是确定需要进行比较的关键字,例如map中需要比较的是T中的first,而set就是key。......原创 2022-08-07 16:36:32 · 401 阅读 · 0 评论 -
哈希——开散列
又叫拉链法或者哈希桶。他先将数据按照哈希函数计算得到哈希地址,如果出现相同的哈希地址的数据,那么就用一个单链表把数据连起来,各链表的头节点存储在哈希表中。由于类似于字符串等这些不能直接使用除留余数法进行哈希函数计算哈希地址的情况,这里和闭散列里面情况类似,需要设计一些哈希方法来进行转换,从而能够进行这里的取模运算。这里的扩容是先创建一个新的vector数组,给他设置为新的大小,然后通过遍历原哈希表,将哈希表每个地址的元素,以及每个链表上面所挂的数据,一一重新映射到新的vector数组中,最后进行交换即可。.原创 2022-08-06 16:06:37 · 412 阅读 · 0 评论 -
哈希-闭散列
但是使用哈希来存放数据也不是没有缺点的,哈希函数为hask(key) = key % capacity这种情况下,如果存放数据集合{1,11,21,31,2,12,22}这样的情况,他们通过哈希函数算出来的结果出现很多重复,计算出了相同的哈希地址。α越大,填入表中的元素越多,产生冲突的可能性越大,α越小,表明填入表中的元素越少,产生冲突的可能性越小,效率越高,空间浪费越多。他的做法是当发生哈希冲突的时候,如果哈希表未被填满,说明哈希表中还有空位置,那么就可以把数据放到冲突位置的“下一个”空位置去。...原创 2022-08-05 18:00:17 · 402 阅读 · 0 评论 -
牛客刷题——两种排序方法
题目链接:两种排序方法考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法:1.根据字符串的字典序排序。例如:“car” < “carriage” < “cats” < “doggies < “koala”2.根据字符串的长度排序。例如:“car” < “cats” < “koala” < “doggies” < “carriage”考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。输入描述:输入第一行为字符原创 2022-06-08 22:29:30 · 267 阅读 · 0 评论 -
牛客刷题——求最小公倍数
题目链接:求最小公倍数正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。数据范围:1≤a,b≤100000输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。最小公倍数指的是既能被A整除也能被B整数的最小的正整数。有如下几种解法:1.暴力破解法从两个数中较大的数开始,逐个向上进行判断,遇到的第一个能够被A和B整除的就是最小公倍数,但是这样时间复杂度会很高,需要不断进行判断。2.更优解法两个数的最小公倍数实际上就是两个数的原创 2022-06-08 22:10:54 · 336 阅读 · 0 评论 -
牛客刷题——part8
函数重载需要满足的条件:在相同作用域中,函数名称相同,参数列表不同的函数可以称为函数重载。其中参数列表不同具体表现为:参数类型不同、参数个数不同、参数类型顺序不同,满足其一即可。与返回值类型是否相同无关。下面看选项:A:正确B:重载函数和返回值类型是否相同无关C:函数内部实现不同无法构成重载D:构成函数重载需要函数名称相同引用的特性:引用必须进行初始化。引用初始化后不能改变其引用的指向。引用又被称为别名。引用底层是使用指针来实现的,引用传参也是传递的地址。函数参数可以声明为引用或指针类型。E:引原创 2022-06-08 21:45:23 · 531 阅读 · 0 评论 -
Linux线程互斥
运行如下代码可以看到,这里是一个抢票的逻辑,让五个线程同时去抢100张票,如果对线程不加以限制的话,会产生票会变为负数也就是过度抢票的情况。这里就需要提到几个概念,例如像这里可以被多个线程的执行流共享的资源就叫做临界资源,其中每个线程对临界资源进行访问的代码就被叫做临界区。如果不对线程进行相关的限制,则会可能出现对临界资源的过度访问从而引发错误。因此Linux下的线程便有了互斥这个概念。互斥指的是在任何时刻,互斥可以保证有且仅有一个执行流能够进入临界区来访问临界资源,这样可以对临界资源起到保护作用。同时这原创 2022-06-07 22:26:21 · 536 阅读 · 0 评论 -
Linux线程控制
Linux下程序的执行被称为进程,而在一个进程内的一条执行路线就被称为线程,线程是一个进程内部的控制序列。每个进程最少有一个线程,这个线程被称为主线程。线程在进程内部运行,本质也是在进程地址空间内运行。进程是系统资源分配的基本单位,而线程是调度的基本单位,虽然线程共享进程数据,但是各个线程也有自己独有的一部分数据例如:上下文数据,栈,线程ID,寄存器等。进程和线程的关系如下图所示:线程作为一个执行流,理论上来说他也需要进程控制块类似的东西来进行控制线程的执行。但是Linux下的线程与Windows的不原创 2022-06-04 22:25:42 · 196 阅读 · 0 评论 -
平衡搜索二叉树——AVL树
正常的搜索二叉树中,一般而言查找一个数的时间复杂度几乎可以等价于log2N,但是正常的搜索二叉树可能会遇到一些极端情况,例如按照1,2,3,4插入数组,此时的搜索二叉树便会变为如下的情况:这种数据有序或者接近有序的插入数据此时的搜索二叉树会退化为一个单分支,此时查找效率就变成了O(n),并不能体现搜索二叉树的优势。此时,有两位数学家提出了一种方法来解决这种问题:当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜原创 2022-06-03 22:07:46 · 363 阅读 · 0 评论 -
牛客刷题——Fibonacci数列
题目链接:Fibonacci数列描述Fibonacci数列是这样定义的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。输入描述:原创 2022-06-01 17:07:32 · 254 阅读 · 0 评论 -
牛客刷题——合法括号序列判断
题目链接:合法括号序列判断描述给定一个字符串A和其长度n,请返回一个bool值代表它是否为一个合法的括号串(只能由括号组成)。测试样例:题中是判断括号是否合理匹配不成功的可能性有如下几种:原创 2022-06-01 16:58:52 · 312 阅读 · 0 评论 -
牛客刷题——part7
内联函数概念:inline修饰的函数被称为内联函数,其特性是在编译阶段会将内联函数展开,即函数调用直接使用函数体进行替换,这样的好处是减少了函数调用参数压栈以及创建栈帧等开销,可以提高程序运行的效率。但是inline是一个建议性的关键字,一般函数不是很长并且没有循环和递归是可以作为内联函数使用。结合题中描述来看,应该选C.######################################################################缺省参数是在函数声明和定义时,给函数参数带上一个原创 2022-06-01 16:17:18 · 724 阅读 · 0 评论 -
牛客刷题——把字符串转换成整数
把字符串转换成整数题目描述题目分析代码实现题目链接:把字符串转换成整数题目描述将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0数据范围:字符串长度满足 0 \le n \le 100 \0≤n≤100进阶:空间复杂度 O(1) \O(1) ,时间复杂度 O(n) \O(n)注意:①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0②字符串中可能出现 +/- 且仅可能出现在字符串首位。输入描述:输入一个字符原创 2022-05-31 10:03:07 · 309 阅读 · 0 评论 -
牛客刷题——不要二
不要二题目描述题目分析代码实现题目链接:不要二题目描述二货小易有一个W*H的网格盒子,网格的行编号为0-H-1,网格的列编号为0~W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根小易想知道最多可以放多少块蛋糕在网格盒子里。输入描述:每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)输出原创 2022-05-31 09:46:33 · 273 阅读 · 0 评论 -
牛客刷题——part6
牛客刷题十进制变量i的值为100,那么八进制的变量i的值为:(C)A 146B 148C 144D 142题中要求10进制转8进制,这里转换方式和10进制转2进制类似,将10进制数字不断除以8商为各个位,最终结果为144,选择C执行下面语句后的输出为(A)int I=1;if(I<=0)printf("****\n") ;elseprintf("%%%%\n");A %%B ****C 有语法错,不能正确执行D %%%%题中这里使用的是printf格式化进行原创 2022-05-30 22:59:17 · 233 阅读 · 0 评论 -
map和set
map和set关联式容器setset模板参数列表set的构造set的迭代器set容量操作set增删查改inserterasefindmultiset注意事项mapmap的模板参数map的构造map的迭代器map的容量操作map的增删查改关联式容器STL中容器一般可以分为两类,一类是以vector、list、deque等为代表的序列式容器,他的特点是其底层为线性序列的数据结构,里面存储的是元素本身。还有一种是关联式容器,他也是用来存储数据的,但是和序列式容器的区别在于它里面存放的是<key,valu原创 2022-05-29 12:14:04 · 470 阅读 · 0 评论 -
信号的处理与捕捉
信号的处理与捕捉信号处理信号的产生信号的存放信号集信号集操作函数sigprocmasksigpending信号的捕捉signalsigaction信号处理信号的产生一般而言,Linux系统下信号产生有如下四种方式:键盘输入产生进程异常产生信号系统调用接口,如(kill,raise等)软件条件(管道,alarm等)信号的存放由于信号产生是异步的,信号可能随时会产生,但是操作系统并不能及时的去处理,这就需要要求进程有保存信号的能力。上一篇信号博客中讲解了进程存放信号的pending位图结构原创 2022-05-28 13:04:30 · 164 阅读 · 0 评论 -
非递归实现二叉树的前、中、后序遍历
二叉树的前中后序遍历二叉树的前序遍历题目描述题目分析代码实现二叉树的中序遍历题目描述题目分析代码实现二叉树的后序遍历题目描述题目分析代码实现二叉树的前序遍历题目链表:二叉树的前序遍历题目描述给你二叉树的根节点 root ,返回它节点值的 前序 遍历。题目分析非递归实现二叉树的前序遍历,这里可以先定义一个栈来存放给个节点。前序遍历的顺序是根左右,因此根据栈的后进先出原则,可以先将各个节点入栈,然后依次取出栈顶元素,将其再依次出栈,并遍历右子树中的节点。具体代码实现如下:代码实现vector&原创 2022-05-27 09:56:52 · 624 阅读 · 0 评论 -
牛客刷题——二叉搜索树与双向链表
二叉搜索树与双向链表题目描述题目分析代码实现题目链接:二叉搜索树与双向链表题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示数据范围:输入二叉树的节点数 0 \le n \le 10000≤n≤1000,二叉树中每个节点的值 0\le val \le 10000≤val≤1000要求:空间复杂度O(1)O(1)(即在原树上操作),时间复杂度 O(n)O(n)注意:1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱原创 2022-05-26 14:49:16 · 146 阅读 · 0 评论 -
力扣刷题——二叉树的最近公共祖先
二叉树的最近公共祖先题目描述题目分析代码实现题目链接:二叉树的最近公共祖先题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”题目分析对于一棵二叉树,要想找到最近的公共祖先节点有很多办法,这里仅介绍其中一种。根据题意,要找最近的公共祖先节点,首先对于一个节点,如果p和q分别在该节点的左右子树中,那原创 2022-05-25 15:10:51 · 314 阅读 · 0 评论 -
力扣刷题——二叉树的层序遍历Ⅱ
二叉树的层序遍历Ⅱ题目描述题目分析代码实现题目链接:二叉树的层序遍历Ⅱ题目描述给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)题目分析这里题目看上去很难,如果将二叉树自底向上进行遍历,似乎很难做到。但是不妨换个思路,如果将二叉树从上而下遍历形成的二维数组逆置,是否就相当于自底向上的遍历了。这样一来,思路就很清楚了。二叉树的正常层序遍历方法可以参考上一篇博客,这里就不多介绍了,这里只需要将最后结果进行逆置即可通过,代码如原创 2022-05-25 14:48:25 · 133 阅读 · 0 评论 -
力扣刷题——二叉树的层序遍历
二叉树的层序遍历题目描述题目分析代码实现题目链接:二叉树的层序遍历题目描述给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。题目分析二叉树的层序遍历对于C++而言还是比较好处理的,用一个队列容器存放每层的各个节点,然后不断出各个节点并入他们的子节点即可。这题的难度主要在于除了层序遍历以外,需要用一个二维数组来存放每层中的节点的值。这就意味着需要标识二叉树每层中节点的个数。这里可以使用一个整型变量来存放每层节点的个数,以此作为每层循环结束的标识,具体原创 2022-05-25 14:35:24 · 193 阅读 · 0 评论 -
力扣刷题——根据二叉树创建字符串
根据二叉树创建字符串题目描述题目分析代码实现题目链接:根据二叉树创建字符串题目描述给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。题目分析根据题意,这里需要将二叉树的各个节点的值按照前序遍历的方式,转化为一个字符串。其中如果某个节点为空,则需要用()空括号表示。如果右子树为空则空括号可以省略,左子树为空但是右子原创 2022-05-25 14:17:09 · 219 阅读 · 0 评论 -
信号的产生
信号产生信号概念信号捕捉信号产生键盘产生程序异常core dump系统调用产生信号软件条件产生信号总结信号概念在Linux系统下,信号是进程之间事件异步通知的一种方式,例如我们终止前台进程使用的ctrl+c,就是一种信号。再比如在管道通信中,读端关闭,写端也是收到了信号然后将进程关闭。包括在进行调试代码时,遇到的段错误或者浮点错误,都是操作系统发送了相对应的信号从而对进程进行相应的处理。Linux下的信号种类可以通过kill -l命令进行查询。信号一共有62种,前31种为普通信号,后31种为实时信号原创 2022-05-25 10:30:42 · 295 阅读 · 0 评论 -
搜索二叉树——key/value模型
KV模型搜索二叉树KV模型KV模型实现基本框架插入查找遍历删除测试代码KV模型和上一篇博客中介绍的key模型的搜索二叉树不同,KV模型的搜索二叉树对于每一个key值都有与之对应的唯一的value值,即key,value是配对出现的。这种做法在生活中也有类似的应用,例如:查找中英文字典时候,单词和其中文翻译就构成一种成对的结构。再比如统计某些情况单词字符的出现次数,也可以使用该模型。KV模型实现基本框架 template<class K, class V> struct BSTreeN原创 2022-05-24 09:11:13 · 462 阅读 · 0 评论 -
搜索二叉树-key模型
搜索二叉树搜索二叉树概念实现搜索二叉树构成插入中序遍历查找删除搜索二叉树概念搜索二叉树作为一种树型结构,他和普通二叉树有如下几种区别:搜索二叉树的左子树,如果不为空的情况下,左子树上面所有节点的值都小于根节点搜索二叉树的右子树,如果不为空的情况下,右子树上面所有节点的值都大于根节点这个性质可以适用于该搜索二叉树的任意节点。这样看来对于一个搜索二叉树的中序遍历,即可实现从小到大遍历该二叉树中的所有节点实现搜索二叉树构成搜索二叉树节点的结构体和正常二叉树相同,都是由左右节点指针和其中存放的ke原创 2022-05-23 22:35:02 · 249 阅读 · 0 评论 -
牛客刷题——统计回文
统计回文题目描述题目分析代码实现题目链接:统计回文题目描述描述“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如:A = “aba”,B = “b”。这里有4种把B插入A的办法:原创 2022-05-19 20:03:11 · 170 阅读 · 0 评论 -
牛客刷题——连续子数组最大和
连续子数组最大和题目描述题目分析代码实现题目链接:连续子数组最大和题目描述描述一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3输入描述:输入为两行。 第一行一个整数n(1 <= n <= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。输出描述:所有连续子数组中和最大的值。题目分析这里可以使用遍历的方式找出最大连续子数组的和,但是时间复杂度是On2,原创 2022-05-19 19:51:38 · 221 阅读 · 0 评论 -
牛客刷题——part5
牛客刷题以下程序的输出结果是?(D)int x = 1;do{printf("%2d\n",x++);}while(x--);A 1B 无任何输出C 2D 陷入死循环题中使用的是dowhile循环,这种循环的特点是先执行再判断。其次打印的时候使用的是后置++,先打印再++。在while判断中使用后置–,也是先判断后–。因此该程序先输入1,打印1后变为2,然后进行while判断,再减一,于是进入死循环,因此选D定义char dog[]=“wang\0miao”;那么sizeof(原创 2022-05-19 19:20:59 · 251 阅读 · 0 评论 -
牛客刷题——进制转换
进制转换题目描述题目分析代码实现题目链接:进制转换题目描述给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。输出描述:为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)题目分析根据题目描述,该题目需要将输入的m转换为相应的n进制数。这里的进制范围为2到16进制。这里需要先定义一个字符数组,大小为16,其中字符从0开始一直到f原创 2022-05-17 22:17:03 · 709 阅读 · 0 评论 -
牛客刷题——计算糖果
计算糖果题目描述题目分析代码实现题目链接:计算糖果题目描述A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。输入描述:输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。原创 2022-05-17 21:58:56 · 182 阅读 · 0 评论 -
牛客刷题——part4
牛客刷题有以下程序,程序运行后的输出结果是©#include<iostream>#include<stdio.h>using namespace std;int main(){int m=0123, n = 123;printf("%o %o\n", m, n);return 0;}A 0123 0173B 0123 173C 123 173D 173 173题中格式化输出printf中使用了%o也就是要求进行8进制打印,8进制数字表示的形式的特征原创 2022-05-17 21:50:13 · 567 阅读 · 0 评论 -
多态——抽象类
多态finaloverride重载/重写/重定义重载重写重定义抽象类虚函数表final一般来说,如果想要设计一个不能被继承的类,可以让父类的构造函数定义为私有,这样一来子类没办法调用父类的构造函数初始化成员,相当于间接限制了父类不能被继承。但是C++中有一个关键字final可以直接限制父类不能被子类继承,final关键字加在类或者虚函数后面,这样的内容就不能被继承。class A final{public: virtual void Func() { }protected: int原创 2022-05-16 10:57:48 · 142 阅读 · 0 评论 -
牛客刷题——数组中出现次数超过一半的数字
数组中出现次数超过一半的数字题目描述题目分析代码实现题目链接:数组中出现次数超过一半的数字题目描述给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。数据范围:n≤50000,数组中元素的值 0 <= val <= 100000要求:空间复杂度:O(1),时间复杂度 O(n)输入描述:保证数组输入非空,且保证有解题目原创 2022-05-14 21:42:20 · 928 阅读 · 0 评论 -
牛客刷题——字符串中找出连续最长的数字串
字符串中找出连续最长的数字串题目描述题目分析代码实现题目链接:字符串中找出连续最长的数字串题目描述读入一个字符串str,输出字符串str中的连续最长的数字串输入描述:个测试输入包含1个测试用例,一个字符串str,长度不超过255。输出描述:在一行内输出str中里连续最长的数字串。题目分析根据题意,需要找出最长的连续的数字串。这里需要进行字符串的遍历,还需要两个容器存放字符串,其中一个tmp用来存放每次遇到的连续字符串,另外一个(ret)用来存放最长的字符串,如果tmp中存放的字符串比该字原创 2022-05-14 21:11:07 · 368 阅读 · 0 评论 -
牛客刷题——part3
牛客刷题以下程序的输出结果是? (B)#include <stdio.h> main(){char a[10]={ '1','2','3','4','5','6','7','8','9',0},*p; int i;i=8;p=a+i;printf("%s\n",p-3);}A 6B 6789C ‘6’D 789根据题目a是数组名也是首元素地址,这里p=a+i也就是让a向后偏移8个char类型空间,指向字符9的位置,打印结果是从p-3开始打印也就是从6开始打印。使用原创 2022-05-14 16:48:24 · 304 阅读 · 0 评论 -
牛客刷题——倒置字符串
倒置字符串题目描述题目分析代码实现题目链接:倒置字符串题目描述将一句话的单词进行倒置,标点不倒置。比如 I like beijing.经过函数后变为:beijing. like I输入描述:每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100输出描述:依次输出倒置之后的字符串,以空格分割题目分析根据题目要求,这里对带空格和标点的字符串逆置,其中标点不逆置,因此可以分为如下几步:(这里的逆置可以使用reverse函数)1、整体数据进行逆置2、对每个原创 2022-05-13 22:51:50 · 265 阅读 · 0 评论 -
牛客刷题-排序子序列
排序子序列题目描述题目分析代码实现题目链接:排序子序列题目描述牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)第二行包括n个整数A_i(1 ≤原创 2022-05-13 22:43:02 · 118 阅读 · 0 评论 -
牛客刷题——part2
牛客刷题使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以下哪个选项是正确的? (C)A %-30.4eB %4.30eC %-30.4fD %-4.30f这里题目要是主要是该类型为一个double类型的数据,输出类型为10进制,左对齐30个字符以及控制4位精度。double类型说明类型为%f,%e为指数类型的输出。默认输出为右对齐,如果需要左对齐则需要加上负号,控制30个字节因此负号后面为30,4位精度表示.后面为4,因此选C请原创 2022-05-13 20:49:26 · 438 阅读 · 1 评论