自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (leetcode学习)50. Pow(x, n)

快速幂,第一次写的时候用 n%2==1,这样不能处理负数的问题。

2024-08-05 15:41:47 423

原创 (leetcode学习)49. 字母异位词分组

评论区用质数相乘代表哈希表的方法确实巧妙,我用排序+哈希表写的。是由重新排列源单词的所有字母得到的一个新单词。可以按任意顺序返回结果列表。给你一个字符串数组,请你将。

2024-08-05 10:17:05 247

原创 (leetcode学习)48. 旋转图像

旋转图像,这意味着你需要直接修改输入的二维矩阵。请你将图像顺时针旋转 90 度。不能开辟数组,那就矩阵转置+镜像。使用另一个矩阵来旋转图像。

2024-08-05 09:30:51 439

原创 (leetcode学习)47. 全排列 II

给定一个可包含重复数字的序列。返回所有不重复的全排列。加了set去重,效率感人。

2024-08-05 09:10:20 383

原创 (leetcode学习)46. 全排列

最多就6个数排列,可以考虑打表;给定一个不含重复数字的数组。dfs就完事了,慢是慢了点。

2024-08-04 18:24:34 268

原创 (leetcode学习)45. 跳跃游戏 II

遍历每一个位置,再遍历每一个位置可以到达的位置,如果发现当前次数少于之前的次数,就更新;从下标为 0 跳到下标为 1 的位置,跳。向前跳转的最大长度。生成的测试用例可以到达。跳到最后一个位置的最小跳跃数是。步到达数组的最后一个位置。处,你可以跳转到任意。

2024-08-04 17:03:06 264

原创 (leetcode学习)42. 接雨水

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。个非负整数表示每个宽度为。通过这个题学习一下单调栈。

2024-08-03 18:30:43 347

原创 (leetcode学习)41. 缺失的第一个正数

不管怎么说还是按照要求实现了,不看官方解法想不到。,请你找出其中没有出现的最小的正整数。并且只使用常数级别额外空间的解决方案。范围 [1,2] 中的数字都在数组中。又学到一种方法,用正负数模拟哈希表。1 在数组中,但 2 没有。给你一个未排序的整数数组。最小的正数 1 没有出现。请你实现时间复杂度为。

2024-08-03 11:57:08 280

原创 (leetcode学习)40. 组合总和 II

中的每个数字在每个组合中只能使用。给定一个候选人编号的集合。解集不能包含重复的组合。中所有可以使数字和为。上一道题拿来改改即可。

2024-08-02 18:27:03 142

原创 (leetcode学习)39. 组合总和

2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。如果至少一个数字的被选数量不同,则两种组合是不同的。感觉也没有太好的办法,使劲搜就完事了。7 也是一个候选, 7 = 7。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。

2024-08-02 18:04:32 184

原创 (leetcode学习)36. 有效的数独

以外,空格内其他数字均与 示例1 相同。但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。感觉不用哈希表,用0~9的数组代替会快不少,不想改了。三个判断换顺序,面向测试用例编程应该也能提高速度。,验证已经填入的数字是否有效即可。除了第一行的第一个数字从。

2024-08-02 10:38:02 405

原创 (leetcode学习)35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为。

2024-08-02 09:58:53 402

原创 (leetcode)34. 在排序数组中查找元素的第一个和最后一个位置

请你找出给定目标值在数组中的开始位置和结束位置。给你一个按照非递减顺序排列的整数数组。不管,二分先找到target下标。你必须设计并实现时间复杂度为。如果数组中不存在目标值。

2024-08-02 09:17:56 176

原创 (leetcode)33. 搜索旋转排序数组

首先找中点,中点必将当前数组分为常规递增数组,和一个题目的旋转排序数组,然后判断一下target在哪个数组,继续递归搜索即可。这道题我的想法是这样的,要求时间复杂度为。,则返回它的下标,否则返回。你必须设计一个时间复杂度为。按升序排列,数组中的值。在预先未知的某个下标。,首先想到二分算法。

2024-08-02 09:01:52 233

原创 (leetcode)32. 最长有效括号

直接设置一个栈,弹出的部分一定符合要求。记录弹出的下标,然后找出最长连续下标即可。按说也是O(n)时间复杂度,不过13ms打败5%的字符串,找出最长有效(格式正确且连续)括号。最长有效括号子串是 "()()"最长有效括号子串是 "()"

2024-08-01 20:38:42 444

原创 (leetcode学习)31. 下一个排列

就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的。假设在 nums[i] 处改变,就在之后的数组中找一个最接近nums[i]并且大于nums[i]的数,交换后排序即可。既然是字典序的下一个,那么前边的顺序基本是不变的,前边顺序变动的优先级低。在遍历过程中记录最大值,找到最大值大于前一个数的位置。

2024-08-01 18:57:30 315

原创 (leetcode学习)5. 最长回文子串

还是学会了之前不会写的题,使用manacher算法,3ms打败99%。radius数组采用不带中心的半径,这样方便一些。"aba" 同样是符合题意的答案。

2024-08-01 17:07:54 196

原创 (leetcode学习)28. 找出字符串中第一个匹配项的下标

学了kmp算法,但是具体的实现过程还是看了评论区才明白。大佬的代码总是简洁高效,同样的原理能有如此巧妙的实现方法。"leeto" 没有在 "leetcode" 中出现,所以返回 -1。字符串的第一个匹配项的下标(下标从 0 开始)。第一个匹配项的下标是 0 ,所以返回 0。"sad" 在下标 0 和 6 处匹配。

2024-07-31 20:58:41 213

原创 (leetcode学习)27. 移除元素

/ 它以不等于 val 的值排序。你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。// 长度正确的预期答案。// 排序 nums 的前 k 个元素。你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。你的函数函数应该返回 k = 2, 并且 nums。元素的顺序可能发生改变。如果所有的断言都通过,你的解决方案将会。中的前两个元素均为 2。

2024-07-30 17:22:27 431

原创 (leetcode学习)26. 删除有序数组中的重复项

/ 长度正确的期望答案。越简单的题,打败的人越少。数组都给大佬玩出花来了。不需要考虑数组中超出新长度后面的元素。如果所有断言都通过,那么您的题解将被。不需要考虑数组中超出新长度后面的元素。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。函数应该返回新的长度。的前两个元素被修改为。函数应该返回新的长度。的前五个元素被修改为。

2024-07-30 16:30:16 458

原创 (leetcode学习)25. K 个一组翻转链表

链表还是要设置抽出来的节点node->next = NULL, 这次写代码的时候链表形成环,死循环了。找了很久问题,但是早加上这一步就能及时排查错误了。这道题写了很久,感觉确实是O(1)空间复杂度,但是占内存击败5%,时间3ms击败99%是一个正整数,它的值小于或等于链表的长度。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。的整数倍,那么请将最后剩余的节点保持原有顺序。个节点一组进行翻转,请你返回修改后的链表。思路就是原地逆序,不够k个再原地逆序回来。额外内存空间的算法解决此问题吗?

2024-07-29 22:21:43 299

原创 (leetcode学习)24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。这次感受到了链表假头的作用,刚开始写,处理完直接返回参数head,发现head已经不是指向链表头部了,于是增加了假头。第一次跑击败5%,多跑几次就100%了,哈哈。

2024-07-29 16:51:44 274

原创 (leetcode学习)23. 合并 K 个升序链表

刚刚学了堆,尝试用priority_queue 做一下,一开始添加的重载 operator< 没有成功,知识还是有些欠缺。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。将它们合并到一个有序链表中得到。最终4ms打败99%

2024-07-29 15:38:03 168

原创 (leetcode学习)295. 数据流的中位数

/ 返回 1.5 ((1 + 2) / 2)是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。大顶堆放小数,小顶堆放大数,两个堆似于沙漏形状,在中间两个堆顶的部分找中位数。返回到目前为止所有元素的中位数。根据课程思路写的例题,使用两个堆计算中位数。以内的答案将被接受。

2024-07-28 20:56:09 585

原创 (leetcode学习)502. IPO

为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。尝试了一下优先队列,2000ms打败5%,勾史,参考一下别人的题解。参考大佬的代码改了一点,发现自己写比较函数确实耗时会大很多,使用内置比较会快不少,改了之后就打败90%了。由于你最多可以选择两个项目,所以你需要完成 2 号项目以获得最大的资本。当你完成一个项目时,你将获得纯利润,且利润将被添加到你的总资本中。在完成后,你将获得 1 的利润,你的总资本将变为 1。由于你的初始资本为 0,你仅可以从 0 号项目开始。

2024-07-28 19:15:40 426

原创 (leetcode)646. 最长数对链

200ms打败10%的人,但是大家都用贪心算法,代码也很相似,为什么时间相差这么多呢?参考了一下大佬的代码,改进排序,速度一下就提升了,打败90%。记录一个问题,当在类内使用sort函数,采用自己定义的比较函数时间,要将比较函数定义为静态成员函数,原理太复杂没看懂。你不需要用到所有的数对,你可以以任何顺序选择其中的一些数对来构造。最长的数对链是 [1,2] -> [4,5] -> [7,8]。最长的数对链是 [1,2] -> [3,4]。个数对组成的数对数组。找出并返回能够形成的。

2024-07-28 15:10:36 126

原创 (leetcode学习)22. 括号生成

主要是这行代码 cur = '(' + in + ')' + out ,当前n个括号的情况包括,第n个括号in个括号在内部,out个在外部,其中in+out = n-1;再补充一下动态规划版本,0ms击败100%,思路是lc官方题解看到的。代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。先写一下dfs版本的代码。

2024-07-27 21:23:22 183

原创 (leetcode学习)236. 二叉树的最近公共祖先

中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(跟着左神的视频课,参考了左神的解题方法,不过时间上打败30%,记录一下,以后提升。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。因为根据定义最近公共祖先节点可以为节点本身。的最近公共祖先是节点。的最近公共祖先是节点。

2024-07-24 17:34:01 833

原创 (leetcode学习)110. 平衡二叉树

很久没写结构体了,复习一下。学习二叉树的通用解题方法。给定一个二叉树,判断它是否是。

2024-07-24 16:51:29 486

原创 (leetcode学习)21. 合并两个有序链表

新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。

2024-07-24 16:09:12 298

原创 (leetcode学习)138. 随机链表的复制

开始系统学习算法和数据结构,在某站看了左神的课,根据弹幕上的提升来刷题,4ms击败80%。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。那么在复制链表中对应的两个节点。例如,如果原链表中有。返回复制链表的头节点。

2024-07-23 10:20:39 348

原创 (leetcode学习)19. 删除链表的倒数第 N 个结点

不是很懂为什么大佬会用一个假的头节点,防止快指针为NULL吗?给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。你能尝试使用一趟扫描实现吗?

2024-07-21 21:43:18 244

原创 (leetcode)20. 有效的括号

简单题找找自信,0ms击败100%。,判断字符串是否有效。

2024-07-21 21:42:23 218

原创 排序算法c++实现(冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、基数排序)

大二开的数据结构,没有实现这些算法,现在还是自己手动敲出来了。附带算法和测试,各种排序都经过检验。如有错误,希望大家指正。

2024-07-21 19:35:30 353

原创 (leetcode学习)88. 合并两个有序数组

注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。需要合并的数组是 [] 和 [1]。个元素表示应合并的元素,后。需要合并 [1] 和 []。中,使合并后的数组同样按。打败一半,哪里浪费时间了呢。合并结果是 [1]。合并结果是 [1]。

2024-07-19 21:10:51 165

原创 (leetcode学习)75. 颜色分类(0ms击败100%)

感觉还是需要系统学习,最近去听算法课了,针对性找题做,这道题用计数排序。对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。必须在不使用库内置的 sort 函数的情况下解决这个问题。给定一个包含红色、白色和蓝色、共。分别表示红色、白色和蓝色。

2024-07-19 20:41:42 288

原创 (leetcode学习)17. 电话号码的字母组合

目前来说水平还是不太够,写题总是需要用很多复杂的数据结构,代码又长又丑运行时间还慢。还有很大的进步空间,慢慢学习吧。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。

2024-07-15 16:46:40 304

原创 (leetcode学习)16. 最接近的三数之和,0ms打败100%

昨天暴力写了一遍,今天看了官方题解,学会了使用双指针。0ms,打败所有人!主要是观察数据,target数据可以达到10e4,当target数据过大或者过小,排序直接返回结果就好。与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。中选出三个整数,使它们的和与。假定每组输入只存在恰好一个解。

2024-07-15 11:05:47 492

原创 (leetcode学习)16. 最接近的三数之和

与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。没什么好的思路,先暴力一下,打败10%中选出三个整数,使它们的和与。假定每组输入只存在恰好一个解。

2024-07-14 21:21:29 283

原创 (leetcode学习)2. 两数相加

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。的链表,表示两个非负的整数。它们每位数字都是按照。请你将两个数相加,并以相同形式返回一个表示和的链表。的方式存储的,并且每个节点只能存储。复习一下数据结构,这个模拟即可。

2024-07-13 20:13:41 239

空空如也

空空如也

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

TA关注的人

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