自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode刷题记录 day21

在这场比赛中,如果不存在某支强于。返回这场比赛中将会成为冠军的队伍。

2024-04-12 17:28:13 332

原创 leetcode刷题记录 day20

对于任何一个合法输入的字符串,结果最多只有一位0,否则可以将后方的0前移并消除。利用这一点,我们可以根据字符串中“0”的数量和位置直接构造结果字符串。或者我们可以遍历字符串,遇到“1”时不变,遇到“0”时则想办法将它变为“1”,直到字符串中没有第二个“0”对应的十进制数字,那么我们称二进制字符串。请你返回执行上述操作任意次以后能得到的。两种方法的时间和空间复杂度均为O(n)对应的十进制数字大于二进制字符串。给你一个二进制字符串。

2024-04-10 12:02:29 138 4

原创 leetcode刷题记录 day19

返回正整数数目和负整数数目中的最大值。简单题,排序后从头遍历或者二分查找0.既不是正整数也不是负整数。

2024-04-09 22:49:34 306 2

原创 leetcode刷题记录 day18

理解一下提议可以比较自然的想到先将数组排序,并找到排序后的数组中的“非连续部分”,每个非连续部分都起码需要一次操作使其整体能够连续,但数组的范围是从哪里开始和结束我们没办法确定,比如[41,33,29,33,35,26,47,24,18,28]经过排序后变为[18,24,26,28,29,33,35,41,47]显然是将数组变为24-33或者26-35的操作数最少。每一次操作中,你可以将。满足以下条件,那么它是。时间O(n log n)

2024-04-08 14:59:01 403

原创 leetcode刷题记录 day17

/ 返回 ["king", "andy", "matthew", "bob", "alex", "asha", "catherine"]// 返回 ["king", "andy", "matthew", "alex", "asha", "catherine"]t.birth("king", "catherine");// 继承顺序:king > andy >t.birth("king", "bob");

2024-04-07 15:59:40 704

原创 Leetcode刷题记录 day16

/ 返回 -1 因为不存在满足要求的祖先节点。// 返回 0 ,它是 5 的祖父节点。// 返回 1 ,它是 3 的父节点。时间:初始化O(n log n),单次查询O(log n)空间:初始化O(n log n),单次查询O(1)树以父节点数组的形式给出,其中。个祖先节点是从该节点到根节点路径上的第。

2024-04-06 22:32:42 221 1

原创 手把手教你制作微信表情包专辑

手:“啊......对!这种时候我就想起在表情包商场有一些别人制作的表情包专辑,这些专辑是不计入表情上限的,而且一个专辑里面可以放好多个表情,那么我们可以自己上传自己喜欢的表情包专辑吗?答案是可以的!这篇文章就教大家一步步制作自己的表情包专辑(包括图片处理)。

2024-04-06 18:02:32 2501 1

原创 Leetcode刷题记录 day15

根据示例1的输入我们可以知道,输入的二叉树使用列表表示,除根节点外,第i个节点的左节点索引为2i+1,右节点为2(i+1),同时,第i个节点的父节点索引为(i-1) // 2,我们可以从根节点开始,用类似深度遍历的形式获取每个从根节点到叶子节点的子树,如(8,3,1)、(8,3,6,4)并取出其中的最大最小值,更新最大差值,即为所求。(如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为 A 是 B 的祖先)在所有可能的差值中,最大值 7 由 |8 - 1| = 7 得出。

2024-04-05 14:20:51 358 1

原创 Leetcode刷题记录 day14

首先,我们可以确定速度的搜索范围,最小速度为1(最慢吃法),最大速度为香蕉堆中最多的香蕉数(最快吃法)。然后,我们可以使用二分搜索来找到符合条件的最小速度,使得在这个速度下,珂珂能够在规定的时间内吃完所有香蕉。根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉。,并以列表形式返回。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。答案的每个元素都是一棵真二叉树的根节点。小时内吃掉所有香蕉的最小速度。珂珂可以决定她吃香蕉的速度。

2024-04-02 13:27:02 320 1

原创 C++学习笔记(基础篇01)

include其实是一个预处理命令,意思为将一个文件「放」在这条语句处,被「放」的文件被称为头文件。也就是说,在编译时,编译器会「复制」头文件iostream中的内容,「粘贴」到这条语句处。这样,你就可以使用iostream中提供的std::cinstd::coutstd::endl等对象了。如果你学过 C 语言,你会发现目前我们接触的 C++ 中的头文件一般都不带.h后缀,而那些 C 语言中的头文件xx.h都变成了cxx,如stdio.h变成了cstdio。

2024-04-01 17:15:27 701

原创 Leetcode刷题记录 day13

在新数组的两边各增加一个标记位用于表示下一个字符填充的位置以及最终输出的结果从哪开始。按照题意,我们需要将一个长度为n的数组像切蛋糕一样一个个切除,同时剩下的元素的和需要大于m。:遍历输入的字符串,用一个新的字符串保存遍历的结果:当读到“i”时,将该字符串倒置,否则将字符保存到新字符串后继续遍历。这种方法简单明了,但是每次倒置字符串都需要O(m)的时间复杂度(m为新字符串的长度),有没有什么方法可以减少倒置的开销?时,它会反转你所写的字符串。双标记发时间O(n),空间O(n)时间O(n),空间O(1)

2024-04-01 10:36:51 723

原创 Leetcode刷题记录 day12

一种是在遍历字符串的过程中,用一个栈保存当前节点还有多少棵子树,遇到“#”子树(当前栈顶)-1,遇到数字子树-1,同时在栈中压入一个2(产生了一个新的节点,又有两个子树)。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如。给定一串以逗号分隔的序列,验证它是否是正确的二叉树的前序序列化。编写一个在不重构树的条件下的可行算法。每个以逗号分隔的字符或为一个整数或为一个表示。例如,上面的二叉树可以被序列化为字符串。序列化二叉树的一种方法是使用。

2024-03-31 12:05:37 366 1

原创 Leetcode刷题记录 day11

总的来说,组内的区间可以为空,即可以将ranges内的所有数组都归到同一个区间,那么不管区间如何变化,都起码都两种方案。其次,我们应该想办法找出ranges中有交集的区间,将他们归为一个“小团体”,每个小团体都有两种选择(在左边或右边)通过对小团体进行组合便可得到所有的方案数。第一次提交的结果报错了,查看测试用例发现是排序后前面的数组范围很大,把中间的一两个数组整个囊括进去了,用前面的算法是无法判断这种情况的,稍微修改一下就行了。排序使用的栈空间为O(logn),其他为O(1)公共整数,那么这两个区间是。

2024-03-27 11:08:41 284

原创 Leetcode刷题记录 day10

调用 shortestPath 时,需要的时间复杂度为 O(m+k)log⁡(m+k),其中 m 表示给定的 edges 数组的长度,k 表示调用 addEdge 的次数。使用优先队列的 「Dijkstra 算法」的时间度与图中边的数量关系有关,需要的时间即为 O(m+k)log⁡(m+k)O(n+m+k),其中 n 表示给定的数字 n,其中 m 表示给定的 edges 数组的长度,kkk 表示调用 addEdge 的次数。使用邻接列表存储图时,需要的空间即为 O(n+m+k)。

2024-03-26 12:14:33 295

原创 Leetcode刷题记录 day9

我们遍历coins数组中不同面额的硬币coin,若金额“i”比硬币的任何一个面额都要小,那它必然不能被组合出来,即dp[i]=0,所以我们只需要关注。dp[3] += dp[1] # dp[1]还未被计算,初始化为0,dp[3] = 0。但当i==coin时,也至少有一个组合为一枚面额为coin的硬币,为方便计算,我们将dp[0]初始化为1。是昨天写的零钱兑换的后续,但是这次需要的是计算并返回所有可行的组合数。的组合数,没有组合能凑成0,因此dp[0]=0。

2024-03-25 12:05:17 633 1

原创 Leetcode刷题记录 day8

时间复杂度:O(Sn),其中 S 是金额,n 是面额数。我们一共需要计算 O(S)个状态,S 为题目所给的总金额。对于每个状态,每次需要枚举 n个面额来转移状态,所以一共需要 O(Sn) 的时间复杂度。coins = [186,419,83,408],amount=6249,是可以用20个硬币实现的,但以我们的算法最终会剩下11,返回-1。用取余运算判断整数能否被硬币的面额整除,从最大值往后遍历便能保证银币数量最少。数组dp需要开长度为总金额S的空间。你可以认为每种硬币的数量是无限的。

2024-03-24 21:12:46 122 1

原创 Leetcode刷题记录 day7

枚举法,直接用一个大小为n的数组table_list表示桌面上的是否出现(0,n)的数字,在执行步骤后根据数组table_list便可知道不同整数的数目。枚举法时间O(n^3),空间O(n),数学时间空间都是O(1),开始时,它放在桌面上。天之后,出现在桌面上的。也可用数学推理直接秒杀。

2024-03-23 09:56:07 337 1

原创 Leetcode刷题记录 Day6

前面都是构建一个类的基本操作,难点在于最后一个判断是否存在出现frequency次的数字,如果采用暴力解法,那么每次调用该函数都会遍历一次数组,显然不太现实,我们是否可以新建一个字典用于保存FrequencyTracker数组中的元素及其出现的次数呢?官方题解使用了collection库的Counter类,使用两个哈希表,一个存储数字及出现的频率,另一个则存储某一频率及其出现的频率(在整个数组中有多少个这个频率的数字)请你设计并实现一个能够对其中的值进行跟踪的数据结构,并支持对频率相关查询进行应答。

2024-03-21 11:37:51 358 1

原创 Leetcode刷题记录 Day5

根据题意,nums数组的长度为2的p次方-1,且下标从1开始,即数组的下标与元素值相同。要将x,y对应的位置交换之后存在实际意义也就意味着需要对应位置分别为“0”和“1”,且其他位置不相同。在草稿过程中我发现,不管如何交换,各个位置上的“0”和“1”的总数是不变的,且都为“根据题意,我们在执行每次翻转操作时都需要翻转到后缀字符,因此我们只需要从前到后依次翻转就是最小翻转次数了。快速幂,二进制取幂(Binary Exponentiation,也称平方法),是一个在O(log n)的时间内计算。

2024-03-20 11:01:29 489 1

原创 Leetcode刷题记录 day4

没什么思路了,看了一眼官方题解,发现原来跟我之前想到的从中间(k)向两边推的思路是一样的,它会先以nums[k]作为子数组中的最小值,然后让nums[k]与左右的元素比较,直到元素比nums[k]的值还小(这就说明分数的计算中,“min(num[i:j+1]”的值需要更新,在更新之前肯定是数组越长,分数越高(因此在更新之前的分数也没必要计算了))。但是我又注意到,到了“4”之后,左边的数组再往右缩就没有必要了,因为最小值不会改变,而“好子数组”的长度会缩短,最大分数会减小。子数组的两个端点下标需要满足。

2024-03-19 21:00:12 478

原创 Leetcode刷题记录 day3

数组的前缀和,顾名思义就是将一个数组按下标顺序,将该元素和该元素之前的所有元素相加,作为一个相同shape的数组里相同下标的元素。这么做的好处是计算原数组区间内所有元素的和只需要用“前缀和数组对应右区间下标的元素减去左区间下标-1的元素”即可。很自然就能想到直接使用数组的下标,将left和right之间的元素相加,但是按题目的意思这个数组被初始化之后,会多次调用这个sumRange,这样的话每次调用都需要遍历一次数组。只需要初始化一遍前缀和数组O(n),并读取前缀和数组内对应的元素O(1),空间O(n)

2024-03-18 12:44:49 386

原创 Leetcode刷题记录 day2 编程入门题

给你一个二维整数数组matrix, 返回matrix的。矩阵的是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。

2024-03-17 13:40:19 332

原创 Leetcode刷题记录 day1 编程入门题

给你一个整数n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。n = 23415各位数之积 = 2 * 3 * 4 = 24各位数之和 = 2 + 3 + 4 = 9结果 = 24 - 9 = 15。

2024-03-14 11:12:31 365 1

空空如也

空空如也

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

TA关注的人

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