自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法——栈

位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。给你一个以字符串表示的非负整数。

2024-04-11 20:45:51 202

原创 算法——倍增

思路类似于动态规划,ancestors[i][0]即2的0次方,即第一个 祖先,parent[i];思路:ancestors[i][j]表示第i个节点的第2的k次方个祖先。查询时,因为是表示2的j次方个祖先,所以对于当前k,需逐位判断。树以父节点数组的形式给出,其中。个祖先节点是从该节点到根节点路径上的第。暴力逐层向上找会卡时间。

2024-04-09 22:07:15 307

原创 笔试:4.6美团笔试(硬件开发方向)

接下来使用两个指针指向b,c,如果指针值相等则判断下一个,如果不等则说明在当前位置b,c中有一个删除了a中的一个数字。在删除的数组中,当前指针所指的数据必然为另一个数组中下一个数据(关于这点下面详细解释),将另一个数组中的数据插入删除的数组即可。关于上面的解释:题目说保证有唯一解,所以删除的两个数字必然不可能连续,如果连续,则我们不可能知道这两个数字在原数组中的顺序,不知道谁先谁后。1. 他完全记得数组 b 的样子,并且 b 是数组 a 删除了某个 a_i 后,剩余的部分做前缀和并打乱的结果。

2024-04-06 11:25:01 567

原创 算法——最小生成树

对 u 相邻的所有节点 v,更新 dist[v]=min(dist[v],g[u][v]),并更新堆中的相应元素。3.在所有与最小生成树集合相邻的边中,选择权重最小的边和它连接的未访问节点。每次从堆中取出 dist 值最小的元素 (d,u),将u加入集合。使用结构体存图,结构体中存放点,点,以及这两个点之间边的长度。4.将该边和节点加入最小生成树集合,并将该节点标记为已访问。重复步骤3和步骤4,直到最小生成树集合包含了图中的所有节点。2.将该起始节点加入最小生成树集合,并将其标记为已访问。

2024-04-03 12:10:03 303

原创 算法——逆波兰式

对于每个元素,它检查是否是一个操作符(“+”、“-”、“*” 或 “/”)。如果是,它就从栈中弹出两个元素,执行相应的操作,然后将结果推回到栈中。如果元素是一个数字,它就将其推到栈中。数字存放在数字栈,字符串存放在字符串栈,遇到右括号时候弹出一个数字栈,字母栈弹到左括号为止。输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数。给定一个经过编码的字符串,返回它解码后的字符串。在处理所有元素后,栈顶的元素就是表达式的结果。

2024-04-02 20:22:34 283

原创 C++:左值和右值

右值通常表示临时对象或者那些即将被销毁的对象,它们没有持久的存储期,因此不能被取地址。右值通常出现在赋值操作的右侧,并且它们的值在表达式求值结束后就不再需要了。如一个函数传入一个string对象的引用,但是在传入参数时传入一个substr,substr的返回值为一个临时变量,没有地址,无法作为函数参数传入。左值表示的是对象在内存中的位置,因此它们有持久的存储期,可以通过取地址操作符。左值通常表示一个具体的对象或变量的身份,它们可以出现在赋值语句的左边,因为它们的值可以被改变。int x = 10;

2024-04-02 20:01:41 184

原创 算法——所有可能的真二叉树:递归

然后使用数组接受左右子树构造出来的所有二叉树的根节点,遍历左右子树所有的可能性,让根节点分别指向左右节点即可。最后将根节点加入答案集中。对于左子树和右子树分别递归构造,左子树从1开始一直到n-2,右子树从n-2开始一直到1;因为要是真二叉树,节点树必为奇数个。

2024-04-02 11:45:07 137

原创 算法——矩阵:对于边界元素的处理

对于边界元素,可以设置两个数组,index_row,index_col,遍历到一个格子需要搜索其周围格子时,使当前格子的值一次加上数组的值,如果发现加上之后的值越界了则跳过此格子。题目简述:扫雷,点击一个格子,返回整个地图的下一个状态。这样写很清晰,节省了很多代码量。

2024-04-02 00:33:30 284

原创 算法——搜索:两个水壶得到指定容积的水,哈希表hash_function

第一个模板参数指定集合中元素的类型为PII,而第二个模板参数 decltype(hash_function) 指定了哈希函数类型,即使用之前定义的 hash_function。即 auto hash_function = [](const PII& o) {return hash<int>()(o.first) ^ hash<int>()(o.second);因此,这段代码的目的是创建一个无序集合 seen,用于存储PII类型的对象,并使用自定义的哈希函数来计算元素的哈希值。需要使用哈希表去重。

2024-04-01 21:27:56 392

原创 算法——矩阵,被围绕的区域

最开始也是考虑使用dfs,对于矩阵中的每个点,如果能到达边界的O,则跳过继续dfs。否则如果上下左右四个方向都无法到达边界的O,则说明当前的无法到达,在一个set中记录他的行数列数。如果使用父节点记录当前节点的前一个节点,则如果父节点恰好通往边界O,会导致错误。如果当前点为O,则把O该为A,继续dfs。遍历完之后,再把矩阵中的O改为X,表示未与边界O相连。把矩阵中的A该为O,表示与边界相连的O,不变。注意dfs函数中,如果发现不是X不能直接else,而要判断是不是为O,为O才继续dfs。

2024-04-01 12:51:20 386

原创 算法——滑动窗口,按位或

想法是使用滑动窗口,左右两个指针,初始时左指针指向0右指针指向1,若两指针不等,则将右边复制到左边。即可:如果子数组 OR 值大于等于 kkk,更新子数组长度的最小值。一个数组的按位或运算值是这个数组里所有数字按位或运算的结果。若两指针相等,则只需将右边指针右移指向下一个即可。子数组的长度,如果特别子数组不存在,那么返回。是数组里一段连续非空元素组成的序列。,返回删除后数组的新长度。如果一个数组中所有元素的按位或运算。删除重复出现的元素,使每个元素。非空子数组,它的起始位置为。,按位或运算结果最大,且。

2024-04-01 01:07:02 740

原创 笔试——3.31腾讯笔试

整体难度尚可,ac了三道半,第四题没什么时间了没怎么看。

2024-03-31 21:59:37 360

原创 算法——验证二叉树的前序序列化

序列化二叉树的一种方法是使用。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如。例如,上面的二叉树可以被序列化为字符串,其中代表一个空节点。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。每个以逗号分隔的字符或为一个整数或为一个表示null指针的'#'。你可以认为输入格式总是有效的"1,,3"不允许重建树。基于栈实现,遍历每个节点字符,入栈。

2024-03-31 17:12:00 261

原创 笔试——3.30网易

对于目标数量为8的时候,最少操作次数为8(Ctrl + A,Ctrl + C,Ctrl + V,Ctrl + A,Ctrl + C,Ctrl + V,Ctrl + V,Ctrl + V)MT,其中0 < T < 100,0 < M1,M2…在各种App的广告中,我们经常能看到一个名为数字塔的游戏的“虚假”广告,游戏中,玩家具有一定的初始战斗力,需要挑战一个具有若干房间的塔楼。例如,对于目标数量为3的时候,最少操作次数为4(Ctrl + A,Ctrl + C,Ctrl + V,Ctrl + V).

2024-03-30 21:44:36 435

原创 笔试——3.30阿里控股集团

第二行输入一个长度为 n 的字符串 s 表示小鼠的颜色,第 i 个节点上小鼠的颜色为 s_i ,若 s_i 为 'B' 表示小鼠的颜色为黑色,若 s_i 为 'W' 则表示小鼠的颜色为白色。小红养了一些实验用的小鼠,其中一些是黑色的,一些是白色的,小鼠们住在一棵树上,每只小鼠都在这棵树的一个节点上。小红拿到了一个数组,她定义f(i)为:将第i个元素翻倍后,数组所有元素的按位异或的值。输出n行,每行输出一个整数,代表将第i个元素翻倍后,所有元素按位异或的值。输出q行,每行输出一个整数,代表询问的答案。

2024-03-30 21:40:06 508

原创 笔试——各种题目

1.Linux chmod命令:http://t.csdnimg.cn/yQKRx

2024-03-30 21:33:41 143

原创 算法——旋转数组从一个状态到另一个状态:广搜

对于每个状态,尝试所有可能的子魔方旋转操作,并生成新的状态。如果新状态等于目标状态,则返回当前的步数;我们可以使用广度优先搜索(BFS)算法来遍历所有可能的状态转换,直到找到目标状态或确定无法到达目标状态。在BFS中,我们维护一个队列来存储待探索的状态,以及一个集合来记录已经访问过的状态,以避免重复搜索。由于题目中提到的数字魔方允许数字重复,我们不能简单地依赖数字的位置来确定操作,而是需要跟踪每个数字的实际位置变化。初始化队列和集合:创建一个队列来存储待探索的状态,队列的初始元素为初始状态的字符串表示。

2024-03-30 13:46:33 216

原创 算法——动态规划:01背包

需要注意的是,最开始初始化时,dp[0][i]需要找到一个i等于数组第一个数字numd[0],该dp[0][i]为true,其余均为false,表示0到0范围内不存在该数字。或者如果由当前目标j减去当前所在的数组数据nums[i],若0到i-1范围内存在和为j-nums[i]的数,则加上当前数据正好和为j,满足条件。2.2 如果第i件物品放入背包,则f[i][j]=f[i-1][j-v[i]]+w[i]如果当前背包容量j<v[i],不能放入,则f[i][j]=f[i-1][j]

2024-03-30 00:45:22 362

原创 算法——图论:判断二分图(染色问题)

但是还是有问题,比如说有两群点以及一个单个的点,总共三个祖先节点,但是该单个点可以算作其中任何一群,所以是二分图,但是该程序会判断不是二分图。注释的代码为一开始使用的方法,在处理完每个节点之后,从头到尾遍历每一个节点,找出所有祖先的个数。最后的最后将整个代码完全使用set,使用两个set,set1和set2,但是代码逻辑上有点问题导致有几个用例无法通过,虽然绝大多数都能通过。后来干脆不管不连通点,先使用一个数组遍历标记每个点是不是不连通的,然后在最后求祖先节点的个数时,如果是不连通点则直接跳过。

2024-03-29 18:16:03 612

原创 算法——图论:路径,回溯

给你一个有n个节点的,请你找出所有从节点0到节点n-1的路径并输出(graph[i]是一个从节点i可以访问的所有节点的列表(即从节点i到节点存在一条有向边)。即给定邻接表求0到n-1的所有路径。自己的代码:dfs,来到当前节点先记录其路径。如果发现当前节点为最后节点则直接返回。否则,对当前节点的每个邻接节点不断dfs。dfs完成后,将当前节点从路径中删除并返回。注意:此题无需判断节点是否访问过,因为本题是有向图,对于某个节点,指向该节点可能有好几个节点,所以如果该节点只被访问一次无法得到所有路径。

2024-03-29 14:57:54 348

原创 算法——图论:拓扑排序

你这个学期必须选修numCourses门课程,记为0到。在选修某些课程之前需要一些先修课程。先修课程按数组给出,其中,表示如果要学习课程ai则先学习课程bi。[0, 1]01请你判断是否可能完成所有课程的学习?如果可以,返回true;否则,返回false。即图中不能有环。

2024-03-29 12:47:04 397

原创 面试——阿里淘天集团

13.http报文结构(请求行,请求头,请求体);为什么不把请求头的数据放到请求体,而是要放在请求头。Java中linklist和arrrylist的区别(不知道,说一直用的C++,但是学过Java,知道底层)6.说出几个排序算法(冒泡,选择,插入,快排,归并,堆排序),说出冒泡和快排的原理。2.Java垃圾回收算法(标记整理,标记清楚,复制,分代GC)11.数据库拆分(这个没答好,面试官提示分表分库,自己查)4.Java内存区域(程序计数器,栈,堆,方法区)12.tcp三次握手。

2024-03-29 10:26:19 244

原创 算法——图论:连通分量数量(深搜,光搜,并查集)

有n个城市,其中一些彼此相连,另一些没有相连。如果城市a与城市b直接相连,且城市b与城市c直接相连,那么城市a与城市c间接相连。是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个n x n的矩阵,其中表示第i个城市和第j个城市直接相连,而表示二者不直接相连。返回矩阵中的数量。(即求图的连通分量个数)

2024-03-29 00:40:03 708

原创 C++优先队列——priority_queue,函数对象,labmda表达式,pair等

头文件:#include内部使用堆来实现,在需要或得最大的几个值或最小的几个值而不关心整个数组的顺序时非常好用。

2024-03-28 18:54:51 1059

原创 笔试——阿里淘天3.27

less、greater二者为仿函数,即把类当作函数使用,本质上为类,内部重载了()运算符,所以可以当作函数。由于每一次都是数组中的最小值和bj操作,因此我们可以维护一个小根堆来存储他的动态分数,那么每次操作只需要弹出小根堆的堆顶元素,并将值加上bj,然后将其与数组中最大值取max即可。class Container = vector:Container是优先队列底层使用的存储结构,可以看出来,默认采用vector。class T:T是优先队列中存储的元素的类型。感觉好复杂,没写出来。

2024-03-28 11:22:03 604 1

原创 算法——最长重复子数组(动态规划)

dp[i][j] 表示,第一个数组的索引i与第二个数组索引j所在位置的元素,从两个数组该位置开始一直到最后相同元素的最大长度。显然如果该位置二者不相等则dp数组值为0.若相等,则weidp[i+1][j+1]+1,即该位置相等,至少为1,加上二者后一个位置的最大长度。一维数组 dp , dp[j] 是以 A[i-1], B[j-1] 为末尾项的最长公共子数组的长度。dp[i][j] 只依赖上一行上一列的对角线的值,所以我们从右上角开始计算。附上菜鸡自己的:(原来二维vector数组也是可以直接初始化的)

2024-03-26 20:53:34 173

原创 算法——滑动窗口

维护一个哈希表,哈希表最大长度为k+1,如果超过该长度则移除最前面的元素。不断判断直到哈希表内出现重复元素,即满足条件。前两个都能过,但是第二个显然效率低得多。第二个严格意义上还是暴力,不算滑动窗口。

2024-03-25 21:50:38 245

原创 关于vector的size,unsigned int类型

原因:nums.size()为无符号整数类型,无符号整数类型与int类型加减后结果仍然为无符号整数类型,所以会变成一个很大很大的正直(约为int最大值的二倍)。代码中,循环判断结束条件为nums.size()-length,可是一直报错,数组下标错误。正确应使用一个int临时变量记录该值,在循环判断中使用临时变量。实战中要注意此点,注意函数的返回值类型,防止溢出。平时写代码很少注意溢出,这次被遇上了。

2024-03-25 21:29:32 138

原创 算法——矩阵

注释部分为自己写的代码,使用前一种方式,使用边界,对于边界点和非边界点使用不同的边界处理逻辑。对于矩阵的题均可使用上述第一种方法,对于不同的点使用不同的边界。上述第二题还有一种方法,即使用不同的数字记录状态。如果从死变为或使用2,从活变为死使用1,在判断时如果周围节点等于1或-1即满足+1条件。最后遍历一遍矩阵把2,-1改为对应的值即可。对于每个圆圈,提前设定上下左右边界,并且每次处理完一条边后更改边界。矩阵的遍历,尤其是需要获得每个格子的周围信息时,多种条件判断显得尤其麻烦。

2024-03-25 18:58:27 481

原创 算法——深度优秀搜索和广度优秀搜索

【代码】算法——深度优秀搜索和广度优秀搜索。

2024-03-23 15:47:46 236

原创 C语言可变参函数

如果你需要在C语言中实现类似函数重载的功能,你可能需要使用不同的函数名来区分不同的函数,或者通过传递额外的参数或使用不同的参数类型来模拟这种行为。但是,请注意,这会增加代码的复杂性,并可能降低代码的可读性和可维护性。在C语言中,虽然不支持函数重载,但你可以使用可变参函数(variadic functions)来模拟接受不同数量参数的效果。可变参函数是指一个函数可以接受不同数量的参数,并在函数体内处理这些参数。在C语言中,函数名必须是唯一的,不能有两个或更多的函数具有相同的名称但参数列表不同。

2024-03-22 12:49:16 976

原创 算法——排序

【代码】算法——排序。

2024-03-22 01:13:56 162

原创 算法——树的最近公共祖先(微软面试)

我们可以用哈希表存储所有节点的父节点,然后我们就可以利用节点的父节点信息从 p 结点开始不断往上跳,并记录已经访问过的节点,再从 q 节点开始不断往上跳,如果碰到已经访问过的节点,那么这个节点就是我们要找的最近公共祖先。算法:从根节点开始遍历整棵二叉树,用哈希表记录每个节点的父节点指针。从 p 节点开始不断往它的祖先移动,并用数据结构记录已经访问过的祖先节点。同样,我们再从 q 节点开始不断往它的祖先移动,如果有祖先已经被访问过,即意味着这是 p 和 q 的深度最深的公共祖先,即 LCA 节点。

2024-03-15 15:13:08 334

原创 黑马程序员SSM系列课程——Spring(二)依赖注入

向一个类中传递数据有两种方式:普通方法和构造方法(不能new,只能通过对象传)。传递的数据分为两类,引用类型、简单类型(基本数据类型与String)。前一篇文章中,一个类中包含另一个类的实例,即为引用类型,bean配置中使用,前一个demo0表示成员变量的名字,后一个表示配置文件中bean对象,使用的是其引用。所以为ref。若为简单数据类型,则为value。前面将的是使用set方式注入引用类型。

2024-03-09 23:18:46 314

原创 黑马程序员SSM系列课程——Spring(一)

背景:企业中代码耦合度较高,若想修改代码,需要重新编译、打包、发布等一系列操作,较麻烦、解决方案:使用对象时在程序中不要主动使用new产生对象,转换为由外部提供对象。spring提供了一个容器,成为Ioc容器,充当Ioc思想中的外部。Ioc容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象 在容器中成为Bean。需要编写set方法,set方法由容器调用。第一个bookDao是类的成员变量名字第二个是引用,对另一个bean对象的引用,也在配置文件中定义。

2024-03-09 22:59:27 319

原创 黑马程序员JVM系列学习——原理篇(五)

ZGC原理ShenandoahGC

2024-03-07 16:26:00 278

原创 黑马程序员JVM系列学习——原理篇(四 )垃圾回收原理

多次回收之后,会出现很多老年代区,此时总堆占有率到大阈值(默认45%)时会触发混合 回收MixedGC,回收所有年轻代和部分(回收过多无法保证最大暂停时间)老年代的对象以及大对象区,采用复制算法。SATB:如果拍照时某个对象存活,后续引用链被断开了,则该对象本轮垃圾回收也不会被回收,会等到下一轮(防止垃圾回收后用户线程继续调用)。存在问题:年轻代只回收年轻代对象(Eden和Survivor),如果有老年代中的对象引用了年轻代中的对象,该怎么知道呢?然后标记处Eden区和Survivor区域中存活的对象。

2024-03-07 12:30:46 316

原创 黑马程序员JVM系列学习——原理篇(三)

1.在执行try时抛出的异常不是catch捕获的异常。上述第一个代码test只在方法内部被引用,没有逃逸。2.在执行catch过程中抛出了异常。解决方式:使用异常表。

2024-03-07 11:04:44 342

原创 黑马程序员JVM系列学习——原理篇(二)静态绑定和动态绑定

创建Cat对象并把其类型转化为Animal,调用该对象的eat方法,字节码文件中引用的是Animal类的eat方法(因为是Animal类型的对象),静态绑定只能通过常量池中的内容找到Cat里面的eat方法。invoke指令执行时,需要找到方法区中instanceklass中保存的方法相关的字节码信息,但是方法区中有很多类,每一个类有很多方法,通过静态绑定或动态绑定精准找到方法的位置。编译期间,invoke指令会携带一个参数符号引用,引用到常量池中的方法定义,方法定义中包含了类名+方法名+返回值+参数。

2024-03-06 23:44:13 347

原创 黑马程序员JVM系列学习——原理篇(一)

由于long和double占用8个字节,在 32位机器上,需要在栈上分配两个槽,64位分配一个槽,但是Java为了实现跨平台的特性,统一给这两种分配两个槽吗,即在64位机器上有一个槽的空间被浪费。同理,byte、boolean等也是,占一个字节,多余的字节浪费。浪费时间,但是避免了不同数据类型不同处理方式带来的时间开销。

2024-03-06 21:18:57 334

空空如也

空空如也

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

TA关注的人

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