- 博客(995)
- 收藏
- 关注
原创 随机链表的复制
给你一个长度为n的链表,每个节点包含一个额外增加的随机指针random,该指针可以指向链表中的任何节点或空节点。构造这个链表的。深拷贝应该正好由n个节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的next指针和random指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。。例如,如果原链表中有X和Y两个节点,其中。那么在复制链表中对应的两个节点x和y,同样有。返回复制链表的头节点。用一个由n个节点组成的链表来表示输入/输出中的链表。
2025-04-04 15:38:04
209
原创 反转链表 II
给你单链表的头指针head和两个整数left和right,其中。请你反转从位置left到位置right的链表节点,返回。[5]你可以使用一趟扫描完成反转吗?
2025-04-04 15:26:51
464
原创 插入区间
升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。你可以创建一个新数组然后返回它。按照区间起始端点排序的区间列表。表示另一个区间的开始和结束。个区间的开始和结束,并且。
2025-04-02 21:02:53
249
原创 宝石组合
在一个神秘的森林里,住着一个小精灵名叫小蓝。有一天,他偶然发现了一个隐藏在树洞里的宝藏,里面装满了闪烁着美丽光芒的宝石。这些宝石都有着不同的颜色和形状,但最引人注目的是它们各自独特的 “闪亮度” 属性。每颗宝石都有一个与生俱来的特殊能力,可以发出不同强度的闪光。小蓝共找到了 NN 枚宝石,第 ii 枚宝石的 “闪亮度” 属性值为 HiHi,小蓝将会从这 NN 枚宝石中选出三枚进行组合,组合之后的精美程度 SS 可以用以下公式来衡量:其中 LCM 表示的是最小公倍数函数。
2025-04-01 22:31:59
236
原创 握手问题
小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手 (但这 7 人与除这 7 人以外的所有人进行了握手)。请问这些人之间一共进行了多少次握手?注意 A 和 B 握手的同时也意味着 B 和 A 握手了,所以算作是一次握手。
2025-04-01 22:23:41
162
原创 寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回所在位置即可。你可以假设。你必须实现时间复杂度为O(log n)的算法来解决此问题。
2025-03-31 13:50:27
89
原创 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为。
2025-03-30 22:29:08
286
原创 多数元素
给定一个大小为n的数组nums,返回其中的多数元素。多数元素是指在数组中出现次数⌊ n/2 ⌋的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。32。
2025-03-30 21:14:32
734
原创 删除有序数组中的重复项 ||
给你一个有序数组nums,请你删除重复出现的元素,使得出现次数超过两次的元素,返回删除后数组的新长度。不要使用额外的数组空间,你必须在并在使用 O(1) 额外空间的条件下完成。为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下://是以“引用”方式传递的。也就是说,不对实参做任何拷贝// 在函数里修改输入数组对于调用者是可见的。// 根据你的函数返回的长度, 它会打印出数组中的所有元素。
2025-03-30 20:19:15
411
原创 删除有序数组中的重复项
给你一个的数组nums,请你删除重复出现的元素,使每个元素,返回删除后数组的新长度。元素的应该保持。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为knumsnumsknumsnumsnumsk系统会用下面的代码来测试你的题解:// 输入数组// 长度正确的期望答案// 调用i < k;i++) {如果所有断言都通过,那么您的题解将被。
2025-03-30 19:54:31
415
原创 合并区间
以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
2025-03-27 22:15:09
265
原创 简化路径
给你一个字符串path,表示指向某一文件或目录的 Unix 风格(以'/'开头),请你将其转化为。'.''..''//''///''/''...''....'返回的'/''/''/''.''..'返回简化后得到的。
2025-03-19 22:56:18
512
原创 分布式初步介绍
一个工程拆分了很多模块,每一个模块独立部署运行在一个服务器主机上,所有服务器协同工作共同提供服务,每一台服务器称作分布式的一个节点,根据节点的并发要求,对一个节点可以再做节点模块集群部署。
2025-03-19 17:50:54
775
原创 单机的初步介绍
把用户管理,好友管理,群组管理,消息管理,后台管理等模块构成我们的聊天服务器。后台管理有广播消息,公告消息,活动消息等功能业务。假设这个服务聊天器有5个模块,每个模块有几十上百个功能业务,这一套项目编译得花2个小时,部署得花3个小时。有些模块是CPU密集型的,这些模块应该部署在CPU资源非常好的机器上,有些模块是I/O密集型的,这些模块应该部署在内存大,带宽好的机器上,不需要太强的CPU资源。不同模块属于不同的型,对硬件的需求不一样,打包在一套机器上,只能综合所有模块,提出平衡的供给需求,没办法针对性。
2025-03-19 17:33:15
184
原创 40亿个号码如何去重?
很显然,直接用bitmap, 标记这40亿个QQ号码的存在性,然后从小到大遍历正整数,当bitmapFlag的值为1时,就输出该值,输出后的正整数序列就是排序后的结果。这是一个unsigned char类型,可以看到,共有8位,取值范围是[0, 255],如上这个unsigned char的值是255,它能标识0~7这些数字都存在。很自然地,最简单的方式是对所有的QQ号码进行排序,重复的QQ号码必然相邻,保留第一个,去掉后面重复的就行。很显然,只有123,567,890存在,所以这也就是去重后的结果。
2025-03-19 17:06:07
974
原创 Kruskal克鲁斯卡尔算法
我们先判断A-D,数组0号下标的值是2,0可以到达2,即A-C是连着的,然后我们看2,2可以到达5,即C-F是连着的,我们再来看5,是-1,5走不了,即F走不了,也就是说,最终是0可以走到5,即A可以走到F,我们现在看数组下标为3的值是5,即3可以到达5,即D可以到达F,即A-F,D-F,A和D在连接之前就可以走到同一个位置了,连接以后,肯定就形成回路了。然后我们选择此时权值最小的边:B-E,我们先判断,我们看数组1号下标的值是-1,数组4号下标的值也是-1,说明B和E在连接之前,哪也去不了。
2025-03-18 19:45:24
857
原创 最小生成树Prim普里姆算法
U放的是已经选好的点,V集合放的是未选好的点。首先选择权值最小的节点。我们选择从A开始,A-B,A-C,A-D中,权值最小的边是A-C,加入到最小生成树当中。把C加入到U集合中,也就是选进去了。然后把剩余顶点(BDEF)的权值都和C算一下,如果谁和C的权值,比它原本和A的权值更小,就更新一下。
2025-03-18 19:00:35
305
原创 无重复字符的最长子串
给定一个字符串s,请你找出其中不含有重复字符的的长度。3因为无重复字符的最长子串是"abc",所以其长度为 3。1因为无重复字符的最长子串是"b",所以其长度为 1。3因为无重复字符的最长子串是"wke",所以其长度为 3。请注意,你的答案必须是的长度,"pwke"是一个子序列,不是子串。
2025-03-17 20:44:46
322
原创 长度最小的子数组
大于等于目标值时,尝试右移左指针以缩小子数组长度。每次右移左指针时,更新最小窗口长度,并减少。使用滑动窗口(双指针)技术来寻找满足条件的最短子数组。 O(n),每个元素最多被访问两次(左指针和右指针各一次)。未被更新,说明不存在符合条件的子数组,返回0;找出该数组中满足其总和大于等于。从左到右遍历数组,将当前元素加入。如果不存在符合条件的子数组,返回。是该条件下的长度最小的子数组。记录最小长度,初始为极大值。 O(1),仅使用常数空间。个正整数的数组和一个正整数。用于记录当前窗口的和,
2025-03-17 20:26:25
238
原创 三数之和
不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。答案中不可以包含重复的三元组。唯一可能的三元组和不为 0。唯一可能的三元组和为 0。,判断是否存在三元组。
2025-03-17 20:11:42
639
原创 倒排索引结构分析
它首先在这些文档看, 看一下search和google在这个文档里的位置,有没有哪一个位置是前后的,比如说,search是10,google是11,就说明这2个关键字是连续出现的,和用户的搜索的匹配度是最高的,就优先呈现,而且关键字的前后的备注信息,就是从这2个词的前后拿一些信息作为搜索结果呈现的摘要信息。然后因为用户搜索的是“search google”,此时搜索引擎分别找到这2个关键字对应的倒排项后,会对这2个关键字的倒排项进行取交集。这2个倒排项给用户呈现结果的时候,是怎么样呈现的?
2025-03-16 19:11:31
423
原创 正排索引&倒排索引
在这个表里通过添加1个标志来表示这个关键字是否在当前文档里出现。实际上,不仅仅用是否存在来记录1或者0,还可以记录i在这个p1文档出现了,具体出现在哪个位置,出现了多少次,这里的1就包含了在p1文档里的详细的信息。如果建立正排索引,当去搜索“search”这个关键字的时候,实际上,通过正排索引是不能直接知道search这个关键字在哪些文档里面的。
2025-03-16 18:10:44
866
原创 倒排索引理论
在打开百度,或者是谷歌,360浏览器,输入关键字以后,浏览器作为客户端把关键字发到对应的搜索引擎的服务器server端,服务器去分析这个关键字,在全网的所有网页html中(几千万,上亿个文件)中快速搜索出想要的内容,输一个关键字,敲一个回车,很快的所有的搜索结果都出来了,不到1秒的时间内搜索几千万个网页。在自己的电脑上去搜索一个文件,速度却非常的慢,有时候几十分钟都搜索不出来。
2025-03-16 17:57:13
240
原创 字符串模式匹配-KMP算法(4)
如果按照之前讲的KMP方法这一步也是没有并要的。j和首元素都是g是相同,g和上面对应的d不相同,你移到后面,此时g和d肯定也是不相同的,没必要比较。C和F比对失败,查看next数组C对应的k值是2,更新j=2之前是ABC,C和F比对失败,现在又还是ABC,C和F比对。这样比较就没有意思了说明前面的ABC和后面的ABC是一样的,当前C与F比对失败了,前面的移过来,也肯定是C与F比对,肯定也失败。此时C在next数组就不记录2了,这个公共子串就不要了,k回退也就是说公共串不需要AB这么长。
2025-03-15 22:43:11
505
原创 字符串模式匹配-KMP算法(2)
当我们第一次比较失败了,i5j的时候,i不变,此时查看next数组中x字符对应的k值,是2,更新j=2,进行比较下去。d前面,e前面,x前面都没有公共子串,k都是k=0。b前面是:abca,公共子串是a,P0到P0,根据。a前面有3个元素abc,但是没有公共子串,k=0。b前面只有1个字符,就没有公共子串了,k=0。c前面只有2个元素ab,没有公共子串,k=0。c前面只有2个字符,也没有公共子串,k=0。b前面只有1个元素a,没有公共子串,k=0。子串的第一个元素a,k=-1。x前面是abcab,k=2。
2025-03-15 20:39:19
217
原创 字符串模式匹配-BF算法的缺点
因为BF算法对我们在字符比较失败之前的比对成功的字符信息没有存储,每次就是回退到原来比较的位置上后一个位置开始重新比较。因为原本对应的abcde是相等的,现在进行第二次比较的时候回到主串的第2个位置开始比较下去,肯定是不相等的。比较失败,把j重置为2。
2025-03-15 20:31:16
301
原创 字符串模式匹配-KMP算法(1)
就回退一下,看“ABCDAB"当中有没有可以局部匹配的信息。最长公共串是AB2个长度,然后我们把子串的第2+1个元素后移到当前比对失败的元素的位置上,然后开始和主串比较。如果比到不相同了,就看此时比对好的子串的部分的除去当前和主串不一样的元素,前面的部分进行看,有没有最长公共子串,然后把子串的第(最长公共子串的长度+1)的元素后移到当前比对失败的元素的位置上。
2025-03-15 20:23:52
1006
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人