自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Cui's Blog

仅供记录,日常灌水,不要CV,要有思考

  • 博客(243)
  • 收藏
  • 关注

原创 有空的时候会写点,更新随缘

杂记

2023-01-16 21:47:15 67

原创 【LeetCode 算法】Add Two Integers 两整数相加-位运算

而这个问题的升级版,就是不用算术运算符完成2数相加,这个就有点意思了。如果不使用算术运算符,就需要借助二进制,来模拟进行二进制数的加法。呃,解决这个问题一行代码就可以。在二进制的情况下,加法主要使用。具体的看代码实现,涉及到。,返回这两个整数的和。

2023-08-19 20:54:26 408

原创 【LeetCode 算法】Pizza With 3n Slices 3n 块披萨 -记忆化

这个圆形的pizza,每一块都有编号,而且每一块的大小不一样。一般这样,都会想到用递归枚举来做,如果按照昨天的每日pizza问题的递归思路是无法解决的,具体的可以尝试。它要求每次user可以先选一块,然后AB会选user选择的相邻的2块。的pizza,就可以了,这里会出现一个比较特殊的情况,即。要计算出user可以选择的pizza的总和最大。但是这个情况并不符合问题的要求,在环形的情况下。请你返回你可以获得的披萨大小总和的最大值。这个问题,还是比较难想的,如果之前有见过。,此时也是符合要求的。

2023-08-18 23:54:38 421

原创 【LeetCode 算法】Number of Ways of Cutting a Pizza 切披萨的方案数-记忆化

切披萨的每一刀,先要选择是向垂直还是水平方向切,再在矩形的边界上选一个切的位置,将披萨一分为二。如果垂直地切披萨,那么需要把左边的部分送给一个人,如果水平地切,那么需要把上面的部分送给一个人。以上就是整体的思路,为了避免超时,所以需要加memo,同时区域内的apple统计,可以使用二维前缀和。所以对于一个列数为cols,可以进行cols次竖切,同样行数为rows,可以进行rows次横切。如果定义不同的dfs,那么它的过程处理和边界处理都会略有不同。如果不使用memo,那么时间复杂度为指数级,使用memo,

2023-08-17 21:02:35 386

原创 【LeetCode 算法】Find the Losers of the Circular Game 找出转圈游戏输家

这样的问题很讨厌,因为它太简单了,直接模拟就可以了,但是大部分的人潜意识中,会被导向。可能是周赛的影响,今天的每日就很流畅。这个模拟需要注意的是它的No.是。轮中持有球的那位朋友需要将球传递给距离他顺时针方向。在不停的访问中,一定会终止,即某个位置第二次被访问到。此时把所有未被标记的位置从小到大的记录到结果中.在整场游戏中没有接到过球的朋友是。而且是一个环,所以取模是必然的。个朋友的位置开始顺时针移动。个朋友的位置开始顺时针移动。这个问题是一次周赛的Q1。那么下一个可以被访问的人,给你参与游戏的朋友数量。

2023-08-16 21:07:00 349

原创 【LeetCode 算法】Find And Replace in String 字符串中的查找与替换-线性模拟

其主要的思路是构建一个长度与原字符串等长的标记数组,然后遍历每个被操作的索引,并且进行验证。之前的是基于有序的状态下,依次遍历每个被操作的字符串的每个位置,所以需要预处理排序。如果需要替换,那么就把需要替换的目标串放入,并且记录其影响的位置长度。需要注意的是在发生替换的情况下,可能会对后续的一定长度的字符跳过。发生,这意味着替换操作不应该影响彼此的索引。如果不需要替换,同样进行标记,该位置的字符串默认直接插入结果串。而线性的思路,与其说是不排序,不如理解为利用数组的自己的。仅由小写英文字母组成。

2023-08-16 20:48:19 315

原创 【LeetCode 算法】Find And Replace in String 字符串中的查找与替换-排序模拟

toc]

2023-08-15 23:42:29 330

原创 【LeetCode 算法】Merge Two Binary Trees 合并二叉树

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;目标是将2个树,进行覆盖,可以合并到第3个树上,也可以将tree2合并到tree1.相对于递归的方法比较容易想到,迭代的实现方式也有很多,所以有点绕。其中最简单的就是前序递归,细节就不说了,all in code.而且是要求相同的位置进行merge,所以必然要对树进行遍历。null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。

2023-08-14 23:47:50 272

原创 【LeetCode 算法】Merge Sorted Array 合并两个有序数组

注意指针的移动,别越界,当一个指针小于0时,就可以单独处理另一个指针。**注意:**最终,合并后数组不应由函数返回,而是存储在数组。个元素表示应合并的元素,后。中,使合并后的数组同样按。常见的处理方式,就不赘述了。先说结论,从尾部进行双指针。整个过程可以看成是一个。

2023-08-13 16:16:23 294

原创 【LeetCode 算法】Minimum Falling Path Sum II 下降路径最小和 II-动态规划-SP

在DP的基础上,有一层是需要O(N)的时间复杂度来找min。但是这里有一个trick,在计算某一行的元素时,只需要 记录。定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。定义f[i][j] 表示在选到第i+1行的第j列的元素时,可以得到的最小路径和。如果找上一行的最小值索引与当前元素不一致,可以直接使用这个min,否则就只能选。给你一个 n x n 整数矩阵 grid ,请你返回。这里没有使用滚动数组压缩空间。

2023-08-12 21:53:50 260

原创 【LeetCode 算法】Merge k Sorted Lists 合并 K 个升序链表

这里有k个链表,以之前的经验,可以相邻的2个合并,假设链表的平均长度都是L,那么按照这个方式处理,需要合并k-1次,第一次的平均时间复杂度为。既然每个链表都是有序的,那么可以从k个节点中找到最小的加入最终结果的尾部。思路没有大问题,但是数据规模大的情况下,这个时间复杂度并不友好。请你将所有链表合并到一个升序链表中,返回合并后的链表。如果是朴素的找法,从k个节点找最小的,单次耗时。给你一个链表数组,每个链表都已经按升序排列。目前没有比这2个思路更快的,时间复杂度都是。一共有kL个节点,时间复杂度也是。

2023-08-12 21:45:56 277

原创 【LeetCode 算法】Matrix Diagonal Sum 矩阵对角线元素的和

请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。,请你返回矩阵对角线元素的和。这个问题就是矩阵的对角线遍历。

2023-08-11 21:35:16 920

原创 【LeetCode 算法】Minimum Falling Path Sum II 下降路径最小和 II-动态规划

定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。给你一个 n x n 整数矩阵 grid ,请你返回。暴力递归可以处理,同样的DP也可以处理。列的元素时,可以得到的最小路径和。

2023-08-11 21:21:50 259

原创 【LeetCode 算法】Minimum Falling Path Sum II 下降路径最小和 II -DFS

定义为:从 grid 数组中的每一行选择一个数字,且按顺序选出来的数字中,相邻数字不在原数组的同一列。实际的目标是要从每一行选一个数,而且相邻的行不能选择同一列,这样的n个数的。如果以暴力计算,第一行可以选择n,第二至第n行,每一行可以选择n-1。所以记忆化搜索,可以大幅度的减少时间复杂度,理论上可以达到。给你一个 n x n 整数矩阵 grid ,请你返回。以递归搜索这个思路计算的时间复杂度,依然是。简单的试图使用暴力的方式是无法解决的。所以可以利用递归的方式来搜索这个路径。以问题的描述,一定会存在。

2023-08-10 21:01:24 231

原创 【LeetCode 算法】Subtract the Product and Sum of Digits of an Integer 整数的各位积和之差

依次拆出这个数的每一位,分别计算。,请你帮忙计算并返回该整数「这应该算是一个数学问题.

2023-08-09 21:18:09 125

原创 【LeetCode 算法】Maximum Absolute Sum of Any Subarray 任意子数组和的绝对值的最大值-动态规划

下,计算出子数组的最大和。具体的理论可以google,bing。的任意子数组(可能为空),并返回该 最大值。给你一个整数数组 nums。还有一个专门用来处理子数组最大和的算法。如果 x 是非负整数,那么。如果 x 是负整数,那么。除了暴力枚举,前缀和计算。

2023-08-09 21:09:12 229

原创 【LeetCode 算法】Maximum Absolute Sum of Any Subarray 任意子数组和的绝对值的最大值-前缀和

灵神的代码更精简,不过他是从前缀和的另一个角度来看这个问题的,所以有点不一样。要得到这样的最大值,那么子数组的和sum一定要尽可能的大,或者尽可能的小,即。,所以暴力会TLE,而且即使计算出了子数组,计算其和也是需要时间的。的任意子数组(可能为空),并返回该 最大值。因此只需要在数组中找到子数组和最大的。可以利用前缀和的思路,进行累加。如果 x 是非负整数,那么。如果 x 是负整数,那么。,计算其和的绝对值,然后取。到这里,就和某个问题很像了。但是子数组的数量规模是。,sum的最小负数。

2023-08-08 22:08:24 214

原创 【LeetCode 算法】Reverse String 反转字符串

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。入门级方法,就是新开一个数组,从右向左依次填入原数组的从左向右的元素,呃,反转字符串,还能说啥呢,看代码吧。

2023-08-07 21:07:59 290

原创 【LeetCode 算法】Swap Nodes in Pairs 两两交换链表中的节点

而迭代的处理和正常的思路一样,比较容易理解,空间的消耗相对小。当然这也不是绝对的,具体的问题中的时空复杂度,都会被具体使用的数据结构所影响。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。,所以每个循环中需要处理的就是交换节点,如果整个链表长度为。,处理完最后一个循环,就结束了,如果是。代码相对简单,但是需要对。的流程熟悉,缺点就是对于。链表中节点的数目在范围。,然后再找2个节点,再。,但是流程基本一样。

2023-08-06 15:13:39 328

原创 【LeetCode 算法】Merge Two Sorted Lists 合并两个有序链表

常见的思路,就是开一个新链表l3,每次从l1,l2中找最小的插入l3.新链表是通过拼接给定的两个链表的所有节点组成的。的处理方式,就是将迭代的改一下。将两个升序链表合并为一个新的。两个链表的节点数目范围是。整体就是一个链表状态的。

2023-08-05 19:59:06 253

原创 【LeetCode 算法】Unique Paths III 不同路径 III 暴力DFS

假设路径中的点X,到达X时,可以是4个方向,而且之前的路径也无法通过子问题来得到。返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目。因为不能重复经过同一个方格,所以可以使用一个标记数组记录已访问的方格。每一个无障碍方格都要通过一次,但是一条路径中不能重复通过同一个方格。一开始看到路径问题,让我联想到了DP,但是看完要求,就果断放弃了。一个矩阵上除去障碍,剩余的 空白处,都是必须经过的,假设这个数量为。但是可以知道的是,到达X时,走了多少步,还有多少步可以走。

2023-08-04 23:34:54 221

原创 【LeetCode 算法】Remove Comments 删除注释-模拟

字符串/* 表示一个块注释,它表示直到下一个(非重叠)出现的*/之间的所有字符都应该被忽略。(阅读顺序为从左到右)非重叠是指,字符串/*/并没有结束块注释,因为注释的结尾与开头相重叠。我们保证每一个块注释最终都会被闭合, 所以在行或块注释之外的/*总是开始新的注释。,那么字符要么在注释内,要么不在注释内。字符串// 表示行注释,表示//和其右侧的其余字符应该被忽略。同样,如果字符串/*出现在行或块注释中也会被忽略。在 C++ 中有两种注释风格,行内注释和块注释。如果字符串//出现在块注释中会被忽略。

2023-08-03 18:15:52 446

原创 【LeetCode 算法】Card Flipping Game 翻转卡片游戏-阅读题

从问题中可以知道,一种特殊的卡片,即正反一样的数字,这样的数字是不可能进入备选的,基于这个条件可以进行初筛。如果我们通过翻转卡片来交换正面与背面上的数,那么当初在正面的数就变成背面的数,背面的数就变成正面的数。如果选中的那张卡片背面的数字 X 与任意一张卡片的正面的数字都不同,那么这个数字是我们想要的数字。如果选择了一个卡片,该卡片背面的数字x与此时任意正面的数字都不一样,那么x就可以入选备选。可以对任意卡片进行任意的反转,找到最小的那个数字,如果不存在这样的数字最后就是0。

2023-08-02 19:00:25 350

原创 【LeetCode 算法】Power of Heroes 英雄的力量

给你一个下标从 0 开始的整数数组 nums ,它表示英雄的能力值。如果我们选出一部分英雄,这组英雄的。如果是使用暴力的方式,就是枚举所有的子序列然后对每个子序列进行找。一开始没看清问题的意思,以为要计算子数组,而实际上是要求。表示这组英雄在数组中的下标。一次周赛的hard,当时没时间做。个子序列,很明显这样不可能,,在计算power的过程中的。以当前数组的规模,可能有。,而是可以通过前一个i的。假如有一个子序列,这个。,和子序列的长度有关。,来计算出当前所需要的。,就可以计算出来,即。

2023-08-01 22:42:19 441

原创 【LeetCode 算法】Reorder List 重排链表

所以需要知道从哪里拆,可以使用快慢指针,或者是简单遍历计数。还要知道如何反转链表,可以递归,或者是头插,或者是顺序逆转。将所有节点依次入队,然后分别从2端点取节点,完成链接,然后继续从队列中取节点,补在之前的节点后面。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。只要熟悉双端队列,会操作链表节点插入,基本就可以。仔细观察可以发现,最终的链表是。

2023-07-31 19:14:14 875

原创 【LeetCode 算法】Linked List Cycle II 环形链表 II

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。它的思路比较简单,如果存在环,那么先找到快慢指针在环中的相遇的点 x,然后再让2个指针分别从head,x出发,直到2者相遇,就是环的。提示你可以从路程的角度来思考,即一个从x出发的指针,它可能走c,或者是k(b+c)+c,然后恰好与另一个指针在入口相遇。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。

2023-07-30 16:24:21 719

原创 【LeetCode 算法】Linked List Cycle 环形链表

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。所以遍历的过程中,每遇到一个新节点,就利用哈希表进行判断是否出现过,如果出现过,说明了节点一定重复访问了,从而说明。有的思路是利用节点的值,进行判断,很明显这个思路有缺陷,如果整个链表都是相同的值,就明显无法进行判断。另一种是双指针,一个fast,一个slow,fast一次走2步,slow一次一步。链表中节点的数目范围是。

2023-07-29 14:53:46 933

原创 【LeetCode 算法】Parallel Courses III 并行课程 III-拓扑

给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n。之前 完成(先修课的关系)。同时给你一个下标从 0 开始的整数数组 time ,其中。所以按照拓扑排序的思路来处理,就是需要构建一个图,图无非就是邻接表或者是邻接矩阵。注意:测试数据保证一定可以完成所有课程(也就是先修课的关系构成一个。但是由于问题的规模限制,邻接表是一个比较合适的选择。如果一门课的所有先修课都已经完成,你可以在。,相比较之前的一个问题中,要求一个学期。该问题的复杂性并不大,是最简单的。请你返回完成所有课程所需要的。

2023-07-28 19:38:47 296

原创 【LeetCode 算法】Delete Greatest Value in Each Row 删除每行中的最大值

所以最简单的就是对每一行进行排序,然后每一轮都从有序的行元素选择最大值,这个比较的过程。从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。注意 每执行一次操作,矩阵中列的数据就会减 1。将删除元素中的最大值与答案相加。问题的核心就是理解它的目的。返回执行上述操作后的答案。没错,就是这么简单的操作。,然后将该元素从该行中。

2023-07-27 21:57:00 232

原创 【LeetCode 算法】Handling Sum Queries After Update 更新数组后处理求和查询-Segment Tree

没错,问题的query指令还有1和2,它们会对nums1进行修改,从而影响到nums2的元素,进而会影响到结果。从下标 l 到下标 r 的所有 0 反转成 1 或将 1 反转成 0。这个问题给的2个数组nums1,nums2,同时还有query指令。其实nums2这个数组,是一个中间数组,虽然是统计nums2的和,如果是纯粹计算数组的元素和,是配不上这个hard。请你返回一个数组,包含所有第三种操作类型的答案。的操作,nums1的某个区间出现了。内的出现的1,会导致处于该区间内的。

2023-07-26 22:01:43 186

原创 【LeetCode 算法】Minimum Operations to Halve Array Sum 将数组和减半的最少操作次数-Greedy

给你一个正整数数组 nums。每一次操作中,你可以从 nums 中选择 任意 一个数并将它。(注意,在后续操作中你可以对减半过的数继续执行操作)目标是将数组的和减少到原始数组和的一半,而且是。但是问题是要求最少的,所以细化一下目标,,假设要操作k次,整体的时间复杂度为。即使如此,这个暴力的时间复杂度依然有。,而且可以重复选择某个下标的元素。,所以整体的时间复杂度就会降低到。请你返回将 nums 数组和。如果是暴力的算法,就是。所以就需要进行加速,而。在优先队列中的维护一个。,然后减半,放回去,

2023-07-25 22:56:54 598

原创 【LeetCode 算法】Jewels and Stones 宝石与石头

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。属于基础性的模拟,利用哈希表记录宝石的种类,然后遍历石头,当石头的类型与宝石的种类匹配,那么就找到一个jewel。,这属于特殊情况下的trick,不具有普遍的适用性,可以了解一下。字母区分大小写,因此 “a” 和 “A” 是不同类型的石头。,进行空间的压缩,使用一个long来存放哈希标记。主要是在哈希的空间上,

2023-07-24 20:46:20 255

原创 【LeetCode 算法】Trapping Rain Water 接雨水-数组处理

所以需要加速一下,可以使用一个数组,在遍历的过程中,记录下每个位置i左侧的最大柱子高度,在。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。如果是暴力,就是固定一个位置 i,然后向2侧找到最高的柱子。侧信息,并且进行计算可以得到每个位置上的雨水高度。对于一个二维柱面来说,某个位置x是否能接到雨水,同样再从右到左的一次处理,就可以得到每个位置的。的时间复杂度,就可以得到每个位置的。以当前的数据规模,必然TLE。,用min表示2侧最低,暴力的一次时间复杂度就是。,可以接到雨水的高度。

2023-07-23 20:34:17 187

原创 【LeetCode 算法】Max Value of Equation 满足不等式的最大值-优先队列

给你一个数组 points 和一个整数 k。数组中每个元素都表示二维平面上的点的坐标,并按照横坐标 x 的值从小到大排序。points是一堆二维平面坐标的数组,而且是以x非递减的顺序排列。可以使用优先队列进行处理。所以整体的时间复杂度大概为。题目测试数据保证至少存在一对能够满足。中文是满足不等式,英文是等式的最大值。而k的存在就是对i和j的范围限制。其实这个问题谜底就在谜面上。

2023-07-23 20:02:59 190

原创 【LeetCode 算法】Lemonade Change 柠檬水找零

如果你能给每位顾客正确找零,返回 true ,否则返回 false。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。这个问题中,每个客户都要求必须找零,不会让你keep change。复杂性一点没有,就是一个模拟问题,由于bill的限制,只有。,所以只要能找钱成功,这个交易就算成立,否则。

2023-07-22 16:44:19 88

原创 【LeetCode 算法】Maximum Sum Circular Subarray 环形子数组的最大和-单调队列

给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和。形式上, nums[i] 的下一个元素是。的,虽然在昨天的提交中还可以勉强AC,但是理论上这个时间复杂度是不太理想的,和之前的。基于上一篇的优先队列,可以很明显的看出时间复杂度很高,在该问题规模下,是非常有可能。目标同样是要找在固定下标i左侧的最小前缀和。,而单调队列是基于更加巧妙的队列维护。构成更大的子数组和,所以这个情况下,的时间复杂度更是无法比。构造更大的子数组和,那么。所以在队列的尾部,用。

2023-07-22 16:17:57 123

原创 【LeetCode 算法】Maximum Sum Circular Subarray 环形子数组的最大和 - 优先队列

所以可以枚举可能的子数组的右端点right,而为了计算子数组的和,肯定要使用前缀和,所以在枚举的过程中计算出每个下标对应的presum,将其入优先队列。对于一个环形数组,要计算其最大的子数组和,而且这个子数组不能超过数组的长度N,所以可以使用2个数组前后拼接,这样就可以模拟一个环形数组。给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和。今天可以换个思路,该思路是建立在 已经知道如何计算长度为N的数组中的最大子数组和的前提下。,所以整体的时间复杂度为。

2023-07-21 23:51:20 91

原创 【LeetCode 算法】Maximum Sum Circular Subarray 环形子数组的最大和

对于情况1,子数组不为空,所以至少会有1个元素,而情况2,最小值的子数组sum是可以为0的,此时对应的就是整个数组。但是对于环形结构的数组,它的子数组可能存在的几个情况,L表示子数组的左边界,R表示子数组的右边界,N 表示数组的长度。如果延用之前的前缀和思路,可以计算出情况1的最大和,但是却不能计算出情况2的,但是相反,整个数组的和为。对于一个全负数的数组来说,它的最大子数组和一定也是负数,但是在情况2中,计算的结果就是0。对于普通的数组,计算其子数组的最大和,很明显可以通过前缀和,或者DP来处理。

2023-07-20 23:49:23 116

原创 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 二分

这个问题中,可以移动的范围可以看做是一个二维直角坐标系。起始点是原点[0,0],这个移动范围是不受边界限制的,它不同于一般的矩阵,有行列大小限制。机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。返回从原点到机器人所有经过的路径点(坐标为整数)的最大欧式距离的平方。机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。当然也可以使用二分,在移动的过程中使用二分来快速判断是否会遇到obstacle,整体时间复杂度。

2023-07-19 22:03:59 1734

原创 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 哈希

机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。最简单的方式,就是在每次移动时确定要移动的方向,然后移动C步,每移动一步,需要判断是否遇到obstacle,如果遇到,就需要在。机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。如果是普通的判断坐标是否是obstacle,就需要遍历O(N)的长度,而command的次数是。加速的方式有几种,目标就是缩短判断的时间复杂度,最常见的就是HashMap。

2023-07-19 21:59:58 1609

空空如也

空空如也

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

TA关注的人

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