![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试准备-算法
文章平均质量分 82
饼干饼干圆又圆
这个作者很懒,什么都没留下…
展开
-
面试准备算法
二叉搜索树的。原创 2024-07-05 09:44:59 · 123 阅读 · 0 评论 -
面试准备算法
由于链表不支持随机访问,因此常见的找出链表中节点的方式是使用快慢指针,fast每次遍历两个元素,慢指针slow每次遍历一个元素,这样在快指针遍历完链表时,慢指针就恰好在链表的中间位置。给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。可以把n个城市和它们之间的相连关系看成图,城市是图中的节点,相连关系是图中的边,省份即为图中的连通分量。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正向右移动,负向左移动)。原创 2024-07-02 10:53:19 · 1014 阅读 · 0 评论 -
面试准备算法
答案肯定是字符串的某个前缀,然后简单直观的想法是枚举所有前缀来判断,设前缀长度lenz,前缀串的长度必然要是两个字符串长度的约数才能满足条件。可以枚举长度,再去判断这个前缀串拼接若干次以后是否等于str1和str2。原创 2024-06-28 09:37:53 · 347 阅读 · 0 评论 -
面试经典150题
每一轮迭代,将nums[end]加到sum,如果sum≥s,则更新子数组的最小长度(此时子数组的长度是end-start+1)我们不必将所有数字的乘积除以给定索引处的数字得到相应的答案,而是利用索引左侧所有数字的乘积和右侧所有数字的乘积相乘得到答案。dp[i][0]:表示第i天交易完后手里没有股票的最大利润,dp[i][1]表示第i天交易完后手里持有一只的最大利润。找出该数组中满足其总和大于等于target的长度最小的子数组,并返回长度。找出总和大于等于target的最小子数组的长度,如果没有,返回0。原创 2024-06-18 11:07:54 · 412 阅读 · 0 评论 -
Leetcode面试经典150题
机器人每次只能向下或者向右移动一步,所以从坐标(0,0)到坐标(i,j)路径总数的值只取决于从坐标(0,0)到坐标(i-1,j)的路径总和和从坐标(0,0)到坐标(i,j-1)的路径总数。用f(i,j)来表示从坐标(0, 0)到坐标(i, j)的路径总数,u(i,j)表示坐标(i,j)是否可行,如果坐标(i,j)有障碍物,u(i,j)=0,否则u(i,j)=1。采用自下而上的方式进行思考,仍定义F(i)为组成金额i所需最少的硬币数量,假设在计算F(i)之前,已经计算出F(0)到F(i-1)的答案。原创 2024-06-17 11:21:40 · 481 阅读 · 0 评论 -
leetcode热题100
每分钟腐烂的橘子会使上下左右相邻的新鲜橘子腐烂,这其实是一个模拟广度优先搜索的过程。所谓广度优先搜索,就是从起点触发,每次都尝试访问同一层的节点,如果同一层都访问完了,再访问下一层,最后广度优先搜索找到的路径就是从起点开始的最短合法路径。原创 2024-06-15 07:34:13 · 313 阅读 · 0 评论 -
Leetcode热题100
如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。给一个长度为n的链表,每个结点包含一个额外增加的随机数指针random,该指针可以指向链表中的任何节点或空节点。对于当前节点,我们首先要进行拷贝,然后进行当前节点的前节点和后节点拷贝,拷贝完成后将创建的新节点的指针返回。用head表示原始链表的头节点,新的链表的第二个节点,newHead为新的链表的头节点。如果是普通链表,可以直接按照遍历的顺序创建链表节点。原创 2024-06-13 08:03:43 · 295 阅读 · 0 评论 -
Leetcode热题100
由于矩阵中的每个元素都被访问一次,因此路径的长度即为矩阵中的元素数量,当路径的长度达到矩阵中的元素数量时即为完整路径,将该路径返回。如果我们位于位置(x,y),那么以matrix的左下角为左下角,以(x,y)为右上角的矩阵中搜索,即行的搜索范围[x,m-1],列的范围[0,y]初始时,慢指针在位置head,快指针在位置head.next,如果快指针反过来追上慢指针,说明链表为环形链表,否则快指针到达链表尾部。在更改之前还需存储后一个节点。定义两个指针,一快一慢,慢指针每次只移动一步,快指针每次移动两步。原创 2024-06-12 07:32:13 · 1084 阅读 · 0 评论 -
LeetCode热题 100
仔细分析这个过程,会发现其中执行了很多不必要的枚举,如果已知有一个从x开始的连续序列,而我们却从x+1开始,那么得到的结果肯定不会优于枚举x为起点的答案,因此我们在外层循环的时候碰到这种情况跳过即可。对于匹配的过程,暴力的方法是O(n)遍历数组去看是否存在这个数,但其实更高效的方法是使用一个哈希表存储数组中的数,这样查看一个数是否存在即能优化至O(1)的时间复杂度。仅仅是这样,我们的算法时间复杂度最坏情况下还是会达到O(n²)(外存需要枚举O(n)个数,内存需要暴力匹配O(n)次),无法满足题目的要求。原创 2024-06-11 09:15:17 · 1059 阅读 · 0 评论 -
计算机网络概述
对于不同的网络应用需要有不同的应用层协议,在互联网中的应用层协议很多,如域名系统DNS,支持万维网的HTTP协议,支持电子邮件的SMTP协议,等等。运输层的任务就是负责向两台主机中进程之间的通信提供通用的数据传输服务。网络层的另一个任务是选择合适的路由,使源主机运输层所传下来的分组,能够通过网络中的路由器找到目的主机。在TCP/IP体系中,由于网络层使用IP协议,因此分组也叫作IP数据报,简称数据报。所谓通用的,是指并不针对某个特定网络应用,而是多种应用可以使用同一个运输层服务。数据链路层通常称为链路层。原创 2024-04-22 09:34:28 · 1732 阅读 · 0 评论 -
Leetcode算法题
当一个版本为正确版本,则该版本之前所有的版本均为正确版本,当一个版本为错误版本,则该版本之后的所有版本均为错误版本。最朴素的想法是存储数组nums的值,每次调用sumRange时,通过循环的方式计算和,一共计算j-i+1个元素的和。产品的最新版本没有通过质量检测,由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。扫描过程中,维护当前整理好的字符串,记为ret。原创 2024-04-13 08:50:07 · 722 阅读 · 0 评论 -
Leetcode算法题
显而易见的是,如果石头堆中只有一块、两块、或是三块石头,那么在你的回合,你就可以把全部石子拿走,从而在游戏中取胜;因此,要想获胜,在你的回合中,必须避免石头堆中的石子数为 4 的情况。对二叉树的根节点root进行深度优先搜索,在搜索过程中,根据规则对遍历的节点的值进行恢复,并且将遍历的节点的值加入哈希表valSet中。如果当前遍历到的节点root的左右子树都已经翻转,那么只需要交换两棵子树的位置,即可完成以root为根节点的整棵子树的翻转。从根节点开始,递归地对树进行遍历,并从叶子节点开始翻转。原创 2024-03-13 13:48:58 · 917 阅读 · 1 评论 -
Leetcode算法题
为了让数组之和最小,我们按照1,2,3的顺序考虑,但添加了x之后,就不能添加taget-x,因此最大可以添加到target/2,如果个数不够,就继续从target,target+1,…我们可以遍历secret和 guess,统计满足 secret[i] == guess[i] 的下标个数,即为公牛的个数。需要构造一个大小为n的正整数数组,该数组由不同的数字组成,并且没有任意两个数字的和等于target,在满足这样的前提下,要保证数组的和最小。给定一个大小为 n 的数组 nums ,返回其中的多数元素。原创 2024-03-10 09:38:01 · 921 阅读 · 0 评论 -
Leetcode算法题
如果当前节点在哈希集合中,则后面的节点都在哈希集合中,即从当前节点开始的所有节点都在两个链表的相交部分,因此在链表 headB\textit{headB}headB 中遍历到的第一个在哈希集合中的节点就是两个链表相交的节点,返回该节点。每次到达一个节点,如果该节点已经存在于哈希表中,则说明该链表是环形链表,否则就将该节点加入哈希表中。初始时,慢指针在head,快指针在head.next,若在移动过程中,快指针反过来追上慢指针,说明链表是环形。定义两个指针,慢指针每次移动一步,快指针每次移动两步。原创 2024-03-07 21:12:09 · 816 阅读 · 0 评论 -
Leetcode算法题
给定一个二叉树的根节点root,返回它的中序遍历。中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。相同的树给两棵二叉树的根节点p和q,编写一个函数验证这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]输出:true示例 2:输入:p = [1,原创 2024-03-06 14:57:27 · 1226 阅读 · 0 评论 -
Leetcode算法题
本题是一道常见的面试题,面试官一般会要求面试者在不使用 x\sqrt{x}x函数的情况下,得到 xxx 的平方根的整数部分。一般的思路会有以下几种:通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;通过数学方法得到近似结果,直接作为答案。函数的情况下,得到 xxx 的平方根的整数部分。一般的思路会有以下几种:通过其它的数学函数代替平方根函数得到精确结果,取整数部分作为答案;通过数学方法得到近似结果,直接作为答案。原创 2024-03-05 15:23:07 · 897 阅读 · 0 评论 -
Leetcode算法题
你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。将一个栈当作输入栈,用于压入push传入的数据;另一个栈当作输出栈,用于pop和peek操作。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。原创 2024-03-04 17:53:54 · 411 阅读 · 0 评论 -
Leetcode算法题
可以使用两个队列实现栈的操作,其中queue1用于存储栈内的元素,queue2作为入栈操作的辅助队列。入栈操作时,首先将元素入队到queue2,然后将queue1的全部元素依次出队并入到queue2,此时queue2的前端的元素即为新入栈的元素,再将queue1和queue2互换,则queue1的元素即为站内的元素,queue1的前端和后端对应栈顶和栈底。由于每次入栈都确保queue1的前端元素为栈顶。原创 2024-03-03 11:20:37 · 474 阅读 · 0 评论 -
Leetcode算法题
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。然后返回 nums 中唯一元素的个数。考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。返回 k。判题标准:原创 2024-02-29 15:21:18 · 1185 阅读 · 0 评论