自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(101)
  • 收藏
  • 关注

原创 贪心算法(2024/7/16)

目标是找出最少需要安装的摄像头数量,覆盖整棵树的所有节点。那么从后向前遍历,就可以重复利用上次比较得出的结果了,从后向前遍历332的数值变化为:332 -> 329 -> 299。举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。判断重叠区间问题 先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以.一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。首先,根据每个区间的左边界,对给定的区间集合。

2024-07-16 22:46:52 1656

原创 贪心算法练习题(7/2)

给定一个区间的集合 ,其中 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。示例 1:输入: intervals = [[1,2],[2,3],[3,4],[1,3]]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: intervals = [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:输入: intervals = [ [1,2], [2,3] ]输出: 0解

2024-07-02 23:26:38 984

原创 贪心算法练习题(2024/6/27)

编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。

2024-06-27 23:38:17 642

原创 贪心算法练习题(2024/6/24)

给你一个整数数组 和一个整数 ,按以下方法修改该数组:重复这个过程恰好 次。可以多次选择同一个下标 。以这种方式修改数组后,返回数组 可能的最大和 。示例 1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。示例 2:输入:nums = [3,-1,0,2], k = 3输出:6解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。示例 3:输入:nums = [2,-3,-1,5,-4

2024-06-24 23:43:22 761

原创 贪心算法练习题(2024/6/21)

贪心策略是每次在当前能够覆盖的范围内选择能使下一步覆盖范围最大化的跳跃步数。通过不断更新。

2024-06-22 12:17:39 990

原创 贪心算法练习题(2024/6/18)

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解。

2024-06-20 00:02:25 1090

原创 回溯算法练习题(2024/6/18)

的目标是填充数独中的空白格子(用’.'表示),使得每个数字都符合数独的规则(每行、每列、每个3x3子数独内都不能有重复的数字)。在每一层递归中,通过循环尝试将皇后放置在当前行的每一个列上,然后递归处理下一行。这种方法通过逐行放置皇后,并通过回溯撤销不符合条件的放置,最终找到所有合法的N皇后布局。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。的目的是在棋盘上逐行放置皇后,并检查每一步是否符合规则。时,即所有行都处理完毕,此时找到了一个合法的皇后布局,将其加入。

2024-06-18 00:12:19 862

原创 回溯算法练习题(2024/6/14)

因为要考虑处理重复元素的情况。实际上,整个数组都要遍历到,因此终止条件是在每次递归时自然完成的。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。,找出并返回所有该数组中不同的递增子序列,递增子序列中。,其中可能包含重复元素,请你返回该数组所有可能的。返回的解集中,子集可以按。这里没有明确的终止条件判断。给定一个不含重复数字的数组。

2024-06-14 15:49:38 1040

原创 回溯算法练习题(2024/6/12)

如果当前已经搜索到索引 `i` 的位置,下一次搜索就从 `i+1` 的位置开始,这样确保了不会重复搜索已经处理过的部分,也符合回溯算法的思路。每次递归调用时,我们都会更新切割线,使得下一次搜索的范围不会重复之前已经搜索过的部分。在回溯过程中,如果发现当前元素与前一个元素相同,并且前一个元素未被使用过,那么就需要跳过当前循环,避免重复选择相同元素。所以,在处理组合问题时,递归参数中的 `startIndex` 可以被理解为切割线,决定了每一轮递归搜索的起点,帮助我们避免重复搜索和有效地控制搜索范围。

2024-06-12 21:01:30 721

原创 回溯算法练习题(2024/6/10)

在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。该列表不能包含相同的组合两次,组合可以以任何顺序返回。如果至少一个数字的被选数量不同,则两种组合是不同的。7 也是一个候选, 7 = 7。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。所有可能的有效组合的列表。没有其他符合的组合了。没有其他符合的组合了。

2024-06-10 23:31:48 798

原创 数据库练习题

这张表中存所有用户,每个用户都有一个唯一的 users_id ,role 是一个表示用户身份的枚举类型,枚举成员为 (‘client’, ‘driver’, ‘partner’)。这张表中存所有出租车的行程信息。是 SQL 中的一个窗口函数,用于计算一个值的密集排名,即在结果集中按照指定的排序条件为每个行分配一个唯一的整数排名值,并且没有间隔。请注意,即使第 7 行和第 8 行的 visit_date 不是连续的,输出也应当包含第 8 行,因为我们只需要考虑 id 连续的记录。dense_rank。

2024-06-07 16:27:05 1549

原创 二叉树练习题(2024/6/5)

当栈为空时,所有节点都已经遍历并翻转,返回根节点完成翻转操作。子树不对称:如果左节点的左子树与右节点的右子树不对称,或者左节点的右子树与右节点的左子树不对称,那么这两个节点也不对称。左右节点为空情况:当左节点为空而右节点不为空,或者左节点不为空而右节点为空时,这种情况下两个节点不对称。遍历当前层的节点,取出队首节点,如果存在左子节点,则将左子节点入队;根节点为空:如果根节点为空,则二叉树被视为对称的,因为空树被认为是对称的。节点值不相等:如果左右节点的值不相等,那么这两个节点不对称。, 检查它是否轴对称。

2024-06-05 21:09:32 657

原创 二叉树练习题(2024/6/3)

具体来说,在遍历二叉树的过程中,我们将待访问的节点放入栈中,然后不断从栈中弹出节点,并按照规定的顺序访问节点的值,并将其子节点放入栈中。中序遍历,中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了。:确定递归函数需要传入的参数,通常包括当前问题的输入以及一些辅助参数,返回值通常是当前问题的解或者某种状态。:确定在每一层递归中应该做些什么,通常包括对参数的处理、递归调用自身及返回结果的处理。

2024-06-03 23:18:07 836

原创 栈与队列练习题(2024/6/2)

堆中每个节点的值必须满足堆的特定排序性质,即对于小顶堆(Min-Heap)来说,父节点的值小于或等于其子节点的值;对于大顶堆(Max-Heap),父节点的值大于或等于其子节点的值。堆是一棵完全二叉树,即除了最底层,其它层的节点都被完全填充,并且最底层的节点都集中在左侧。的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。使用栈来模式队列的行为,如果仅仅用一个栈,是一定不行的,所以需要两个栈。大顶堆(堆头是最大元素),小顶堆(堆头是最小元素),这里要注意输入栈和输出栈的关系。

2024-06-02 12:27:38 768

原创 栈与队列练习题(2024/5/31)

例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。我们在删除相邻重复项的时候,其实就是要知道当前遍历的这个元素,我们在前一位是不是遍历过一样数值的元素,那么如何记录前面遍历过的元素呢?所以就是用栈来存放,那么栈的目的,就是存放遍历过的元素,当遍历当前的这个元素的时候,去栈里看一下我们是不是遍历过相同数值的相邻元素。

2024-05-31 23:57:19 779

原创 哈希表练习题(2024/5/29)

而且这道题目中字符串只有小写字符,那么就可以定义一个数组,来记录字符串s里字符出现的次数。哈希数据结构:unordered_set。中每个字符出现的次数都相同,则称。输出结果中的每个元素一定是。,编写一个函数来判断。[4,9] 也是可通过的。

2024-05-29 22:03:29 871

原创 Opencv图像处理技术(图像轮廓)

图像轮廓是指图像中连续的像素边界,这些边界通常代表了图像中的物体或者物体的边缘。轮廓可以用来描述和分析图像中的形状和结构,是许多计算机视觉任务的基础,如目标检测、形状识别、图像分割等。通常,通过计算轮廓中的凸包可以得到目标物体的外形信息,这对于识别和分析图像中的对象非常有用。在OpenCV中,你可以使用`cv2.arcLength()`函数计算轮廓的长度,以及使用`cv2.contourArea()`函数计算轮廓的面积。这个函数可以用来获取包围轮廓的最小矩形,即矩形包围框的左上角坐标以及宽度和高度。

2024-05-29 17:48:55 836

原创 双指针法和链表练习题(2024/5/28)

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。在 B 中,相交节点前有 1 个节点。首先,判断链表是否为空或只含有一个节点,若是,则无需交换,直接返回头节点。相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。

2024-05-28 19:20:01 1048

原创 双指针法练习题(2024/5/27)

为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。指针能够指向待删除节点的前一个节点,这样在删除操作时就能够方便地处理。就会指向待删除节点本身,而不是它的前一个节点,这会使得删除操作变得复杂。如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。正好指向待删除节点的前一个节点,从而简化删除操作的实现。

2024-05-27 17:28:12 1035

原创 双指针用法练习题(2024/5/26)

接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止。你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。

2024-05-26 22:57:58 1086

原创 练习题(2024/5/24)

在移动的过程中,计算当前两个指针所形成的容器的容量,并更新最大容量值。移动的规则是,每次移动较小高度的指针,因为容器的容量受限于较小高度。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。Joziah 的上级经理是 6 号员工,他已经离职,因为员工表里面已经没有 6 号员工的信息了,它被删除了。当一个经理离开公司时,他们的信息需要从员工表中删除掉,但是表中的员工的。这个表包含了员工,他们的薪水和上级经理的id。它的周长是上面图片中的 16 个黄色的边。

2024-05-25 23:11:48 1029

原创 练习题(2024/5/23)

从网格的边界开始,对边界上为陆地的格子进行深度优先搜索,将与边界相连的陆地格子标记为已访问,并统计数量。然后,根据员工ID进行分组,只选择出现一次的员工ID,最后按照员工ID进行排序。该表的每一行都表示ID为user_id的用户在time_stamp请求了一条确认消息,该确认消息要么被确认('confirmed'),要么被过期('timeout')。在连接过程中,它会计算每个用户的确认率,即确认操作数量与注册操作数量的比率,并四舍五入到小数点后两位。用户 2 做了 2 个请求,其中一个被确认,另一个超时。

2024-05-25 13:32:40 813

原创 练习题(2024/5/22)

定义两个数组。

2024-05-24 20:13:42 714

原创 练习题(2024/5/21)

通过一个简单的循环遍历输入的移动字符串,根据移动方向更新坐标位置。首先,它检查当前房间是否已经被访问过,如果是,则直接返回。然后,将当前房间标记为已访问,并获取当前房间中的钥匙列表。当你进入一个房间,你可能会在里面找到一套不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房间。它最终位于原点的左侧,距原点有两次 “移动” 的距离。所有动作都具有相同的幅度,因此它最终回到它开始的原点。然而,你不能在没有获得钥匙的时候进入锁住的房间。,表示房间访问状态,所有房间初始状态都为未访问。

2024-05-24 10:53:28 1003

原创 练习题(2024/5/20)

登录时间。结果集。

2024-05-20 15:41:22 623

原创 练习题(2024/5/19)

的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。这不是唯一的正确答案,[3,1,4,null,2,null,null] 也是一个可行的构造方案。两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回。要知道中序遍历下,输出的二叉搜索树节点的数值是有序序列。如果一棵二叉搜索树中,每个节点的两棵子树高度差不超过。s 会变成 "c",但 t 仍然是 "b"。给你一棵二叉搜索树,请你返回一棵。,树中每个节点都存放有一个。计算从根节点到叶节点生成的。是指没有子节点的节点。

2024-05-20 09:31:17 639

原创 练习题(2024/5/18)

接下来,将较长链表的指针向前移动,使两个链表剩余的长度相等。最后,同时遍历两个链表,直到找到相交的节点或者到达链表末尾。首先,从Products表中选择product_id和store1列的值,并将"store1"作为store列的值。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。

2024-05-19 10:34:18 1004

原创 练习题(2024/5/17)

快慢指针的方式来判断一个链表是否存在环。快慢指针分别以不同的速度遍历链表,如果链表中存在环,最终快指针会追上慢指针。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。来表示链表尾连接到链表中的位置(索引从 0 开始)。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。,判断链表中是否有环。给你一个链表的头节点。

2024-05-17 10:28:39 952

原创 练习题(2024/5/16)

如果左右边界相差大于1,则表示目标值存在且范围大于1,返回范围内的左右边界;左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,3. 然后再将前 k 个元素进行反转,将其移动到数组末尾,此时数组中的元素顺序已经符合旋转后的要求。右侧数之和 sum = nums[1] + nums[2] = 1 + -1 = 0。是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。4. 最后,对数组中剩余的元素进行反转,以将其移动到数组的前面。

2024-05-16 11:52:25 1020

原创 练习题(2024/5/15)

primary_flag 是一个枚举类型,值分别为('Y', 'N'). 如果值为'Y',表示该部门是员工的直属部门。如果值是'N',则否。在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。例如,数组:1 2 3 4 4 4 ,第一个数值4的下标是3,第二个数值4的下标是4了。对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。对于 nums[4]=3 存在三个比它小的数字:(1,2 和 2)。判断是山峰,主要就是要严格的保证左边到中间,和右边到中间是递增的。

2024-05-15 21:49:27 575

原创 练习题(2024/5/14)

雇员 1 有三次进出: 有两次发生在 2020-11-28 花费的时间为 (32 - 4) + (200 - 55) = 173, 有一次发生在 2020-12-03 花费的时间为 (42 - 1) = 41。编写一个解决方案来返回需要听取汇报的所有经理的 ID、名称、直接向该经理汇报的员工人数,以及这些员工的平均年龄,其中该平均年龄需要四舍五入到最接近的整数。event_day 是此事件发生的日期,in_time 是员工进入办公室的时间,而 out_time 是他们离开办公室的时间。

2024-05-14 22:33:48 956

原创 练习题(2024/5/13)

开始先定义了一个嵌套的节点结构体。

2024-05-14 20:54:44 913

原创 练习题(2024/5/12)

从原始字符串的末尾开始向前遍历,如果遇到数字字符,则依次将 “number” 替换进去;统计完数字个数后,需要将字符串的大小扩充,以便容纳替换后的 “number”。给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。使用一个循环遍历输入的字符串,每当遇到一个数字字符,就将计数器。,请你反转链表,并返回反转后的链表。

2024-05-12 22:49:23 1021

原创 练习题(2024/5/11)

这样,每次窗口滑动时,只需将窗口左侧出队的元素从队列中删除,再将窗口右侧进入的元素依次入队即可。在 2020-12-8,丰田(toyota)有领导者 = [0, 1] 和合伙人 = [0, 1, 2] ,同时本田(honda)有领导者 = [1, 2] 和合伙人 = [1, 2]。在 2020-12-7,丰田(toyota)有领导者 = [0] 和合伙人 = [1, 2] ,同时本田(honda)有领导者 = [0, 1, 2] 和合伙人 = [1, 2]。的滑动窗口从数组的最左侧移动到数组的最右侧。

2024-05-11 22:08:01 984

原创 练习题(2024/5/10)

pop 操作:移除栈顶元素并返回该元素的值时,先计算 que1 的大小 size,然后将 que1 中除了最后一个元素外的所有元素导入 que2 中备份。如果出队栈stOut为空,则将入队栈stIn中的所有元素依次弹出并压入到出队栈stOut,然后从出队栈stOut中取出元素。substring(column_name, start, length):这将从列的值中提取一个子字符串,从指定的起始位置开始,直到指定的长度。调用pop()函数取出元素后,需要将元素再压入出队栈stOut,并返回该元素。

2024-05-10 19:49:18 570

原创 练习题(2024/5/9)

在递归函数内部,需要首先检查递归终止的条件。在这个例子中,终止条件是当左边界。

2024-05-09 14:49:04 824

原创 练习题(2024/5/8)

因为是有序树,所以 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组 一定是在 [p, q]区间的。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(在这个问题中,终止条件是当当前节点为空时,说明已经遍历到叶子节点的子节点,应该返回插入的新节点。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(

2024-05-08 21:51:16 846

原创 练习题(2024/5/7)

在中序遍历的过程中,通过比较当前节点和前一个节点的值来统计当前节点出现的次数,同时更新最大出现次数和众数结果。整体思路是在中序遍历的过程中,通过比较当前节点和前一个节点的值来统计出现次数,同时更新最大出现次数和众数结果,最终返回找到的众数值。在中序遍历的过程中,每次比较当前节点和前一个节点的差值,更新最小差值的结果。整体思路是基于二叉搜索树的性质,即左子树的所有节点小于根节点,右子树的所有节点大于根节点。然后,遍历这个有序数组,计算相邻两个节点值的差值,找出其中的最小值,即为任意两节点的最小差值。

2024-05-07 21:49:26 999 1

原创 练习题(2024/5/6)

首先定义了一个。

2024-05-06 22:45:17 818 1

原创 练习题(2024/5/5)

给定二叉树的根节点root,返回所有左叶子之和。24在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24root = [1]0[1, 1000]采用递归的方法,先计算左子树中左叶子节点的和,然后判断左子树是否为叶子节点,如果是则将该节点的值加入左叶子节点的和中。接着递归计算右子树中左叶子节点的和,最后将左子树和右子树的左叶子节点和相加得到最终结果。

2024-05-05 19:47:17 715

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除