- 博客(184)
- 收藏
- 关注
原创 用栈实现队列---C++
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(pushpoppeekempty):实现MyQueueint pop()int peek()truefalsesizeis empty。
2024-08-11 23:07:47 378
原创 用队列实现栈---C++实现
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(myStack.empty();// 返回 False。的元素,queue2 作为入栈操作的。其中 queue1 用于存储。
2024-08-11 22:53:45 389
原创 LCR 041. 数据流中的移动平均值---移动窗口的平均值---队列
给定一个窗口大小和一个整数数据流,根据该滑动窗口的大小,计算滑动窗口里所有数字的平均值。实现sizenextsize// 返回 1.0 = 1 / 1// 返回 5.5 = (1 + 10) / 2// 返回 4.66667 = (1 + 10 + 3) / 3// 返回 6.0 = (10 + 3 + 5) / 3next104。
2024-08-11 12:02:58 412
原创 LC18.四数之和
给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且的四元组bcd你可以按返回答案。
2024-08-10 17:02:38 568
原创 1190. 反转每对括号间的子串---栈
给出一个字符串s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中包含任何括号。"dcba""iloveu"先反转子字符串 "love" ,然后反转整个字符串。
2024-08-10 09:56:28 124
原创 字符串压缩---模拟
字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。:"abbccd":"abbccd":"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
2024-08-07 12:01:02 332
原创 商品的排列顺序---全排列
某店铺将用于组成套餐的商品记作字符串goods,其中goods[i]表示对应商品。请返回该套餐内所含商品的。返回结果,但不能含有重复的元素。
2024-08-06 16:14:03 198
原创 LC468.验证IP地址
给定一个字符串queryIP。如果是有效的 IPv4 地址,返回"IPv4";如果是有效的 IPv6 地址,返回"IPv6";如果不是上述类型的 IP 地址,返回"Neither"。是形式的IP地址。其中且xi前导零。例如:为有效IPv4地址,为无效IPv4地址;为无效IPv4地址。是一个格式为'a''f''A''F'xi例如和是有效的 IPv6 地址,而和是无效的 IPv6 地址。"IPv4"有效的 IPv4 地址,返回 "IPv4""IPv6"有效的 IPv6 地址,返回 "IPv6"
2024-08-06 14:00:51 238
原创 最大公约数---最小公倍数---1到N的最小公倍数---C++实现
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。第一步:任意给定两个正整数;若不是则执行第二步。若 r 是 a ÷ b 的余数,且r不为0, 则gcd(a,b) = gcd(b,r)则第一步中约掉的若干个2的积与第二步中等数的乘积就是所求的最大公约数。注:gcd表示最大公因数,gcd(a,b)表示a、b两数的最大公因数。求出最大公因数后,之间用a*b/gcd(a,b)即可。互换:置 a←b,b←r,并返回第一步。令r为a/b所得余数(0<=r)若 r= 0,算法结束;
2024-08-06 11:20:48 226
原创 LeetCode 495. 提莫攻击
在《英雄联盟》的世界中,有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态。- 第 1 秒,提莫攻击艾希并使其立即中毒。中毒状态会维持 2 秒,即第 1 秒和第 2 秒。- 第 4 秒,提莫再次攻击艾希,艾希中毒状态又持续 2 秒,即第 4 秒和第 5 秒。艾希在第 1、2、4、5 秒处于中毒状态,所以总中毒秒数是 4。秒时对艾希发起攻击,以及一个表示中毒持续时间的整数。当提莫攻击艾希,艾希的中毒状态正好持续。,在新的攻击之后,中毒影响将会在。返回艾希处于中毒状态的。
2024-08-03 09:50:41 364
原创 C++面向对象进阶---类型转换运算符
对于本例中的情况①,pa 指向 A 类对象,根据该对象找到的就是 A 的类型信息,当程序从这个节点开始向上遍历时,发现 A 的上方没有要转换的 B 类型或 C 类型(实际上 A 的上方没有任何类型了),所以就转换败了。,如果找到了要转化的目标类型,那么说明这种转换是安全的,就能够转换成功,如果没有找到要转换的目标类型,那么说明这种转换存在较大的风险,就不能转换。向下转型是有风险的,dynamic_cast 会借助 RTTI 信息进行检测,确定安全的才能转换成功,否则就转换失败。
2024-07-28 15:59:01 776
原创 C语言内存管理精讲3---野指针---内存泄漏
这是因为,freed() 只是释放掉了动态分配的内存,但并未改变 str 的值,str 的值不是 NULL,它仍然指向被释放掉的内存,所以会执行 if 语句里面的 puts() 函数。但由于此时的内存已经被释放掉了,原来的字符串已经不在了,所以输出的数据是未知的。局部变量,它的值是不确定的,是随机的,不知道指向哪块内存。,而且我们也不知道这块内存的地址,所以就再也无法找回了,也没法释放了,这块内存就成了垃圾内存,虽然毫无用处,但依然占用资源,唯一的办法就是等程序运行结束后由操作系统回收。
2024-07-28 09:19:43 829
原创 C语言内存管理精讲---动态内存分配---堆
在进程的地址空间中,的内存在程序启动时就已经分配好了,它们大小固定,不能由程序员分配和释放,只能等到程序运行结束由操作系统回收。这称为静态内存分配。的内存在程序运行期间可以,不用在程序刚启动时就备足所有内存。这称为动态内存分配。
2024-07-27 21:49:17 267
原创 C语言内存管理精讲---栈
以 funcB() 为例,假设 main() 函数先将 19.9 入栈,后将 28.5 入栈,但是 funcB() 在使用这些实参时却认为 28.5 先入栈,19.9 后入栈,那么就一定会产生混乱,误以为19.9 是传递给 b、28.5 是传递给 a 的。的地址是 ebp+12,第二个参数的地址是 ebp+8,第一个局部变量的地址是 ebp-4,第二个局部变量的地址是 ebp-8。栈(Stack)可以存放。随着数据的进栈出栈,esp 的值会不断变化,进栈时 esp 的值减小,出栈时 esp 的值增大。
2024-07-27 21:22:56 771
原创 C语言内存精讲2---Linux下C语言程序的内存布局(内存模型)
一个C语言程序的内存在整个地址空间中是如何分布的呢?数据在哪里?代码在哪里?为什么要这样分布?这些就是本节要讲解的内容。程序内存在地址空间中的分布情况称为内存模型由操作系统构建,在Linux和Windows下有所差异,并且会受到编译模式的影响。
2024-07-27 11:18:43 352
原创 C语言内存管理精讲1---虚拟地址到物理地址的映射
程序是保存在中的,要载入才能运行,CPU也被设计为只能。对于CPU来说,内存仅仅是一个存放指令和数据的地方,并不能在内存中完成计算功能,例如要计算 a = b + c,必须将 a、b、c 都读取到CPU内部才能进行加法运算。为了了解具体的运算过程,我们不妨先来看一下CPU的结构。CPU的大脑,负责加减乘除、比较、位移等运算工作,每种运算都有对应的电路支持,速度很快。(Register)
2024-07-27 10:35:59 2159
原创 c++11 新特性 超级详细
/使用 auto 代替具体的类型return 0;auto 可以根据表达式 v.begin() 的类型(begin() 函数的返回值类型)来推导出变量 i 的类型。auto 虽然在书写格式上比 decltype 简单,但是它的推导规则复杂,有时候会改变表达式的原始类型;而 decltype 比较纯粹,它一般会坚持保留原始表达式的任何类型,让推导的结果更加原汁原味。从代码是否健壮的角度考虑,我推荐使用 decltype,它没有那么多是非;
2024-07-26 12:02:50 754
原创 c++ 面试题---sizeof和strlen的区别详解
一个std::string对象的大小是由它所包含的数据和信息的总大小来决定的,而不是它所表示的字符串的长度。sizeof(str)返回的是std::string对象在内存中占用的大小,而不是字符串"Hello World"的大小。对象的大小取决于其实现方式和编译器的实现细节,在不同的编译环境下,sizeof(string)的返回值可能会不同。
2024-07-24 17:24:57 358
原创 C++多文件编程(超级详细)
在实际多文件开发中,我们往往使用如下的宏定义来避免发生重复引入://头文件内容#endif其中,_NAME_H是宏的名称。需要注意的是,这里设置的宏名必须是独一无二的,不要和项目中其他宏的名称相同。当程序中第一次 #include 该文件时,由于 _NAME_H 尚未定义,所以会定义 _NAME_H 并执行“头文件内容”部分的代码;当发生多次 #include 时,因为前面已经定义了 _NAME_H,所以不会再重复执行“头文件内容”部分的代码。
2024-07-24 10:00:11 1251
原创 C++输入输出流
执行后会发现,控制台没有任何输出。cin 就是 istream 类的对象,cout 是 ostream 类的对象,它们都声明在 <iostream> 头文件中,这也解释了“为什么在 C++ 程序中引入。putchar() 函数是C语言中使用的,在 <stdio.h> 头文件中定义,C++保留了这个函数,在 <iostream> 头文件中定义。仍以前面创建好的 in.txt 文件为例,执行此程序后,控制台不会输出任何数据,而是会在该项目的目录下生成一个 out.txt 文件,其中就存有该程序的执行结果。
2024-07-23 11:57:51 1903
原创 堆数据访问快还是栈数据访问快?
回答:栈数据访问速度通常比堆数据访问速度快,因为栈的数据存储在,访问速度快且效率高。堆数据访问速度较慢,因为其数据存储在,需要额外的指针解引用操作。
2024-07-23 09:30:02 641
原创 从C到C++ 命名空间---函数重载---内联函数---混合编程
这是因为 C++ 取消了原来的限制,变量只要在使用之前定义好即可,不强制必须在函数开头定义所有变量。//在for循环的条件语句内部定义变量ii>n;return 0;运行结果:Total: 55在C语言中,动态分配内存用 malloc() 函数,释放内存用 free() 函数。//分配10个int型的内存空间free(p);//释放内存在C++
2024-07-20 10:17:32 1758
原创 35. 搜索插入位置---二分法
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。21。
2024-07-19 21:02:51 191
原创 LC219. 存在重复元素II
给你一个整数数组nums和一个整数k,判断数组中是否存在两个i和j,满足且。如果存在,返回true;否则,返回false。
2024-07-19 11:29:33 348
原创 LC1. 两数之和---哈希表
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出target的那整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。[0,1]因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。
2024-07-19 11:18:06 340
原创 LeetCode 337、打家劫舍III ---动态规划DP---DFS
小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为root。除了root之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵如果,房屋将自动报警。给定二叉树的root。返回,小偷能够盗取的最高金额。7小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7。
2024-07-18 22:31:11 818
原创 LeetCode 235、二叉搜索树的最近公共祖先 ---DFS
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]6节点 2 和节点 8 的最近公共祖先是 6。
2024-07-18 22:11:14 628
原创 LeetCode 103、二叉树的锯齿形层序遍历---BFS---Deque
给你二叉树的根节点root,返回其节点值的。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
2024-07-18 21:29:56 334
原创 LeetCode 297 、二叉树的序列化与反序列化 ---DFS
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
2024-07-18 12:02:11 328
原创 LeetCode 236、二叉树的最近公共祖先---DFS
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(5节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。
2024-07-18 11:48:08 703
原创 LeetCode 105、从前序与中序遍历序列构造二叉树---DFS
给定两个整数数组preorder和inorder,其中preorder是二叉树的inorder是同一棵树的,请构造二叉树并返回其根节点。
2024-07-18 11:26:02 391
互联网面试,华为OD,leetcode题库,常用数据结构和算法汇总,很全,C++实现
2024-08-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人