算法编程题
文章平均质量分 91
灼华十一
楼下冲五年小码农,热爱开源和技术博客。内容图片若有侵权,联系删除。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法编程题-到达终点数字 & 将字符串翻转到单调递增 & 四因数 & 找出最具竞争力的子序列
本文将介绍四道LeetCode原题,分别是到达终点数字,将字符串翻转到单调递增,四因数和找出最具竞争力的子序列。首先会给出相关题目的描述,然后是思路分析,接着给出golang语言实现的且通过所有测试用例的代码,最后是相关的复杂度分析。原创 2024-12-23 15:15:10 · 1116 阅读 · 0 评论 -
算法编程题-不相交的线 & 联通网络的操作次数 & 销售价值减少的颜色球
本文将介绍三道LeetCode原题,分别是不相交的线,联通网络的操作次数,销售价值减少的颜色球。首先会简单描述原题,接着给出思路分析,然后是基于golang语言实现且通过所有测试用例的代码,最后是相应的复杂度分析。关键词:LeetCode,面试,golang,算法,并查集。原创 2024-12-19 10:19:32 · 1209 阅读 · 0 评论 -
算法编程题-字母与数字 & 等式方程的可满足性
本文将介绍两道LeetCode原题,分别是字符与数字,等式方程的可满足性。首先将简单对这两个问题进行描述,随后给出相关的思路分析,以及基于golang语言的代码实现,最后是相关的复杂度分析。原创 2024-12-18 10:49:33 · 1244 阅读 · 0 评论 -
算法编程题-可能的二分法、删除给定值的叶子节点、设计一个支持增量操作的栈
本文将对三道LeetCode原题进行介绍,分别是可能的二分法、删除给定值的叶子节点和设计一个支持增量操作的栈。首先会简单描述每道题,然后是给出一个思路,接着给出golang语言的实现,最后进行相应的复杂度分析。原创 2024-12-16 16:09:58 · 1076 阅读 · 0 评论 -
算法编程题-区间列表的交集、飞机座位分配概率
本文将介绍两道LeetCode原题,一道是区间列表交集,另外一道则是飞机座位分配概率,实质上是一道常考的智力题。本文将给出基于golang语言的实现,代码实现通过了所有测试用例,最后给出相关的复杂度分析。原创 2024-12-09 14:28:06 · 1211 阅读 · 0 评论 -
算法编程题-最后一块石头的重量 II
本文将对面试热门题最后一块石头的重量进行介绍,通过分析论证动态规划思路的可行性,以及如何将其转换为一个0-1背包问题。给出的代码基于golang语言实现,且已经通过所有测试用例,且在执行用时上超过了100%的提交,本文最后给出相关的复杂度分析。原创 2024-12-02 16:43:07 · 979 阅读 · 0 评论 -
算法编程题-煎饼排序 && 不含AAA或者BBB的字符串
本文将对两道LeetCode原题进行介绍,分别是煎饼排序和不含AAA或者BBB的字符串。在陈述完基本的思路后,本文给出基于golang语言实现的代码,实现都是通过了所有测试用例且运行时间超过100%的优质解法,最后给出相应的复杂度分析。原创 2024-11-30 10:16:44 · 1293 阅读 · 0 评论 -
算法编程题-优势洗牌
本文将对LeetCode原题优势洗牌进行介绍,从最容易想到的方法开始,循序渐进,一步步优化,对于每一种方法,都给出基于golang语言实现的且通过所有测试用例的完整代码,并且给出相应的复杂度分析。原创 2024-11-29 14:58:50 · 1261 阅读 · 0 评论 -
算法编程题-合并石头的最低成本
本文将对LeetCode原题合并石头的最低成本进行介绍,思路基于动态规划,设计到状态的设计和优化,实现基于golang语言实现,并且已经通过所有测试用例,每一种方法都将给出复杂度分析。原创 2024-11-28 14:48:23 · 1155 阅读 · 0 评论 -
算法编程题-颜色交替的最短路径
本文将对LeetCode原题 1129 颜色交替的最短路径进行介绍,先介绍dijkstra算法,然后给出进一步优化得到的bfs算法。代码实现基于golang语言,且已经通过所有测试用例,最后也会给出对应的时间复杂度分析。原创 2024-11-27 10:32:37 · 874 阅读 · 0 评论 -
算法编程题-区间子数组个数
本文将对LeetCode原题 区间子数组个数进行介绍,首先给出自己的实现思路和代码,然后进一步优化过的代码和其他的一些思路,所有代码基于golang语言实现,且通过LeetCode所有测试用例,最后本文将给出各个方法的复杂度分析。原创 2024-11-26 14:16:29 · 750 阅读 · 0 评论 -
算法编程题-寻找最近的回文数
本文将对LeetCode 原题 564 寻找最近的回文数进行讲解,并且给出golang语言的实现,该实现通过了所有测试用例且执行用时超过100%的提交,最后给出相关的复杂度分析。原创 2024-11-25 14:30:18 · 1036 阅读 · 0 评论 -
算法编程题-最长连续序列
本文将分享一道LeetCode原题,并且给出两种方法,代码使用C++实现,并且满足时间复杂度为$O(n)$且全部通过LeetCode的测试用例。原创 2024-11-24 15:58:32 · 1260 阅读 · 0 评论 -
算法编程题-检测循环依赖
本文将对检测循环依赖这一面试大热题型进行介绍,并且重点介绍两种方法拓扑排序和三色标记法解决此类问题,并且将图扩展到了无向图下如何判断环路问题,包括一些鲜为人知的并查集。本文代码基于golang语言实现,所有代码经过LeetCode 210检测,通过全部测试用例。原创 2024-11-24 15:20:05 · 1392 阅读 · 0 评论 -
算法编程题-保持城市天际线
本文将对LeetCode原题 保持城市天际线进行思路上的讲解,并且给出golang语言的实现,最后进行相应的复杂度分析。原创 2024-11-24 10:56:41 · 1078 阅读 · 0 评论 -
算法编程题-分割数组、判断二分图
本文将对两道LeetCode原题、面试高频题分割数组、判断二分图进行介绍,并且给出golang语言的实现、LeetCode运行截图和复杂度分析。原创 2024-11-23 15:41:14 · 1308 阅读 · 0 评论 -
算法编程题-最低票价(动态规划,三指针,二分查找)
本文将对LeetCode原题983 最低票价进行讲解,设计到的思路算法有动态规划、二分查找和三指针原创 2024-11-22 09:55:52 · 673 阅读 · 0 评论 -
算法编程题-排序
本文将对七中经典比较型排序算法进行介绍,并且给出golang语言的实现,还包括基数排序、计数排序等非比较型的算法的介绍和实现。原创 2024-11-21 14:26:19 · 1714 阅读 · 0 评论 -
算法编程题-对角线遍历 II
观察到遍历的位置的变化,是否每一轮的遍历的点的xy坐标之和是相等的,且先从y坐标小的开始遍历,因此,可以考虑将所有元素加入到一个优先级队列中,每一次去队列中位置最小的点来遍历(首先考虑xy坐标之和最小,然后相等的话再比较y)。还是基于每一轮遍历的点的xy坐标之和相等,使用一个哈希表,聚合每一轮遍历的元素在一个列表中。该题也可以使用bfs来做,将原题描述中的图在这里插入图片描述稍微倾斜一点来看,如下图,那么数组的遍历可以看成是一种层序遍历。: 给定一个二维数组,按照下图所示的方式遍历,按遍历顺序输出为数组。原创 2024-11-21 09:59:36 · 1051 阅读 · 0 评论 -
算法编程题系列-原子的数量
一道不算难得难题,笔者认为难在如何优雅简洁地实现。比较难处理的就是括号,可以采用两种方式处理,第一种是递归,即括号里面的又是一个化学表达式,第二种是用栈,可以认为是在模拟递归,遇到括号,就往栈中压入一个空的计数哈希表,进行后续的计数。:给定一个形如"K4(ON(SO3)2)2"的化学表达式,返回每种原子的数量,比如这个例子里面返回"K4N2O14S4",标识原子K,N,O,S分别有4, 2, 14, 4个,按照原子名称的字典序返回。原创 2024-11-20 09:26:49 · 899 阅读 · 0 评论 -
算法编程题-网格中的最短路径
非常典型的广度优先搜索的题目,利用一个先进先出的队列来实现广度优先搜索,搜索的状态为当前所在的位置(x, y)以及当前剩余的可以移除障碍的次数,当第一次搜索到了目标点,意味着找到了最短步数,直接返回。:给定一个m * n的网格,网格中的每一个点的值为0(无障碍),为1(有障碍),现在从左上角(0, 0)出发,每一步可以往上下左右四个方向走,最多只能移除k个障碍,求到达右下角(m-1, n-1)的最小步数。晚上要面试腾讯了,用C++语言写的,代码质量可能一般。原创 2024-11-19 14:52:56 · 948 阅读 · 0 评论 -
算法编程题-最大为N的数字组合
再来考虑非零的情况,从最高位开始遍历。假设遍历到第i位,从字符串数组digits中找到最大的小于等于target该位的数字,如果没找到,说明没有字符串数组里面找不到更小的数字了,此时可以直接返回答案,如果找到了,假设小于target该位的数字的个数为k,则将该位赋值为这些小于的数后,后面的位置可以随便赋值(),如果在字符串数组中能够找到target当前位一样的数字,则需要继续遍历,但要注意边界条件,即最后一位也能找到相等的,意味着digits中的数字可以组装成一个和target相同的数字。原创 2024-11-18 10:32:33 · 982 阅读 · 0 评论 -
算法编程题-golang语言协程池
笔者的协程在思路上借鉴了一些Java线程池七大参数的思想,分为核心协程和非核心协程,初始时只有核心协程工作,如果工作数量比较多还会起一些非核心协程来工作,但是这些非核心协程如果长时间没有工作也会被销毁,这其中涉及到的工作数量比较多的阈值、非核心协程多少时间不工作会被销毁都是可以由用户调整的参数。协程池在启动后,会写一个协程daemon,用来监测协程池的状态,决定是否要起非核心协程。此外,还实现了一个优雅关闭协程池的功能,保证所有协程在完成自己手上的工作后立即退出,然后主程序里面将所有的信道关闭。原创 2024-11-16 18:02:27 · 482 阅读 · 0 评论 -
算法编程题-区间最小数乘区间和的最大值,基于数组中的数字拼接可得的小于目标值的最大数
笔者的思路就是根据目标值来逐位构造,从目标值的最高位开始,在数组里找到最大的小于等于最高位的数字,如果找到的是一个小的数,那么剩余的位数可以全部采用数组中的最大数,因为已经保证了一定比目标值要小,如果找到的是相等,那么需要在下一位找类似的分析,如果没找到,则需要回退到前一位,前一位一定是在数组中出现的,此时可以尝试去数组中比该数稍小的一个数,如果能取到,剩余数字全部去最大数即可,如果没找到,需要再回退到上一位。可以优化遍历方式,在遍历的同时计算当前子数组的最小值和和,这样时间复杂度就减少到了。原创 2024-11-16 15:42:26 · 1149 阅读 · 0 评论 -
算法编程题-删除子文件夹
在本题中,可以用树中的每一个节点来保存一个文件夹的一个级别,然后节点额外维护一个变量,标识是否有文件夹结束在这一个节点上。然后用深度优先搜索搜索这根树,如果搜索到一个节点,发现有一个文件夹结束在这一个节点上,说明这个分支不用搜索了,因为这个分支下如果还有文件夹也一定是结束在这一个节点上的文件夹的子文件夹。原题为有很多类似于unit风格的文件夹,如\tmp, \usr\local, 且保证这些文件夹是合法的,不会存在类似于usr或者\usr\local\之类的,现在要求删除所有的子文件夹,返回剩余的文件夹。原创 2024-11-16 10:30:24 · 909 阅读 · 0 评论 -
算法编程题-计算器系列
这类题目都需要用到栈这种数据结构,本科期间的数据结构课讲到栈的应用时,有提及一种方法,就是先将这种表达式通过栈转换为后缀表达式,然后用一个栈即可进行求解。更加通用的办法是使用两个栈,一个栈用来存储数字,另外一个栈用来存储符号。计算器一般就是给定一个用字符串表示的算术表达式,一般包括加减乘除四种运算符,允许负数存在,求这个表达式的值,一般符号还包括括号等字符。其中,gulc.Stack是自定义实现的栈,读者可以自行实现,也可以参考导入笔者的工具包。相似的题目如下,感兴趣的读者可以自行探索。原创 2024-11-14 10:29:39 · 953 阅读 · 0 评论 -
算法编程题-按字典序排在最后的子字符串
首先容易想到,一个字符串s,如果在后面增加一些字符,变成字符串s’,s’在字典序上一定比原字符串s要大。所以,在本题中,要找的最大的字典序的子字符串一定是一个后缀字符串。其次,比较两个子字符串的字典序大小,肯定需要一个字符字符比较,传统的思路就是维护两个指针i和j,然后往后比较,在比较过程中,用i为维护表示此时最大的后缀字符串。给定一个字符串,将该字符串所有的子字符串按照字典序排序,求出排在最后一个的子字符串。,j不断往后移动,比较完所有的后缀字符串。,所以下一步要比较的j=j+k+1。原创 2024-11-14 10:02:35 · 1060 阅读 · 0 评论 -
算法编程题-访问所有节点的最短路径
可以这样想,在当前节点为i,历史访问状态为j时,枚举所有节点状态上一个关键节点,然后用在访问上一个关键节点时的路径长度加上该节点到当前节点的最短路径来尝试更新当前状态的最短访问路径。这个应该是解题的一个关键,不超过12意味着可以用状态压缩来保存当前的节点访问状态,即用12个bit,从低到高,分别表示节点0到节点n-1的访问状态,节点对应位为1,则表示该节点已被访问。在实现的过程中,需要注意遍历的顺序,应该是从小到大遍历状态j,然后在内层的循环中从小到大遍历节点i,如果问过来,会导致部分。原创 2024-11-01 15:57:30 · 957 阅读 · 0 评论 -
算法编程题-图的最短路算法总结
在有向图或者无向图中求解最短路径算法是很多算法编程题的原型。本文将对这类算法进行总结,涉及深度优先搜索算法、Floyd算法、Dijkstra算法等常见的算法。本文以为例来说明这个问题。原创 2024-10-28 15:30:41 · 705 阅读 · 0 评论 -
算法编程题-K个一组翻转链表
但是要注意变化,面试官很容易给你变一下,比如我听一个师兄说,他面试字节的时候,面试官把这道题目改为了最后不满k个节点的部分不翻转,还有一些变形,比如偶数组翻转,奇数组不翻转。这样,可读性可维护性无疑都是更高的。记得本科期间面试美团的时候,就是一道这样的题目,当时足足做了二十五分钟才做出来,因为有十几分钟在调试,最后也因为其他的一些原因这个就黄了。K个一组翻转链表题相信很多同学在面试的时候都有遇到过,链表的题很容易出现这些问题,一个是空指针问题,另外一个就是成环了,打印的时候满屏满屏地打印。原创 2024-10-27 14:57:28 · 734 阅读 · 0 评论 -
算法编程题-数组中两个数字的最大按位与、按位或、按位异或
在从高位往低位考虑的过程中,如果在某一位上,数组中所有数字在这一位上为1的数量超过了2,那么一定可以选取两个数,使其按位与的结果在这一位上为1,那么其实这一个位上不为1的数字可以不用考虑了,这样就相当于删除了数组中的部分数字。首先哈希表记录所有数字从当前位到最高位的部分,然后假设当前位能够取到1,将当前结果与所有数字从当前位到最高位部分 按位异或,如果结果在哈希表中,说明当前位能够取到1,并且不会影响之前高位取到1的结果。所以,总结了一下这类题型,分别是最大按位与、最大按位或、最大按位异或。原创 2024-10-20 09:02:20 · 1010 阅读 · 0 评论 -
算法编程题-LRU & LFU
对于LRU,认为最长时间没有被访问的元素是应该被淘汰的,而LFU则认为访问次数频率最小的元素应该是要被淘汰的。这里维护最小频率是一个难点,在Get或者Set旧值时,如果当前最小频率等于节点的频率且移除节点后,这种频率对应的链表为空,则说明最小频率需要加一。今年秋招,我有个师兄,本身学历经历表达能力都是拉满的,他简历上有个项目用到的技术里写了LRU,结果好几个大厂的面试都考了这题,这真的是说明了,如果面试官想要你,在算法编程题是不会为难你的,如果不要你,直接给你一道冷门的Hard题。那么思路其实就很明确了。原创 2024-10-27 10:59:01 · 820 阅读 · 0 评论 -
算法编程题-如何判断一个点是否在三角形内
对于上述判断两个点是否在一条直线同一边的方法,我的理解是这样的,因为二维向量叉乘是一个一维向量,根据右手法则判定的方向,显然如果不在同一边,叉乘结果的方向一定是相反的,体现在一维向量上,只能是正负性不一样,所以两个一维向量点乘的结果为正,则说明两个叉乘结果的方向是一样的。注意观察上图,可以发现,如果点在三角形内,那么对于任意一条边来说,该点和三角形剩下的一个点一定出现在这条边的同一侧,如果点不在三角形内,那么一定存在一条边,使得三角形外的该点和三角形剩下的一个点出现在这条边的两侧。这里可以利用叉乘的性质。原创 2024-10-23 22:49:28 · 849 阅读 · 0 评论 -
算法编程题-完美矩形
所以,还需要加以其他的判断标准,注意到,大矩形四个顶点在小矩形的各个顶点中只应该出现一次,而内部的那些点呢?应该是只能出现两次或者四次,如果只出现一次或者三次或者五次以以上的话,就是发生了重叠或者内部空缺。很容易想到的一点就是找出大矩形的上下左右四条边,确定一下大矩形的四个顶点,然后计算面积,和各个小矩形的面积之和比较。但是这种方法存在一些问题,比如下图,显然在这种方法下,下图的几个小矩形也能精确覆盖一个大矩形。大概就是给一堆矩形,判断这些矩形是否能够形成一个大矩形,无重叠,原文的描述是精准覆盖。原创 2024-10-22 15:28:21 · 875 阅读 · 0 评论 -
算法编程题-矩阵的最大非负积
有一个大小为m * n的矩阵,从(0, 0)位置处出发,每次只能向右或者向下走,一直走到(m - 1, n - 1)位置,现在计算路径上所有数字的乘积,求最大非负积。但是矩阵里有负数,如果只维护每一个位置的最大值的话,是不行的,因为最大值乘以一个负数就变成最小值了,所以要在每一个位置维护一个最小值和一个最大值。关于取模的问题,笔者觉得这道题目有意思的点是,数据的范围保证了数据不会超出64位整数的范围。如果数据范围超出了64位整数范围,由于是在最后取模,这题就会变得相当复杂。原创 2024-10-17 10:20:19 · 469 阅读 · 0 评论
分享