- 博客(69)
- 收藏
- 关注
原创 有序数组中的单一元素(二)
尽管这个解决方案可行,但是问题中要求我们使用时间复杂度在 O(log n) 的解决方案。因此,该解决方案还不够好。我们可以使用线性搜索来检查数组中的每个元素,直到找到单个元素。时间复杂度:O(n)。我们的线性搜索只查看每个元素一次。空间复杂度:O(1),只使用了常数的额外空间。
2026-01-04 08:24:09
170
原创 有序数组中的单一元素(一)
我们留下一定的时间给大家思考,下篇文章小编将与大家分享解决方案。当然,方法可能不止一种,大家可以开动脑筋,找寻自己的解题思路哦~给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。您的方案应该在 O(log n) 时间复杂度和 O(1) 空间复杂度中运行。
2026-01-03 18:19:10
245
原创 经典算法题型之零钱兑换(三)
我们可以推到出 DP 公式为 amount = x: dp[x] = dp[x] + dp[x - coin],其中 coin = 2 美分,是当前添加硬币的价值。同理 amount = 3 的组合数量等于 amount = 1 的组合数量,即 0。让我们用一种硬币做进一步考虑:2 美分。
2025-12-31 08:23:45
148
原创 经典算法题型之零钱兑换(二)
让我们举一个例子:amount = 11,可用硬币面值有 2 美分,5 美分和 10 美分。请注意,硬币数量是无限的。这是经典的动态编程问题。
2025-12-29 18:24:07
145
原创 经典算法题型之复数乘法(一)
返回表示它们乘积的字符串。注意,根据定义 i 的平方=−1。留一点时间给大家自行思考,下篇文章小编与大家一起来聊聊解题思路!给定两个表示复数的字符串。
2025-12-20 20:11:46
212
原创 详谈:解释器模式(四)
在 Number 类的构造函数中,先将传入的字符转换为对应的数字。在解释时将转换后的数字返回即可。在此抽象父类中,我们存入了两个变量,表达计算符左右两边的表达式。
2025-12-15 19:37:53
278
原创 详谈:解释器模式(三)
计算符左右两边可能是单个数字,也可能是另一个计算公式。但无论是数字还是公式,两者都有一个共同点,那就是他们都会返回一个整数:数字返回其本身,公式返回其计算结果。所以我们可以根据这个共同点提取出一个返回整数的接口,数字和计算符都作为该接口的实现类。在计算时,使用栈结构存储数据,将数字和计算符统一作为此接口的实现类压入栈中计算。上文已经说到,数字和计算符都属于表达式的一部分,他们的共同点是都会返回一个整数。从表达式计算出整数的过程,我们称之为。
2025-12-15 08:36:41
297
原创 详谈:解释器模式(二)
计划的确可行,但这实在太面向过程了,众所周知面向过程编程会有耦合度高,不易扩展等缺点。接下来我们尝试按照面向对象的写法来实现这个功能。按照面向对象的编程思想,我们应该为公式中不同种类的元素建立一个对应的对象。看到这个需求,我们很容易想到一种写法:将输入的字符串分割成单个字符,把数字字符通过。转换为数字,再通过计算符判断是加法还是减法,对应做加、减计算,最后返回结果即可。公式中仅有这两种元素,其中对于数字的处理比较简单,只需要通过。将中文名翻译成阿拉伯数字即可。
2025-12-14 18:03:12
369
原创 详谈:解释器模式(一)
我国 IT 界历来有一个汉语编程梦,虽然各方对于汉语编程争论不休,甚至上升到民族大义的高度,本文不讨论其对与错,但我们不妨来尝试一下,定义一个简单的中文编程语法。解释器模式较为晦涩难懂,但本文我们仍然深入浅出,通过一个简单的例子来学习解释器模式:使用中文编写出十以内的加减法公式。在设计模式中,解释器模式就是用来自定义语法的,它的定义如下。
2025-12-14 15:42:33
394
原创 常见进制介绍以及之间的转换(二)
一般情况下,在数字后面用特点的字母(下标)表示该数的进制 二进制;B 十进制:D(可以省略O) 八进制:O 十六进制:H 同时也可以用数字后面加进制来表示。
2025-12-13 13:45:00
431
原创 C语言知识点之进制学习(一)
如大家所了解的,进制是一种计数的方式,数值的表示形式。进制即是进位计数制。是用一组固定的符号和统一的规则来表示数值的方法。生活中常见的进制有十进制、二进制、八进制、十六进制。在计算机中,数据都是以二进制形式存储的。进制主要包括三个部分:数位、基数、位权。
2025-12-13 09:23:41
300
原创 程序员:微软的技术面试主要考察方向探讨
当然是多多益善咯~ 当然,如果你之前搞过 ACM 或者 NOIP,你可能只需要练练手,找回当年的感觉就行了。做完题目就算 AC 了,也要参考学习一些其他人的解决方案,开阔自己的思路。无论你是否在外企工作,当遇到技术问题时,用英语在 Google 或者 Bing 进行技术相关内容的搜索是必备的能力。很多第一手的技术文档或是博客都是英文,如果你没有用英语进行学习的能力,很难成为一名真正优秀的程序员。如果没有自己的开源项目,积极地参与到其他开源项目,也是个很好的选择,可以发 PR 也可以提 Issue。
2025-12-12 14:25:11
429
原创 摄影师必备Lightroom修图软件最新版下载与安装指南
强大的照片编辑功能:提供丰富的调整工具,包括曝光度、对比度、高光、阴影、白色色阶、黑色色阶等,可以精确控制照片的明暗和色彩;高效的照片管理:能够管理庞大的照片图库,支持快速浏览、分类、标注和搜索数以千计的照片,极大地提升了工作效率;便捷的批量处理:可以对多张照片应用相同的调整参数,大大节省了处理大量照片的时间。。
2025-12-11 18:21:36
1181
原创 经典算法题详解之统计重复个数
现在给你两个非空字符串 s1 和 s2(每个最多 100 个字符长)和两个整数 0 ≤ n1 ≤ 和 1 ≤ n2 ≤。现在考虑字符串 S1 和 S2,其中 S1=[s1,n1] 、S2=[s2,n2]。如果我们可以从 s2 中删除某些字符使其变为 s1,则称字符串 s1 可以从字符串 s2 获得。例如,根据定义,"abc" 可以从 “abdbec” 获得,但不能从 “acbbe” 获得。由 n 个连接的字符串 s 组成字符串 S,记作 S = [s,n]。
2025-12-11 12:55:25
347
原创 经典算法详解——去除O点
假定我们已经从起点到达了某个 M 了,接下来需要去其他的 O 点搬石头接着触发其他的机关,这是一个 M-O-M' 的路线。同样的道理,对于给定的 M',中间的 O 也是固定的。即给定 M 和 M',我们可以确定一个 O,使得 M-O-M' 距离最短。在最开始,我们一定会从 S,经过某一个 O,到达某一个 M。那么对于特定的 M 来说,我们枚举 O,并计算 S-O-M 的最短距离。那么如果我们要从起点到达 M,一定会选择这条距离最短的路。其中 O 点是最多的,我们希望进一步缩小我们的考虑范围。
2025-12-10 15:35:26
548
原创 萌新如何学好动态规划
例如我们固定右端点是 3,那么左端点就从 3 移动到 1,边移动边累加答案,就可以在移动过程中计算出区间【3,3】、【2,3】 、【1,3】 的答案了。仔细思考不难发现,我们可以枚举区间右端点,然后固定右端点,左端点不断向左移动,边移动边累加,就可以将时间复杂度优化到。一直是大厂面试时最频繁出现的算法题,主要原因在于此类问题灵活度高,思维难度大,没有很明显的套路做法。枚举所有区间,暴力累加区间中宝石的价值,最后选一个价值最大的区间。显然有些无法接受,因此想想有没有办法优化,比如优化掉暴力累加的部分。
2025-12-09 20:09:23
221
原创 蚁群算法的认识与运算过程
假设有两条路可从蚁窝通向食物,开始时两条路上的蚂蚁数量差不多:当蚂蚁到达终点之后会立即返回,距离短的路上的蚂蚁往返一次时间短,重复频率快,在单位时间里往返蚂蚁的数目就多,留下的信息素也多,于是会吸引更多蚂蚁过来,导致留下更多信息素。例如蚁群可以在不同的环境下,寻找最短到达食物源的路径。这是因为蚂蚁会在其经过的路径上释放一种可以称之为“信息素”的物质,蚁群内的蚂蚁对“信息素”具有感知能力,它们会沿着“信息素”浓度较高路径行走,而每只路过的蚂蚁都会在路上留下“信息素”,形成了一种正反馈的机制。
2025-12-07 19:43:48
360
原创 经典算法题剖析之剧情触发时间(三)
简单来说,对于一个剧情要求 (C, R, H) 来说,假设 C 要求是在第 x 天满足的,R要求是在第 y 天满足的,H 要求是在第 z 天满足的。以上只是单属性的做法,原始题目中给了多达三种属性。但是实际上,每一种属性的满足是。1.根据简化问题,分别只考虑三种属性,计算各剧情三种属性的触发时间。而每一个属性在什么时间满足,正好是我们前面提到的。2.根据上式计算各剧情的最终触发时间。
2025-11-25 19:55:48
248
原创 经典算法题剖析之剧情触发时间(二)
如果只有一种属性,显然我们只需要计算每一天的属性情况,最后对于所有的 requirements 都在属性列表中进行二分查找(现在只有一种属性了),就能知道他是在哪一天完成的了。原问题中有三种不同的属性,三种属性均满足要求才会触发相应剧情。接着,我们遍历每一天的属性情况,由于 requirements 也是排序过的,我们只需要看队首有多少元素满足当前触发要求,满足则触发就可以了。还可以换一个思路,计算完每一天的属性情况后,我们将 requirements 中的单属性也同样进行排序,放入一个队列中。
2025-11-24 17:49:12
199
原创 经典算法题剖析之剧情触发时间(一)
这个二维数组的每个元素是一个长度为 3 的一维数组,对于某个剧情的触发条件 c[i], r[i], h[i],如果当前 C>= c[i] 且 R >= r[i] 且 H >= h[i],则剧情会被触发。根据所给信息,请计算每个剧情的触发时间,并以一个数组返回。第 3 天,C = 14,R = 22,H = 12,此时触发剧情 2。第 2 天,C = 4,R = 13,H = 4,此时触发剧情 0。解释:初始时,C = 0,R = 0,H = 0。第 1 天,C = 2,R = 8,H = 4。
2025-11-24 08:43:56
398
原创 多线程之并发大师Doug Lea
而 synchronized 又是一个很重的操作,为了优化 synchronized 的效率,一代又一代的程序员们做了非常多的努力,但并发始终是一个艰难又让人头疼的问题。刚听 NPR 吹了半天,以为这个工具包会有多牛的你,盯着这段代码端详了半天,却根本没看出有多大区别,忍不住吐槽道:“恕我直言,看起来完全没有那么神奇,只是把 synchronized 关键字换成了 ReentrantLock 类而已。作为一名年轻的 Java 工程师,你实在很难代入 NPR 的情绪中,只是简单地说道:“哦,那他很棒棒哦!
2025-11-21 07:30:00
551
原创 填充每个节点的下一个右侧节点指针(七)
1.从根节点开始,由于第 0 层只有这一个节点,所以不需要连接。直接为第 1 层节点建立next指针即可。该算法中需要注意的一点是,当我们为第 N 层节点建立next指针时,处于第 N - 1 层。当第 N 层节点的next指针全部建立完成后,移至第 N 层,建立第 N + 1 层节点的next指针。因此我们只需要知道这一层的最左节点,就可以按照链表方式遍历,不需要使用队列。2.遍历某一层的节点时,这层节点的。
2025-11-20 13:37:26
159
原创 填充每个节点的下一个右侧节点指针(六)
1.第一种情况是连接同一个父节点的两个子节点。它们可以通过同一个节点直接访问到,因此执行下面操作即可完成连接。2.第二种情况在不同父亲的子节点之间建立连接,这种情况不能直接连接。指针访问同一层的所有节点,因此可以使用第 N 层的。如果每个节点有指向父节点的指针,可以通过该指针找到。指针后,再建立第 N+1 层节点的。指针,为第 N+1 层节点建立。一棵树中,存在两种类型的。第 N 层节点之间建立。
2025-11-20 08:26:23
335
原创 填充每个节点的下一个右侧节点指针(五)
3.伪代码中 while 循环迭代的是树的层级,内部的 for 循环迭代的是一个层级上所有的节点。由于可以访问同一层级的所有节点,因此能够建立指针连接。4. for 循环弹出一个节点时,同时把它的孩子节点加入队列。因此队列中每个层级的元素也是顺序存储的。可以通过已有的顺序建立 next 指针。
2025-11-19 12:19:46
297
原创 填充每个节点的下一个右侧节点指针(四)
元素数量,对应树中一个层级元素的数量。然后从队列中处理对应数量的元素。完成后,这一层级所有的节点都被访问,队列包含下一层级的。2.首先在队列中加入根节点。因为第 0 层级只有一个节点,不需要建立连接,直接进入。该方法的每一步都需要记录当前队列中。该方法使用嵌套循环结构,避免了方法二中的。
2025-11-17 17:00:00
312
原创 填充每个节点的下一个右侧节点指针(三)
1.创建一个辅助队列 Q,可以通过多种方式实现层序遍历,尤其是在在识别特定节点的时候。元素,标记当前层级结束,下一层级开始。但是这种方法会创建与层级数量相同个数的。2.可以使用一个标记分离不同层级之间的节点。通常情况下,在队列中插入一个。元素,造成过多内存消耗。
2025-11-17 12:41:28
362
原创 填充每个节点的下一个右侧节点指针(二)
树和图的两种基本遍历方法。一种是深度优先方法,例如:每次只遍历一个分支;另外一种是广度优先方法,例如:先遍历完这一层再进入下一层。树的深度优先遍历又可以分为先序遍历 preorder、中序遍历 inorder 和后序遍历postorder。树的广度优先遍历基于节点的层级 level 概念。一个节点的层级取决于该节点的深度或者到根节点的距离。需要先遍历完同一层级的所有节点,才能进入下一层级。很明显,此问题应该使用广度优先遍历解决。使用广度优先遍历,可以将同一层级的所有节点连接起来。
2025-11-15 17:56:53
302
原创 填充每个节点的下一个右侧节点指针(一)
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为。给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。初始状态下,所有 next 指针都被设置为。你只能使用常量级额外空间。
2025-11-14 16:47:50
354
原创 【AI大模型】使用Assistants API
所以,我们还是有必要学习和了解 RAG 的实现原理以及 RAG 系统的自主搭建。支持文件最大 512M,格式包括.pdf, .md, .docx等。1)针对小文件直接把文件内容添加到 Prompt 中;2)对于大文件会通过向量检索。
2025-10-26 09:08:53
294
原创 大模型技术的核心之“想象力巨大”
核心就是两点 :效率高、想象力巨大。上篇文章,小编与大家用举例的方法讲解了“效率高”;本文主要来介绍后者,即:想象力巨大。
2025-10-26 07:30:00
319
原创 除自身以外数组的乘积(三)
好了,今天的文章分享和介绍到这里就结束了,希望认真阅读全文的小伙伴,都能有所收获哦!当然了,如果在学习过程中遇到问题,也欢迎一起探讨!尽管上面的方法已经能够很好的解决这个问题,但是不是常数的空间复杂度。由于输出数组不算在空间复杂度内,那么我们可以将。数组在用输出数组来计算,然后再动态构造另一个。让我们来看看基于这个思想的算法。接上篇文章,今天我们用另一种解题方法(思路),来解决“”这个经典算法题,大家随小编一起来看看吧!除自身以外数组的乘积。
2025-10-25 08:28:35
346
原创 除自身以外数组的乘积(二)
这似乎是一个简单的问题,可以在线性时间和空间内解决。可以先计算给定数组所有元素的乘积,然后对数组中的每个元素 ,将乘积除以 来求得除自身值的以外的数组乘积。上篇文章,我们给大家留了一道算法题:除自身以外数组的乘积,并预留了足够的时间给大家思考作答,本文小编带大家以我的视角和解题思路来解答本题。我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是可以利用索引处左侧的所有数字乘积和右侧所有数字的乘积相乘得到答案。对于给定索引 i,我们将使用它左边所有数字的乘积乘以右边所有数字的乘积。
2025-10-24 20:31:45
313
原创 除自身以外数组的乘积(一)
给定长度为 n 的整数数组 nums,其中 n> 1,返回输出数组 output ,其中output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。说明:请 不要使用除法,且在O(n)时间复杂度内完成此题。我们留一定的时间给大家思考,下篇文章再与大家分享小编的。
2025-10-24 08:58:30
407
原创 K个一组翻转链表(二)
接着不断地重复之前的步骤,直到把这组当中的 k 个元素翻转完毕。当完成了局部的翻转后,prev 就是最终的新的链表头,curr 指向了下一个要被处理的局部,而原来的头指针 head 成为了链表的尾巴。这道题是力扣第24题「两个一组翻转链表」的扩展,即当k = 2时,第25题就变成了第24题。在翻转链表的时候,我们可以借助三个指针:prev、curr、next,分别代表了前一个节点、当前节点和下一个节点。首先我们要确保给定的链表长度是大于 k 的,这样我们才能够继续,否则直接返回原链表就可以了。
2025-10-23 12:08:34
221
原创 K个一组翻转链表(一)
好了,今天的文章分享和介绍到这里就结束了,希望认真阅读全文的小伙伴,都能有所收获哦!当然了,如果在学习过程中遇到问题,也欢迎一起探讨!如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。
2025-10-23 08:37:33
215
原创 有效的数独(二)
好了,今天的文章分享和介绍到这里就结束了,希望认真阅读全文的小伙伴,都能有所收获哦!当然了,如果在学习过程中遇到问题,也欢迎一起探讨!上篇文章我们介绍了经典算法题有效的数独的题目描述,本文,小编将与大家一起来看看解题思路,分享出来。可以利用 value -> count 哈希映射来跟踪所有已经遇到的值。如何确保行 / 列 / 子数独中没有重复项?实际上,所有这一切都可以在一次迭代中完成。如果没有,则保留此值以进行进一步跟踪。如果出现重复,返回 false。一个简单的解决方案是遍历该。
2025-10-21 16:49:34
225
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅