- 博客(114)
- 收藏
- 关注
原创 【剑指Offer刷题系列】数组中的逆序对
利用归并排序的分治思想,在排序的过程中统计逆序对的数量。具体来说,在合并两个已排序的子数组时,当左子数组中的元素大于右子数组中的元素时,说明左子数组中当前元素及其后面的所有元素都与右子数组中的当前元素构成逆序对。在股票交易中,如果前一天的股价高于后一天的股价,则可以认为存在一个「交易逆序对」。对的总数,即统计数组中的「交易逆序对」总数。该方法在实际应用中广泛使用,尤其适用于需要统计逆序对或进行高效排序的场景。,我们能够高效地统计数组中的「交易逆序对」总数。,返回其中存在的「交易逆序对」总数。
2025-01-08 17:09:54
530
2
原创 【剑指Offer刷题系列】数据流中的中位数
本题要求设计一个数据结构,能够高效地从数据流中添加数字并随时返回中位数。由于数据流可能非常大(最多50000次操作),我们需要一种高效的方法来维护数据的中位数。中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。该方法在实际应用中广泛使用,尤其适用于需要实时统计中位数的数据流场景,如在线统计、实时监控等。的方法,我们能够高效地设计一个支持实时添加数字和查找中位数的数据结构。以下是针对上述方法的测试代码,使用。
2025-01-08 17:06:48
1154
原创 【剑指Offer刷题系列】最小的k个数
这是最直观的方法,能够保证选出的元素确实是最小的。值,以及对空间和时间的需求平衡。个最小的库存余量,并以任意顺序返回。表示对应商品库存余量。请返回库存余量最少的。使用最小堆(Min-Heap)来高效地找到。在实际应用中,选择哪种方法取决于具体的。以下是针对上述方法的测试代码,使用。在上述示例中,最小的库存余量为。返回数组中最小的一个库存余量。返回数组中最小的两个库存余量。通过对数组进行排序,将最小的。两种方法,我们能够高效地从。形式记录商品库存表,其中。个商品余量,返回顺序不限。的时间复杂度内完成任务。
2025-01-08 17:01:16
944
原创 【剑指Offer刷题系列】把数组排成最小的数
通过自定义排序规则,对数组中的元素进行排序,使得拼接后的数值最小。具体来说,对于两个数字x和y,比较拼接后的字符串xy和yx的大小,决定x应该排在y前面还是后面。"""方法一:自定义排序(贪心算法)将所有元素转换为字符串,定义自定义排序规则,使得拼接后的字符串最小。
2025-01-08 16:55:32
559
原创 【剑指Offer刷题系列】调整数组顺序使奇数位于偶数前面
通过交换奇数和偶数的位置,将所有奇数移动到数组的前半部分,偶数移动到后半部分。该方法节省了空间,但可能会破坏奇数和偶数的相对顺序。中所有奇数编号的训练项目移动到偶数编号训练项目之前,同时保持奇数和偶数各自的相对顺序。遍历原数组,将奇数编号和偶数编号分别存储到两个新的数组中,最后将奇数数组和偶数数组合并即可。该方法简单直观,能够有效地保持奇数和偶数的相对顺序。遍历数组,将奇数元素插入到结果数组的前面,同时保持其相对顺序。该方法需要额外的空间,但能够保持奇数和偶数的相对顺序。之前,且相对顺序保持不变。
2025-01-08 16:41:59
895
原创 【剑指Offer刷题系列】滑动窗口的最大值
队列中存储的是元素的索引,并且保持队列中的元素对应的值从大到小排列。科技馆内有一台虚拟观景望远镜,它可以用来观测特定纬度地区的地形情况。,我们能够解决望远镜视野范围内的最大海拔值查找问题。是最常用且高效的解决方案,尤其适用于需要在滑动窗口中快速找到最大值的场景。在上述示例中,滑动窗口大小为 3,依次滑动后各窗口内的最大值分别为。对于每一个可能的窗口,直接遍历窗口内的所有元素,找到最大值。的子数组的最大值,并将这些最大值按顺序返回。以下是针对上述方法的测试代码,使用。内,可以观测到的最高海拔值。
2025-01-08 16:39:02
1015
原创 【剑指Offer刷题系列】和为s的连续正数序列
本次问题通过分析和应用滑动窗口法数学公式法和双指针优化,成功地找到了所有满足条件的连续正整数序列。利用滑动窗口:通过动态调整窗口大小,确保序列的总和与目标一致。应用数学公式:通过数学推导,直接计算可能的起始数字和序列长度,减少了不必要的遍历。优化双指针策略:在滑动窗口的基础上,通过更智能的指针移动,进一步提升了搜索效率。掌握多种解题思路和方法,不仅能够提升解决问题的效率和准确性,还能增强算法设计和问题解决的能力。通过系统的学习和实践,可以在实际编程和算法挑战中灵活应用这些技巧,提高代码的性能和效率。
2025-01-08 16:11:21
677
原创 【剑指Offer刷题系列】判断连续的数组
以下是优化后的解法,减少了不必要的枚举,通过合理缩小起始朝代的范围,并确保替换后无重复朝代。通过优化枚举过程,首先检查已知朝代是否存在重复,进而缩小起始朝代的范围,确保替换后的朝代编号唯一且连续,显著减少了计算量,实现了更高效的判断。采用暴力枚举所有可能的替换方式,简单直观,但在存在多个未知朝代时,时间复杂度较高。可以代表任何朝代,因此需要考虑所有可能的替换方式,同时确保替换后序列中的朝代编号唯一且连续。在优化后的解法中,除了检查已知朝代是否在连续序列中,还需要确保有足够的不同朝代可供替换。
2025-01-08 15:56:24
694
原创 【剑指Offer刷题系列】数组中出现次数超过一半的数字
摩尔投票算法利用了多数元素的定义,通过抵消不同元素的影响,最终确定多数元素。这种方法不仅在本题中表现优异,还可以扩展应用于其他类似的多数元素识别问题。由于题目保证了多数元素的存在,我们可以采用多种方法来高效地解决该问题。使用哈希表(字典)来记录每个元素出现的次数,遍历数组并更新计数。当某个元素的计数超过 ⌊n/2⌋ 时,直接返回该元素。摩尔投票算法的核心思想是通过抵消不同的元素来确定多数元素。出现了 2 次,超过了 ⌊3/2⌋ = 1 次,因此。出现了 4 次,超过了 ⌊7/2⌋ = 3 次,因此。
2025-01-08 15:41:15
856
原创 【剑指Offer刷题系列】找到第 k 位数字
这种按位划分与计算的方法不仅适用于本题,还可广泛应用于其他类似的数字位分析问题。掌握此类数学方法的实现技巧,对于提升算法设计和问题解决能力具有重要的指导意义,能够在实际编程和算法挑战中灵活应用,提高代码的性能和效率。所在的位数范围,并精确定位到具体的数字及其位数,从而确保了算法的时间和空间效率。,我们能够高效地在一个由连续整数拼接而成的字符序列中找到第。该方法利用了数字在各位上的分布规律,通过逐步确定。本题要求在一个由连续整数拼接而成的字符序列中,找到第。,第 12 位数字是。,第 15 位数字是。
2025-01-07 14:08:17
714
原创 【剑指Offer刷题系列】数字 1 的个数
这种方法不仅适用于本题,还可广泛应用于其他类似的数字位分析问题。掌握此类按位计数的技巧,对于提升算法设计和问题解决能力具有重要的指导意义,能够在实际编程和算法挑战中灵活应用,提高代码的性能和效率。然而,由于动态规划的复杂度与数学方法相当,且数学方法更直观,因此本文将主要采用。该方法利用了数字在各个位上的独立性,逐位分析。虽然数学方法已经可以高效解决问题,但另一种常见的方法是。在该位上出现的次数。在本题中,可以通过记录每个位上的。的数学方法,我们能够高效地计算从。的出现频率,确保了时间复杂度为。
2025-01-07 14:07:57
742
原创 【剑指Offer刷题系列】整数拆分 II
的要求,而且具有良好的可扩展性和高效性,适用于处理大规模数据的优化问题。掌握此类贪心算法的实现技巧,对于解决各种需要最大化或最小化的优化问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。的竹子砍为若干段,每段长度均为正整数,并返回这些段长度的。将竹子分为 3 段,每段长度为 3、3 和 4,乘积为。将竹子分为 4 段,每段长度为 3,乘积为。将竹子分为 2 段,每段长度为 1,乘积为。的竹子分割为若干段,并计算出这些段长度的。的竹子砍为若干段,每段长度均为。
2025-01-06 15:19:11
846
原创 【剑指Offer刷题系列】整数拆分
现需要将一根长度为正整数 的竹子砍为若干段,每段长度均为正整数。请返回每段竹子长度的最大乘积是多少。注意:提示:原题链接:输入:输出:解释:将竹子分为 3 段,每段长度为 4,乘积为 4 × 4 × 4 = 64。或者分为 4 段,每段长度为 3,乘积为 3 × 3 × 3 × 3 = 81。最大乘积为 81。输入:输出:解释:将竹子分为 2 段,每段长度为 1,乘积为 1 × 1 = 1。输入:输出:解释:将竹子分为 3 段,每段长度为 3,3,4,乘积为 3 × 3 × 4 = 36
2025-01-06 15:17:08
969
原创 【剑指Offer刷题系列】数组中数字出现的次数 II
的要求,而且具有良好的可扩展性和高效性,适用于处理大规模数据的查找问题。掌握此类位操作技巧,对于解决类似的数组查找和元素计数问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。的数组中高效地找到两种唯一出现一次的元素(即教练的编号)。出现一次的元素(即教练的编号),而其他所有元素(即学员的编号)都出现。需要遍历数组的每个元素,对于每一位执行计数操作,共进行。的袜子各只有一只,其他颜色的袜子均有三只。的袜子各只有一只,其他颜色的袜子均有三只。取模,最终重构出唯一元素的值。
2025-01-06 15:14:10
861
原创 【剑指Offer刷题系列】数组中数字出现的次数
的数组中高效地找到两种唯一颜色的袜子编号。该方法利用了异或运算的性质,将问题分解为两个独立的部分,通过二分位的方法将两种唯一颜色编号区分开来,确保了算法的时间和空间效率。掌握此类位操作技巧,对于解决类似的数组查找和分组问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。礼盒中除了一双撞色搭配的袜子,每种颜色的袜子均有两只。的数组中找到恰好两种颜色的袜子各只有一只,其余颜色的袜子各有两只。的袜子各只有一只,其他颜色的袜子均有两只。的袜子各只有一只,其他颜色的袜子均有两只。
2025-01-06 15:11:57
712
原创 【剑指Offer刷题系列】数值的整数次方
掌握此类快速幂的实现技巧,对于解决各种需要高效幂运算的编程问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。快速幂算法通过每次将问题规模减半,实现了对数级别的时间复杂度。该方法利用了幂运算的二分性质,将计算过程中的时间复杂度降低至。,使用常数级别的额外空间。是一个浮点数,因此需要考虑多种情况。是正数、负数还是零,快速幂算法都能准确地计算出结果。,同时保持了空间复杂度的最小化。以下是针对上述方法的测试代码,使用。,我们能够高效地计算一个浮点数。,由于递归调用栈的深度为。
2025-01-06 15:09:44
633
原创 【剑指Offer刷题系列】二进制中1的个数
掌握此类位操作技巧,对于解决类似的二进制计算问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。由于输入可能包含大量位(32 位),直接逐位检查可能导致效率较低。这种方法在处理大规模数据时表现出色,确保了时间和空间的高效性。该方法利用了二进制数的特性,通过逐步清除最低位的。(以二进制串的形式),返回其二进制表达式中数字位数为。以下是针对上述方法的测试代码,使用。的方法,我们能够高效地计算一个。的方法能够更高效地解决问题。编写一个函数,输入是一个。,并计数,直至所有的。
2025-01-06 15:07:11
516
原创 【剑指Offer刷题系列】旋转数组的最小数字
的升序数组中找到最小的元素。该方法利用了数组的有序性,通过比较中间元素与右边界元素,逐步缩小搜索范围,确保了算法的高效性和正确性。掌握此类二分查找的应用技巧,对于解决类似的查找问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。的升序数组中,找到最小的元素。由于数组可能包含重复元素,常规的二分查找方法可能会因无法确定哪边是有序的而需要进行调整。:在最坏情况下,时间复杂度为 O(n),例如数组中所有元素都相同。只使用了常数级别的额外空间。没有被旋转,最小的元素是。
2025-01-06 15:04:27
610
原创 【剑指Offer刷题系列】0~n-1中缺失的数字
掌握此类二分查找的应用技巧,对于解决类似的查找问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。的数组中找到缺失的学号。该方法利用了数组的有序性,通过对比索引与元素值,迅速缩小搜索范围,确保了算法的高效性和正确性。的数组中,找到缺失的学号。由于数组是有序的,可以利用。通过二分查找,将搜索范围每次减半。假定仅有一位同学缺席,请返回他的学号。只使用了常数级别的额外空间。以下是针对上述方法的测试代码,使用。的方法,我们能够高效地在一个。:O(log n),其中。
2025-01-06 13:05:21
608
原创 【剑指Offer刷题系列】在排序数组中查找
掌握此类二分查找的变形技巧,对于解决类似的查找和计数问题具有重要的指导意义,能够在实际编程和算法设计中灵活应用,提高代码的性能和效率。的首次和末次出现位置,从而计算出其出现的总次数。这种方法在处理大规模数据时表现出色,确保了时间和空间的高效性。进行两次二分查找,每次的时间复杂度为 O(log n)。该方法利用了数组的有序性,通过两次二分查找分别定位。只使用了常数级别的额外空间。(即非递减)排序的数组中统计目标值。(即非递减)排序的数组中统计目标值。的变形方法,我们能够高效地在一个。的方法来高效地解决问题。
2025-01-06 13:02:31
668
原创 给出四种变形二分查找的模版Java
给定一个有序数组 和一个目标值 ,设计四种变形二分查找的算法模板,以实现以下功能:以数组 和 为例:注意:数组是 升序排列,并且元素可以重复。以下是四种变形二分查找的模板代码,采用 Java 语言实现。每个方法均包含详细的注释,帮助理解算法的实现过程。该方法通过二分查找,寻找数组中第一个大于 的元素的下标。如果所有元素都不大于 ,则返回 。示例2. 如果存在 ,返回最后一个等于 的下标;否则,返回第一个大于 的下标 ()方法描述该方法结合了寻找最后一个等于 的下标和寻找第一个大于
2025-01-06 12:58:14
988
原创 【剑指Offer刷题系列】二叉树的右视图
通过上述方法,我们可以高效地获取二叉树的右视图。采用广度优先搜索的层序遍历方法,确保每一层的最后一个节点被记录,从而得到从右侧观察到的节点值列表。两种方法的时间复杂度和空间复杂度相同,均为 O(n),其中 n 是二叉树的节点数。本题要求从二叉树的右侧视角,按从上到下的顺序返回能够看到的节点值。:O(n),在最坏情况下,队列中可能同时存储一整层的节点,节点数最多为 n。:O(n),其中 n 是二叉树的节点数。,按照从顶部到底部的顺序,返回从右侧所能看到的。从右侧看去,能够看到的节点依次是。
2025-01-06 11:17:02
493
原创 【剑指Offer刷题系列】二叉树的直径
通过上述方法,我们可以高效地计算二叉树的直径。采用深度优先搜索的方式,结合后序遍历,有效地遍历每个节点并实时更新直径,确保了算法的高效性和正确性。本题要求计算二叉树的直径,即任意两个节点之间最长路径的长度(以边数计)。这条路径可能经过也可能不经过根节点。递归调用栈的深度与树的高度成正比。每个节点仅被访问一次。是指树中任意两个节点之间最长路径的。这条路径可能经过也可能不经过根节点。给你一棵二叉树的根节点,返回该树的。直径长度为 3,路径为。由它们之间边数表示。
2025-01-06 11:15:16
243
原创 【剑指Offer刷题系列】序列化与反序列化二叉树
采用前序遍历的方法简单直观,确保了序列化后的字符串能够完整地表示二叉树的结构。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。序列化将二叉树转换为字符串,反序列化则将字符串重构为原始的二叉树结构。
2025-01-06 11:12:54
792
原创 【剑指Offer刷题系列】二叉搜索树的后序遍历序列
本题通过验证一个数组是否可以表示某棵二叉搜索树的后序遍历,考察了对二叉树遍历顺序和BST性质的理解。核心思想是利用后序遍历的特点,通过递归地划分左右子树,并验证每一部分是否满足BST的要求。本题要求判断一个整数数组是否可以是某棵二叉搜索树(BST)的后序遍历结果。为了优化时间复杂度,可以使用哈希表来记录每个元素在数组中的索引位置,从而在划分子树时快速定位,从而将时间复杂度降低到 O(n)。,请实现一个函数来判断该数组是否为某棵二叉搜索树(BST)的。该数组不能表示任何二叉搜索树的后序遍历。
2025-01-03 15:36:00
596
原创 【剑指Offer刷题系列】重建二叉树
某二叉树的先序遍历结果记录于整数数组 ,它的中序遍历结果记录于整数数组 。请根据 和 的提示构造出这棵二叉树并返回其根节点。注意: 和 中均不含重复数字。输入:输出:解释:上述二叉树结构如下:先序遍历(根、左、右):中序遍历(左、根、右):因此,构造出的二叉树为 。输入:输出:解释:只有一个节点的二叉树,根节点值为 。原题链接::https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/description/ 及 https:/
2025-01-03 15:32:57
526
原创 【剑指Offer刷题系列】从上到下打印二叉树
通过上述方法,我们可以高效地按照题目要求记录二叉树每一层的彩灯编号,且每一层的记录顺序交替变化。利用队列进行层序遍历,并结合。的双端操作,确保在记录层级节点值时能够灵活地调整记录顺序。此方法适用于各种形态的二叉树结构,且具有良好的时间和空间效率。本题是对二叉树的层序遍历(广度优先搜索,BFS)的一个变种,要求在记录每一层节点值时,交替改变记录顺序。(Zigzag Level Order Traversal),常见于各种树的变种遍历问题。的二叉树,节点值为该位置装饰彩灯的颜色编号。一棵圣诞树记作根节点为。
2025-01-03 15:27:45
1028
原创 【剑指Offer刷题系列】从上到下打印二叉树
(也称广度优先搜索,BFS),并按照从左到右的顺序返回每一层的节点值,每一层的结果作为一个单独的列表存储在最终的结果列表中。层序遍历是二叉树遍历中常见的一种方式,适用于按层次处理树结构的数据。通过上述方法,我们可以高效地按照从左到右的顺序返回二叉树每一层的彩灯编号。层序遍历利用队列的数据结构,实现了按层次顺序访问节点的需求,适用于各种形态的二叉树结构。的顺序返回每一层彩灯编号,每一层的结果记录于一个单独的列表中。的二叉树,节点值为该位置装饰彩灯的颜色编号。按照从左到右的层序遍历,依次访问节点。
2025-01-03 15:21:28
510
原创 【剑指Offer刷题系列】从上到下打印二叉树
通过上述方法,我们可以高效地按照从左到右的顺序返回二叉树每一层的彩灯编号。层序遍历利用队列的数据结构,实现了按层次顺序访问节点的需求,适用于各种形态的二叉树结构。(也称广度优先搜索,BFS),并按照从左到右的顺序返回每一层的节点值。层序遍历是二叉树遍历中常见的一种方式,适用于按层次处理树结构的数据。的二叉树,节点值为该位置装饰彩灯的颜色编号。按照从左到右的层序遍历,依次访问节点。的顺序返回每一层彩灯编号。一棵圣诞树记作根节点为。本题要求对二叉树进行。
2025-01-03 15:16:25
882
原创 【剑指Offer刷题系列】树的子结构
给定两棵二叉树 和 ,判断 是否是 的子结构。具体来说, 是 的子结构意味着 中存在一个节点,其为根的子树与 具有相同的结构和节点值。注意:输入:输出:解释: 与 的任何子树都不具有相同的结构和节点值。输入:输出:解释: 与 的一个子树具有相同的结构和节点值,即子树 。原题链接::https://leetcode.cn/problems/shu-de-zi-jie-gou-lcof/description/ 及 https://leetcode-cn.com/problems/s
2025-01-03 15:02:57
708
原创 【剑指Offer刷题系列】判断对称二叉树
通过上述方法,我们可以高效地判断一棵二叉树是否为对称二叉树。递归方法实现简单直观,适用于大多数场景;迭代方法则通过使用队列避免了递归带来的潜在栈溢出问题,特别适用于节点数量较大或树高度较高的情况。的,如果它与其自身的镜像是相同的。请设计一个函数判断一棵二叉树是否。从图中可看出最后一层的节点不对称。的,如果它与其自身的镜像相同。,递归深度不会过大,因此推荐使用。本题要求判断一棵二叉树是否。从图中可看出树是轴对称的。
2025-01-03 14:58:54
856
原创 【剑指Offer刷题系列】翻转二叉树
通过上述方法,我们可以高效地对二叉树进行左右翻转。递归方法实现简单直观,适用于大多数场景;迭代方法则通过层序遍历避免了递归带来的潜在栈溢出问题,特别适用于节点数量较大或树高度较高的情况。,即交换每个节点的左子树和右子树。翻转二叉树是一个经典的二叉树操作,常用于理解树的递归遍历和迭代遍历。虽然递归方法实现简单直观,但在树的高度较大时,可能会导致栈溢出。考虑到本题的节点数量上限为。二叉树的定义是将每个节点的左子树和右子树进行交换。,递归方法完全适用且实现简洁,因此推荐使用。这棵二叉树,并返回其根节点。
2025-01-03 14:55:19
356
原创 【剑指Offer刷题系列】计算二叉树的深度
某公司架构以二叉树形式记录,请返回该公司的 层级数(即二叉树的最大深度)。二叉树的深度是指从根节点到最远叶子节点的最长路径上的节点数。输入:输出:解释:上述二叉树的最大深度是 4,沿着路径 或 到达叶节点的最长路径上有 4 个节点。提示节点总数 原题链接:https://leetcode.cn/problems/er-cha-shu-de-shen-du-lcof/description/及 https://leetcode-cn.com/problems/maximum-depth-o
2025-01-03 14:47:53
874
原创 【剑指Offer刷题系列】判断平衡二叉树
输入一棵二叉树的根节点,判断该树是不是 平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过 1,那么它就是一棵平衡二叉树。输入:输出:解释:如下图所示的二叉树是平衡的:示例 2:输入:输出:解释:如下图所示的二叉树不是平衡的,因为某些节点的左右子树深度相差超过了 1:提示原题链接:https://leetcode.cn/problems/ping-heng-er-cha-shu-lcof/description/ 及 https://leetcode-cn.com/probl
2025-01-03 14:43:30
766
原创 【剑指Offer刷题系列】实现支持 `getMin` 操作的最小栈
方法一结构清晰,易于理解和实现,但需要额外的空间来维护辅助栈;根据具体的应用场景和需求,可以选择合适的方法进行实现。,我们可以在主栈中存储经过编码的值,以同时追踪当前元素和当前最小值。这种方法利用了栈中元素的编码,避免了使用额外的辅助栈,从而优化了空间使用。通过编码技巧,避免了使用额外的辅助栈,从而优化了空间使用。方法在被调用后,会返回当前栈中的最小值。:方法二中使用了数学编码技巧,将当前最小值压入栈中,通过。操作的栈,所有操作的时间复杂度均为。时间复杂度的同时,优化空间使用。,栈本身的空间复杂度仍为。
2025-01-03 14:38:58
1046
原创 【剑指Offer刷题系列】栈的压入、弹出序列
是否为按照正确的顺序拿取书籍的操作序列。你可以假设放入书架的所有书籍编号都不相同。现在图书馆有一堆图书需要放入书架,并且图书馆的书架是一种特殊的数据结构,只能按照。具体来说,我们需要模拟栈的操作过程,确保每一步。是否可能通过一系列合法的栈操作(即仅使用。给定一个表示图书放入顺序的整数序列。本题要求验证一个给定的取出序列。6 不能在 7 之前取出。的顺序放入和拿取书籍。序列中的对应元素一致。
2025-01-03 14:36:17
740
原创 【剑指Offer刷题系列】最小栈
确保所有操作都在常数时间内完成。为了实现这一点,我们需要在标准栈操作的基础上,额外维护一个辅助数据结构来记录当前栈的最小值。:O(n),其中 n 是栈中元素的数量。由于每个元素都存储了一个额外的最小值,空间消耗大约是方法一的两倍,但仍属于线性复杂度。:O(n),其中 n 是栈中元素的数量。由于每个元素都存储了一个额外的最小值,空间消耗大约是方法一的两倍,但仍属于线性复杂度。:O(n),其中 n 是栈中元素的数量。这种方法通过在每个栈元素中存储当前的最小值,避免了使用额外的辅助栈,从而优化了空间使用。
2025-01-03 14:26:05
865
原创 【阅读记录-章节7】Build a Large Language Model (From Scratch)
为了处理指令微调中的批次数据,我们实现了一个自定义的collate函数,用于填充序列并生成目标 token IDs。collate希望您喜欢从零开始实现一个 LLM 并从头编写预训练和微调功能的这段旅程。在我看来,从头构建一个 LLM 是深入理解 LLM 工作原理的最有效方式。希望这种实践方法为您提供了有价值的见解和坚实的 LLM 开发基础。虽然本书的主要目的是教育,但您可能有兴趣在实际应用中使用不同且更强大的 LLM。为此,我建议探索一些流行工具,如 Axolotl () 或 LitGPT (
2024-12-25 15:03:43
1259
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人