- 博客(138)
- 资源 (1)
- 收藏
- 关注
原创 分隔链表(中等)
维护两个链表 small 和 large 即可,small 链表按顺序存储所有小于 x 的节点,large 链表按顺序存储所有大于等于 x 的节点。遍历完原链表后,我们只要将 small 链表尾节点指向 large 链表的头节点即能完成对链表的分隔。
2025-05-14 21:08:20
100
原创 删除链表中的重复元素II
思路:在删除重复元素时,有可能头节点本身也是重复元素,所以为了方便处理,可以添加一个哑节点,统一遍历逻辑,无需单独判断头节点。然后我们对链表进行一次遍历,如果当前节点cur的下一个节点和下下个节点的值一样,就跳过重复的节点。
2025-05-13 12:11:42
66
原创 删除链表的倒数第N个节点(中等)
遍历到要删除节点的前一个节点,调整其指针以跳过目标节点。:计算要删除节点的正数位置,处理删除头节点的特殊情况。:使用临时指针遍历链表,避免修改原链表的头节点。
2025-05-13 10:36:37
83
原创 随机链表的复制(中等)
利用哈希表的查询特点,考虑构建 原链表节点 和 新链表对应节点 的键值对映射关系,再遍历构建新链表各节点的 next 和 random 引用指向即可。
2025-05-12 14:45:01
155
原创 逆波兰表达式求值(中等)
可以构建一个int类型的栈,在遍历token数组的时候,如果遇到数字,就把字符串类型的数字转化为int类型,放入s栈中,如果遇到加减乘除符号,就把栈顶的两个元素取出来,进行相应的运算操作,然后把计算结果压入栈中。最后的答案就是栈顶元素,全部处理完后栈中只有一个元素。
2025-05-10 14:47:36
119
原创 简化路径(中等)
将路径按斜杠分割,会处理连续斜杠的情况(产生空字符串)。弹出栈顶元素(相当于返回上级目录):从栈底到栈顶构建路径,确保以。其他情况压入栈(有效目录名)开头且没有多余的斜杠。
2025-05-10 14:20:01
257
原创 有效的括号(简单)
可以通过使用栈(Stack)数据结构来解决。基本思路是遍历字符串,遇到左括号就压栈,遇到右括号就检查栈顶元素是否匹配,最后检查栈是否为空。
2025-05-10 13:12:34
121
原创 对称二叉树(简单)
借助递归函数,通过「同步移动」两个指针的方法来遍历这棵树,p 指针和 q 指针一开始都指向这棵树的根,随后 p 右移时,q 左移,p 左移时,q 右移。每次检查当前 p 和 q 节点的值是否相等,如果相等再判断左右子树是否对称。
2025-05-07 21:51:25
219
原创 相同的数(简单)
如果两个二叉树都不为空,那么首先判断它们的根节点的值是否相同,若不相同则两个二叉树一定不同,若相同,再分别判断两个二叉树的左子树是否相同以及右子树是否相同。如果两个二叉树都为空,则两个二叉树相同。如果两个二叉树中有且只有一个为空,则两个二叉树一定不相同。
2025-05-06 22:13:35
200
原创 汇总区间(简单)
对数组进行遍历,找区间,用左指针指向区间左端点,然后找区间右端点,如果右边的数等于左边的数加一,那么就移动右指针,像这样不断移动右指针,找到区间右端点。如果区间右端点大于区间左端点,那么就用“->"的格式存储区间。如果区间左端点和右端点相同,那么这个区间就是一个数。
2025-05-06 17:36:46
208
原创 矩阵置零(中等)
首先遍历该数组一次,如果某个元素为 0,那么就将该元素所在的行和列所对应标记数组的位置置为 true。然后再次遍历该数组,用标记数组更新原数组。可以用两个标记数组分别记录每一行和每一列是否有零出现。
2025-05-05 23:52:36
405
原创 有效的数独(中等)
借助三个数组来存储每一行每一列和每一个小九宫格中,每个数字出现的次数。只需要对数独数组进行一次遍历并更新三个数组中的计数,然后检查是否满足有效数独的条件。
2025-05-05 16:41:08
148
原创 本地调用chatglm3-6b大模型
去huggingface网站下载好chatglm3-6b相关的所有权重文件,然后采用以下代码来测试能否调用成功。解决办法:降低transformer版本。
2025-05-05 14:36:19
241
原创 存在重复元素II(简单)
这个问题可以使用哈希表来高效解决,我们可以在遍历数组的同时记录每个数字最近出现的索引,并检查当前数字是否之前出现过且索引差满足条件。如果遍历完整个数组都没有找到满足条件的数字对,则返回 false。如果存在且当前索引与之前索引的差 ≤ k,返回 true。来存储数字和它们最近一次出现的索引。否则更新哈希表中该数字的索引为当前索引。检查它是否已经在哈希表中存在。
2025-05-03 14:51:38
240
原创 快乐数(简单)
2 → 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 → 检测到循环,返回false。这个算法时间复杂度为O(logn),空间复杂度为O(logn),因为数字位数是log10(n)级别的。19 → 82 → 68 → 100 → 1 → 返回true。例如:19 → 1² + 9² = 1 + 81 = 82。如果数字重复出现,说明进入了循环。数字变为1(是快乐数)进入循环(不是快乐数)方法计算数字各位平方和。记录所有出现过的数字。
2025-05-03 14:40:03
372
原创 有效的字母异位词(简单)
和赎金信那道题有点像,新建一个26大小的数组,存储26个英文字母的出现次数,先统计s,在统计t,如果数组中有小于0的数,就返回false.
2025-05-03 13:45:42
144
原创 单词规律(简单)
的单词数量是否一致以及在进行字符串比较的时候应该用equals来进行比较,而不能用“!=”比较的是对象引用而非内容。思路和同构字符串那道题一样。、但是这道题要注意的地方就是,检查。
2025-05-02 17:17:28
327
原创 赎金信(简单)
首先统计 magazine 中每个英文字母 a 的次数 cnt[a],再遍历统计 ransomNote 中每个英文字母的次数,如果发现 ransomNote 中存在某个英文字母 c 的统计次数大于 magazine 中该字母统计次数 cnt[c],则直接返回 false。如果字符串 magazine 的长度小于字符串 ransomNote 的长度,直接返回 false。
2025-05-02 16:37:37
267
原创 两数之和II-输入有序数组(中等)
双指针,左指针从左往右移动,右指针从右往左移动。每次计算两个指针的位置上面的数相加,加起来如果是目标值,就返回,如果两个数加起来比目标值小,就把左指针往右移动,如果两个数加起来比目标值大,就把右指针往左移动。
2025-04-29 13:45:42
167
原创 验证回文串(简单)
对字符串 s 进行一次遍历,并将其中的字母和数字字符进行保留,放在另一个字符串 sgood 中。这样我们只需要判断 sgood 是否是一个普通的回文串。采用双指针的方法,左指针从左往右移动,右指针从右往左移动。每次遇到非字母的情况,就继续移动左指针或者右指针,然后判断左右指针指向的字母是否一样。
2025-04-29 13:14:39
101
原创 分发糖果(困难)
最开始的时候给每个孩子发一块糖。然后从左往右遍历,如果右边的孩子比左边的孩子评分高并且右边的孩子手里有的糖果数量不比左边的孩子大,就给右边的孩子发糖果,让右边的孩子的糖果数量比左边孩子糖果数量多一个。接下来在从右往左遍历,同理,如果左边的孩子比右边的孩子评分高且左边的孩子手里面的糖果数量不比右边孩子手里有的糖果数量大,就给左边的孩子发糖果,让左边孩子的糖果数量比右边孩子的糖果数量多一个。这个时候满足右边分高的孩子的糖果数量都比左边分低孩子的糖果数量多。
2025-04-28 13:16:22
115
原创 除自身意外数组的乘积(中等)
l数组用来保存nums数组左部分的乘积,也就是 l[i]表示从nums[0]一直到nums[i-1]的乘积。同理,r数组用来保存nums数组右部分的乘积,也就是r[i]表示从nums[i+1]一直到nums[nums.length-1]的乘积。这样,最后的答案answer[i]就可以表示成l[i]*r[i]新建两个数组r和l.
2025-04-28 10:51:48
104
原创 H指数(中等)
如果从后往前遍历,当前位置的数,如果大于h,就说明又找到了一个引用次数大于h的文献,h指数可以加一了。可以先对数组从小到大排序,然后数组后面往前遍历,计算h的值。
2025-04-28 10:26:40
146
原创 买卖股票的最佳时机
因此,首先应该定义一个最小价格,然后对价格数组进行for循环,判断第i天的价格和目前最低价格哪个小,更新最低价格。然后在判断i+1天和i天价格大小,要是i+1天价格比i天价格低,就抓紧在i天卖出股票。然后重新寻找之后的最小价格。观察规律发现:已经有了最低价格后,不断往后遍历,只要后一天的价格比前一天便宜,就在当天给他卖了,然后从后一天开始,重新寻找最低买入价格。举例如下:应该第一天购买,第二天卖出,第三天购买,第四天卖出,第五天购买,第六天卖出才是最合适的。
2025-04-27 13:09:01
92
原创 轮转数组(中等)
就是对原数组进行for循环,把原数组i位置上面的数字移动到新数组(i+k)%nums.length位置上。新建一个和原数组大小一样的新数组,用来存储移动后的数据。,并继续替换下一个位置,直到回到起始位置。然后再把新数组上面的数赋值到原数组。因此,外层循环的次数应为。),则需要处理多个环。
2025-04-27 12:34:06
193
原创 删除有序数组中的重复项II(中等)
题目要求每个元素最多只能出现两次。因此每次循环右指针应该先挪动一位,然后让右指针位置的数字和左指针之前两位的数字作比较,如果相等,就代表当前这个数已经出现超过两次了,就继续让右指针往右移动,去找和左指针靠左两个位置出的数字不一样的数。如果不相等的话,就出现了新的次数不超过两次的数字,可以把右指针指向的数字赋值给左指针,然后做指针向右移动。快指针是用来遍历整个数组的,遍历完就结束了,最后return的数组长度应该是慢指针的大小。采用双指针,快指针用来指向当前待处理的数字,慢指针用来指向是否要更改数字的位置。
2025-04-27 10:44:13
194
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人