
每日一题
新手,只会做题。在实践中积累经验,终有一天我变秃了也会变强。
吕元龙的小屋
不是兴趣使然的学生
展开
-
每日一题 --- 后序遍历迭代法
先是跟前序遍历一个思路,不过是按中右左的顺序生成,再见结果集反转,便成了左右中。答应你们的后序遍历迭代法来了。原创 2024-04-06 23:59:00 · 191 阅读 · 0 评论 -
每日一题 --- 二叉树的前中后序遍历
后续遍历迭代法相较于中序遍历和前序遍历的迭代法来说较难。// 后序遍历,递归。// 中序遍历 递归。原创 2024-04-05 18:34:09 · 263 阅读 · 0 评论 -
每日一题 --- 前 K 个高频元素[力扣][Go]
*进阶:**你所设计算法的时间复杂度。,请你返回其中出现频率前。原创 2024-04-04 18:56:08 · 445 阅读 · 0 评论 -
每日一题 --- 有效的括号[力扣][Go]
括号匹配可以使用栈来完成。,判断字符串是否有效。原创 2024-04-03 19:01:06 · 440 阅读 · 0 评论 -
每日一题 --- 删除字符串中的所有相邻重复项[力扣][Go]
在完成所有重复项删除操作后返回最终的字符串。在 S 上反复执行重复项删除操作,直到无法继续删除。如果相同就退出栈中元素,如果不同就入栈。会选择两个相邻且相同的字母,并删除它们。给出由小写字母组成的字符串。原创 2024-04-03 18:59:29 · 266 阅读 · 0 评论 -
每日一题 --- 逆波兰表达式求值[力扣][Go]
逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。返回一个表示表达式值的整数。后缀表达式可以使用栈求解。原创 2024-04-03 18:58:45 · 388 阅读 · 0 评论 -
每日一题 --- 滑动窗口最大值[力扣][Go]
的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的。可能这道题是困难的原因就是因为没办法使用模拟法来做。滑动窗口每次只向右移动一位。原创 2024-04-03 18:57:58 · 1166 阅读 · 0 评论 -
每日一题 --- 用栈实现队列[力扣][Go]
因为调用规模不超过100,所以我们可以用两个70的栈。请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(原创 2024-04-02 15:18:22 · 417 阅读 · 0 评论 -
每日一题 --- 用队列实现栈[力扣][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 · 453 阅读 · 0 评论 -
每日一题 --- 右旋字符串[卡码][Go]
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。先对字符数组进行扩容,然后利用双指针将前面的值付给后面,再在后面取多余的数赋值到前面。不用额外空间行不行呢,答案是可以的,就是反转再反转。输出共一行,为进行了右旋转操作后的字符串。利用反转,先将两个局部反转,在将整体反转。原创 2024-04-01 23:55:41 · 839 阅读 · 0 评论 -
每日一题 --- 找出字符串中第一个匹配项的下标[力扣][Go]
KMP算法,是时候拿起你们的数据结构与算法书了,这个算法无论在那个版本的书中都是重点。还有一种是nextval数组,能更好的优化KMP算法,感兴趣的去学习吧。暴力破解,如果匹配不了就返回,能做,但是不推荐,因为有更好的。字符串的第一个匹配项的下标(下标从 0 开始)。原创 2024-04-01 23:52:39 · 555 阅读 · 0 评论 -
每日一题 --- 反转字符串 II[力扣][Go]
从字符串开头算起,每计数至。原创 2024-03-31 17:55:37 · 445 阅读 · 0 评论 -
每日一题 --- 替换数字[卡码][Go]
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。打印一个新的字符串,其中每个数字字符都被替换为了number。输入一个字符串 s,s 仅包含小写字母和数字字符。先确定有几个数字,扩容,然后使用双指针挨个赋值。原创 2024-03-31 17:51:55 · 534 阅读 · 0 评论 -
每日一题 --- 四数之和[力扣][Go]
利用三数组求和思路破解。原创 2024-03-30 16:40:45 · 786 阅读 · 0 评论 -
每日一题 --- 三数之和[力扣][Go]
先排序,三个数,先固定一个不动指向的数为n,使用双指针,在不动的数下标到数组中间的数中找到两个指向数的结果为-n的数。注意指针滑动过程中一定要跳过所有与前一位数相同的数。**注意:**答案中不可以包含重复的三元组。,判断是否存在三元组。原创 2024-03-30 16:39:43 · 416 阅读 · 0 评论 -
每日一题 --- 赎金信[力扣][Go]
使用数组存储每个字母的在magazine中出现的次数,如果在ransomNote有字母出现的次数多过magazine,就代表没办法表示。原创 2024-03-30 16:38:32 · 492 阅读 · 0 评论 -
每日一题 --- 两数之和[力扣][Go]
我们如果遍历数组,只需要知道当前遍历的元素有没有与之相加为target的数。那么我们就可以用哈希表来完成。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。使用快排时间复杂度O(nlogn)。空间复杂度消耗较大O(n)。时间复杂度是符合进阶要求了,是否还有更快的方法呢?**进阶:**你可以想出一个时间复杂度小于。整数,并返回它们的数组下标。你可以按任意顺序返回答案。,请你在该数组中找出。使用二元组,解决问题。原创 2024-03-29 18:10:33 · 347 阅读 · 0 评论 -
每日一题 --- 四数相加 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 · 488 阅读 · 0 评论 -
每日一题 --- 反转字符串中的单词[力扣][Go]
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。时间复杂度O(n),虽然在for循环里进行了次反转操作,但以为单词长度一般不会过长,可视为常数,空间复杂度O(n)**进阶:**如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。遍历数组然后遇见空格就将前一个单词加入结果集,如果有多个空格其余空格就跳过。中使用至少一个空格将字符串中的。之间用单个空格连接的结果字符串。是由非空格字符组成的字符串。**注意:**输入字符串。原创 2024-03-28 17:41:16 · 407 阅读 · 0 评论 -
每日一题 --- 快乐数[力扣][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 · 635 阅读 · 0 评论 -
每日一题 --- 有效的字母异位词[力扣][Go]
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?因为题目规定了字符都是小写字母,所以也可以使用数组实现,快去试试吧。使用map,进行字母映射,如果两个字符映射结果不同,则不是异位词。时间复杂度O(n),空间复杂度O(n)中每个字符出现的次数都相同,则称。,编写一个函数来判断。原创 2024-03-27 13:52:58 · 213 阅读 · 0 评论 -
每日一题--- 环形链表[力扣][Go]
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。将走过的路记录起来,每走一步就回头看看以前走没走过。利用快慢指针+数学运算解决。如果链表中有某个节点,可以通过连续跟踪。时间复杂度O(n²),空间复杂度O(n)时间复杂度O(n),空间复杂度O(1),返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。**进阶:**你是否可以使用。给定一个链表的头节点。如果链表无环,则返回。,则在该链表中没有环。原创 2024-03-27 13:49:52 · 525 阅读 · 0 评论 -
每日一题 --- 链表相交[力扣][Go]
简单来说就是先获取长度,再将长的链表修改为和短链表一样长,最后齐步走找到相等的节点。,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回。时间复杂度为O(m+n),但空间复杂度也为O(m+n)。将链表转数组,反向遍历寻找第一个不等节点的后续。时间复杂度为O(m+n),空间复杂度O(1)时间复杂度O(n²),空间复杂度为O(1)**进阶:**你能否设计一个时间复杂度。,函数返回结果后,链表必须。整个链式结构中不存在环。给你两个单链表的头节点。原创 2024-03-27 13:02:36 · 462 阅读 · 0 评论 -
每日一题 --- 删除链表的倒数第 N 个结点[力扣][Go]
快慢指针,慢指针先走n步,然后快慢指针同步前进,当慢指针走到头时,删除快指针后一个节点。循环一遍获得长度,根据长度删除倒数第n个节点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。原创 2024-03-26 15:56:49 · 234 阅读 · 0 评论 -
每日一题 --- 数组中的第 K 个最大元素[力扣][Go]
分治法,与上面思想不同的是,我们不执着于找中位数,而是采用随机分治,当随机到的基数正好为第K大时,直接返回。详细讲解参考力扣题解部分。方法一和方法二都是采取,先排序再取值的办法。时间复杂度为O(n*log n)。其实我们可以改进下方法一:利用分治思想将时间复杂度期望降至O(1)。使用堆排序,排好序后,调整K次大根堆,然后取出元素值。使用快速排序,排好序后找到第K大的元素。请注意,你需要找的是数组排序后的第。个最大的元素,而不是第。,定位:《算法导论》9.2。原创 2024-03-26 13:05:21 · 1506 阅读 · 0 评论 -
每日一题 --- 两两交换链表中的节点[力扣][Go]
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。也可以不使用递归,要记住,递归代码转换成非递归代码不一定需要使用栈,但是使用栈一定能将递归代码转化为非递归代码。这是一个模拟题,模拟交换的过程就行了,从链表尾执行,每次返回执行后的头节点,每次执行时将反转后节点的后继连接返回的头结点。递归会使用额外的栈,一般不推荐使用。原创 2024-03-24 23:32:57 · 367 阅读 · 0 评论 -
每日一题 --- 反转链表[力扣][Go]
能不能让时间复杂度降为O(1)呢?反转链表不就是反转指针嘛,只要让指针指对了就行了。具体请看:[代码随想录](创建一个新的空链表,然后扫描老链表节点,并将扫描到的结点使用头插法插入空链表,这样就得到了一个反转的链表。一个for循环,时间复杂度O(n),用了额外的链表长度空间,空间复杂度O(n)。时间复杂度O(n),空间复杂度O(1)。,请你反转链表,并返回反转后的链表。原创 2024-03-24 22:51:04 · 277 阅读 · 0 评论 -
每日一题 --- 设计链表[力扣][Go]
当然这一题也可以使用双链表来写,思路是相同的,查询操作是相同的,删除和插入操作需要考虑前驱指针和后继指针。这就是方法二,不过由你们实现,快去试试吧。以指示链表中的上一个节点。假设链表中的所有节点下标从。你可以选择使用单链表或者双链表,设计并实现自己的链表。是指向下一个节点的指针/引用。如果是双向链表,则还需要属性。原创 2024-03-23 21:38:31 · 596 阅读 · 0 评论 -
每日一题 --- 移除链表元素[力扣][Go]
方法一:链表元素删除,是最简单的算法题,请务必掌握。,请你删除链表中所有满足。给你一个链表的头节点。时间复杂度为O(n)。原创 2024-03-23 17:43:52 · 323 阅读 · 0 评论 -
每日一题 --- 螺旋矩阵 II[力扣][Go]
先准备好一个n*n的数组,然后给据规则生成就行了(有的是按环数具体可看。而且用了很多控制方向的变量,空间复杂度较大(我希望有更好的解法)。虽然只用了一个for循环,但是时间复杂度为O(n²)。,我这个是按方向一个个生成),一定要注意,代码如下。所有元素,且元素按顺时针顺序螺旋排列的。原创 2024-03-23 17:16:59 · 251 阅读 · 0 评论 -
每日一题 --- 209. 长度最小的子数组[力扣][Go]
方法一:暴力破解,就是使用两个指针,一个指针固定,一个指针扫描,当扫描到的值大于等于target时记录。,并返回其长度**。**如果不存在符合条件的子数组,返回。一个循环搞定,时间复杂度降至O(n)。两个for循环,时间复杂度O(n²)想要学习滑动窗口相关知识,可以去看。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。原创 2024-03-22 19:58:05 · 320 阅读 · 0 评论 -
每日一题 --- 977. 有序数组的平方[力扣][Go]
代码随想录中有O(log(n))的解法,有兴趣的可以去看看。从两头开始标记,指针平方大的先复制再往里走,直到所有值赋完。结果时间复杂度O(n²),因为头插需要O(n)。不过咱们还是直接看O(n)的算法实现吧。今天这一题和昨天的知识点是一样的,就是。组成的新数组,要求也按。原创 2024-03-22 17:16:24 · 302 阅读 · 0 评论 -
【每日一题】力扣剑指 Offer II 075. 数组相对排序
【代码】【每日一题】力扣剑指 Offer II 075. 数组相对排序。原创 2022-09-26 22:16:11 · 212 阅读 · 0 评论 -
每日一题 --- 942. 增减字符串匹配[力扣][Go]
增减字符串匹配原创 2022-05-09 09:48:38 · 146 阅读 · 0 评论 -
每日一题 --- 442. 数组中重复的数据[力扣][Go]
数组中重复的数据[力扣][Go]原创 2022-05-08 23:39:32 · 317 阅读 · 0 评论 -
每日一题 --- 933. 最近的请求次数[力扣][Go]
题目:写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。示例 1:输入:[“Rece原创 2022-05-06 09:31:32 · 94 阅读 · 0 评论 -
每日一题 --- 713. 乘积小于 K 的子数组[力扣][Go]
题目:给你一个整数数组 nums 和一个整数 k ,请你返回子数组内所有元素的乘积严格小于 k 的连续子数组的数目。示例 1:输入:nums = [10,5,2,6], k = 100输出:8解释:8 个乘积小于 100 的子数组分别为:[10]、[5]、[2],、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是 [10,5,2] 并不是乘积小于 100 的子数组。示例 2:输入:nums = [1,2,3], k = 0输出:0提示:1 <=原创 2022-05-05 13:40:55 · 337 阅读 · 0 评论 -
每日一题 --- 亲戚[洛谷][Go]
洛谷 亲戚原创 2022-04-12 13:19:11 · 445 阅读 · 0 评论 -
每日一题 --- 试题 历届真题 5个砝码【第二届】【省赛】【高职组】[蓝桥][Java]
题目:资源限制内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量。 如果只有5个砝码,重量分别是1,3,9,27,81。则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中)。 本题目要求编程实现:对用户给定的重量,给出砝码组合方案。输入输出用例 例如: 用户输入: 5 程序输出: 9-3-1 用户输原创 2022-04-06 21:10:56 · 431 阅读 · 0 评论 -
每日一题 --- P1093 [NOIP2007 普及组] 奖学金[洛谷][JAVA]
题目:某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正原创 2022-04-02 19:29:43 · 230 阅读 · 0 评论