算法
文章平均质量分 63
算法
一米八五羊毛菌
这个作者很懒,什么都没留下…
展开
-
【动态规划算法题记录】最长/最大 问题汇总 (leetcode)
是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。首先,我们定义一个dp数组,表示以第i个元素结尾的字符串的最长有效括号的长度。每次计算的时候我们都要记录更大的连续和,最后得到的就是全局最优的最大连续和。的字符串,找出最长有效(格式正确且连续)括号子串的长度。的最长公共子数组的长度。原创 2024-08-21 11:59:19 · 1016 阅读 · 0 评论 -
【排序汇总】这里记录一切与搜索排序相关的内容~(更新ing)
这样的子数组必定是有序的,进而我们的整个数组也就排序好了。实际上我们分析的就是一个。原创 2024-08-14 11:17:22 · 1040 阅读 · 0 评论 -
【面试记录】百度一面 | 20240802 | c++研发工程师
从两副牌中抽取5张牌,判断是否为顺子。A是1,J是10,Q是11,K是12,大小王可以充当赖子,是0。(就是给你5个数,其中0可以充当1-12任意一个数,判断是不是顺序的)给定一个数组A和一个四位数n,请用A中的元素组合成一个最大的小于n的整数(A中元素可以重复利用)原创 2024-08-03 16:42:26 · 319 阅读 · 0 评论 -
【笔试记录】腾讯音乐 | 20230903 | cpp (更新ing)
小红拿到了一个大小为 n(2 <= n <= 2000)的数组 a,她希望选择数组中的两个元素(1 <= a[i] <= 10^9),满足它们的乘积为完美数。如果不是0,就判断剩下的数字是否小于10,如果小于10(也就是说只剩一个非0数字)则是完美数,如果大于10,则不是完美数。小红想知道,长度为 n(3 <= n <= 10 ^ 5)的、仅由 'r''e''d' 三种字母组成的字符串中,有多少是可爱串?小红想知道,n(1<= n <=3000)个节点组成的好二叉树,共有多少种不同的形态?原创 2024-07-05 11:03:38 · 556 阅读 · 0 评论 -
【笔试记录】华为 | 20230823 | cpp
在网元内,存在了 N 个转发节点,每个转发节点有自己唯一的标识 TB 且每个节点有 M 个端口,节点间通过端口进行报文通讯。出于业务隔离的需求,服务器内的端口被划分为多个通讯平面(用 VLAN 隔离,每个 VLAN 都有一个 VLAN ID作为标识)现给出节点 A 的端口数及其各端口所属的 VLAN ID,以及节点 A 相邻的其他节点和端口信息。要求获取与节点 A 处于连通状态的所有相邻节点的 TB 列表(按 TB 从小到大顺序输出)原创 2024-07-01 11:09:59 · 1113 阅读 · 0 评论 -
【笔试记录】京东 | 20230819 | cpp (思路后续补上)
用数学语言描述,当前的坐标在 (x, y) 时,每次移动可以到 (x + k, y) 或 (x, y + k) 或 (x + k, y + k) 其中 k 为任意正整数。已知共有 n 种症状和 m 种药,第 i 种药可以治疗一些症状,但可能会导致一些副作用,添加一些新的症状。所谓“夹吃棋”,即如果存在一个白子,它的两侧 (横向或者纵向)相邻都是黑子,则这个棋子将被“夹吃”,对于黑棋亦然。接下来每组询问输入三行,,每行是一个长度为3的字符串,字符串仅由’o’,‘.’,'*'组成。如果无法到达,请输出-1。原创 2024-06-24 15:45:13 · 948 阅读 · 0 评论 -
【笔试记录】美团 | 230812 | cpp
第二行输入 n 个正整数 ai(1原创 2024-06-15 12:00:58 · 673 阅读 · 0 评论 -
【图论算法题记录】广搜/深搜题目汇总
给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。原创 2024-07-07 11:37:19 · 368 阅读 · 0 评论 -
【单调栈算法题记录】739. 每日温度
给定一个整数数组,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。原创 2024-06-17 15:46:15 · 244 阅读 · 0 评论 -
【动态规划算法题记录】NV某笔试题目(哈希+dp)
总体来说nv的难度没有特别难,但是英文看着好吃力。。。QAQ。原创 2024-08-11 10:46:20 · 284 阅读 · 0 评论 -
【动态规划算法题记录】343. 整数拆分 | 96.不同的二叉搜索树
这两题都是属于思路比较绕,但想清楚之后会发现很简单的,所以前期一定要理解dp数组的相关含义。原创 2024-08-11 10:32:31 · 331 阅读 · 0 评论 -
【动态规划算法题记录】背包汇总(更新ing)
根据两组互斥关系,买了 2 就不能买 1 和 3,所以我们可以购买物品 1 和物品 3,这样达到最大价值。米小游认为有些东西一起购买会带来灾难,比如可莉的角色立牌和蹦蹦炸弹的小手办,所以他设定了。背包容量只有20,只能装下一个物品,选择第二个物品,价值30。米小游希望装下的物品的价值之和最大,请你帮帮他求出最大价值。容量的背包,他能够装得下任意多个体积之和不超过。来说的最佳策略,也就是最大价值。表示每个物品的体积和价值。,每个商品都有一个价值。,米小游有一个有一个。,描述一组互斥关系。原创 2024-08-05 12:12:21 · 664 阅读 · 0 评论 -
【动态规划算法题记录】不同路径
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。问总共有多少条不同的路径?原创 2024-06-20 15:36:36 · 282 阅读 · 0 评论 -
【动态规划算法题记录】746. 使用最小花费爬楼梯
给你一个整数数组cost,其中cost[i]是从楼梯第i个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为0或下标为1的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。原创 2024-06-15 09:53:51 · 378 阅读 · 0 评论 -
【动态规划算法题记录】70. 爬楼梯——递归/动态规划
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬个台阶。你有多少种不同的方法可以爬到楼顶呢?原创 2024-06-13 17:01:12 · 493 阅读 · 0 评论 -
【动态规划算法题记录】 509. 斐波那契数
看到题目的第一眼,直接递归!完事。原创 2024-06-13 15:12:30 · 422 阅读 · 0 评论 -
【贪心算法题记录】134. 加油站
首先这题的限制在于:每个站点的净剩余油量都要大于等于0,即。很久没有做贪心算法题了,已经完全不记得咋做了orz…这个区间内,无论选择哪一个站点作为起始站点,走到。一旦小于0,起始位置至少要是i+1才能满足条件。全局最优:可以找到能跑一圈的起始位置。思路都在注释里,不够超出时间限制了。都会断油,那么我们这时就可以选择。那么i从索引0开始累加。作为起始开始重新计算。小于0,则说明从0到。原创 2024-07-11 21:52:59 · 297 阅读 · 1 评论 -
【贪心算法题记录】122. 买卖股票的最佳时机 II
在每一天,你可以决定是否购买和/或出售股票。你也可以先购买,然后在。天卖出,那么获得的利润就是。贪心的思路就在于我们。原创 2024-06-05 10:40:49 · 856 阅读 · 0 评论 -
【贪心算法题记录】1005. K 次取反后最大化的数组和
代码很简单,虽然ac了,但是如果k值很大,这样处理的效率会非常低。以这种方式修改数组后,返回数组。可以多次选择同一个下标。原创 2024-06-03 11:16:00 · 393 阅读 · 0 评论 -
【贪心算法题记录】跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。原创 2024-06-19 20:27:00 · 222 阅读 · 0 评论 -
【贪心算法题记录】53. 最大子数组和
这道题我一开始想的是用双指针实现(实际上也是贪心的本质)。因为负数可能会对整个子数组具有负贡献,所以我们每次在。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。,但实际上也没有考虑完全,这只是负贡献的一种。上面的代码一开始判断负贡献那里我写的是。不过实际上用不着双指针,只用一个。还要小的话,说明还不如直接从。是数组中的一个连续部分。之后都要进行比较,如果。原创 2024-05-31 10:17:07 · 497 阅读 · 0 评论 -
【贪心算法题记录】376. 摆动序列
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列。相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。的大小来判断当前趋势是否是摆动的,直接想法是:两者一个小于0,一个大于0,就是摆动的趋势。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。通过上面的分析,我们可以写出下面的代码(原创 2024-05-29 12:43:47 · 852 阅读 · 0 评论 -
【贪心算法题记录】455. 分发饼干
先找到。原创 2024-05-27 10:52:56 · 255 阅读 · 0 评论 -
【回溯算法题记录】78. 子集 | 90. 子集 II | 491. 非递减子序列
数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。我们要去除的是同一层节点的重复数,而不是同一个树枝上的重复数,所以需要用一个。,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。,找出并返回所有该数组中不同的递增子序列,递增子序列中。,也就是说如果我们按照上题的解题思路,答案中就会。返回的解集中,子集可以按。返回该数组所有可能的 子集(幂集)。这题和子集II很像,但是需要注意的是这题。分割成了一个一个子问题再进行回溯求解。,所以在这题中,我们要考虑到这一点。原创 2024-08-11 16:16:25 · 339 阅读 · 0 评论 -
【回溯+双指针算法题记录】回文字符串汇总
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个。是不是回文字符串,如果是,则将当前分割结果放入path中,如果不是就continue,去看下一个。这个区间切割的可能情况,纵向是针对每一种可情况的。其实切割问题和组合问题本质上是一样的,我们将。等,所以我们要把这些情况考虑进去。分割成一些子串,使每个子串都是。当作上一次的分割结束点,横向是从。字母和数字都属于字母数字字符。就是上一次的分割结束点。所有可能的分割方案。每次分割时可以判断当前。原创 2024-07-09 15:38:31 · 337 阅读 · 0 评论 -
【回溯算法题记录】组合总和题汇总
整体的逻辑就是我上面这张图这样(第二行的{2, 3} sum=5后面应该还有哈,但是我懒得画了)。如果至少一个数字的被选数量不同,则两种组合是不同的。所以除了第一次选择的元素之外,我们之后所做的操作都是相同的,那么就可以定义一个。的 所有 不同组合 ,并以列表形式返回。因为这题可以重复选取,那么我们每次选取都是在一个相同的集合中(例如。来表示我们首次选择的元素的index,用一个一维数组。放在类成员变量中,就不用写在函数入口。对于给定的输入,保证和为。但是不出意料的没通过。是当前路径统计的和。原创 2024-06-18 15:33:20 · 490 阅读 · 0 评论 -
【回溯算法题记录】组合问题汇总
给定两个整数n和k,返回范围[1, n]中所有可能的k个数的组合。你可以按返回答案。原创 2024-05-14 11:09:50 · 377 阅读 · 0 评论 -
【二叉树算法题记录】669. 修剪二叉搜索树
这题很容易忽略的一点是,如果当一个节点值小于给定区间,我们就直接把它的左子树送上去,需要注意的是它的左子树中可能也存在不满足区间的节点。改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。通过修剪二叉搜索树,使得所有节点的值在。给你二叉搜索树的根节点。原创 2024-06-06 10:56:38 · 328 阅读 · 0 评论 -
【二叉树算法题记录】450.删除二叉搜索树中的节点
对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。给定一个二叉搜索树的根节点。,删除二叉搜索树中的。原创 2024-06-03 10:31:27 · 248 阅读 · 0 评论 -
【二叉树算法题记录】701. 二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点root和要插入树中的值value,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据,新值和原始二叉搜索树中的任意节点值都不同。,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。你可以返回。原创 2024-05-27 11:45:48 · 267 阅读 · 0 评论 -
【二叉树算法题记录】236. 二叉树的最近公共祖先
实际上我们写出的代码就已经包含了上面说的第二种情况。因为函数一开始就要判断当前节点是不是p或q,如果p或q一方本来就是最近公共祖先,那么他最后总会传递到最后。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(这题显然是要从下往上去看,而我们知道二叉树的遍历是从根节点开始的,但是处理顺序可以从下往上。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。,则这个节点就是他们的最近公共祖先。原创 2024-05-26 14:56:26 · 344 阅读 · 0 评论 -
【二叉树算法题记录】501. 二叉搜索树中的众数
首先我们遍历整个树,可以记录每个元素出现的次数(用map),然后对map进行排序,我们就能得到出现频率最高的元素。,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。给你一个含重复值的二叉搜索树(BST)的根节点。如果树中有不止一个众数,可以按。原创 2024-05-22 16:21:19 · 345 阅读 · 0 评论 -
【二叉树算法题记录】二叉搜索树题目汇总
返回以该节点为根的子树。如果节点不存在,则返回。,即如果我们走一个方向走到头了,要返回到上层走另一个方向。,通过和根节点判断就能确定搜索的方向。,判断其是否是一个有效的二叉搜索树。你需要在 BST 中找到节点值等于。给定二叉搜索树(BST)的根节点。给你一个二叉树的根节点。但是对于二叉搜索树,原创 2024-05-18 19:41:24 · 454 阅读 · 0 评论 -
【二叉树算法题记录】从中序与后序遍历序列构造二叉树,从前序与中序遍历序列构造二叉树
这样我们就能确定整棵树的根节点在。原创 2024-05-15 16:20:44 · 416 阅读 · 0 评论 -
【二叉树算法题记录】404. 左叶子之和
给定二叉树的根节点root,返回所有左叶子之和。原创 2024-05-12 09:57:25 · 241 阅读 · 0 评论 -
【二叉树算法题记录】二叉树的所有路径,路径总和——回溯
给你一个二叉树的根节点root,按,返回所有从根节点到叶子节点的路径。原创 2024-05-10 19:32:14 · 380 阅读 · 0 评论 -
【二叉树算法题记录】110. 平衡二叉树
给定一个二叉树,判断它是否是。什么是平衡二叉树?一个二叉树。原创 2024-05-07 21:10:17 · 280 阅读 · 0 评论 -
【二叉树算法题记录】222. 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。原创 2024-05-06 18:23:03 · 320 阅读 · 0 评论 -
【二叉树算法题记录】最大和最小深度
这样一来我们得到左右子树的最大深度,然后选择较大的那一个深度+1即为整体二叉树的最大深度。迭代法实际上就是层次遍历,我们遍历到左右孩子都为空的节点就可以返回了,它所在层数一定是二叉树的最小深度。给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。:由于是先得到左右子树的最大深度,再得到根节点的最大深度,所以是。递归法实际上可以简化成寻找根节点。原创 2024-05-06 14:47:34 · 396 阅读 · 0 评论 -
【二叉树算法题记录】101. 对称二叉树
给你一个二叉树的根节点root, 检查它是否轴对称。原创 2024-04-26 17:04:02 · 204 阅读 · 0 评论