- 博客(54)
- 收藏
- 关注
原创 最长特殊序列(二)
暴力解法中,生成两个字符串所有的子序列共 2的 n 个,将其存储在 hashmap 中,并记录每个子序列出现的次数。然后找出出现次数为 1 的最长子序列。如果不存在这样的子序列,返回 −1。
2025-12-23 21:32:32
195
原创 最长特殊序列(一)
可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。「最长特殊序列」定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。输入为两个字符串,输出最长特殊序列的长度。如果不存在,则返回 -1。给你两个字符串,请你从这两个字符串中找出最长的特殊序列。
2025-12-23 21:31:12
307
原创 经典算法题型之编辑距离(二)
简要概括题意,使用最少的操作使得「word1」与「word2」相同。很明显所要进行的操作是从左至右线性增长的,不难联想到最长公共子序列(LCS),因此我们令 f[i][j] 表示最少的操作使得 「word1」的前 i 个字符与「word2」的前 j 个字符相同。
2025-12-20 20:15:20
107
原创 三角形最小路径和(二)
考虑到「线性 DP」中 DP 状态沿着各个维度线性增长的这一特点,以及本题所求的从上到下的最小路径和,不难得出状态f[i][j] 表示从顶点出发到达第 行第 列这个点时的最小路径和。该模型的重要意义在于告诉了我们二维坐标系中也是可以进行「线性 DP」的,而且我们可以直接根据坐标点设置「DP 状态」。该模型即为「线性 DP」基础模型之一:数字三角形,即最常见的二维坐标系「DP 模型」。
2025-12-19 17:30:29
125
原创 三角形最小路径和(一)
相邻的结点 在这里指的是「下标」与「上一层结点下标」相同或者等于「上一层结点下标 + 1 」的两个结点。如果你可以只使用O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。
2025-12-19 17:23:24
251
原创 浅谈:算法中的斐波那契数(七)
这里有一个链接,可以进一步了解斐波那契序列和黄金分割比之间的关系;我们可以只能用常数时间和常数空间得到斐波那契数。使用黄金分割率计算第 N 个斐波那契数。
2025-12-18 09:00:00
223
原创 浅谈:算法中的斐波那契数(四)
我们先计算存储子问题的答案,然后利用子问题的答案计算当前斐波那契数的答案。我们将递归计算,但是通过记忆化不重复计算已计算的值。
2025-12-17 08:07:26
227
原创 浅谈:算法中的斐波那契数(一)
斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。给定 N,计算 F(N)。
2025-12-14 19:02:24
229
原创 探索:在微软工作是一种怎样的体验(六)
当然是多多益善咯~ 当然,如果你之前搞过 ACM 或者 NOIP,你可能只需要练练手,找回当年的感觉就行了。做完题目就算 AC 了,也要参考学习一些其他人的解决方案,开阔自己的思路。无论你是否在外企工作,当遇到技术问题时,用英语在 Google 或者 Bing 进行技术相关内容的搜索是必备的能力。很多第一手的技术文档或是博客都是英文,如果你没有用英语进行学习的能力,很难成为一名真正优秀的程序员。如果没有自己的开源项目,积极地参与到其他开源项目,也是个很好的选择,可以发 PR 也可以提 Issue。
2025-12-14 15:35:43
243
原创 探索:在微软工作是一种怎样的体验(五)
和大多数公司的面试情况一样,面试轮数越往后,面试官的职级越高。一般来说,最后一轮的面试官就是你面的组的大老板了。每一轮面试一般分为三个方面:自我介绍、聊项目、做题。HR talk 推荐职位 + 1 轮电话技术面试 + 3 - 4 轮技术面试 + 英文口语面试。
2025-12-13 09:39:39
107
原创 探索:在微软工作是一种怎样的体验(四)
在疫情期间,微软实行远程线上面试,面试前会提前预约时间,4 - 5 轮技术面试会尽量排在同一天,面试内容主要包括算法和数据结构,微软非常看重思维能力以及解决问题的能力。HR talk 推荐职位 + 1 轮电话技术面试 + 4-5 轮技术面试。
2025-12-13 09:14:17
407
原创 探索:在微软工作是一种怎样的体验(三)
微软是一家具有包容性的公司,没有年龄和学历的要求,很多员工都是非 985、211 毕业的。不过简历上需要有非常突出的亮点,比如工作项目经历或者竞赛成绩比较优秀,或者是英语很好等等。看到微软的工作环境和各种福利,力扣君看了也十分心动。下面开始进入大家都比较关心的环节:去微软工作需要达到哪些要求呢?
2025-12-12 14:14:03
339
原创 探索:在微软工作是一种怎样的体验(二)
作为开发,入职时工位会准备好 Dell 双屏幕和 Humanscale 的支架,一台相当于 Dell Precision 5820 Tower Workstation 等级的主机,一台 Surfacebook2。此外员工都有 Visual Studio Subscriptions,至于软件序列号啥的就不用提了,Azure 每个月有150 美刀的额度,可以做很多事情了哈哈。微软研发工程师实行的是弹性工作制,不需要打卡,特殊情况还可以在家办公,每年过年提前一两个礼拜回家在家办公不用赶春运简直爽歪歪!
2025-12-11 17:37:52
414
原创 探索:在微软工作是一种怎样的体验(一)
很多人第一个想到的可能是他的创始人比尔盖茨,或者是这家公司研发出的多款家喻户晓的经典产品,Windows 和 Office 365 从我们的第一台电脑开始一直伴随着我们步入工作岗位,进入这样的公司也是很多计算机及相关专业同学的梦想。产品主要包括 Azure、O365、SharePoint、Dynamics 365、Skype、Exchange、Windows 等。微软亚太研发集团是微软在美国之外规模最大、职能最完备的硏发基地,包括北京、上海、苏州三个研发中心。微软(Microsoft)
2025-12-11 12:49:22
347
原创 经典算法题详解之寻宝(二)
于是第一步,我们计算所有特殊点(包括 M,O,S,T)互相之间的最短距离,即对这里面的每个点做一次 bfs。这样我们就不需要考虑其他点了。只有当所有 M 点均被触发以后,终点才可到达,问起点走到终点的最小代价。一个人在迷宫中,要从起点 S 走到终点 T。因此,两个点的最短距离一旦计算出,就不会再改变了。有一点性质很重要,不论我们触发机关或者搬运石头,O:石头点,一次可以搬一块石头。M:机关点,需要用石头触发。
2025-12-10 15:34:01
218
原创 经典算法题详解之寻宝(一)
解释:最优路线为:S->O, cost = 4, 去搬石头 O->第二行的 M, cost = 3, M 机关触发 第二行的 M->O, cost = 3, 我们需要继续回去 O 搬石头。O-> 第三行的 M,cost = 4, 此时所有机关均触发 第三行的 M->T, cost = 2,去 T 点拿宝藏。它标识了唯一的入口(用 'S' 表示),和唯一的宝藏地点(用 'T' 表示)。个足够触发机关的重石。输入:["S#O", "M..", "M.T"]输入:["S#O", "M.#", "M.T"]
2025-12-10 11:29:53
320
原创 小张刷题计划(二)
为了能够让最大值最小,显然每份中删去的一定是最大元素,所以在二分判定可行性时,维护当前序列的最大值,然后记录删除最大值的结果,也就是说二分的判定是:是否可以让每组删除最大值之后,总和都小于等于t。如果不考虑每份可以任意减去一个元素,就是一个经典的二分问题。具有单调最优的性质:如果最大值为t可以满足条件划分,那么最大值为t+1也可以。所以就直接二分最大值 ,找到最小满足条件的t即可。给定一个数组,将其划分成M份,使得每份元素之和最大值最小,每份可以任意减去其中一个元素。
2025-12-08 20:37:34
221
原创 小张刷题计划(一)
此外,小张还可以使用场外求助功能,通过询问他的好朋友小杨题目的解法,可以省去该题的做题时间。为了防止“小张刷题计划”变成“小杨刷题计划”,小张每天最多使用一次求助。这样做题时间最多的一天花费了 3 的时间,并且这个值是最小的。解释:在前三天中,小张每天求助小杨一次,这样他可以在三天内完成所有的题目并不花任何时间。为了提高自己的代码能力,小张制定了刷题计划,他选中了题库中的。(小杨完成的题目不计入做题总时间)。刷完所有的题目(注意,小张不能用多天完成同一题)。在小张刷题计划中,小张需要用。
2025-12-08 19:36:14
426
原创 模拟退火算法
模拟退火算法便是基于这一点,它在寻找最优解的过程中,有概率的接受比当前最优解差一点的次等解,这个概率值随着搜索深度的增加逐渐减少。模拟退火算法接受次等解的过程中,随着搜索深度的增加,次等解有概率超过局部最优解,从而跳出局部最优,获得全局最优解。美中不足的是,模拟退火算法为了获得全局最优解,要求较高的初始温度,要求退火的速度足够慢,要求较低的终止温度和各种温度下足够多次的抽样,这就使得优化过程长,特别是对于规模大的实际问题。其次,由于模拟退火算法对初始温度很敏感,参数的选择也是应用该算法的难题之一。
2025-12-07 19:08:07
396
原创 浅谈:快递物流与算法的相关性(六)
由于这类问题数据规模太大,想要用精确算法求解往往显得无能为力。因此,在后来的研究中,国内外学者重点使用启发式算法来寻找近似最优解,这类算法主要有模拟退火算法、遗传算法、蚁群算法等。描述为:一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要经过所有城市后,回到出发地。上文已说到,该问题的可行解就是所有顶点的全排列,随着顶点数的增加,可行解的数量会呈指数级增长,也就是组合爆炸,它本质上是一个 NP 完全问题。从图论的角度来看,该问题实质是在一个带权完全无向图中,找一个权值最小的哈密顿回路。
2025-12-06 18:15:07
332
原创 浅谈:快递物流与算法的相关性(五)
NP-C 的英文全称是 Non-deterministic Polynomial Complete,即多项式复杂程度的非确定性问题。简单的写法是NP=P?,问题就在这个问号上,到底有没有让NP=P的算法,或是如何证明NP≠P。启发式算法的思想是:在不断解决问题的过程中寻找解决问题的最优方案。再举一个通俗的例子:当我们用数字密码解锁手机时,如果我们不知道密码是多少,必须将所有的数字组合依次尝试。这听起来像是一句废话,如果将它抽象一点的表述,就是:能用电脑快速验证一个解的问题,是否也能够用电脑快速地求出解。
2025-12-05 14:37:41
210
原创 浅谈:快递物流与算法的相关性(四)
回溯虽然能解决这类问题,但这实际上是一种非常暴力的算法,我们必须对比所有可行方案,从而找到最优解。在求质数时,我们可以用 2~√n 与 n 依次相除来判断 n 是否是质数,或者用筛掉质数的倍数的方式来过滤出质数,但我们并不能找到一个通用的公式,能直接计算出下一个质数是多少。在实际应用中,由于精确算法的计算量会跟随问题规模的增大呈指数级增长,导致这类算法在现有计算设备中无法用于复杂的组合优化问题的求解。长久以来,人们一直在寻找一种这类问题的通用解,使得我们不需要穷举所有的情况,就能直接找出问题的答案。
2025-12-05 10:45:02
356
原创 浅谈:快递物流与算法的相关性(三)
虽然物流行业在近些年随着电商的火爆才逐渐兴起,但在数学中,物流相关算法早已有相关的研究。最早的物流算法可追溯到 1759 年欧拉研究的骑士环游问题:即对于国际象棋棋盘中的 64 个方格,按照马走 “日” 字的规则走访 64 个方格一次且仅一次,并且最终返回到起始点。如果所有的下一个位置都已经走过一次,且骑士已走步数少于 63, 则说明此种走法不可行。回溯到上一步尝试下一个可走位置;当骑士不重复地走到 63 步时,判断下一步能否回到起点,只有下一步能回到起点的方案才是可行方案,否则继续回溯寻找路线。
2025-12-04 11:51:36
111
原创 浅谈:快递物流与算法的相关性(二)
无人物流可实现全天派送,防风雨,方便高效、节省资源;对于偏远地区和急件,无人物流能大大提高物流配送效率;无人物流准确率高达 99%,有效避免了人为的失误。正是在大量算法的支撑下,机器逐渐替代人工,运输量越大,机器相对人工的成本也就越低;
2025-12-03 17:30:13
214
原创 浅谈:快递物流与算法的相关性(一)
简称 IOT(The Internet of Things),是指通过信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等装置与技术,实时采集需要监控、 连接、互动的物体或过程,再通过网络接入,实现物与物、物与人的连接,实现对物品和过程的智能化感知、识别和管理。目的是最小化成本,提升包装效率,减少包装浪费。车辆的路径规划问题:根据要配送的包裹(或者是需要揽收的货物),在地理上分布的不同位置,计算出需要从物流中心派几辆车、走什么路线,分别去派送(或者分别去揽收)这些包裹,才能最省时省力。
2025-12-03 11:00:21
268
原创 经典算法题剖析之最小跳跃次数(四)
setTree(cl,cr,val) 更新编号 cl ~ cr 之间弹簧的最小操作数为 val。如果内部弹簧最小操作数已经小于等于 val,则保持不变,否则更新为 val;clearT()线段树初始化。编号 0 弹簧操作数为 0;其余的最小操作数为 -1,表示暂不可达到;getTree(curr) 获得编号 curr 弹簧的跳跃最小值。,也可以跳两步跳到所有的。个位置,可以直接跳到。处跳跃的两种情况,即。
2025-12-02 16:05:07
275
原创 经典算法题剖析之最小跳跃次数(三)
由于 far 的更新操作,使往左跳操作的遍历区间是不存在重复的,因此往左跳遍历的总时间复杂度为 O(N)常规广度优先搜索在处理弹簧往左跳的情况时,时间复杂度到达。区间( far <= i-1 );在常规广度优先搜索的基础上,我们可以记录一个最大的。弹簧时,往左跳的操作,仅需遍历。值进行优化,用来表示当前从。
2025-11-29 08:30:04
210
原创 经典算法题剖析之最小跳跃次数(二)
我们可以利用一个巧妙的性质来使用动态规划:假设某一个位置只需要 w 步可以跳到,那么这个位置之前的步数,最多只需要 w+1 步。是单调的,所以只需要一个单调指针维护对应的。步可以跳到的最远位置。所以我们可以用一个数组。的最小跳跃次数是多少。
2025-11-25 20:46:52
261
原创 经典算法题剖析之最小跳跃次数(一)
解释:小 Z 最少需要按动 3 次弹簧,小球依次到达的顺序为 0 -> 2 -> 1 -> 6,最终小球弹出了机器。为了获得奖励,你需要将小球弹出机器。请求出最少需要按动多少次弹簧,可以将小球从编号。,则表示小球弹出了机器)。小球位于编号 0 处的弹簧时不能再向左弹。为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机。的距离,或者向左弹射到任意左侧弹簧的位置。的弹簧处,通过按动弹簧,可以选择把小球向右弹射。弹簧弹出整个机器,即向右越过编号。弹簧处按动弹簧,小球可以弹向。个特殊弹簧排成一排,编号为。
2025-11-24 17:58:45
317
原创 两种类型的next指针(二)
接上文,第二种情况是连接不同父节点之间子节点的情况。更具体地说,连接的是第一个父节点的右孩子和第二父节点的左孩子。由于已经在父节点这一层建立了。指针找到第二个父节点,然后在它们的孩子之间建立连接。指针,因此可以直接通过第一个父节点的。
2025-11-24 08:26:46
225
原创 程序员奇遇记之多线程王国(五)
NPR:“没错,我的勇士,你在多线程编程上真是有天赋!唯一需要注意的一点是,等待与唤醒操作必须在锁的范围内执行,也就是说,调用 wait() 或 notify() 时,都必须用 synchronized 锁住被 wait/notify 的对象。NPR:“单用 synchronized 是无法实现这个功能的,但在解决问题之前,我们最好先搞清楚我们想要的是什么。你:“好的,我想 read 方法中应该有一个等待方法,并且这个等待方法不能阻塞写入过程。你:“在写线程写完后,唤醒读取线程继续读取。
2025-11-20 08:28:30
288
原创 程序员奇遇记之多线程王国(四)
你:“ write 函数在等待 read 函数,write 函数中的循环无法执行完,那么 writeComplete 就无法被置为 true,所以 read 函数就会无限循环。你:”我增加了一个标志位 writeComplete,在写入完成后,将它置为 true,读取时循环等待,直到它变成 true 时才读取结果。NPR 抬头看了看天,若有所思地说:“据说太阳黑子每 11 年活跃一次,上一次活跃还是 2009 年,最近也差不多该发出新一轮的宇宙射线了。NPR 不置可否,说道:“你运行一下试试。
2025-11-19 17:16:29
175
原创 程序员奇遇记之多线程王国(三)
在一个线程执行 write 前,先检查这个线程有没有拿到钥匙,有钥匙的话我们才让它执行,执行完再把钥匙交出来。你:“我想一想,现在读取时不需要获取钥匙,所以读取时可以直接将主内存中的 number 值拷贝到自己的工作内存。你:“有点意思,你说的这个钥匙像是一个通行证,因为通行证只有一个,所以每次只有一个线程能拿到通行证,确实能保证一次只有一个线程执行。NPR:“别客气,先别高兴地太早,现在我们给 write 方法加上锁后,写入时没有问题了,读取时还是有问题的。你:“没问题,代码应该是类似这样的。
2025-11-19 12:01:58
295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅