剑指offer
文章平均质量分 68
不能为空
前有巨大宝箱
这个作者很懒,什么都没留下…
展开
-
剑指offer 09用两个栈实现队列 Kotlin
用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能。首先,题目明确指出我们只能使用两个栈作为数据结构,并且队列中的元素必须是整数类型。这意味着我们不能依赖队列或其他数据结构的特性,而必须完全依靠栈的操作来实现队列的功能。要求:存储n个元素的空间复杂度为 O(n)O(n) ,插入与删除的时间复杂度都是 O(1)O(1)首先,我们得明白栈和队列的区别。这要求我们的实现必须高效,以保证操作的快速性。,这是一个直接的栈操作,模拟队列的入队行为。原创 2024-07-07 17:06:47 · 164 阅读 · 0 评论 -
剑指offer 30JZ30 包含min函数的栈 Kotlin
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。输入: ["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"]"POP"表示弹出栈顶元素,弹出2,栈中元素为-1。"PSH-1"表示将-1压入栈中,栈中元素为-1。"PSH2"表示将2压入栈中,栈中元素为2,-1。"PSH1"表示将1压入栈中,栈中元素为1,-1。输出: -1,2,1,-1。原创 2024-07-07 17:06:49 · 354 阅读 · 0 评论 -
剑指offer31 栈的压入、弹出序列 Kotlin
两种种解法的时间复杂度同样是O(n),其中n是压栈序列的长度。在大多数情况下,这两种方法的效率差异不大,因为它们的基本操作是相同的。双指针法的好处是不需要额外的空间来存储每个元素的索引。原创 2024-07-14 21:31:52 · 327 阅读 · 0 评论 -
剑指offer59 滑动窗口的最大值 Kotlin
解决滑动窗口问题通常需要用到双指针技术,通过维护一个固定大小的窗口来遍历数组。在每次窗口滑动过程中,计算并记录下窗口内所需的统计量,如最大值、最小值或总和。为了提高效率,可以使用额外的数据结构,例如单调队列或平衡树,来快速找到窗口内的最大或最小元素。通过这种方式,可以在线性时间内完成窗口的更新和统计量的计算。原创 2024-07-14 22:51:17 · 698 阅读 · 0 评论 -
剑指offer52 两个链表的第一个公共结点 Kotlin
输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和第二个链表的公共部分。后台会将这3个参数组装为两个链表,并将这两个链表对应的头节点传入到函数FindFirstCommonNode里面,用户得到的输入只有pHead1和pHead2。题目保证输入的链表是无环的,因此不存在环的干扰。输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。返回传入的pHead1和pHead2的第一个公共结点,后台会打印以该节点为头节点的链表。原创 2024-07-21 21:20:32 · 365 阅读 · 0 评论 -
剑指offer24 反转链表 Kotlin
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。我们不妨先考虑使用递归法,先递归到链表的末端,再从末端开始反转链表的指针,递归到头结点时,返回新的头结点,但我们很快回意识到由于递归调用栈空间复杂度为 O(n),不符合题目要求,因此不仅递归法不能使用,使用栈方法也不能满足题目要求。如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。要求:空间复杂度 O(1),时间复杂度 O(n)。原创 2024-07-21 21:18:51 · 164 阅读 · 0 评论