![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法打卡日志
纳兰木兹
这个作者很懒,什么都没留下…
展开
-
Leetcode.
把magazine字符信息存储起来,在遍历ransomNote时进行查找,不符合条件就返回false;根据题目要求,哈希表使用map,定义为字母与字母对应的出现次数;把题目抽象一下,就会发现本题考察的是子集问题;即一个字符串是否是另一个字符串的“子串”;查找时每查找一次自减一次;原创 2023-11-07 08:44:52 · 60 阅读 · 0 评论 -
Leetcode.四数相加 II
对于两数相加之和,我的常用解法是存储一个数组,遍历另一个数组,同时查找存储的数组是否有满足条件的值;这里把nums1和nums2的所有和作为一个数组,剩余两个数作为一个数组;根据题目,哈希表使用map,定义为两小数组之和的值与同一值出现的次数。缩小问题规模是编程常用的思维,即把四个数相加拆解成多次两个数相加;四个数组且只返回个数,暴力法很容易想到,即。四重循环复杂度太高了!原创 2023-11-07 08:32:36 · 64 阅读 · 0 评论 -
Leetcode.1. 两数之和
值得注意的是,查找与存储的顺序有严格的要求:查找先于存储!如果先存储,则可能查找到自己!两数之和,梦开始的地方,就像abondan一样,直接让我abondan。根据题目,稍加思考, 哈希表使用map,存储数与下标,因为返回值为下标。遍历一次数组,对于每个元素i,想查找数组中是否存在target-i。把两数之和放在第一题,对于代码小白非常不友好……提到查找,就会想到哈希表!原创 2023-11-05 21:45:58 · 117 阅读 · 0 评论 -
Leetcode.349. 两个数组的交集
哈希表存储数组nums1,遍历nums2,查找哈希表,为了确保返回u元素唯一,我们使用哈希表进行去重操作,因为哈希表保证键的唯一性。模拟寻找交集过程:遍历存储数组nums1,遍历nums2,对当前元素进行查找,查看nums1中是否有此元素。涉及查找,是哈希表!使用set进行单值存储,哈希表存储当前元素。返回两数组的交集,且保证元素唯一。原创 2023-11-05 19:58:35 · 34 阅读 · 0 评论 -
Leetcode.242.有效的字母异位词
一般思路是将一个存储起来,遍历另一个。在遍历另一个过程中,我发现每个字母出现次数在变,所以应该满足th[i]<=sh[i],否则判定为不是异位词。如果一个串是另一个的子序列则满足上述条件但不是异位词。异位词,简单的查找,并且保证每个字母出现次数相同。涉及哈希表相关操作,哈希表定义为字母对应出现次数。原创 2023-11-05 19:44:11 · 31 阅读 · 0 评论 -
Leetcode.142.环形链表II
快慢指针的爱恨情仇!原创 2023-10-29 17:50:04 · 676 阅读 · 0 评论 -
Leetcode.面试题02.07. 链表相交
思考一下倒着为什么能找到?因为倒着找保证了A,B链表(因为距离第一个相交节点的距离不同。那我们就要创造条件!A链表用于存储,B链表一个一个对照就可以了。如果知道了两个链表的长度,减去多余部分,就可以齐头并进了!如果使用哈希表,空间就不是o(1)了。做链表题,没事想想双指针!你能否设计一个时间复杂度。原创 2023-10-29 17:21:52 · 50 阅读 · 0 评论 -
Leetcode.19.删除链表的倒数第N个节点
逆向思维,假设我们找到了,然后用慢指针slow表示了倒数第n+1个节点。此时快指针如何是如何告诉我们找到了倒数第n个节点?题目要求我们删除倒数第n个节点,我们自然需要找到倒数第n个节点,同时,把倒数第n+1个节点和n-1个节点进行连接,这样就达到删除的效果了。回推初始状态,自然是慢指针slow指向开始,快指针指向之后n+1个节点。这里用快慢指针进行查找,我们希望达成的目标是找到并且表示n+1个节点。此时我们发现快慢指针之间的距离是?没错,都是n+1个节点!灵光一现,让快指针指向链表结尾空指针就可以啦!原创 2023-10-29 17:04:31 · 35 阅读 · 0 评论 -
Leetcode.24. 两两交换链表中的节点
对于当前操作节点,可以从虚拟头节点开始,也可以从题目head节点开始,但是虚拟头节点更方便,所以我从虚拟头节点开始,声明为cur(current node)。在循环体中交换节点,即需要当前节点cur的下一个节点(称为第一个节点),第二个节点,第三个节点进行连接。题目要求节点两两交换,即以两个节点为一组,进行循环,而循环内部即为节点交换!关于循环问题,可以用循环来做,也可以用递归来做。对于要交换节点,要保证存在两个节点(循环条件)。别忘了把cur变成cur->next->next。原创 2023-10-29 16:37:56 · 27 阅读 · 0 评论 -
Leetcode.203.移除链表元素
移除元素,简单的链表操作,原创 2023-10-28 21:21:39 · 68 阅读 · 1 评论 -
Leetcode.707.设计链表
设计链表类,基础的链表操作,设置一个。原创 2023-10-28 21:18:17 · 33 阅读 · 1 评论 -
Leetcode. 203.移除链表元素
如示例1:对于节点1,需要结点2的next指向节点 1,而节点2的next指针之前指向节点3,又该如何处理?需要节点3指向节点2!依次递推,最终需要节点5指向节点4,节点4指向节点3……我们只要了头节点,自然需要进行反转链表的操作,即让孩子节点指向自己,让自己指向空节点。自然是最后一个节点,让最后一个节点作为反转后的新的头节点。2.向孩子要答案后,综合1,2,返回给父亲节点的则是:以当前节点为尾节点的反转后的链表头节点。对于这道题:1.对于每个节点,向孩子要答案,然后经过操作后返回给父亲节点。原创 2023-10-28 21:13:52 · 684 阅读 · 1 评论 -
Leetcode.59.螺旋矩阵II
在二维数组中[i][j],右代表 j++;数组越界或者已经覆盖过的数组。每一圈都是以右下左上为方向进行模拟的,每次转变状态后进行取余运算(%4);4种状态用1,2,3,4表示;模拟螺旋,每次自增一。原创 2023-10-27 15:34:11 · 497 阅读 · 1 评论 -
Leetcode.209. 长度最小的子数组
sum<target时,需要加入新元素, 因为要求连续,新元素自然就是当前数组的后面相邻元素 sum>=target时,需要删除旧元素, 因为要求连续,旧元素自然是当前数组最前面的元素。所以,很自然的想到需要两个指针,前面的指针用于删除元素,后面的指针用于加入元素。同时需要一个变量维护数组(窗口)的长度。当sum>=target时,维护最小长度后删除旧元素,在进行判断sum>=target;则此数组一定具有的属性为数组和sum,对于目标值target和数组和sum,原创 2023-10-27 15:20:30 · 30 阅读 · 1 评论 -
Leetcode.977.有序数组的平方
经过观察发现,题目给的数组两头平方后大,中间小。从两头开始,选择较大的数进行填充,方便初始化!新建数组ret,对ret进行填充,可以从大开始填充,也可以从小开始填充,循环体:填充ret数组,择大进行填充,同时移动指针。题目给了非递减数组,要求平方后排序为非递减数组。初始化:遍历数组,对元素平方。原创 2023-10-27 14:58:52 · 36 阅读 · 0 评论 -
Leetcode27. 移除元素(双指针法)
双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。总之:双指针分为同向和反向,处理有某一特征数据,用于简化运算。对于Leetcode27.移除元素,要求修改原数组,并返回有效长度很明显的快慢指针:快慢指针均从下标0开始,慢指针用于填充数组,快指针用于寻找有效元素,原创 2023-10-27 12:42:15 · 920 阅读 · 0 评论 -
leetcode.704. 二分查找(三种解法!)
二分查找(三种解法!)如何初始化?循环条件?如何赋值left,right?这里通通有!原创 2023-10-26 01:07:14 · 89 阅读 · 0 评论