- 博客(46)
- 收藏
- 关注
原创 Leetcode 百题训练 76. 最小覆盖子串
遍历字符串s时,以右边界right为当前节点,使用哈希表m2记录滑动窗口内元素出现的个数,并且用整型cnt记录滑动窗口中的有效字符(即字符串t中出现的字符,并且在规定数量内)最小覆盖子串 "BANC" 包含来自字符串 t 的 'A'、'B' 和 'C'。对于滑动窗口来说,则需要更新处理冗余字符(即更新滑动窗口)t 中两个字符 'a' 均应包含在 s 的子串中,因此没有符合条件的子字符串,返回空字符串。所有字符的子串,则返回空字符串。整个字符串 s 是最小覆盖子串。所有字符的最小子串。
2025-01-08 14:33:08
361
原创 Leetcode 百题训练 239. 滑动窗口最大值
假设一个长度为k的子数组为 [1,4,2],1无论如何都会成为我们最终的答案(最终答案取最大值4),所以没有必要对于1进行任何操作,即我们只需要一个单调递减的子数组即可。但是要即能删除最小值,又要能删除最大值的,就只有deque了,它可以对队尾、队首进行插入、删除的操作,刚好队列又类似于一个滑动窗口,完美!单调队列会先变成[4,3],然后在记录最后一个2之前,将4删除,然后将2读入队列中。的滑动窗口从数组的最左侧移动到数组的最右侧。每次存数据,然后删除数据,删除数据的时间复杂度为O(logN)
2025-01-08 14:24:09
831
原创 Leetcode 百题训练 438. 找到字符串中所有字母异位词
因为字符串p的长度是固定的,我们只需要在字符串s中找对应长度的子串即可)起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。起始索引等于 0 的子串是 "ab", 它是 "ab" 的异位词。起始索引等于 1 的子串是 "ba", 它是 "ab" 的异位词。起始索引等于 2 的子串是 "ab", 它是 "ab" 的异位词。的子串,返回这些子串的起始索引。不考虑答案输出的顺序。在这篇博客中,已经解释了滑动窗口的思路了。
2025-01-06 11:08:01
256
原创 Leetcode 百题训练 3. 无重复字符的最长子串
实际做法:使用Map存储元素值与其下标left,用双指针表示滑动窗口的左右边界,删除元素就右移左指针,添加元素就右移右指针,滑动窗口的长度就是 right - left。当遍历到第i个元素时,如果说该元素存在于该队列中,那我们就删除队尾元素,直到队尾元素不等于该元素。我们假设有一个虚拟(其实并不存在)的队列,这个队列就是我们所需要的滑动窗口。因为无重复字符的最长子串是 "wke",所以其长度为 3。因为无重复字符的最长子串是 "b",所以其长度为 1。的长度,"pwke"是一个。,所以其长度为 3。
2025-01-06 11:01:41
261
原创 Unity3D 每日一题 算法题_34 -- 198. 打家劫舍
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。看了官方题解,没有像我这样做的(大概是太麻烦了吧),不过我觉得我的版本是易于理解的。偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 2 + 9 + 1 = 12。偷窃到的最高金额 = 1 + 3 = 4。
2025-01-03 12:39:52
322
原创 Unity3D 每日一题 算法题_33 -- 771. 宝石与石头
其实和开一个64大小的bool数组也是一样思路的,但是二进制就是用一个long long可以解决。中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。存储jewels的字符,在stones中寻找。代表石头中宝石的类型,另有一个字符串。字母区分大小写,因此。
2025-01-03 12:17:45
324
原创 Leetcode 百题训练 42. 接雨水
"右侧柱子的下标-左侧柱子的下标-1"就能求出来了,当遍历到第i根柱子,出现高于第i-1根柱子时,则进行计算。因为我们要一直提取栈顶元素,直到空栈 或者 栈顶元素的柱子高于 第i根柱子的高度,如果这一行能够储水,那么它就一定在栈中。高度h = (栈顶元素的柱子高度 与 第i根柱子的高度 的最小值h2 - 前一个取出的栈顶元素的柱子高度h1)所以得到右侧柱子的下标为 i,为当前遍历的第 i 根柱子,左侧柱子下标为栈顶元素。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。栈中的元素会始终保持单调性。
2025-01-02 13:39:52
2120
原创 Leetcode 百题训练 15. 三数之和
3. 当a + b + c == target,说明刚好是我们所需要的元素,将答案放入答案数组中。但是在这道题中,如果我们使用哈希,再对其进行双层遍历,能够得到结果,但是会导致出现相同结果。2. 当a + b + c > target,需要左移right,减小c。1. 当a + b + c < target,需要右移left,增大b。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。Tip:需要注意的是,不能找相同的b,c值作为答案。注意,输出的顺序和三元组的顺序并不重要。,判断是否存在三元组。
2025-01-02 12:53:31
449
原创 Leetcode 百题训练 11. 盛最多水的容器
2.下一个柱子可能比当前柱子矮:答案一定变小,不管下一个柱子是否比A侧柱子高\矮,"两侧柱子的最小值"都在变小,两侧柱子距离也变小。1.下一根柱子可能比当前柱子高,如果 高于\低于 B侧柱子,答案可能会变大,因为"两侧柱子的最小值"会变大,但是两侧柱子距离变小。1.下一个柱子可能比当前柱子高:答案一定变小,因为"两侧柱子的最小值"不变,但是两侧柱子距离变小。总结:矮的板子 一定会导致答案变小,而长的板子不一定会,所以我们选择移动矮的板子。本题的容积公式 = 两侧柱子的最小值 * 两侧柱子的距离。
2025-01-02 12:44:20
372
原创 Leetcode 百题训练 283. 移动零
快慢指针:快指针遍历整个数组,如果说整个数组都没有0的存在,那么快慢指针始终会在一起,但是当出现元素0时,此时,快指针会快于慢指针,并且慢指针指向0,此时让快指针找到非0元素,并且交换快慢指针所指向的元素。当快慢指针没有指向同一个元素时,那么慢指针始终是指向元素0的。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。你能尽量减少完成的操作次数吗?,编写一个函数将所有。
2025-01-02 12:25:06
257
原创 Unity3D 每日一题 算法题_31 -- 268. 丢失的数字
n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。n = 9,因为有 9 个数字,所以所有的数字都在范围 [0,9] 内。8 是丢失的数字,因为它没有出现在 nums 中。n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。1 是丢失的数字,因为它没有出现在 nums 中。
2025-01-01 11:52:42
283
原创 Unity3D 每日一题 算法题_29 -- 面试题 01.06. 字符串压缩
若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
2025-01-01 11:05:12
246
原创 Unity3D 每日一题 算法题_28 -- 557. 反转字符串中的单词 III
你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
2025-01-01 10:55:13
203
原创 Unity3D 每日一题 算法题_27 -- 912. 排序数组
那么整个堆(堆同时也是完全二叉树)的根节点一定是最大的元素。只需要将在数组中排在第i个元素(需要从后往前遍历)与数组中第0个元素进行交换,并且对前i个元素进行堆的维护,最终完成整个数组的排序。当遍历一个数组时,对当前元素与它之后的元素进行比较,并且与最小元素进行交换。这样的排序的时间复杂度是O(N^2)的,因为它需要双重遍历)与快排不同的是,归并排序是先将数组划分成一个一个的子数组,通过对子数组中元素的比较进行排序,完成最终的整个数组的排序。但是它需要额外的一个数组去存储每两个子数组排序后的结果数组。
2024-12-31 17:58:12
242
原创 Unity3D 每日一题 算法题_26 -- 69. x 的平方根
中,我们得知使用二分的前提条件是:单调性、二分性。很显然这道题目符合这两个特征。并且这道题目的答案一定存在于[0,x]中。8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。如果说不懂边界划分,也可以跳转 上述题目链接中了解一般的二分边界问题。不允许使用任何内置指数函数和算符,例如。由于返回类型是整数,结果只保留。时间复杂度:O(sqrt(N))没什么说的,就是遍历找答案。时间复杂度:O(logN)为什么可以使用二分呢?
2024-12-31 13:49:05
236
原创 Unity3D 每日一题 算法题_25 -- 169. 多数元素
这个方法就是将数组排序,输出 nums[nums.size()/2]。(因为这个元素一定占据了整个数据的一半)此方法高效简单,即将遍历所遇到的元素存入Map中,返回出现次数超过数组大小一半的元素。尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。空间复杂度:O(logN)。你可以假设数组是非空的,并且给定的数组总是存在多数元素。,返回其中的多数元素。时间复杂度:O(NlogN)。时间复杂度为O(N)。空间复杂度为O(N)。时间复杂度:O(N)空间复杂度:O(1)
2024-12-31 11:45:26
288
原创 Leetcode 百题训练 128. 最长连续序列
找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。最长数字连续序列是 [1, 2, 3, 4]。请你设计并实现时间复杂度为。给定一个未排序的整数数组。
2024-12-30 11:16:02
283
原创 Leetcode 百题训练 49. 字母异位词分组
1.对strs进行遍历每一个字符串,并且将各个字符串进行排序。(这样就可以让不同的在字符串保持同一种顺序)2.存储排序后的字符串,Key为字符串,Value为答案vector的下标(利于我们存储答案)。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。给你一个字符串数组,请你将。
2024-12-30 11:08:09
192
原创 Leetcode 百题训练 1. 两数之和
因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。每次找到一个元素则存入到map中,每次存入元素之前,在map中寻找对应元素。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。你可以想出一个时间复杂度小于。你可以按任意顺序返回答案。,请你在该数组中找出。双重遍历,找到对应元素。
2024-12-30 10:57:01
226
原创 Unity3D 每日一题 算法题_24 -- 234. 回文链表
这个做法很有意思欸。我想了半个小时,想过快慢指针,想过反转一半字符串,但是没有想过让他们结合起来。不过我反转字符串做法也没错了,我最开始直接求的链表的长度,没有用快慢指针了,哈哈哈哈,不碎念了,直接贴代码!1.查看当前元素是否与栈顶元素相同,如果相同,则取出,如果不同则放入栈中。代码的话,就不贴了,哈哈哈哈。因为它和做法一的时间空间都一样是O(N)。直接用数组存储链表,然后再用双指针判断回文就行了。2.最终栈中如果没有元素,则是回文。给你一个单链表的头节点。,请你判断该链表是否为。空间复杂度解决此题?
2024-12-29 13:03:36
290
原创 Unity3D 每日一题 算法题_23 -- 217. 存在重复元素
如果数组中每个元素互不相同,返回。元素 1 在下标 0 和 3 出现。如果任一值在数组中出现。
2024-12-29 11:41:10
601
原创 Unity3D 每日一题 算法题_22 -- 118. 杨辉三角
在「杨辉三角」中,每个数是它左上方和右上方的数的和。生成「杨辉三角」的前 numRows。给定一个非负整数 numRows。
2024-12-29 11:24:06
269
原创 Unity3D 每日一题 算法题_21 -- 104. 二叉树的最大深度
通过对左右节点的深度的比较为切入点,对根节点进行深度优先搜索(即先搜索完左节点,再搜索完右节点,通过递归的方式,可以得到左右节点的深度,通过比较得到最大深度)与DFS不同的是,BFS是一层一层遍历,查找完一层才会进入下一层,那么我们没查找完一层就让层数+1。是指从根节点到最远叶子节点的最长路径上的节点数。
2024-12-29 11:06:32
358
原创 Unity3D 每日一题 算法题_20 -- 101. 对称二叉树
就是把一整层的都放入队列中,然后每次与递归方法一样的两两比较与放入元素。你可以运用递归和迭代两种方法解决这个问题吗?与该题目递归方法类似,不过多赘述。层级遍历(也有点BFS的思想吧)给你一个二叉树的根节点。, 检查它是否轴对称。
2024-12-28 14:57:46
528
原创 Unity3D 每日一题 算法题_19 -- 100. 相同的树
如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。
2024-12-28 14:32:06
415
原创 Unity3D 每日一题 算法题_16 -- 66. 加一
你可以假设除了整数 0 之外,这个整数不会以零开头。最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。加 1 得到了 9 + 1 = 10。因此,结果应该是 [1,0]。输入数组表示数字 4321。输入数组表示数字 123。输入数组表示数字 9。
2024-12-28 13:50:59
299
原创 Unity3D 每日一题 算法题_15 -- 415. 字符串相加
你不能使用任何內建的用于处理大整数的库(比如。), 也不能直接将输入的字符串转换为整数形式。,计算它们的和并同样以字符串形式返回。给定两个字符串形式的非负整数。做法,直接上代码了。
2024-12-27 11:27:39
313
原创 Unity3D 每日一题 算法题_14 -- 144. 二叉树的前序遍历
先序(前序遍历)遍历:根 -> 左 -> 右。即先查找根节点,再查找左节点,最后查找右节点。递归算法很简单,你可以通过迭代算法完成吗?
2024-12-27 11:10:39
379
原创 Unity3D 每日一题 算法题_13 -- 231. 2 的幂
既然2的幂次方的二进制位上只有一个1,那么将这个数减去1,并进行按位与操作。,请你判断该整数是否是 2 的幂次方。当一个数是2的幂次方时,它的二进制位上只有一个 1。无论是普通解法还是进阶解法都是利用的二进制思想。你能够不使用循环/递归解决此问题吗?最终的结果一定是0.
2024-12-27 10:32:34
281
原创 Unity3D 每日一题 算法题_12 -- 237. 删除链表中的节点
指定链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9。指定链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9。注意,删除节点并不是指从内存中删除它。,我们想删除它其中的一个节点。不是链表中的最后一个节点。给你一个需要删除的节点。,并且保证给定的节点。
2024-12-27 10:11:21
396
原创 Unity3D 每日一题 算法题_11 -- 344. 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组。、使用 O(1) 的额外空间解决这一问题。不要给另外的数组分配额外的空间,你必须。
2024-12-27 09:54:28
302
原创 Unity3D 每日一题 算法题_10 -- 19. 删除链表的倒数第 N 个结点
让快指针先走n+1步,再让快慢指针同时走,等到快指针走完链表,此时慢指针所指向的节点就是要删除节点的前一个节点。其实与第一种方法类似,都是两遍扫描求出倒数第n个元素的前后节点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。你能尝试使用一趟扫描实现吗?
2024-12-26 18:46:51
449
原创 Unity3D 每日一题 算法题_9 -- 16. 最接近的三数之和
与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。与 target 最接近的和是 0(0 + 0 + 0 = 0)。中选出三个整数,使它们的和与。假定每组输入只存在恰好一个解。思路一样,但是简化了过程。
2024-12-26 17:38:11
302
原创 Unity3D 每日一题 算法题_8 -- 15. 三数之和
给你一个整数数组nums,判断是否存在三元组满足i!= ji!= k且j!= k,同时还满足。请你返回所有和为0且不重复的三元组。答案中不可以包含重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。[]唯一可能的三元组和不为 0。[[0,0,0]]唯一可能的三元组和为 0。
2024-12-26 17:20:02
420
原创 Unity3D 每日一题 算法题_7 -- 13. 罗马数字转整数
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。给定一个罗马数字,将其转换成整数。,即为两个并列的 1。
2024-12-26 13:50:10
296
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅