自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣刷题 63.不同路径 II

这道题目我一开始被误导了,以为不用自己创建棋盘,只用题目给出的棋盘就可以了,但是很明显这不可行,因为障碍物的坐标的值应该为0而不是1,0意味着没有路径可以到达障碍物。事实上,我们可以把题目给的棋盘当作地图,上面标记了障碍物的位置,这样也不需要在自己的棋盘上标记障碍物了,只要对照着地图看就行了,是不是很妙。从递推公式可以看出,状态由左边和上边的状态推到而来,用从左至右,从上至下的两层循环即可。1. 向右 -> 向右 -> 向下 -> 向下。第一行障碍物前的全为1,第一列障碍物前的全为1。

2024-04-30 14:41:07 470

原创 力扣刷题 62.不同路径

机器人试图达到网格的右下角(在下图中标记为 “Finish” )。从递推公式可以看出,状态由左边和上边的状态推到而来,用从左至右,从上至下的两层循环即可。由于靠边的格子只能从左边或上边的格子抵达,所以我做了分类讨论。按照我刚刚的思路只需要初始化dp[0][0]即可,设立为1。这是个类似棋盘的结构,所以我们使用二维数组。dp[i][j]为到[i][j]点的路径总和。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。3*6的棋盘的数组的结果应该如下。

2024-04-28 19:34:43 498

原创 SQL数据更新

eg:将一个新学生记录(学号:95020;删除数据的类型与修改数据的几乎完全一致,只有语法格式有所区别。若没有指定列名,则默认插入的数值是完整的,与列的个数一致。VALUES(值,值,值) 记忆:宾语倒装。对每一个系,求学生的平均年龄,并把结果存入数据表。SET 列名 = 表达式,列名 = 表达式……eg:将计算机科学系全体学生的成绩置零。INTO 表名 (列名,列名,列名)INTO 表名 (列名,列名,列名)将学生95001的年龄改为22岁。将信息系所有学生的年龄增加1岁。

2024-04-26 20:22:23 517

原创 SQL嵌套查询和集合查询

思路是查询student表中的学生,如果在课程表中这个学生选修了1号课程,条件就为false,结果中不会有这个学生。这个查询就很想if语句,如果成立就将其放入查询结果,如果不成立,就不放入查询结果。不相关子查询:子查询里的条件不依赖于父查询,从里到外依次查询,子查询的结果作为上一次查询的条件。嵌套查询:将一个查询块嵌套在一个另一个查询块中where子句中的查询叫做嵌套查询。一般与比较运算符搭配,扩展比较运算符的功能,不用局限于内层查询只能返回一个值。相关子查询:子查询里的条件依赖于父查询。

2024-04-26 16:22:51 300

原创 力扣刷题 746.使用最小花费爬楼梯

一定是选最小的,所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。dp数组的值应该为dp[2] = 1 dp[3] =2, dp[4] = 2……- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。你将从下标为 1 的台阶开始。

2024-04-24 19:57:06 281

原创 力扣刷题 70.爬楼梯

从楼底到楼顶共有n阶楼梯,我们要求爬n阶楼梯有几种方法,我们思考n阶楼梯可以从第几阶楼梯爬来,根据我们每次可以爬1或2个台阶,可得n阶楼梯是由第n-1阶台阶走一个,或第n-2阶台阶走两个到达。因此爬n阶楼梯的方法数其实是爬n-1阶楼梯的方法数加爬n-2阶楼梯的方法数。所以我们可以不用讨论dp[0]的初始化,只初始化dp[1] = 1,dp[2] = 2,然后从i = 3开始递推,这样才符合dp[i]的定义。从递推公式dp[i] = dp[i - 1] + dp[i - 2];1. 1 阶 + 1 阶。

2024-04-22 21:28:52 385

原创 力扣刷题 509.斐波那契数

从递归公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出,dp[i]是依赖 dp[i - 1] 和 dp[i - 2],那么遍历的顺序一定是从前到后遍历的。其基本原理是将大问题分解为小问题,通过保存中间结果来避免重复计算,从而提高算法的效率。题目已经把递推公式直接给我们了:状态转移方程 dp[i] = dp[i - 1] + dp[i - 2];如果代码写出来,发现结果不对,就把dp数组打印出来看看和我们推导的数列是不是一致的。dp[i]的定义为:第i个数的斐波那契数值是dp[i]

2024-04-21 20:44:58 314

原创 力扣刷题 151.反转字符串中的单词

想要反转字符串中的单词,如果想要一步到位,可谓是困难重重,想把the移到末尾,不仅要考虑顺序的问题,还要面临覆盖bule单词的问题。需要注意的是,限制条件不能使用fast,因为fast遇到的第一个元素不一定是字母,可能的是空格,但slow第一个填入的一定是字母。如第二个范例 hello world。那么我们的思路是,遇到空格就删除,但是在遇到单词时先补一个空格,这样就可以实现删除多余的空格啦。第二步,既然覆盖的方法不可行,会覆盖需要用的信息,不如直接反转字符串,这样空间的问题就迎刃而解了。

2024-04-21 16:49:04 534

原创 刷题 替换数字

如果快指针指到字母,就把字母传给慢指针的位置,如果快指针指到数字,慢指针就移动将number输入到字符串。快指针前进一个,发现是数字,在慢指针索引插入number,但是没有足够放下number的空间,如果想要创造空间就需要将数组整体往后移,很麻烦而且时间复杂度高。给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。

2024-04-19 21:27:42 527

原创 SQL连接查询

形式为(a,b),不同的顺序意味着不同的有序对,(a,b)≠(b,a) 除非 a=b。设A,B为一个集合,将A中的元素作为第一个元素,B中的元素作为第二个元素,形成有序对。:所有这些有序对都由一个称为a和B的笛卡尔积的集合组成,并被记录为AxB。注意:任何子句中引用表1和表2中同名属性时,都必须加表名前 缀。[例] 查询每一门课的直接先修课的课程名。可以用另一种表达方式(方便连接格式的统一)同时涉及多个表的查询称为连接查询。SQL中连接查询的主要类型。需要给表起别名以示区别。上面的连接均属于内连接。

2024-04-19 16:12:42 402

原创 力扣刷题 27.移除元素

示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。出一个新的数组,很有意思。

2024-04-17 20:03:55 302

原创 力扣刷题 589/590. N叉树的前后序遍历

n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值。原理与二叉树的前序遍历和后序遍历是一样的。给定一个 n 叉树的根节点。分隔(请参见示例)。

2024-04-14 12:24:35 155

原创 力扣刷题 226.翻转二叉树

想要实现翻转,乍一看可能觉得挺难的,但仔细想想就会发现我们只需要交换每个节点的左节点和右节点就可以实现二叉树的翻转。因为中序遍历是先翻转左子树,再翻转当前根节点,这时原先的左子树变为了右子树,右子树变为了左子树,然后在翻转右子树的时候就出了问题,因为此时的右子树是原先的左子树,无法真正翻转真正需要翻转的子树。参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。先反转当前根节点的左右孩子节点,再翻转左右子树,当前节点为空的时候,就返回。

2024-04-14 11:19:49 898

原创 力扣刷题 二叉树层序遍历相关题目II

给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。本题难点在于如何填充每个节点的next 指针,让这个指针指向其下一个右侧节点。如何获取队列中下一个节点,我们还没有遍历到下一个节点,怎么能获取下一个节点的指针呢?填充它的每个 next 指针,让这个指针指向其下一个右侧节点。这里的思路是保存上一个遍历节点的指针,让它的next指针指向当前节点。

2024-04-12 20:57:27 1162

原创 SQL单表查询(2)

Sdept为主排序,Sage为次要排序,当系相同才按年龄排序。注:用DISTINCT以避免重复计算学生人数对查询结果分组 用途 – 细化集函数的作用对象 • 未对查询结果分组,集函数将作用于整个查询结果 • 对查询结果分组后,集函数将分别作用于每个组◆使用GROUP BY子句分组 – 分组方法:按指定的一列或多列值分组,值相等的为一组 – 使用GROUP BY子句后,SELECT子句的列名列表中只能出现分组属性和集函数 eg:求各个课程号及相应的

2024-04-12 16:02:08 482

原创 SQL的单表查询

查询仅涉及一张表,是一种最简单的查询操作。

2024-04-10 21:35:01 369

原创 力扣刷题 二叉树层序遍历相关题目

给定一个二叉树,返回其节点值自底向上的层次遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)ps:不能直接用queue.back()放入最后一个元素,因为需要遍历队列,把左右节点放入队列。第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。注意sum建立的位置,应该是在遍历之前,不然每遍历一个都会刷新。

2024-04-08 17:21:10 825

原创 力扣刷题 102.二叉树的层序遍历

常见的错误 vector赋值方式i<10;因为下标只能用来获取已经存在的元素。正确的写法是用 a.push_back(i)

2024-04-07 19:55:49 280

原创 力扣刷题 二叉树遍历的统一迭代法

上一次我们使用了迭代法来实现前中后序遍历,但是每一种遍历的访问和处理顺序不同,导致代码书写风格不同,不像是递归法,实现了其中的一种遍历方式,其他两种只要稍稍改一下节点顺序就可以了。我们以中序遍历为例,我们之前提到使用栈的话,无法同时解决访问节点(遍历节点)和处理节点(将元素放进结果集)但其实针对三种遍历方式,使用迭代法是可以写出统一风格的代码的。这样此时我们写出了统一风格的迭代法,不用在纠结于前序写出来了,中序写不出来的情况了。而前序和后序遍历只需要改变访问的顺序即可。给定一个二叉树的根节点。

2024-04-05 15:32:10 412

原创 力扣刷题 二叉树的迭代遍历

题干给你二叉树的根节点root,返回它节点值的遍历。

2024-04-04 20:56:06 984

原创 力扣刷题 94./144./145. 二叉树的前中后序遍历

注意终止条件中c不是左子树和右子树为NULL,因为遍历函数输入的是左子树或右子树的指针。注意输入的函数参数要符合定义,不要遗漏数组。注意不要遗漏&符号。

2024-04-03 22:10:11 380

原创 力扣刷题 1005.K次取反后最大化的数组和

这道题目的测试实例分别提供了两种情况的思路,但思路并不是全面的,导致在从何取最小正数的判断上出现了差错。因此,实际生成思路时,不能完全依照给出的测试实例,可以适当的拓展实例以尽量涵盖所有的情况。变量前有系数时,勿遗漏乘号*。

2024-04-02 19:30:10 277

原创 力扣刷题 541.反转字符串II

当我们遍历到下标为3的元素,根据题意我们要反转前四个元素的顺序。首先要判断,是否经过了2k的距离,可以用if语句来判断i能否整除2k来实现。此时剩余元素已经不足2k个,但依旧有k个,所以只需翻转前k个。我们从下标为0的元素开始遍历,根据题意要翻转前k个元素的顺序。根据reverse函数,我们只需找到前k个元素的首尾两个元素。此时k等于2,末元素下标为2对应的c,似乎不对。但是实际编写时,整除的方法十分麻烦,有诸多细节要注意,越往后写条件越多。我们用一个for循环来遍历数组, 假设k=2,则2k=4。

2024-04-01 17:24:44 292

原创 力扣刷题 45.跳跃游戏 II

我们可能会想到每次跳当前元素的最大距离,但是这其实是错误的,让我们看一组例子,当前我们在下标为0,最大跳跃距离为2的格子,它的覆盖范围为从0到2,如果我们每次跳当前元素的最大距离,那么就会跳到下标为2,跳跃距离为1的元素,后面的过程就不一一罗列,整体的跳跃次数为3,下标由0到2到3再到4。在提交代码后,我们发现出错了,检查用例后,发现是当数组仅有一个元素的时候,不用跳跃就已经到终点,所以我们直接做一个剪枝操作,用一个if判断语句,跳出循环。很明显这不是最优解,如果在下标为1的元素起跳,只需两步就到终点了。

2024-03-30 13:11:00 1280 1

原创 力扣刷题 55.跳跃游戏

笔者一开始的思路陷入了每到一个位置,就要分类讨论跳跃长度,到下一个位置继续分类讨论,特别复杂,循环套循环。后来看了提示,想到了可以用最大覆盖范围,但是思路还是被限制了,其一是因为没有想到。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回。,即元素的最大跳跃距离,而应该是从。给你一个非负整数数组。

2024-03-28 11:32:22 270

原创 力扣刷题 122.买卖股票的最佳时机II

我们之前的思路是找到递增区间首尾相减算利润,但事实上,递增区间的利润等于每天由于价格上涨带来的利润之和,比如prices[4]-prices[1]=(prices[4]-prices[3])+(prices[3]-prices[2])+(prices[2] - prices[1]) + (prices[1] - prices[0])。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。因此在这个基础上我们的。

2024-03-27 20:48:40 220 1

原创 力扣刷题 53.最大子数组和

笔者在一开始给result设定的初始值是0,但是这样的设置遗漏了最大值为负数的情况,比如nums为[-1,-1,-1]。至于如何记录子数组中最大的连续和,我们只需设置一个result去实时更新最大的连续和,就可以实现全局最优了。经过思考,我们发现在遍历过程中,当连续和为负数时,它对后续的数字相加起到的肯定是。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。连续子数组 [4,-1,2,1] 的和最大,为 6。,就是在局部最优的基础上记录最大的连续和。是数组中的一个连续部分。

2024-03-26 11:57:05 257

原创 力扣刷题 376.摆动序列

笔者当时就出现了这样的疑问,因此也去尝试删掉prediff==0的条件,但是在编译的过程中,我发现我遗漏了一种情况,即从一开始就是平坡的情况,比如nums=[0,0,0,2]。答案是最后一个,我的理解是由于我们的遍历是从左到右的顺序,只有到遍历到最后一个我们才能排除所有重复的元素。写到这里我们可能会产生疑问,既然我们在只有摆动变化的时候才更新prediff,那岂不是相当于跳过了平坡的情况,不会出现prediff等于0的时候。因此,我们修改判断坡峰的代码,增加prediff可以等于0的条件。

2024-03-25 12:43:54 538

原创 力扣刷题 344.反转字符串

如果用库函数reverse()可以直接解决,但是我们这里是为了体会算法,故不直接使用。编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组。这道题目思路很简单,不断首尾交换就可以完成,因此用一个双指针即可。、使用 O(1) 的额外空间解决这一问题。不要给另外的数组分配额外的空间,你必须。

2024-03-24 14:38:04 160 1

原创 力扣刷题 455.分发饼干

但是小孩的循环本质上是依附于饼干数组的循环的,唯有饼干大小大于等于小孩胃口才可以继续小孩的循环,所以我们只需要用到一个if语句和索引index,当if语句满足,index加一,意味着遍历到下一个小孩。我们可以这样理解,我们放一个指针在最小胃口的小孩上,在遍历饼干的过程中,如果判断条件成立,则将指针移到下一个小孩身上。我们对饼干数组和胃口数组都进行从小到大的排序,从最小的饼干开始遍历,从胃口最小的小孩喂,喂完后轮到下一个小孩,如果饼干大小大于等于胃口,那就成功喂食,如果没有,就遍历下一个饼干。

2024-03-23 16:14:28 256

原创 力扣刷题 18.四数之和

这道题和15.三数之和的思路是几乎一样的,思路是两层for循环来寻找a和b,把nums[i] + nums[j]看作整体,依然是循环内有left和right下标作为双指针,找出nums[i] + nums[j] + nums[left] + nums[right] == target的情况,三数之和的时间复杂度是O(n^2),四数之和的时间复杂度是O(n^3). 但是这道题要注意的细节不少,主要集中在题干修改后的剪枝操作。与三数之和重复的细节我在这里不在罗列,详情请看三数之和这篇文章。

2024-03-22 21:28:16 250 1

原创 力扣刷题 15.三数之和

思路是先对数组进行排序,再对数组进行遍历,遍历的每个元素即为第一个数,记为a,每遍历一个a,在它后面的元素区间的首尾设置两个指针,分别叫left和right,对应后两个数b和c。这样遍历完,我们就找所有符合条件的三元数组啦。最致命的问题是,这道题要求不可以包含重复的三元组,需要进行去重操作,而这个操作在写代码时有许多细节要注意,很难一次性写出完善的代码,如下是哈希法的完整代码。这道题乍一眼看和我们之前做过的1.两数之和挺相似的,所以也想到用哈希法来求解。注意,输出的顺序和三元组的顺序并不重要。

2024-03-21 12:03:45 351 1

原创 力扣刷题 704. 二分查找

如果我们设定的是左闭右闭区间,那么left=right 就是合法的,要用小于等于。获取数组大小的函数是 num.size(),不要与字符串的获取长度混淆了,那个是string.length()不要忘记处理没有查找到的情况, 在while循环外放一个return -1;这三行代码是取小于等于还是小于,加减1还是不加减取决于我们预设的查找区间。本题二分查找的思路比较基础,这里就不进行阐释了,主要谈谈代码中的编写细节。,如果目标值存在返回下标,否则返回。个元素有序的(升序)整型数组。

2024-03-20 19:33:17 158 1

原创 力扣刷题 383.赎金信

唯一的区别在于这次仅需要ransomNote的所有字符能够在magazine找到,因此我们在最后record数组的判断中的要求是不存在大于0的元素,因为如果magazine中包含ransomNote中所有的元素,那么数组中的元素只会有两种情况,等于0或者小于0,等于0对应在两个字符串都有的元素,小于0对应在magazine中而不在ransomNote中的元素。误把 return true 放到了循环中,那么就会导致遍历一次就会返回true或 false。以下是笔者在写代码时犯下的错误。

2024-03-18 20:45:56 323

原创 力扣刷题 454.四数相加

为了实现把前两个数组遍历的信息传递给第二个整体,我们需要把相加的和和出现的次数储存到哈希表里,分别对应key和value。然后对第二个整体进行遍历,取不同的元素相加,判断0减和的值是否在哈希表中,若存在,则把该值对应的出现次数累加。为我们的改进解法提供了铺垫,暴力解法的思路就是用四个for循环去遍历四个数组,取不同的元素相加,如果等于0,就count++。综上所述,本题我们又一次用到了哈希法,这是因为我们需要记录前两个数组遍历的信息,信息为相加的和和出现的次数。,请你计算有多少个元组。

2024-03-17 22:43:47 387 1

原创 力扣刷题 1.两数之和

这道题题目如果用最直接的做法便是遍历数组中每一个元素,在每一次遍历到一个元素时,对其后面的元素也进行遍历,直到找出相加可以等于target值的两个元素。,但是这一次我们选用的数据结构有所不同,原因在于题干要求我们不仅要找到元素的值还要让我们返回元素所在数组的下标,这就意味着我们需要记住两个信息。因此,它不保证元素的顺序,并且元素的存储位置是根据键的哈希值决定的。总的来说,unordered_map是一种非常快速且高效的数据结构,适用于需要快速检索键值对的场景,但不需要元素有序的情况。,请你在该数组中找出。

2024-03-16 21:42:05 769 1

原创 力扣刷题 202. 快乐数

因此,我们的思路是计算数 n 各位上的平方和,并判断是否为1,如果成立则 return true。如果不成立,判断该平方和是否在哈希表中,如果存在则说明陷入无限循环,return false,如果还没有重复,则将平方和放入哈希表,并更新数 n 的值继续计算平方和,进行到下一次循环。的作用是将变量n整除以10,并将结果重新赋值给n,实现了删除最后一位的功能,例如223/10=22,每一次循环中,相当于往高位移动一位,直到只剩最高位,这时n/10就等于0,结束循环。这个函数实现了计算数 n 每位平方和的功能。

2024-03-15 20:20:53 317 1

原创 力扣刷题 242.有效的字母异位词

接着遍历s字符串,每遇到一个字符,就将字符对应的哈希表索引下标(数组下标)所在的元素指。因为字符a到字符z的ASCII是26个连续的数值,所以我们可以把字符映射到数组也就是哈希表的索引下标上。这样,字符a映射为下标0,相应的字符z映射为下标25。这样的好处是,在遍历字符串s的时候,用s[i] - ‘a’就可以确定字符对应在哈希表上的索引下标 ,并不需要记住字符a的ASCII,只要求出一个。接着遍历t 字符串,每遇到一个字符,就将字符对应的哈希表索引下标(数组下标)所在的元素指。是一个函数,用于获取字符串。

2024-03-14 15:36:06 333

原创 力扣刷题 349.两个数组的交集

给定两个数组nums1和nums2,返回它们的交集。输出结果中的每个元素一定是的。我们可以。[2][9,4][4,9] 也是可通过的。

2024-03-14 14:43:28 979 2

原创 生成随机数

随机数

2022-12-24 20:58:39 39

空空如也

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

TA关注的人

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