自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日一题 --- 后序遍历迭代法

先是跟前序遍历一个思路,不过是按中右左的顺序生成,再见结果集反转,便成了左右中。答应你们的后序遍历迭代法来了。

2024-04-06 23:59:00 121

原创 每日一题 --- 二叉树的前中后序遍历

后续遍历迭代法相较于中序遍历和前序遍历的迭代法来说较难。// 后序遍历,递归。// 中序遍历 递归。

2024-04-05 18:34:09 186

原创 每日一题 --- 前 K 个高频元素[力扣][Go]

*进阶:**你所设计算法的时间复杂度。,请你返回其中出现频率前。

2024-04-04 18:56:08 379

原创 每日一题 --- 有效的括号[力扣][Go]

括号匹配可以使用栈来完成。,判断字符串是否有效。

2024-04-03 19:01:06 375

原创 每日一题 --- 删除字符串中的所有相邻重复项[力扣][Go]

在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。如果相同就退出栈中元素,如果不同就入栈。会选择两个相邻且相同的字母,并删除它们。给出由小写字母组成的字符串。

2024-04-03 18:59:29 233

原创 每日一题 --- 逆波兰表达式求值[力扣][Go]

逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。返回一个表示表达式值的整数。后缀表达式可以使用栈求解。

2024-04-03 18:58:45 359

原创 每日一题 --- 滑动窗口最大值[力扣][Go]

的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。可能这道题是困难的原因就是因为没办法使用模拟法来做。滑动窗口每次只向右移动一位。

2024-04-03 18:57:58 1064

原创 每日一题 --- 用栈实现队列[力扣][Go]

因为调用规模不超过100,所以我们可以用两个70的栈。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(

2024-04-02 15:18:22 371

原创 每日一题 --- 用队列实现栈[力扣][Go]

一个队列,参考:https://leetcode.cn/problems/implement-stack-using-queues/solutions/432204/yong-dui-lie-shi-xian-zhan-by-leetcode-solution。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(**进阶:**你能否仅用一个队列来实现栈。

2024-04-02 15:17:03 406

原创 每日一题 --- 右旋字符串[卡码][Go]

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。先对字符数组进行扩容,然后利用双指针将前面的值付给后面,再在后面取多余的数赋值到前面。不用额外空间行不行呢,答案是可以的,就是反转再反转。输出共一行,为进行了右旋转操作后的字符串。利用反转,先将两个局部反转,在将整体反转。

2024-04-01 23:55:41 781

原创 每日一题 --- 找出字符串中第一个匹配项的下标[力扣][Go]

KMP算法,是时候拿起你们的数据结构与算法书了,这个算法无论在那个版本的书中都是重点。还有一种是nextval数组,能更好的优化KMP算法,感兴趣的去学习吧。暴力破解,如果匹配不了就返回,能做,但是不推荐,因为有更好的。字符串的第一个匹配项的下标(下标从 0 开始)。

2024-04-01 23:52:39 515

原创 每日一题 --- 反转字符串 II[力扣][Go]

从字符串开头算起,每计数至。

2024-03-31 17:55:37 381

原创 每日一题 --- 替换数字[卡码][Go]

给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。打印一个新的字符串,其中每个数字字符都被替换为了number。输入一个字符串 s,s 仅包含小写字母和数字字符。先确定有几个数字,扩容,然后使用双指针挨个赋值。

2024-03-31 17:51:55 494

原创 每日一题 --- 四数之和[力扣][Go]

利用三数组求和思路破解。

2024-03-30 16:40:45 736

原创 每日一题 --- 三数之和[力扣][Go]

先排序,三个数,先固定一个不动指向的数为n,使用双指针,在不动的数下标到数组中间的数中找到两个指向数的结果为-n的数。注意指针滑动过程中一定要跳过所有与前一位数相同的数。**注意:**答案中不可以包含重复的三元组。,判断是否存在三元组。

2024-03-30 16:39:43 374

原创 每日一题 --- 赎金信[力扣][Go]

使用数组存储每个字母的在magazine中出现的次数,如果在ransomNote有字母出现的次数多过magazine,就代表没办法表示。

2024-03-30 16:38:32 452

原创 每日一题 --- 两数之和[力扣][Go]

我们如果遍历数组,只需要知道当前遍历的元素有没有与之相加为target的数。那么我们就可以用哈希表来完成。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。使用快排时间复杂度O(nlogn)。空间复杂度消耗较大O(n)。时间复杂度是符合进阶要求了,是否还有更快的方法呢?**进阶:**你可以想出一个时间复杂度小于。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。使用二元组,解决问题。

2024-03-29 18:10:33 303

原创 每日一题 --- 四数相加 II[力扣][Go]

看官方题解:https://leetcode.cn/problems/4sum-ii/solutions/499745/si-shu-xiang-jia-ii-by-leetcode-solution。“官方也会写O(n²)的算法啊”,请你计算有多少个元组。

2024-03-29 18:08:56 447

原创 每日一题 --- 反转字符串中的单词[力扣][Go]

中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。时间复杂度O(n),虽然在for循环里进行了次反转操作,但以为单词长度一般不会过长,可视为常数,空间复杂度O(n)**进阶:**如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。遍历数组然后遇见空格就将前一个单词加入结果集,如果有多个空格其余空格就跳过。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。是由非空格字符组成的字符串。**注意:**输入字符串。

2024-03-28 17:41:16 378

原创 每日一题 --- 快乐数[力扣][Go]

有兴趣的可以看看这个题解:https://leetcode.cn/problems/happy-number/solutions/21454/shi-yong-kuai-man-zhi-zhen-si-xiang-zhao-chu-xun-h。可以改为:使用map集合,结果作为key值,如果曾经存过直接返回false,遇到1返回true。注意无限循环这个词,这代表一个数按照上述操作总会遇到曾经执行过的数。因为不管是不是快乐数,最后总会陷入一个循环,所以我们只需要找出循环就行了。编写一个算法来判断一个数。

2024-03-28 17:37:41 584

原创 每日一题 --- 两个数组的交集[力扣][Go]

Go语言没有提供Set集合实现,不过可以使用map来模拟,利用的是map的key值的唯一性。时间复杂度O(n + m),空间复杂度O(n)输出结果中的每个元素一定是。

2024-03-27 13:55:05 331

原创 每日一题 --- 有效的字母异位词[力扣][Go]

如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?因为题目规定了字符都是小写字母,所以也可以使用数组实现,快去试试吧。使用map,进行字母映射,如果两个字符映射结果不同,则不是异位词。时间复杂度O(n),空间复杂度O(n)中每个字符出现的次数都相同,则称。,编写一个函数来判断。

2024-03-27 13:52:58 178

原创 每日一题--- 环形链表[力扣][Go]

指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。将走过的路记录起来,每走一步就回头看看以前走没走过。利用快慢指针+数学运算解决。如果链表中有某个节点,可以通过连续跟踪。时间复杂度O(n²),空间复杂度O(n)时间复杂度O(n),空间复杂度O(1),返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。**进阶:**你是否可以使用。给定一个链表的头节点。如果链表无环,则返回。,则在该链表中没有环。

2024-03-27 13:49:52 496

原创 每日一题 --- 链表相交[力扣][Go]

简单来说就是先获取长度,再将长的链表修改为和短链表一样长,最后齐步走找到相等的节点。,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回。时间复杂度为O(m+n),但空间复杂度也为O(m+n)。将链表转数组,反向遍历寻找第一个不等节点的后续。时间复杂度为O(m+n),空间复杂度O(1)时间复杂度O(n²),空间复杂度为O(1)**进阶:**你能否设计一个时间复杂度。,函数返回结果后,链表必须。整个链式结构中不存在环。给你两个单链表的头节点。

2024-03-27 13:02:36 433

原创 每日一题 --- 删除链表的倒数第 N 个结点[力扣][Go]

快慢指针,慢指针先走n步,然后快慢指针同步前进,当慢指针走到头时,删除快指针后一个节点。循环一遍获得长度,根据长度删除倒数第n个节点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。

2024-03-26 15:56:49 208

原创 每日一题 --- 数组中的第 K 个最大元素[力扣][Go]

分治法,与上面思想不同的是,我们不执着于找中位数,而是采用随机分治,当随机到的基数正好为第K大时,直接返回。详细讲解参考力扣题解部分。方法一和方法二都是采取,先排序再取值的办法。时间复杂度为O(n*log n)。其实我们可以改进下方法一:利用分治思想将时间复杂度期望降至O(1)。使用堆排序,排好序后,调整K次大根堆,然后取出元素值。使用快速排序,排好序后找到第K大的元素。请注意,你需要找的是数组排序后的第。个最大的元素,而不是第。,定位:《算法导论》9.2。

2024-03-26 13:05:21 1409

原创 每日一题 --- 两两交换链表中的节点[力扣][Go]

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。也可以不使用递归,要记住,递归代码转换成非递归代码不一定需要使用栈,但是使用栈一定能将递归代码转化为非递归代码。这是一个模拟题,模拟交换的过程就行了,从链表尾执行,每次返回执行后的头节点,每次执行时将反转后节点的后继连接返回的头结点。递归会使用额外的栈,一般不推荐使用。

2024-03-24 23:32:57 341

原创 每日一题 --- 反转链表[力扣][Go]

能不能让时间复杂度降为O(1)呢?反转链表不就是反转指针嘛,只要让指针指对了就行了。具体请看:[代码随想录](创建一个新的空链表,然后扫描老链表节点,并将扫描到的结点使用头插法插入空链表,这样就得到了一个反转的链表。一个for循环,时间复杂度O(n),用了额外的链表长度空间,空间复杂度O(n)。时间复杂度O(n),空间复杂度O(1)。,请你反转链表,并返回反转后的链表。

2024-03-24 22:51:04 240

原创 每日一题 --- 设计链表[力扣][Go]

当然这一题也可以使用双链表来写,思路是相同的,查询操作是相同的,删除和插入操作需要考虑前驱指针和后继指针。这就是方法二,不过由你们实现,快去试试吧。以指示链表中的上一个节点。假设链表中的所有节点下标从。你可以选择使用单链表或者双链表,设计并实现自己的链表。是指向下一个节点的指针/引用。如果是双向链表,则还需要属性。

2024-03-23 21:38:31 567

原创 每日一题 --- 移除链表元素[力扣][Go]

方法一:链表元素删除,是最简单的算法题,请务必掌握。,请你删除链表中所有满足。给你一个链表的头节点。时间复杂度为O(n)。

2024-03-23 17:43:52 268

原创 每日一题 --- 螺旋矩阵 II[力扣][Go]

先准备好一个n*n的数组,然后给据规则生成就行了(有的是按环数具体可看。而且用了很多控制方向的变量,空间复杂度较大(我希望有更好的解法)。虽然只用了一个for循环,但是时间复杂度为O(n²)。,我这个是按方向一个个生成),一定要注意,代码如下。所有元素,且元素按顺时针顺序螺旋排列的。

2024-03-23 17:16:59 227

原创 Go --- 编程知识点及其注意事项

1、当给返回值命名时,如果已经默认了返回值名称,则所有返回值都要有默认名。如是不被允许的,编译会报错,如果一个返回值有名称则也需要用()括起来。2、结构体比较一般来说结构体是可以使用“==”比较的,只有当结构体定义时属性顺序不同,或者结构体中有不可比较的类型,如map和slice。带有map和slice的结构体可以使用reflect库下的进行比较。不同结构体实例化出来的对象比较结果必然也会不同。3、string与nil类型。

2024-03-23 10:22:11 915

原创 每日一题 --- 209. 长度最小的子数组[力扣][Go]

方法一:暴力破解,就是使用两个指针,一个指针固定,一个指针扫描,当扫描到的值大于等于target时记录。,并返回其长度**。**如果不存在符合条件的子数组,返回。一个循环搞定,时间复杂度降至O(n)。两个for循环,时间复杂度O(n²)想要学习滑动窗口相关知识,可以去看。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。

2024-03-22 19:58:05 297

原创 每日一题 --- 977. 有序数组的平方[力扣][Go]

代码随想录中有O(log(n))的解法,有兴趣的可以去看看。从两头开始标记,指针平方大的先复制再往里走,直到所有值赋完。结果时间复杂度O(n²),因为头插需要O(n)。不过咱们还是直接看O(n)的算法实现吧。今天这一题和昨天的知识点是一样的,就是。组成的新数组,要求也按。

2024-03-22 17:16:24 278

原创 每日一题 --- 27. 移除元素 - 力扣 [Go]

注意点:快慢指针从同一个点出发,因为某些条件使得快指针走的快一步或是慢指针停一步。在本题上的体现就是当快指针指向待删除元素时慢指针不在赋值并停留。请注意,输入数组是以**「引用」**方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。为什么返回数值是整数,但输出的答案是数组呢?不要使用额外的数组空间,你必须仅使用。的元素,并返回移除后数组的新长度。

2024-03-21 19:30:41 281

原创 Go --- Go语言垃圾处理

一、当GC在三色标记的标记阶段,程序运行中出现黑色节点的对象引用了白色节点的对象,当然如果该白色节点恰好是可达对象,只是还没被GC扫描到哪还好说,但是如果该白色节点恰好是程序不可达对象,就会出现引用的对象在扫描结束后被清除的情况。,结合了删除写屏障和插入写屏障的优点,只需要在开始时并发扫描各个goroutine的栈,使其变黑并一直保持,这个过程不需要STW,而标记结束后,因为栈在扫描后始终是黑色的,也无需再进行重新扫描操作了,减少了STW的时间。黑色节点所在的内存空间有两个地方,一个是栈,一个是堆。

2024-03-20 22:51:03 1799 1

原创 Python - 基于BIRCH算法通过用户位置信息判断店户选址

在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。指明各个算法函数对应的源程序,结合算法原理阐述实现的设计思路,灵感(可以是一组源程序,每个功能模块采用不同的函数实现)。在设计报告中,将重要的源程序展示,符合程序规则,结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。我的选题是BIRCH算法。

2024-02-26 21:45:07 347

原创 Go --- toml配置文件使用

toml(Tom’s Obvious, Minimal Language),简约又明显的语言。

2023-08-16 15:51:27 1123 1

原创 随笔 --- 是否可以用左右子树结点数差来衡量二叉树是否平衡?

在使用结点数来定义平衡,我们不妨再给其加上一个限定条件,就是平衡的树的除去最低一层的结点后,时完美二叉树。这样就会有出现左右子树结点树是另一侧结点数二倍时,左右子树高度差不会超过1,同时因为有 2^k - 1 = N总。一种情况是,3NR + 1 = N总,NR = 1/3*(2^k + 2),所以满足树的高度为O(logn)。当插入新元素使平衡树不在平衡时,因为我们多引入一个条件,在我看来重新调整为平衡变的非常困难。根据要求使用结点数来衡量是否是平衡时,极端条件是NR = 2NL 或者反之。

2023-07-11 11:49:26 348

原创 Go --- 解决Web项目中跨包结构体不能作为方法的接收者问题

解决GoWeb项目中跨包结构体不能作为方法接收者的问题

2023-04-04 10:37:53 297 1

空空如也

空空如也

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

TA关注的人

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