- 博客(148)
- 收藏
- 关注
原创 下一个更大元素(一)
的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。在 nums2 中对应位置的右边的第一个比。如果不存在,对应位置输出 -1。的下一个更大元素是指。
2025-12-15 08:41:12
209
原创 IPv4地址与IPv6地址
比如, 2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。所以,2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address 地址 (即,忽略 0 开头,忽略大小写)。地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0- 255, 用(".")分割。IP地址有两个主要作用:一是识别设备或其网络接口,二是指明设备在网络中的位置,从而实现网络中设备间的路径寻址和数据交换。
2025-12-14 18:05:51
246
原创 微软面试之白板做题
白板做题不仅是考察你的算法能力,更是通过这种方式考察你的思维逻辑及沟通能力。离开了 IDE,你是否还能轻松写出高质量的代码?建议在面试之前,脱离 IDE,进行一些训练。一般来说在面试做题时,对语言没有硬性要求。如果做题时,忘了某个语言的 API 具体的签名或是参数,也不是问题,只要和面试官说清楚就行。我们并不是考察你对某个语言的 API 有多熟练。看完了微软的 HR 和程序员的分享,相信你对微软的工作环境和面试要求有了更多了解。想要去微软工作,赶紧从现在开始准备起来吧!如大家所了解的,微软面试一般是在。
2025-12-14 15:38:14
206
原创 C语言编程练习(一)
C语言编程练习是学习和巩固C语言编程技能的重要实践方式,通过动手编写代码来掌握核心概念和解决实际问题。这类练习通常从简单到复杂,帮助初学者逐步建立编程思维。
2025-12-13 09:29:33
125
原创 程序员:微软的面试流程探讨
在疫情期间,微软实行远程线上面试,面试前会提前预约时间,4 - 5 轮技术面试会尽量排在同一天,面试内容主要包括算法和数据结构,微软非常看重思维能力以及解决问题的能力。和大多数公司的面试情况一样,面试轮数越往后,面试官的职级越高。一般来说,最后一轮的面试官就是你面的组的大老板了。每一轮面试一般分为三个方面:自我介绍、聊项目、做题。HR talk 推荐职位 + 1 轮电话技术面试 + 3 - 4 轮技术面试 + 英文口语面试。HR talk 推荐职位 + 1 轮电话技术面试 + 4-5 轮技术面试。
2025-12-12 14:22:46
259
原创 经典算法详解——状态压缩 DP
到这里,我们知道了 S 到所有 M 的最短距离,也知道了 M 互相之间的最短距离,也知道了 M 到 T 的最短距离,这就是一个经典的状态压缩 DP 的模型了。
2025-12-10 15:41:31
142
原创 动态规划概述及解题思路
例如在「宝石挑选」例题中,原有问题是「最大连续区间和」,子问题是「以i为右端点的连续区间和」。并且「以i为右端点的最大连续区间和」由「以i-1为右端点的最大连续区间和」推出,此时后者即为更小规模的子问题,因此满足「最优子结构」原则。因此「DP 状态」设置之前,需要将原有问题划分为一个个子问题,且需要确保子问题的最优值由「更小规模子问题的最优值」推出,此时子问题的最优值即为「DP 状态」的定义。什么是「最优子结构」?而对于每一个子问题,其最优值均由「更小规模的子问题的最优值」推导而来,即为最优子结构。
2025-12-09 20:19:35
241
原创 浅谈:物流算法的未来
尽管蜜蜂的大脑只有草籽那么大,也没有电脑的帮助,但它已经进化出了一套很好的解决方案,如果能理解蜜蜂怎样做到这一点,对人类的生产、生活将有很大帮助。好在,一代又一代的程序员前赴后继,我们有理由坚信,长路漫漫,未来可期。2010年10月25日,英国一项研究表明,在花丛中飞来飞去的小蜜蜂显示出了轻易破解“旅行商问题”的能力,他们利用人工控制的假花进行了实验,结果显示,不管怎样改变花的位置,蜜蜂在稍加探索后,很快就可以找到在不同花朵间飞行的最短路径,这是首次发现能解决这个问题的动物。另外,硬件的发展也会促进。
2025-12-07 19:45:40
152
原创 经典算法题剖析之传递信息(三)
若能传递给编号 y 玩家的所有玩家编号 x1,x2,x3... , 则第 i+1 轮传递信息给编号 y 玩家的递推方程为dp[i+1][y] = sum(dp[i][x1],dp[i][x2],dp[i][x3]...),其递推形式即 dp[i+1][y] += dp[i][x]
2025-11-25 20:08:55
336
原创 经典算法题剖析之传递信息(二)
可以使用深度优先搜索,找出所有可能的传递方案。枚举每一轮传递玩家的编号和被传递玩家的编号。若当前是最后一轮且信息位于。玩家的所有单向信息传递路径,初始信息位于编号。处,则方案总数加 1。方法一:深度优先搜索。
2025-11-24 17:50:55
297
原创 经典算法题剖析之传递信息
返回信息从小 A (编号 0 ) 经过 k 轮传递到编号为 n-1 的小伙伴处的方案数;若不能到达,返回 0。解释:信息从小 A 编号 0 处开始,经 3 轮传递,到达编号 4。共有 3 种方案,分别是 0->2->0->4, 0->2->1->4, 0->2->3->4。传信息的关系是单向的(比如 A 可以向 B 传信息,但 B 不能向 A 传信息)。1.有 n 名玩家,所有玩家编号分别为 0 ~ n-1,其中小朋友 A 的编号为 0。解释:信息不能从小 A 处经过 2 轮传递到编号 2。
2025-11-24 08:31:31
267
原创 完全平方数之数学运算(七)
情况 2:与四平方定理不同,Adrien-Marie-Legendre 的三平方定理给了我们一个充分必要的条件来检验这个数是否只能分解成 4 个平方。正如我们在上面的例子中可能注意到的,数字 0 也被认为是一个完全平方数,因此我们可以认为数字 3 可以分解为 3 个或 4 个完全平方数。情况 1:拉格朗日四平方定理设置了问题结果的上界,即如果数 n 不能分解为较少的完全平方数,则至少可以分解为 4 个完全平方数之和。然而,拉格朗日四平方定理并没有直接告诉我们用最小平方数来分解自然数。
2025-11-21 07:30:00
308
原创 完全平方数(六)
在主循环中,将组合的大小(称为 count)从 1 迭代到 n,我们检查数字 n 是否可以除以组合的和,即 is_divided_by(n, count)。在最下面的例子中,我们有 count==1,我们只需检查数字 n 是否本身是一个完全平方数。如果 square_nums 使用的是集合数据结构,我们可以获得比 n == int(sqrt(n)) ^ 2 更快的运行时间。关于算法的正确性,通常情况下,我们可以用反证法来证明贪心算法。,并且假设在以后的迭代中存在另一个。,并且这个数的组合小于找到的数,即。
2025-11-20 08:23:06
309
原创 完全平方数(五)
递归解决方法为我们理解问题提供了简洁直观的方法。我们仍然可以用递归解决这个问题。为了改进上述暴力枚举解决方案,我们可以在递归中加入贪心。那么我们可以说我们找到了最小的组合,因为我们贪心的从小到大的枚举组合。从一个数字到多个数字的组合开始,一旦我们找到一个可以组合成给定数字。通过这种重新构造的技巧,我们可以显著降低堆栈溢出的风险。的函数,该函数返回一个布尔值,表示数字。为了更好的解释,我们首先定义一个名为。的递归过程可以归结为底部情况(即。组合,而不是像前面函数。返回组合的确切大小。
2025-11-19 12:06:19
131
原创 完全平方数(四)
几乎所有的动态规划解决方案,首先会创建一个一维或多维数组 DP 来保存中间子解的值,以及通常数组最后一个值代表最终解。注意,我们创建了一个虚构的元素 dp[0]=0 来简化逻辑,这有助于在在余数 (n-k)恰好是一个完全平方数的情况下。在主要步骤中,我们从数字 1 循环到 n,计算每个数字 i 的解(即 numSquares(i))。在下图中,我们演示了如何计算与 dp[4] 和 dp[5] 相对应的 numSquares(4) 和 numSquares(5) 的结果。
2025-11-17 17:00:00
341
原创 完全平方数(三)
使用暴力枚举法会超出时间限制的原因很简单,因为我们重复的计算了中间解。我们以前的公式仍然是有效的。我们只需要一个更好的方法实现这个公式。你可能注意到从公式看来,这个问题和 斐波那契数问题 类似。和斐波那契数一样,我们由几种更有效的方法来计算解,而不是简单的递归。解决递归中堆栈溢出的问题的一个思路就是使用动态规划(DP)技术,该技术建立在重用中间解的结果来计算终解的思想之上。
2025-11-17 12:51:13
217
原创 完全平方数(二)
从上面对这个问题的叙述来看,它似乎是一个组合问题,对于这个问题,一个直观的解决方案是使用暴力枚举法,我们枚举所有可能的组合,并找到完全平方数的个数最小的一个。然而,会发现对于中等大小的数字(例如 55),我们也会很快遇到超出时间限制的问题。这个问题要求我们找出由完全平方数组合成给定数字的最小个数。从上面的公式中,我们可以将其转换为递归解决方案。的组合,要求组合中的解拥有完全平方数的最小个数。简单的说,可能会由于过度递归,产生堆栈溢出。注:可以重复使用列表中的完全平方数。,求出完全平方数组合成。
2025-11-15 17:58:40
254
原创 有效的字母异位词(三)
哈希表是一种更通用的解决方案,可以适应任何字符范围。3. 或者我们可以先用计数器表计算s, 然后用t减少计数器表中的每个字母的计数器。如果在任何时候计数器低于零,我们知道t包含一个不在s中的额外字母,并立即返回 FALSE。1.为了检查t是否是s的重新排列,我们可以计算两个字符串中每个字母的出现次数并进行比较。实际上不是,因为我们可以用一个计数器表计算s字母的频率,用t减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。的方法来有效解答“有效的字母异位词”问题,本篇文章,我们用。
2025-09-30 09:00:00
403
原创 有效的字母异位词(二)
对两个字符串进行排序将产生两个相同的字符串。此外,如果 s 和 t 的长度不同,t 不能是 s 的变位词,我们可以提前返回。前几天在上篇文章与大家讲了有效的字母异位词的题目描述和示例,本篇文章,小编将与大家一起探讨该经典题目的解题思路。好了,本篇文章的介绍到这里就结束了,下篇文章我们可以用不同的解题思路来解决这个问题,我们一起来思考下吧!通过将 s 的字母重新排列成 t 来生成变位词。因此,如果 T 是 S 的。
2025-09-29 18:00:59
399
原创 有效的字母异位词(一)
实际上,这是一道十分经典的算法题,大家心中是否有答案了呢?本文留给大家独立思考,下篇文章来给大家分享解题思路。如果有疑问,欢迎评论区留言一起探讨、学习!如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。你可以假设字符串只包含小写字母。
2025-09-27 09:20:30
308
原创 经典算法题之描述P值
秋招正在进行中,想要面试算法 / 数据分析岗位的同学,抓紧时间准备起来吧~P 值越小,说明在原假设为真的情况下,我们观测到的结果或更极端情况发生的可能性越小,我们就越惊讶。另外,在一些公司的笔试/面试环节还可能会问到 F-test(ANOVA) 和 Chi-square test(卡方检验),需要面试者有一定的了解,本文不做详细介绍,有兴趣的同学可以按需学习。如果 P 值很小,说明原假设情况发生的概率很小,而如果出现了,根据小概率原理,我们就有理由拒绝原假设,P 值越小,我们拒绝原假设的理由越充分。
2025-09-24 09:55:43
368
原创 简单随机抽样与抽样分布
还是以学生均分为例,从全校学生中抽取 100 个,计算平均分数。如果反复多次抽取 100 个并计算平均分,每次计算的均分都很可能不相同,均分这一统计量也是服从一定的分布的,这种分布叫做抽样分布或统计量分布。统计量不一定是平均数,这里只是以此为例。也称为单纯随机抽样、纯随机抽样、SRS抽样 ,是指从总体N个单位中任意抽取n个单位作为样本,使每个可能的样本被抽中的概率相等的一种抽样方式。这样保证了样本和总体服从同一分布。每个样本单位被抽中的概率相等。
2025-09-19 21:30:47
262
原创 巧用二分法求平方根问题
注意:这里一定取右中位数,如果取左中位数,代码可能会进入死循环。这个问题留给大家思考,有答案的小伙伴可以评论区留言哦~分析:如果取中点为左中位数,你看到死循环发生在。需要说明的是: 这里。
2025-09-16 11:35:11
251
原创 浅谈:数据库中的乐观锁
总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,乐观锁假设认为数据一般情况下不会造成冲突。所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做,一般来说可以使用版本号机制和 CAS 算法实现。是一种基于数据版本控制的并发控制机制,通过无锁操作实现高并发场景下的数据一致性,适用于多数读少写、冲突概率低的环境。
2025-09-13 21:08:10
215
原创 多项分布的算法案例分享
公司年会举办抽奖活动:不透明的抽奖箱里面有红、橙、黄、绿、青、蓝、紫七个颜色不同的小球,假设每次只能随机摸出一个小球,摸出后再放回重新摸,练习簿摸出两个颜色相同的小球即视为中奖,那么员工的中奖概率是多少?袋中有 8 个红球,3 个黄球,9 个白球。有放回的选取 6 个。其中 2 个红球,1 个黄球,3 个白球的概率是多少?摸出后再放回表示每次事件独立。一次事件可能发生的情况为7种,连续进行两次实验,为多项分布。
2025-09-08 12:02:32
244
原创 二项分布和多项分布
二项分布的公式可以这样理解:一红一蓝同时发生,即 (2/3)*(1/3),另外有先抽出红球在抽出蓝球和弦抽出蓝球再抽出红球两种情况,不妨理解为从两个位置里选一个位置放红球,即 C(2, 1)。首先每次取出的球的颜色只能为两种情况:红色或蓝色。即单次实验为伯努利实验,且题目中提示为有放回抽取,实验相互独立。在一个不透明的箱子里面均匀的分布着相同的6颗色红球和3颗篮色球,求有放回的随机的抽两次球,一个蓝色球和一个红色球的概率?
2025-09-05 12:00:22
381
原创 线段树法求子数组中占绝大多数的元素
注意到暴力算法维护的信息满足可加性(即可以快速合并两个子段的信息得到完整段的信息),因此可以使用线段树维护。具体实现可以参见代码。因此寻找可能的绝对众数的时间复杂度为 O(logn)。
2025-09-03 11:46:56
258
原创 单表加密法(monoalphabetic cipher)
这种加密法不一定要把明文字母表和密文字母表的对应关系都列出来,我们可以定义一个钥匙词(keyword),把这个词放在密文字母表的最前面,再把其他字母按原有顺序排列。在上面的例子中,钥匙词就是 zebras。如果是情侣间的通信,相比于凯撒密码只能定义一个数字作为密钥,单表加密法的钥匙词就可以更有意义。单表加密法同样易被破解,适合私密发送简短信息。
2025-08-31 09:13:21
331
原创 MySQL中的MyISAM
说到MyISAM,其索引结构如下图所示,由于 MyISAM 的索引文件仅仅保存数据记录的地址。MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址,读取相应数据记录。
2025-08-27 16:25:44
320
原创 博弈论中最经典的模型之Nim游戏
是博弈论中最经典的模型(之一),它又有着十分简单的规则和无比优美的结论 Nim游戏是组合游戏(Combinatorial Games)的一种,准确来说,属于“Impartial Combinatorial Games”(以下简称ICG)。这样的数学技巧还有很多,数学问题没有固定套路,又全是套路。如果你恰好知道的话,代码将非常简洁。学习方法是平时注意多积累,将遇到的技巧记录下来,使用时就会得心应手。根据巴什博奕的规则,可知如果 n 是 4 的倍数,则后手获胜,否则先手获胜。
2025-08-26 15:15:01
287
原创 堆栈面试题之有效的括号
对于没有学过「栈」这个数据结构的同学来说可能遇到这一类的问题咋一看可能有点没有头绪,但是其实只需要判断下一个元素是否在栈顶即可判断括号的匹配情况,即如果遇到一个左括号,我们将这个符号插入压栈,如果遇到一个右括号,我们判断一下栈顶的元素是否是对应的左括号,如果是(即与栈顶元素匹配),那么就一起出栈,否则的话直接返回。有了栈的知识之后,另一个可以用栈来完成的操作是实现一个队列。注意:空字符串可被认为是有效字符串。的字符串,判断字符串是否有效。我们来看一例子,假设字符串是。,栈的变化会是怎么样的呢?
2025-08-25 16:10:59
312
原创 长度最小的子数组
给定一个含有个正整数的数组和一个正整数找出该数组中满足其和的长度最小的连续子数组如果不存在符合条件的连续子数组,返回 0。如果你已经完成了On) 时间复杂度的解法, 请尝试Onlogn) 时间复杂度的解法。
2025-08-22 11:43:25
331
原创 N皇后最优解的背景介绍
历史上有一个著名的问题:八皇后问题,题目大意如下:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?在一个 n * n 的棋盘上放置 n 个皇后,要求不能有两个皇后位于同一行、同一列,或同一条 45 度斜线上。八个皇后在 8x8 棋盘上共有 4,426,165,368(64C8)种摆放方法,但只有 92 个互不相同的解。
2025-08-21 15:16:13
394
原创 动态规划法求最长回文子串
(Dynamic Programming,简称DP)是运筹学中用于解决多阶段决策过程最优化的数学方法,由美国数学家 R.E.贝尔曼 于20世纪50年代提出。其核心思想是将复杂问题分解为相互关联的子问题,通过存储子问题的解(记忆化)来避免重复计算,从而将指数级复杂度降至多项式级别。好了,文章分享就到这里结束了,希望对大家的学习有帮助哦!用动态规划法求最长回文子串。
2025-08-19 12:10:33
227
原创 程序员的代码注释有多能装?
虽然注释不知所起,但程序员们已经一往而深。在那些痛苦加班debug的夜晚,除了小黄鸭以外,注释成了程序员的另一个舞台:抒发情绪,展示绘画技巧,表演才艺,诉说一些不敢轻易示人的秘密,讲一个好故事,说一段中二的台词......那些看着 599 页《代码之美》长大,在社交网络上提问「写程序有写诗一样的感觉吗?你永远不知道充满创造力的程序员会在代码注释里装些什么,就像你永远不知道直男的裤兜里究竟能装下多少东西。还记得那个在注释里向妻子忏悔的男人吗?短短三个字,藏了多少故事?
2025-08-18 11:49:34
283
原创 如何写一份完善的README?
(美式发音/ˈriːdmiː/)是计算机领域中伴随软件或技术文档发布的自述文件,主要用于提供使用者信息的辅助文件。该文件一般包含版本更新日志。Github上有非常多的好项目,无一例外,他们都有一份完善的 README。README 是程序的门面,有助于别人及时发现你写的好项目(不要奢望每个人都有闲情逸致来阅读你的源码)。况且 README 文档的好处不止于此,它还可以帮助自己梳理逻辑,理清思路。写好 README 之后,随着项目的演进及时更新它,不会花太多时间,但能让你随时都对项目有个整体的把握。
2025-08-17 16:47:42
534
原创 如何一个响指删除计算机里的一半文件?(二)
注意,在 Shell 里声明变量,用来输出字符串。执行上面这段程序时,会先输出,之后第三行程序等待用户输入内容,把内容存储在MY_NAME变量当中,最后一行在字符串中。
2025-08-15 20:10:56
347
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅